pkgsrc/security/pam-ldap/patches/patch-ab

55 lines
1.9 KiB
Text
Raw Normal View History

$NetBSD: patch-ab,v 1.9 2010/11/16 09:53:50 adam Exp $
--- pam_ldap.c.orig 2010-11-08 00:58:44.000000000 +0000
+++ pam_ldap.c
@@ -3411,7 +3411,7 @@ pam_sm_authenticate (pam_handle_t * pamh
int rc;
const char *username;
char *p;
- int use_first_pass = 0, try_first_pass = 0, ignore_flags = 0;
+ int use_first_pass = 0, try_first_pass = 0, ignore_flags = 0, migrate = 0;
int i;
pam_ldap_session_t *session = NULL;
const char *configFile = NULL;
@@ -3432,6 +3432,8 @@ pam_sm_authenticate (pam_handle_t * pamh
;
else if (!strcmp (argv[i], "debug"))
;
+ else if (!strcmp (argv[i], "migrate"))
+ migrate = 1;
else
syslog (LOG_ERR, "illegal option %s", argv[i]);
}
@@ -3445,6 +3447,22 @@ pam_sm_authenticate (pam_handle_t * pamh
return rc;
rc = pam_get_item (pamh, PAM_AUTHTOK, (CONST_ARG void **) &p);
+ /* start of migrate facility in "pam_ldap authentication" */
+ if (migrate==1 && rc==PAM_SUCCESS)
+ {
+ /* check if specified username exists in LDAP */
+ if (_get_user_info(session,username)==PAM_SUCCESS)
+ {
+ /*
+ overwrite old LDAP userPassword with a new password
+ obtained during pam authentication process
+ - rootbinddn and ldap.secret must be set
+ */
+ rc=_update_authtok(pamh,session,username,NULL,p);
+ return PAM_IGNORE;
+ }
+ }
+ /* end of migrate facility in "pam_ldap authentication" */
if (rc == PAM_SUCCESS && (use_first_pass || try_first_pass))
{
rc = _do_authentication (pamh, session, username, p);
@@ -3721,7 +3739,7 @@ pam_sm_chauthtok (pam_handle_t * pamh, i
if (curpass == NULL)
return PAM_MAXTRIES; /* maximum tries exceeded */
else
- pam_set_item (pamh, PAM_OLDAUTHTOK, (void *) curpass);
+ pam_set_item (pamh, PAM_OLDAUTHTOK, (void *) strdup(curpass));
}
else
{