static void * get_oodfunc(void) { char *lib; lib = getenv("MAKEOODLIB"); if (lib && *lib) { int (*oodptr) (const char *); #ifdef _WIN32 HINSTANCE hinstLib = LoadLibrary(lib); if (!hinstLib) dlfailure(); *(void **)(&oodptr) = GetProcAddress(hinstLib, "oodfunc"); if (!oodptr) dlfailure(); #else /*_WIN32*/ // RTLD_LOCAL doesn't work on OSX 10.3 but GLOBAL is fine ... void *dlhandle = dlopen(lib, RTLD_GLOBAL | RTLD_LAZY); if (!dlhandle) dlfailure(); *(void **)(&oodptr) = dlsym(dlhandle, "oodfunc"); if (!oodptr) dlfailure(); #endif /*_WIN32*/ return oodptr; } else { return &oodfunc_date; } }
int pam_prompt(pam_handle_t *pamh, int style, const char *prompt, char **user_msg) { void *openpam = dlopen(libopenpam, RTLD_LOCAL | RTLD_LAZY | RTLD_FIRST); if (NULL == openpam) dlfailure("pam_prompt"); pam_prompt_func func = dlsym(openpam, "pam_prompt"); if (NULL == func) dlfailure("pam_prompt"); return xlate_pam_shim_retval(func(pamh, style, user_msg, "%s", prompt)); }
int pam_get_pass(pam_handle_t *pamh, const char **passp, const char *prompt, __unused int options) { void *openpam = dlopen(libopenpam, RTLD_LOCAL | RTLD_LAZY | RTLD_FIRST); if (NULL == openpam) dlfailure("pam_get_pass"); pam_get_pass_func func = dlsym(openpam, "pam_get_authtok"); if (NULL == func) dlfailure("pam_get_authtok"); return xlate_pam_shim_retval(func(pamh, PAM_AUTHTOK, passp, prompt)); }
int aliased_pam_set_data(pam_handle_t *pamh, const char *modue_data_name, void *data, pam_set_data_cleanup_func cleanup) { void *openpam = dlopen(libopenpam, RTLD_LOCAL | RTLD_LAZY | RTLD_FIRST); if (NULL == openpam) dlfailure("pam_set_data"); pam_set_data_func func = dlsym(openpam, "pam_set_data"); if (NULL == func) dlfailure("pam_set_data"); return xlate_pam_shim_retval(func(pamh, modue_data_name, data, cleanup)); }
int aliased_pam_get_user(pam_handle_t *pamh, char **user, const char *prompt) { void *openpam = dlopen(libopenpam, RTLD_LOCAL | RTLD_LAZY | RTLD_FIRST); if (NULL == openpam) dlfailure("pam_get_user"); pam_get_user_func func = dlsym(openpam, "pam_get_user"); if (NULL == func) dlfailure("pam_get_user"); return xlate_pam_shim_retval(func(pamh, user, prompt)); }
int pam_putenv(pam_handle_t *pamh, const char *name_value) { void *openpam = dlopen(libopenpam, RTLD_LOCAL | RTLD_LAZY | RTLD_FIRST); if (NULL == openpam) dlfailure("pam_putenv"); pam_putenv_func func = dlsym(openpam, "pam_putenv"); if (NULL == func) dlfailure("pam_putenv"); return xlate_pam_shim_retval(func(pamh, name_value)); }
const char * pam_getenv(pam_handle_t *pamh, const char *name) { void *openpam = dlopen(libopenpam, RTLD_LOCAL | RTLD_LAZY | RTLD_FIRST); if (NULL == openpam) dlfailure("pam_getenv"); pam_getenv_func func = dlsym(openpam, "pam_getenv"); if (NULL == func) dlfailure("pam_getenv"); return func(pamh, name); }
int misc_conv(int num_msg, const struct pam_message **msgm, struct pam_response **response, void *appdata_ptr) { void *openpam = dlopen(libopenpam, RTLD_LOCAL | RTLD_LAZY | RTLD_FIRST); if (NULL == openpam) dlfailure("misc_conv"); misc_conv_func func = dlsym(openpam, "openpam_ttyconv"); if (NULL == func) dlfailure("misc_conv"); return xlate_pam_shim_retval(func(num_msg, msgm, response, appdata_ptr)); }
const char * pam_strerror(const pam_handle_t *pamh, int pam_error) { void *openpam = dlopen(libopenpam, RTLD_LOCAL | RTLD_LAZY | RTLD_FIRST); if (NULL == openpam) dlfailure("pam_strerror"); pam_strerr_func func = dlsym(openpam, "pam_strerror"); if (NULL == func) dlfailure("pam_strerror"); return func(pamh, pam_error); }
int pam_end(pam_handle_t *pamh, int pam_status) { void *openpam = dlopen(libopenpam, RTLD_LOCAL | RTLD_LAZY | RTLD_FIRST); if (NULL == openpam) dlfailure("pam_end"); pam_end_func func = dlsym(openpam, "pam_end"); if (NULL == func) dlfailure("pam_end"); return xlate_pam_shim_retval(func(pamh, pam_status)); }
int pam_start(const char *service_name, const char *user, const struct pam_conv *pam_conversation, pam_handle_t **pamh) { void *openpam = dlopen(libopenpam, RTLD_LOCAL | RTLD_LAZY | RTLD_FIRST); if (NULL == openpam) dlfailure("pam_start"); pam_start_func func = dlsym(openpam, "pam_start"); if (NULL == func) dlfailure("pam_start"); return xlate_pam_shim_retval(func(service_name, user, pam_conversation, pamh)); }
int pam_get_item(const pam_handle_t *pamh, int item_type, const void **item) { int newitemtype = xlate_pam_shim_item_type(item_type); void *openpam = dlopen(libopenpam, RTLD_LOCAL | RTLD_LAZY | RTLD_FIRST); if (NULL == openpam) dlfailure("pam_get_item"); pam_get_item_func func = dlsym(openpam, "pam_get_item"); if (NULL == func) dlfailure("pam_get_item"); return xlate_pam_shim_retval(func(pamh, newitemtype, item)); }
int pam_close_session(pam_handle_t *pamh, int flags) { int newflags = xlate_pam_shim_session_flags(flags); void *openpam = dlopen(libopenpam, RTLD_LOCAL | RTLD_LAZY | RTLD_FIRST); if (NULL == openpam) dlfailure("pam_close_session"); pam_close_session_func func = dlsym(openpam, "pam_close_session"); if (NULL == func) dlfailure("pam_close_session"); return xlate_pam_shim_retval(func(pamh, newflags)); }
int pam_acct_mgmt(pam_handle_t *pamh, int flags) { int newflags = xlate_pam_shim_authenticate_flags(flags); void *openpam = dlopen(libopenpam, RTLD_LOCAL | RTLD_LAZY | RTLD_FIRST); if (NULL == openpam) dlfailure("pam_acct_mgmt"); pam_acct_mgmt_func func = dlsym(openpam, "pam_acct_mgmt"); if (NULL == func) dlfailure("pam_acct_mgmt"); return xlate_pam_shim_retval(func(pamh, newflags)); }