#ifndef _PAM_IMPL_H
#define _PAM_IMPL_H
#ifdef __cplusplus
extern "C" {
#endif
#include <limits.h>
#include <shadow.h>
#include <sys/types.h>
#define PAMTXD "SUNW_OST_SYSOSPAM"
#define PAM_CONFIG "/etc/pam.conf"
#define PAM_ISA "/$ISA/"
#define PAM_LIB_DIR "/usr/lib/security/"
#ifdef _LP64
#define PAM_ISA_DIR "/64/"
#else
#define PAM_ISA_DIR "/"
#endif
#define PAM_ACCOUNT_NAME "account"
#define PAM_AUTH_NAME "auth"
#define PAM_PASSWORD_NAME "password"
#define PAM_SESSION_NAME "session"
#define PAM_ACCOUNT_MODULE 0
#define PAM_AUTH_MODULE 1
#define PAM_PASSWORD_MODULE 2
#define PAM_SESSION_MODULE 3
#define PAM_NUM_MODULE_TYPES 4
#define PAM_BINDING_NAME "binding"
#define PAM_INCLUDE_NAME "include"
#define PAM_OPTIONAL_NAME "optional"
#define PAM_REQUIRED_NAME "required"
#define PAM_REQUISITE_NAME "requisite"
#define PAM_SUFFICIENT_NAME "sufficient"
#define PAM_BINDING 0x01
#define PAM_INCLUDE 0x02
#define PAM_OPTIONAL 0x04
#define PAM_REQUIRED 0x08
#define PAM_REQUISITE 0x10
#define PAM_SUFFICIENT 0x20
#define PAM_REQRD_BIND (PAM_REQUIRED | PAM_BINDING)
#define PAM_SUFFI_BIND (PAM_SUFFICIENT | PAM_BINDING)
#define PAM_AUTHENTICATE 1
#define PAM_SETCRED 2
#define PAM_ACCT_MGMT 3
#define PAM_OPEN_SESSION 4
#define PAM_CLOSE_SESSION 5
#define PAM_CHAUTHTOK 6
#define PAM_DEBUG "/etc/pam_debug"
#define LOG_PRIORITY "log_priority="
#define LOG_FACILITY "log_facility="
#define DEBUG_FLAGS "debug_flags="
#define PAM_DEBUG_NONE 0x0000
#define PAM_DEBUG_DEFAULT 0x0001
#define PAM_DEBUG_ITEM 0x0002
#define PAM_DEBUG_MODULE 0x0004
#define PAM_DEBUG_CONF 0x0008
#define PAM_DEBUG_DATA 0x0010
#define PAM_DEBUG_CONV 0x0020
#define PAM_DEBUG_AUTHTOK 0x8000
#define PAM_MAX_ITEMS 64
#define PAM_MAX_INCLUDE 32
#define PAM_SM_AUTHENTICATE "pam_sm_authenticate"
#define PAM_SM_SETCRED "pam_sm_setcred"
#define PAM_SM_OPEN_SESSION "pam_sm_open_session"
#define PAM_SM_CLOSE_SESSION "pam_sm_close_session"
#define PAM_SM_CHAUTHTOK "pam_sm_chauthtok"
#define PAM_SM_ACCT_MGMT "pam_sm_acct_mgmt"
#define PAM_MAX_NUM_ATTR 10
#define PAM_MAX_ATTR_SIZE 80
#define PAM_PROMPT 1
#define PAM_HANDLE 2
#if PASS_MAX >= PAM_MAX_RESP_SIZE
#error PASS_MAX > PAM_MAX_RESP_SIZE
#endif
extern int
__pam_get_authtok(pam_handle_t *pamh, int source, int type, char *prompt,
char **authtok);
extern int
__pam_display_msg(pam_handle_t *pamh, int msg_style, int num_msg,
char messages[][PAM_MAX_MSG_SIZE], void *conv_apdp);
extern void
__pam_log(int priority, const char *format, ...);
struct pam_fh {
int fconfig;
char line[256];
size_t bufsize;
char *bufferp;
char *data;
};
struct pam_item {
void *pi_addr;
int pi_size;
};
struct pam_module_data {
char *module_data_name;
void *data;
void (*cleanup)(pam_handle_t *pamh, void *data, int pam_status);
struct pam_module_data *next;
};
typedef struct pamtab {
char *pam_service;
int pam_type;
int pam_flag;
int pam_err;
char *module_path;
int module_argc;
char **module_argv;
void *function_ptr;
struct pamtab *next;
} pamtab_t;
typedef struct fd_list {
void *mh;
struct fd_list *next;
} fd_list;
typedef struct env_list {
char *name;
char *value;
struct env_list *next;
} env_list;
#define RW_OK 0
#define RO_OK 1
#define WO_OK 2
struct pam_handle {
struct pam_item ps_item[PAM_MAX_ITEMS];
int include_depth;
int pam_inmodule;
char *pam_conf_name[PAM_MAX_INCLUDE+1];
pamtab_t *pam_conf_info[PAM_MAX_INCLUDE+1][PAM_NUM_MODULE_TYPES];
pamtab_t *pam_conf_modulep[PAM_MAX_INCLUDE+1];
struct pam_module_data *ssd;
fd_list *fd;
env_list *pam_env;
};
struct auth_module {
int (*pam_sm_authenticate)(pam_handle_t *pamh, int flags, int argc,
const char **argv);
int (*pam_sm_setcred)(pam_handle_t *pamh, int flags, int argc,
const char **argv);
};
struct password_module {
int (*pam_sm_chauthtok)(pam_handle_t *pamh, int flags, int argc,
const char **argv);
};
struct session_module {
int (*pam_sm_open_session)(pam_handle_t *pamh, int flags, int argc,
const char **argv);
int (*pam_sm_close_session)(pam_handle_t *pamh, int flags, int argc,
const char **argv);
};
struct account_module {
int (*pam_sm_acct_mgmt)(pam_handle_t *pamh, int flags, int argc,
const char **argv);
};
#ifdef __cplusplus
}
#endif
#endif