return PAM_CONV_ERR;
}
- reply = (struct pam_response *) calloc(num_msg,
- sizeof(struct pam_response));
- if (reply == NULL) {
- return PAM_CONV_ERR;
+ if (response) {
+ reply = (struct pam_response *) calloc(num_msg,
+ sizeof(struct pam_response));
+ if (reply == NULL) {
+ return PAM_CONV_ERR;
+ }
}
for (i=0; i < num_msg; i++) {
return PAM_CONV_ERR;
}
- ret = add_to_reply(&reply[i], prompt);
- if (ret != PAM_SUCCESS) {
- /* FIXME - free data? */
- return ret;
+ if (reply != NULL) {
+ ret = add_to_reply(&reply[i], prompt);
+ if (ret != PAM_SUCCESS) {
+ /* FIXME - free data? */
+ return ret;
+ }
}
cctx->echo_off_idx++;
return PAM_CONV_ERR;
}
- ret = add_to_reply(&reply[i], prompt);
- if (ret != PAM_SUCCESS) {
- /* FIXME - free data? */
- return ret;
+ if (reply != NULL) {
+ ret = add_to_reply(&reply[i], prompt);
+ if (ret != PAM_SUCCESS) {
+ /* FIXME - free data? */
+ return ret;
+ }
}
cctx->echo_on_idx++;
handle = dlopen(libpam_path, flags);
if (handle != NULL) {
+ pwrap.libpam.handle = handle;
break;
- }
+ }
- pwrap.libpam.handle = handle;
}
break;
}
switch(item_type) {
case PAM_USER:
PWRAP_LOG(PWRAP_LOG_TRACE,
- "pwrap_set_item PAM_USER=%s",
- (char *)item);
+ "pwrap_get_item PAM_USER=%s",
+ (char *) *item);
break;
case PAM_SERVICE:
PWRAP_LOG(PWRAP_LOG_TRACE,
- "pwrap_set_item PAM_SERVICE=%s",
- (char *)item);
+ "pwrap_get_item PAM_SERVICE=%s",
+ (char *) *item);
break;
case PAM_USER_PROMPT:
PWRAP_LOG(PWRAP_LOG_TRACE,
- "pwrap_set_item PAM_USER_PROMPT=%s",
- (char *)item);
+ "pwrap_get_item PAM_USER_PROMPT=%s",
+ (char *) *item);
break;
case PAM_TTY:
PWRAP_LOG(PWRAP_LOG_TRACE,
- "pwrap_set_item PAM_TTY=%s",
- (char *)item);
+ "pwrap_get_item PAM_TTY=%s",
+ (char *) *item);
break;
case PAM_RUSER:
PWRAP_LOG(PWRAP_LOG_TRACE,
- "pwrap_set_item PAM_RUSER=%s",
- (char *)item);
+ "pwrap_get_item PAM_RUSER=%s",
+ (char *) *item);
break;
case PAM_RHOST:
PWRAP_LOG(PWRAP_LOG_TRACE,
- "pwrap_set_item PAM_RHOST=%s",
- (char *)item);
+ "pwrap_get_item PAM_RHOST=%s",
+ (char *) *item);
break;
case PAM_AUTHTOK:
PWRAP_LOG(PWRAP_LOG_TRACE,
- "pwrap_set_item PAM_AUTHTOK=%s",
- (char *)item);
+ "pwrap_get_item PAM_AUTHTOK=%s",
+ (char *) *item);
break;
case PAM_OLDAUTHTOK:
PWRAP_LOG(PWRAP_LOG_TRACE,
- "pwrap_set_item PAM_OLDAUTHTOK=%s",
- (char *)item);
+ "pwrap_get_item PAM_OLDAUTHTOK=%s",
+ (char *) *item);
break;
case PAM_CONV:
PWRAP_LOG(PWRAP_LOG_TRACE,
- "pwrap_set_item PAM_CONV=%p",
- (void *) item);
+ "pwrap_get_item PAM_CONV=%p",
+ (void *) *item);
break;
default:
PWRAP_LOG(PWRAP_LOG_TRACE,
- "pwrap_set_item item_type=%d item=%p",
- item_type, (void *) item);
+ "pwrap_get_item item_type=%d item=%p",
+ item_type, (void *) *item);
break;
}
} else {
struct stat sb;
char *fname;
- return 0;
-
if ((d = opendir(path)) != NULL) {
while(stat(path, &sb) == 0) {
/* if we can remove the directory we're done */
{
const char *env;
+ PWRAP_LOG(PWRAP_LOG_TRACE, "entering pwrap_destructor");
+
if (pwrap.libpam.handle != NULL) {
dlclose(pwrap.libpam.handle);
}
+ if (pwrap.pam_library != NULL) {
+ free(pwrap.pam_library);
+ pwrap.pam_library = NULL;
+ }
+
if (!pwrap.initialised) {
return;
}
if (env == NULL || env[0] != '1') {
p_rmdirs(pwrap.config_dir);
}
+
+ if (pwrap.config_dir != NULL) {
+ free(pwrap.config_dir);
+ pwrap.config_dir = NULL;
+ }
}
static void test_pam_vsyslog(void **state)
{
struct pwrap_test_ctx *test_ctx;
- int rv;
test_ctx = (struct pwrap_test_ctx *) *state;
- rv = pam_start("matrix", "trinity",
- &test_ctx->conv, &test_ctx->ph);
- assert_int_equal(rv, PAM_SUCCESS);
pam_syslog(test_ctx->ph, LOG_INFO, "This is pam_wrapper test\n");
}
test_getenv(tests[1].case_out.envlist, "PAM_OLDAUTHTOK");
test_getenv(tests[1].case_out.envlist, "PAM_XDISPLAY");
test_getenv(tests[1].case_out.envlist, "PAM_AUTHTOK_TYPE");
+
+ pamtest_free_env(tests[1].case_out.envlist);
}
static void test_libpamtest_keepopen(void **state)
const struct CMUnitTest init_tests[] = {
cmocka_unit_test(test_env),
cmocka_unit_test_setup_teardown(test_pam_start,
- setup_noconv,
+ setup_ctx_only,
teardown_simple),
cmocka_unit_test_setup_teardown(test_pam_authenticate,
setup_passdb,