[Samba] Samba 3.0.24 handling LDAP responses incorrectly
John Drescher
drescherjm at gmail.com
Fri Apr 4 20:47:56 GMT 2008
On Fri, Apr 4, 2008 at 4:41 PM, Ryan Steele <rsteele at archer-group.com> wrote:
> Hey list,
>
> Recently I've gotten my Samba PDC to successfully use an OpenLDAP
> backend, while using the smbk5pwd and ppolicy overlays for OpenLDAP.
> However, Samba appears to incorrectly handle responses from LDAP's
> ppolicy overlay, even though it very clearly receives them. If I enter
> in a password (be it through Ctrl+Alt+Delete or when a password expires
> and the user is prompted at logon) that violates the ppolicy
> constraints, I get one of two scenarios.
>
> 1. If logging is turned off in OpenLDAP (loglevel 0 in slapd.conf),
> Windows reports the password change was successful ("Your password has
> been changed" dialog box), when in fact none of the attributes have
> changed (including but not limited to sambaNTPassword, sambaLMPassword.
>
> 2. If logging is turned on (anything other than 0 in the slapd.conf),
> Windows reports that "The system cannot change your password now because
> the domain DOMAINNAME is unavailable." While this is certainly not the
> case, at least in this situation the user is informed that the password
> change did not work.
>
> I can see that LDAP does indeed pass back a response to Samba; from the
> LDAP logs:
>
> Apr 4 10:47:37 servername slapd[12709]: do_extended
> Apr 4 10:47:37 servername slapd[12709]: >>> dnPrettyNormal:
> <uid=tester,ou=Users,dc=example,dc=com>
> Apr 4 10:47:37 servername slapd[12709]: <<< dnPrettyNormal:
> <uid=tester,ou=Users,dc=example,dc=com>,
> <uid=tester,ou=users,dc=example,dc=com>
> Apr 4 10:47:37 servername slapd[12709]:
> bdb_dn2entry("uid=tester,ou=users,dc=example,dc=com")
> Apr 4 10:47:37 servername slapd[12709]:
> bdb_dn2entry("uid=tester,ou=users,dc=example,dc=com")
> Apr 4 10:47:37 servername slapd[12709]: bdb_entry_get: rc=0
> Apr 4 10:47:37 servername slapd[12709]:
> bdb_dn2entry("uid=tester,ou=users,dc=example,dc=com")
> Apr 4 10:47:37 servername slapd[12709]: bdb_entry_get: rc=0
> Apr 4 10:47:37 servername slapd[12709]: bdb_dn2entry("cn=password
> policy,ou=policies,dc=example,dc=com")
> Apr 4 10:47:37 servername slapd[12709]: bdb_entry_get: rc=0
> Apr 4 10:47:37 servername slapd[12709]: check_password_quality: module
> error: (check_password.so) Password for
> dn="uid=tester,ou=Users,dc=example,dc=com" does not pass required number
> of strength checks (1 of 3).[1]
> Apr 4 10:47:37 servername slapd[12709]: send_ldap_result: conn=76 op=24 p=3
> Apr 4 10:47:37 servername slapd[12709]: send_ldap_extended: err=19 oid=
> len=0
> Apr 4 10:47:37 servername slapd[12709]: send_ldap_response: msgid=25
> tag=120 err=19
> Apr 4 10:47:42 servername slapd[12709]: connection_get(19): got connid=77
> Apr 4 10:47:42 servername slapd[12709]: connection_read(19): checking
> for input on id=77
> Apr 4 10:47:42 servername slapd[12709]: ber_get_next on fd 19 failed
> errno=0 (Success)
> Apr 4 10:47:42 servername slapd[12709]: connection_closing: readying
> conn=77 sd=19 for close
> Apr 4 10:47:42 servername slapd[12709]: connection_close: conn=77 sd=-1
> Apr 4 10:47:42 servername slapd[12709]: connection_get(13): got connid=76
> Apr 4 10:47:42 servername slapd[12709]: connection_read(13): checking
> for input on id=76
> Apr 4 10:47:42 servername slapd[12709]: ber_get_next on fd 13 failed
> errno=0 (Success)
> Apr 4 10:47:42 servername slapd[12709]: connection_closing: readying
> conn=76 sd=13 for close
> Apr 4 10:47:42 servername slapd[12709]: connection_close: conn=76 sd=-1
>
> ...and, Samba does receive this error message intact. From the Samba logs:
>
> [2008/04/04 12:11:54, 4] passdb/pdb_ldap.c:ldapsam_update_sam_account(1777)
> ldapsam_update_sam_account: user tester to be modified has dn:
> uid=tester,ou=Users,dc=example,dc=com
> [2008/04/04 12:11:54, 2] passdb/pdb_ldap.c:init_ldap_from_sam(965)
> init_ldap_from_sam: Setting entry for user: tester
> [2008/04/04 12:11:54, 10] lib/smbldap.c:smbldap_make_mod(520)
> smbldap_make_mod: deleting attribute |sambaPwdCanChange| values
> |1207320457|
> [2008/04/04 12:11:54, 10] lib/smbldap.c:smbldap_make_mod(529)
> smbldap_make_mod: adding attribute |sambaPwdCanChange| value |1207325514|
> [2008/04/04 12:11:54, 10] lib/smbldap.c:smbldap_make_mod(504)
> smbldap_make_mod: attribute |sambaPwdMustChange| not changed.
> [2008/04/04 12:11:54, 5] lib/smbldap.c:smbldap_modify(1363)
> smbldap_modify: dn => [uid=tester,ou=Users,dc=example,dc=com]
> [2008/04/04 12:11:54, 10] lib/smbldap.c:smbldap_extended_operation(1472)
> Extended operation failed with error: Constraint violation (Password
> fails quality checking policy)
> [2008/04/04 12:11:54, 0] passdb/pdb_ldap.c:ldapsam_modify_entry(1644)
> ldapsam_modify_entry: LDAP Password could not be changed for user
> tester: Constraint violation
> Password fails quality checking policy
> [2008/04/04 12:11:54, 3] smbd/sec_ctx.c:pop_sec_ctx(339)
> pop_sec_ctx (1043, 513) - sec_ctx_stack_ndx = 1
> [2008/04/04 12:11:54, 5]
> rpc_parse/parse_samr.c:init_samr_r_chgpasswd_user(7534)
> init_samr_r_chgpasswd_user
> [2008/04/04 12:11:54, 5] rpc_server/srv_samr_nt.c:_samr_chgpasswd_user(1480)
> _samr_chgpasswd_user: 1480
> [2008/04/04 12:11:54, 5] rpc_parse/parse_prs.c:prs_debug(84)
> 000000 samr_io_r_chgpasswd_user
> [2008/04/04 12:11:54, 5] rpc_parse/parse_prs.c:prs_ntstatus(763)
> 0000 status: NT_STATUS_UNSUCCESSFUL
>
> Yet, the error message is: "The system cannot change your password now
> because the domain DOMAINNAME is unavailable." I wonder why Samba
> doesn't pass back the error verbatim to the client? Is this a bug, and
> is it patchable?
>
I think the bug/problem is that this message is being displayed
instead of "Password could not be changed for user
tester: Constraint violation" and "does not pass required number of
strength checks (1 of 3)."
John
More information about the samba
mailing list