summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Langasek <vorlon@debian.org>2001-11-30 23:26:30 +0000
committerSteve Langasek <vorlon@debian.org>2001-11-30 23:26:30 +0000
commit49647f1387fd4cdfe6d311ca8259a48736956005 (patch)
tree787d50c6ae58d9d24dd499f1b92b1e420f96d2c3
parentdc8042f1b4262e478bd25eb76d1ee87e6c195a89 (diff)
Relevant BUGIDs: 483959
Purpose of commit: bugfix Commit summary: --------------- pam_unix: fix 'likeauth' to kill off the memory leak once and for all.
-rw-r--r--CHANGELOG2
-rw-r--r--modules/pam_unix/pam_unix_auth.c13
2 files changed, 12 insertions, 3 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 1e69e29b..d7630f1a 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -49,6 +49,8 @@ bug report - outstanding bugs are listed here:
0.76: please submit patches for this section with actual code/doc
patches!
+* pam_unix: fix 'likeauth' to kill off the memory leak once and for all.
+ (Bug 483959 - vorlon)
* pam_unix: restore handling of 'likeauth' argument to a known working
state; prettify AUTH_RETURN macro; remove redundant argv checks in
pam_sm_setcred() (Bugs 483959, 113596 - vorlon)
diff --git a/modules/pam_unix/pam_unix_auth.c b/modules/pam_unix/pam_unix_auth.c
index a42e4926..319f4f05 100644
--- a/modules/pam_unix/pam_unix_auth.c
+++ b/modules/pam_unix/pam_unix_auth.c
@@ -87,12 +87,20 @@ do { \
retval)); \
*ret_data = retval; \
pam_set_data(pamh, "unix_setcred_return", \
- (void *) ret_data, NULL); \
+ (void *) ret_data, setcred_free); \
} \
D(("done. [%s]", pam_strerror(pamh, retval))); \
return retval; \
} while (0)
+
+static void setcred_free (pam_handle_t * pamh, void *ptr, int err)
+{
+ if (ptr)
+ free (ptr);
+}
+
+
PAM_EXTERN int pam_sm_authenticate(pam_handle_t * pamh, int flags
,int argc, const char **argv)
{
@@ -198,10 +206,9 @@ PAM_EXTERN int pam_sm_setcred(pam_handle_t * pamh, int flags
/* We will only find something here if UNIX_LIKE_AUTH is set --
don't worry about an explicit check of argv. */
pam_get_data(pamh, "unix_setcred_return", (const void **) &pretval);
- pam_set_data(pamh, "unix_setcred_return", NULL, NULL);
if(pretval) {
retval = *pretval;
- free(pretval);
+ pam_set_data(pamh, "unix_setcred_return", NULL, NULL);
D(("recovered data indicates that old retval was %d", retval));
}