From a980e1d3dabfdd0b1b255b31ca433d09f78b4170 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dag-Erling=20Sm=C3=B8rgrav?= Date: Sat, 2 Feb 2002 17:58:58 +0000 Subject: [PATCH] Clear module data. Clear environment. Use pam_set_item() rather than free() to clear items so they get properly clobbered. Sponsored by: DARPA, NAI Labs git-svn-id: svn+ssh://svn.openpam.org/svn/openpam/trunk@18 185d5e19-27fe-0310-9dcf-9bff6b9f3609 --- lib/pam_end.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/pam_end.c b/lib/pam_end.c index 1452829..38df52e 100644 --- a/lib/pam_end.c +++ b/lib/pam_end.c @@ -50,14 +50,29 @@ int pam_end(pam_handle_t *pamh, - int status __unused) + int status) { pam_chain_t *module; + pam_data_t *dp; int i; if (pamh == NULL) return (PAM_SYSTEM_ERR); + /* clear module data */ + while ((dp = pamh->module_data) != NULL) { + if (dp->cleanup) + (dp->cleanup)(pamh, dp->data, status); + pamh->module_data = dp->next; + free(dp->name); + free(dp); + } + + /* clear environment */ + while (pamh->env_count) + free(pamh->env[--pamh->env_count]); + free(pamh->env); + /* clear chains */ for (i = 0; i < PAM_NUM_CHAINS; ++i) { while (pamh->chains[i] != NULL) { @@ -72,7 +87,7 @@ pam_end(pam_handle_t *pamh, /* clear items */ for (i = 0; i < PAM_NUM_ITEMS; ++i) - free(pamh->item[i]); + pam_set_item(pamh, i, NULL); free(pamh);