From ee48c949f659bfc6e753cd9c2d2d19e3263d895a Mon Sep 17 00:00:00 2001 From: stevesk Date: Tue, 23 Jul 2002 00:44:07 +0000 Subject: [PATCH] - (stevesk) [auth-pam.[ch] session.c] pam_getenvlist() must be freed by the caller; add free_pam_environment() and use it. --- ChangeLog | 2 ++ auth-pam.c | 10 ++++++++++ auth-pam.h | 1 + session.c | 13 +++++++++++-- 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6fe8ad6b..0ae1c933 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,8 @@ - (bal) [configure.ac] Missing ;; from cray patch. - (bal) [monitor_mm.c openbsd-compat/xmmap.h] Move xmmap() defines into it's own header. + - (stevesk) [auth-pam.[ch] session.c] pam_getenvlist() must be + freed by the caller; add free_pam_environment() and use it. 20020721 - (stevesk) [auth-pam.c] merge cosmetic changes from solar's diff --git a/auth-pam.c b/auth-pam.c index e6bd851c..1d58b207 100644 --- a/auth-pam.c +++ b/auth-pam.c @@ -421,6 +421,16 @@ char **fetch_pam_environment(void) #endif /* HAVE_PAM_GETENVLIST */ } +void free_pam_environment(char **env) +{ + int i; + + if (env != NULL) { + for (i = 0; env[i] != NULL; i++) + xfree(env[i]); + } +} + /* Print any messages that have been generated during authentication */ /* or account checking to stderr */ void print_pam_messages(void) diff --git a/auth-pam.h b/auth-pam.h index 966c719b..585ceb8d 100644 --- a/auth-pam.h +++ b/auth-pam.h @@ -35,6 +35,7 @@ void start_pam(const char *user); void finish_pam(void); int auth_pam_password(Authctxt *authctxt, const char *password); char **fetch_pam_environment(void); +void free_pam_environment(char **env); int do_pam_authenticate(int flags); int do_pam_account(char *username, char *remote_user); void do_pam_session(char *username, const char *ttyname); diff --git a/session.c b/session.c index 5fb1ace0..3c759e47 100644 --- a/session.c +++ b/session.c @@ -1042,8 +1042,17 @@ do_setup_env(Session *s, const char *shell) s->authctxt->krb5_ticket_file); #endif #ifdef USE_PAM - /* Pull in any environment variables that may have been set by PAM. */ - copy_environment(fetch_pam_environment(), &env, &envsize); + /* + * Pull in any environment variables that may have + * been set by PAM. + */ + { + char **p; + + p = fetch_pam_environment(); + copy_environment(p, &env, &envsize); + free_pam_environment(p); + } #endif /* USE_PAM */ if (auth_sock_name != NULL) -- 2.45.2