On 3/5/20 4:29 PM, Reuben Popp wrote:
Good morning Mads (or afternoon as the case may be where you're at).

My apologies that the report was so sparse.  When I wrote it, I was neck deep in the middle of trying to get things set up for our architects to trial Kallithea.

Yes, this was the default branch downloaded from the bitbucket mirror on February 25th.

My original report and fix were incorrect.  With it in place, what I noticed was that while an Active Directory account could log in, it would prevent me from logging in using the (local) kallithea admin account.  My best guess here, being a relatively new python noob is that in the case of the kallithea admin account, the email was a string literal, which would then fail because there was no decode() method.  On the other hand, it would work for a byte string such as that coming from AD.

That said, the following works for both AD and the local kallithea account:

--- lib/helpers.py  2020-02-25 11:18:44.000000000 -0600

+++ lib/helpers.py.new 2020-03-05 09:11:30.394700849 -0600

@@ -951,6 +951,9 @@

     if email_address == _def:

         return default

+    if isinstance(email_address, bytes):

+        email_address = email_address.decode('utf-8')

+

     parsed_url = urllib.parse.urlparse(url.current(qualified=True))

     url = (c.visual.gravatar_url or User.DEFAULT_GRAVATAR_URL) \

                .replace('{email}', email_address) \


One thing of note though, and I think this is a deeper issue, as you said, and that's when I look at any AD user account in kallithea, each field (eg, first, last, etc) is enclosed in the byte (?) field delimiter.  eg:  b'Reuben' b'Popp'


Yes, the problem seems to be that values retrieved from LDAP are byte encoded. They should be decoded in auth_ldap. But probably only some of the values. I would thus still need



    Can you try this and report back when it prints out when you log in
    using AD/LDAP?

    --- kallithea/lib/auth_modules/auth_ldap.py
    +++ kallithea/lib/auth_modules/auth_ldap.py
    @@ -326,6 +326,7 @@ class KallitheaAuthPlugin(auth_modules.K
                  aldap = AuthLdap(**kwargs)
                  (user_dn, ldap_attrs) =
    aldap.authenticate_ldap(username,
    password)
                  log.debug('Got ldap DN response %s', user_dn)
    +            print(ldap_attrs)

                  def get_ldap_attr(k):
                      return ldap_attrs.get(settings.get(k), [''])[0]


/Mads


_______________________________________________
kallithea-general mailing list
[email protected]
https://lists.sfconservancy.org/mailman/listinfo/kallithea-general

Reply via email to