Expiration/grace warnings bug in nslcd/myldap.c
[Date Prev][Date Next] [Thread Prev][Thread Next]Expiration/grace warnings bug in nslcd/myldap.c
- From: Mathieu <mathieu.baeumler [at] gmail.com>
- To: nss-pam-ldapd-users [at] lists.arthurdejong.org
- Subject: Expiration/grace warnings bug in nslcd/myldap.c
- Date: Thu, 9 Jul 2015 09:19:03 +0200
Hi, I have an issue when implementing password policy on Debian. Both the client and the server are deployed using a fresh install of Jessie, with slapd on the server, and nslcd/libpam-ldapd on the client. If a password expiration warning (pwdExpireWarning) is set in slapd, and the password is indeed about to expire, slapd sends the correct control back to the client. The control is then parsed successfully on the client, but an incorrect return code is sent back to the underlying PAM, leading to this kind of messages: Jul 8 17:02:15 vldap02 su[22501]: pam_ldap(su:account): Password will expire in 7921505 seconds; user= ploum; err=Authentication token is no longer valid; new one required So even if the password has not yet expired, the user is still required to change it. The same behavior happens with grace login. Checking the source code, and comparing with the old pam_ldap library, I think the patch below fixes the issue. Could you review it please? Thanks! Regards, -- Mat diff -urNad nss-pam-ldapd-0.9.4/nslcd/myldap.c nss-pam-ldapd-0.9.4-patched/nslcd/myldap.c --- nss-pam-ldapd-0.9.4/nslcd/myldap.c 2014-06-06 17:28:40.000000000 +0200 +++ nss-pam-ldapd-0.9.4-patched/nslcd/myldap.c 2015-07-09 08:59:19.772635722 +0200 @@ -467,7 +467,7 @@ ((session->policy_response == NSLCD_PAM_SUCCESS) || (session->policy_response == NSLCD_PAM_NEW_AUTHTOK_REQD))) { - session->policy_response = NSLCD_PAM_AUTHTOK_EXPIRED; + session->policy_response = NSLCD_PAM_NEW_AUTHTOK_REQD; mysnprintf(session->policy_message, sizeof(session->policy_message), "%s", ldap_passwordpolicy_err2txt(error)); } @@ -498,14 +498,13 @@ ((session->policy_response == NSLCD_PAM_SUCCESS) || (session->policy_response == NSLCD_PAM_NEW_AUTHTOK_REQD))) { - session->policy_response = NSLCD_PAM_NEW_AUTHTOK_REQD; + session->policy_response = NSLCD_PAM_SUCCESS; mysnprintf(session->policy_message, sizeof(session->policy_message), "Password will expire in %d seconds", expire); } else if ((grace >= 0) && (session->policy_response == NSLCD_PAM_SUCCESS)) { - session->policy_response = NSLCD_PAM_NEW_AUTHTOK_REQD; mysnprintf(session->policy_message, sizeof(session->policy_message), "Password expired, %d grace logins left", grace); } @@ -582,6 +581,9 @@ { handle_ppasswd_controls(session, ld, responsectrls); ldap_controls_free(responsectrls); + if ((session->policy_response == NSLCD_PAM_SUCCESS) || + (session->policy_response == NSLCD_PAM_NEW_AUTHTOK_REQD)) + rc = LDAP_SUCCESS; } /* return the result of the BIND operation */ if (rc != LDAP_SUCCESS)
Attachment:
nss-pam-ldapd.patch
Description: Text Data
-- To unsubscribe send an email to nss-pam-ldapd-users-unsubscribe@lists.arthurdejong.org or see http://lists.arthurdejong.org/nss-pam-ldapd-users/
- Expiration/grace warnings bug in nslcd/myldap.c, Mathieu
- Re: Expiration/grace warnings bug in nslcd/myldap.c, Arthur de Jong
- Prev by Date: Re: Using nss-pam-ldapd in a large environment, Part 2: Denial of Service due to open connections
- Next by Date: Re: Using nss-pam-ldapd in a large environment, Part 2: Denial of Service due to open connections
- Previous by thread: Re: Using nss-pam-ldapd in a large environment, Part 2: Denial of Service due to open connections
- Next by thread: Re: Expiration/grace warnings bug in nslcd/myldap.c