Arthur de Jong

Open Source / Free Software developer

summaryrefslogtreecommitdiffstats
path: root/nslcd
diff options
context:
space:
mode:
authorArthur de Jong <arthur@arthurdejong.org>2010-02-17 21:21:52 +0100
committerArthur de Jong <arthur@arthurdejong.org>2010-02-17 21:21:52 +0100
commit517927a1e3715ef1663b0613d6c788b77f89c38d (patch)
treebec8aab99e0b60f5a58cf17b98333d57751094cd /nslcd
parent26135bc4af3fcc6c740e1741bcc57b2ba1c8b33b (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.c22
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;
}