Alexis Jhon Gaspar
e1207e1d0d
- This introduces a minimalist display manager for the suckless-utils suite - Added crudely written scripts for reloaading slim's theme via pywal, meaning no on-the-fly reloading using keybinds as nost people wouldn't have their sudo passwordless - This is based on slim-fork 1.4.0 version.
107 lines
2.4 KiB
C++
107 lines
2.4 KiB
C++
/* SLiM - Simple Login Manager
|
|
Copyright (C) 2007 Martin Parm
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
*/
|
|
|
|
#ifndef _PAM_H_
|
|
#define _PAM_H_
|
|
#include <string>
|
|
#include <security/pam_appl.h>
|
|
|
|
#ifdef __LIBPAM_VERSION
|
|
#include <security/pam_misc.h>
|
|
#endif
|
|
|
|
namespace PAM
|
|
{
|
|
class Exception
|
|
{
|
|
public:
|
|
int errnum;
|
|
std::string errstr;
|
|
std::string func_name;
|
|
Exception(pam_handle_t* _pam_handle,
|
|
const std::string& _func_name,
|
|
int _errnum);
|
|
virtual ~Exception(void);
|
|
};
|
|
|
|
class Auth_Exception: public Exception
|
|
{
|
|
public:
|
|
Auth_Exception(pam_handle_t* _pam_handle,
|
|
const std::string& _func_name,
|
|
int _errnum);
|
|
};
|
|
|
|
class Cred_Exception: public Exception
|
|
{
|
|
public:
|
|
Cred_Exception(pam_handle_t* _pam_handle,
|
|
const std::string& _func_name,
|
|
int _errnum);
|
|
};
|
|
|
|
|
|
class Authenticator
|
|
{
|
|
private:
|
|
struct pam_conv pam_conversation;
|
|
pam_handle_t* pam_handle;
|
|
int last_result;
|
|
|
|
int _end(void);
|
|
|
|
public:
|
|
typedef int (conversation)(int num_msg,
|
|
const struct pam_message **msg,
|
|
struct pam_response **resp,
|
|
void *appdata_ptr);
|
|
|
|
enum ItemType {
|
|
Service = PAM_SERVICE,
|
|
User = PAM_USER,
|
|
User_Prompt = PAM_USER_PROMPT,
|
|
TTY = PAM_TTY,
|
|
Requestor = PAM_RUSER,
|
|
Host = PAM_RHOST,
|
|
Conv = PAM_CONV,
|
|
#ifdef __LIBPAM_VERSION
|
|
/* Fail_Delay = PAM_FAIL_DELAY */
|
|
#endif
|
|
};
|
|
|
|
public:
|
|
Authenticator(conversation* conv, void* data=0);
|
|
~Authenticator(void);
|
|
|
|
void start(const std::string& service);
|
|
void end(void);
|
|
void set_item(const ItemType item, const void* value);
|
|
const void* get_item(const ItemType item);
|
|
#ifdef __LIBPAM_VERSION
|
|
void fail_delay(const unsigned int micro_sec);
|
|
#endif
|
|
void authenticate(void);
|
|
void check_acct(void);
|
|
void open_session(void);
|
|
void close_session(void);
|
|
void setenv(const std::string& key, const std::string& value);
|
|
void delenv(const std::string& key);
|
|
const char* getenv(const std::string& key);
|
|
char** getenvlist(void);
|
|
|
|
private:
|
|
/* Explicitly disable copy constructor and copy assignment */
|
|
Authenticator(const PAM::Authenticator&);
|
|
Authenticator& operator=(const PAM::Authenticator&);
|
|
};
|
|
}
|
|
|
|
std::ostream& operator<<( std::ostream& os, const PAM::Exception& e);
|
|
#endif /* _PAM_H_ */
|