diff options
author | Arthur de Jong <arthur@arthurdejong.org> | 2010-02-17 21:21:52 +0100 |
---|---|---|
committer | Arthur de Jong <arthur@arthurdejong.org> | 2010-02-17 21:21:52 +0100 |
commit | 517927a1e3715ef1663b0613d6c788b77f89c38d (patch) | |
tree | bec8aab99e0b60f5a58cf17b98333d57751094cd /nslcd | |
parent | 26135bc4af3fcc6c740e1741bcc57b2ba1c8b33b (diff) |
first try password modification without the old password and if that fails with the old password
git-svn-id: http://arthurdejong.org/svn/nss-pam-ldapd/nss-pam-ldapd@1064 ef36b2f9-881f-0410-afb5-c4e39611909c
Diffstat (limited to 'nslcd')
-rw-r--r-- | nslcd/myldap.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/nslcd/myldap.c b/nslcd/myldap.c index 88993aa..30e7396 100644 --- a/nslcd/myldap.c +++ b/nslcd/myldap.c @@ -1605,19 +1605,33 @@ int myldap_passwd( /* translate to ber stuff */ ber_userdn.bv_val=(char *)userdn; ber_userdn.bv_len=strlen(userdn); - ber_oldpassword.bv_val=(char *)oldpassword; - ber_oldpassword.bv_len=oldpassword?strlen(oldpassword):0; ber_newpassword.bv_val=(char *)newpasswd; ber_newpassword.bv_len=strlen(newpasswd); ber_retpassword.bv_val=NULL; ber_retpassword.bv_len=0; /* perform request */ - rc=ldap_passwd_s(session->ld,&ber_userdn,oldpassword?&ber_oldpassword:NULL, + log_log(LOG_DEBUG,"myldap_passwd(): try ldap_passwd_s() without old password"); + rc=ldap_passwd_s(session->ld,&ber_userdn,NULL, &ber_newpassword,&ber_retpassword,NULL,NULL); if (rc!=LDAP_SUCCESS) - log_log(LOG_ERR,"ldap_passwd_s() failed: %s",ldap_err2string(rc)); + log_log(LOG_ERR,"ldap_passwd_s() without old password failed: %s",ldap_err2string(rc)); /* free returned data if needed */ if (ber_retpassword.bv_val!=NULL) ldap_memfree(ber_retpassword.bv_val); + if ((rc!=LDAP_SUCCESS)&&(oldpassword!=NULL)) + { + /* retry with old password */ + log_log(LOG_DEBUG,"myldap_passwd(): try ldap_passwd_s() with old password"); + ber_oldpassword.bv_val=(char *)oldpassword; + ber_oldpassword.bv_len=strlen(oldpassword); + /* perform request */ + rc=ldap_passwd_s(session->ld,&ber_userdn,&ber_oldpassword, + &ber_newpassword,&ber_retpassword,NULL,NULL); + if (rc!=LDAP_SUCCESS) + log_log(LOG_ERR,"ldap_passwd_s() with old password failed: %s",ldap_err2string(rc)); + /* free returned data if needed */ + if (ber_retpassword.bv_val!=NULL) + ldap_memfree(ber_retpassword.bv_val); + } return rc; } |