diff options
author | Thorsten Kukuk <kukuk@thkukuk.de> | 2010-04-14 10:22:10 +0000 |
---|---|---|
committer | Thorsten Kukuk <kukuk@thkukuk.de> | 2010-04-14 10:22:10 +0000 |
commit | f92940aef28c98145ecddeff05b4aa4be7a6c5e5 (patch) | |
tree | 2643ec093c7eb7a765979424a460f20e7cd9983d | |
parent | 871a6e14d65c3c446ae0af51166dabc7a47a2b56 (diff) | |
download | pam-f92940aef28c98145ecddeff05b4aa4be7a6c5e5.tar.gz pam-f92940aef28c98145ecddeff05b4aa4be7a6c5e5.tar.bz2 pam-f92940aef28c98145ecddeff05b4aa4be7a6c5e5.zip |
Relevant BUGIDs:
Purpose of commit: bugfix
Commit summary:
---------------
2010-04-13 Thorsten Kukuk <kukuk@thkukuk.de>
* modules/pam_pwhistory/opasswd.c: Fix compilation if
cyprt_r() is not available.
* configure.in: check for getutent_r.
* modules/pam_timestamp/pam_timestamp.c: Use getutent()
if getutent_r() does not exist.
Patch from Diego Elio "Flameeyes" Pettenò.
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | configure.in | 2 | ||||
-rw-r--r-- | modules/pam_pwhistory/opasswd.c | 22 | ||||
-rw-r--r-- | modules/pam_timestamp/pam_timestamp.c | 8 |
4 files changed, 35 insertions, 6 deletions
@@ -1,3 +1,12 @@ +2010-04-13 Thorsten Kukuk <kukuk@thkukuk.de> + + * modules/pam_pwhistory/opasswd.c: Fix compilation if + cyprt_r() is not available. + * configure.in: check for getutent_r. + * modules/pam_timestamp/pam_timestamp.c: Use getutent() + if getutent_r() does not exist. + Patch from Diego Elio “Flameeyes” Pettenò. + 2010-04-12 Thorsten Kukuk <kukuk@thkukuk.de> * doc/man/pam.conf-syntax.xml: Better documentation of diff --git a/configure.in b/configure.in index c7c07ccc..0de55536 100644 --- a/configure.in +++ b/configure.in @@ -458,7 +458,7 @@ AC_FUNC_MEMCMP AC_FUNC_VPRINTF AC_CHECK_FUNCS(fseeko gethostname gettimeofday lckpwdf mkdir select) AC_CHECK_FUNCS(strcspn strdup strspn strstr strtol uname) -AC_CHECK_FUNCS(getpwnam_r getpwuid_r getgrnam_r getgrgid_r getspnam_r) +AC_CHECK_FUNCS(getutent_r getpwnam_r getpwuid_r getgrnam_r getgrgid_r getspnam_r) AC_CHECK_FUNCS(getgrouplist getline getdelim) AC_CHECK_FUNCS(inet_ntop inet_pton ruserok_af) diff --git a/modules/pam_pwhistory/opasswd.c b/modules/pam_pwhistory/opasswd.c index 3c8e5cff..f045555f 100644 --- a/modules/pam_pwhistory/opasswd.c +++ b/modules/pam_pwhistory/opasswd.c @@ -94,6 +94,23 @@ parse_entry (char *line, opwd *data) return 0; } +static int +compare_password(const char *newpass, const char *oldpass) +{ + char *outval; +#ifdef HAVE_CRYPT_R + struct crypt_data output; + + output.initialized = 0; + + outval = crypt_r (newpass, oldpass, &output); +#else + outval = crypt (newpass, oldpass); +#endif + + return strcmp(outval, oldpass) == 0; +} + /* Check, if the new password is already in the opasswd file. */ int check_old_password (pam_handle_t *pamh, const char *user, @@ -167,12 +184,9 @@ check_old_password (pam_handle_t *pamh, const char *user, if (found) { const char delimiters[] = ","; - struct crypt_data output; char *running; char *oldpass; - memset (&output, 0, sizeof (output)); - running = strdupa (entry.old_passwords); if (running == NULL) return PAM_BUF_ERR; @@ -180,7 +194,7 @@ check_old_password (pam_handle_t *pamh, const char *user, do { oldpass = strsep (&running, delimiters); if (oldpass && strlen (oldpass) > 0 && - strcmp (crypt_r (newpass, oldpass, &output), oldpass) == 0) + compare_password(newpass, oldpass) ) { if (debug) pam_syslog (pamh, LOG_DEBUG, "New password already used"); diff --git a/modules/pam_timestamp/pam_timestamp.c b/modules/pam_timestamp/pam_timestamp.c index 7e6c4b0b..26876769 100644 --- a/modules/pam_timestamp/pam_timestamp.c +++ b/modules/pam_timestamp/pam_timestamp.c @@ -200,7 +200,13 @@ check_login_time(const char *ruser, time_t timestamp) time_t oldest_login = 0; setutent(); - while(!getutent_r(&utbuf, &ut)) { + while( +#ifdef HAVE_GETUTENT_R + !getutent_r(&utbuf, &ut) +#else + (ut = getutent()) != NULL +#endif + ) { if (ut->ut_type != USER_PROCESS) { continue; } |