Can you please email this to me as an attachment?

On May 18, 10:25 am, Nico de Groot <[email protected]> wrote:
> I tried out the ldap login using an Active Directory server using the
> directions fromhttp://web2py.com/book/default/section/8/1. I had to
> make some small changes to get it running when using 'username' for
> login.
>
> change 1: if @ is missing (like in the case of using 'username')
> username_bare is undefined in 'con.search_ext_s(...)'. Proposed
> solution: add a else: to to repair this
>
> change 2: con.simple_bind_s(username, password) fails when username is
> just a username without '@[domainname]'. As we are allready searching
> the AD, I added the attribute 'distinguishedName' in
> con.search_ext_s(') and used that to construct the DN. The DN can also
> be used in con.simple_bind_s()
>
> This seems to work, can anyone confirm the problem and check the
> solutions?
>
> In my test application I had to relax the FK constraints to get the
> inserts in auth_table, auth_membership and auth_events working and
> prevent FK constraint-errors. (I'm using MS-SQLServer 2005). Is it a
> solution to commit the insert in auth_user first? See, in tools.py,
> line 1078
>
> Nico de Groot
>
> From gluon/contrib/login_methods/ldap_auth.py
> current-----------
> 64          if ldap_mode == 'ad':
>                 # Microsoft Active Directory
>                 con.set_option(ldap.OPT_PROTOCOL_VERSION, 3)
>                 if ldap_binddn:
>                     # need to search directory with an admin account
> 1st
>                     con.simple_bind_s(ldap_binddn, ldap_bindpw)
>                 else:
>                     # credentials should be in the form of
> [email protected]
>                     con.simple_bind_s(username, password)
>                 if "@" in username:
>                     username_bare = username.split("@")[0]
>                 # this will throw an index error if the account is not
> found
>                 # in the ldap_basedn
>                 result = con.search_ext_s(
>                     ldap_basedn, ldap.SCOPE_SUBTREE,
>                     "sAMAccountName=%s" % username_bare,
> ["sAMAccountName","distinguishedName"])[0][1]
>                 if ldap_binddn:
>                     # We know the user exists & is in the correct OU
>                     # so now we just check the password
>                     con.simple_bind_s(username, password)
>
> proposed---------------
> 64:           if ldap_mode == 'ad':
>                 # Microsoft Active Directory
>                 con.set_option(ldap.OPT_PROTOCOL_VERSION, 3)
>                 if ldap_binddn:
>                     # need to search directory with an admin account
> 1st
>                     con.simple_bind_s(ldap_binddn, ldap_bindpw)
>                 else:
>                     # credentials should be in the form of
> [email protected]
>                     con.simple_bind_s(username, password)
>                 if "@" in username:
>                     username_bare = username.split("@")[0]
> #patch ncdg1
>                 else:
>                     username_bare = username
> #/patch ncdg1
>                 # this will throw an index error if the account is not
> found
>                 # in the ldap_basedn
> #patch ncdg2
>                 result = con.search_ext_s(
>                     ldap_basedn, ldap.SCOPE_SUBTREE,
>                     "sAMAccountName=%s" % username_bare,
> ["sAMAccountName","distinguishedName"])[0][1]
>                 if ldap_binddn:
>                     # We know the user exists & is in the correct OU
>                     # so now we just check the password
>                     ldap_userdn=result["distinguishedName"][0]
>                     con.simple_bind_s(ldap_userdn, password)
> #/patch ncdg2

Reply via email to