[Zope-CMF] PAS: authenticateCredentials: check lowercase too?

Maurits van Rees m.van.rees at zestsoftware.nl
Thu Dec 27 18:22:36 UTC 2012


Hi,

In Products/PluggableAuthService/plugins/ZODBUserManager.py I would like 
to check the lower case version of the passed login name as well:

     def authenticateCredentials( self, credentials ):
         login = credentials.get( 'login' )
         password = credentials.get( 'password' )
         if login is None or password is None:
             return None
         userid = self._login_to_userid.get(login)
         if userid is None:
             # HERE STARTS THE EXTRA CODE:
             login = login.lower()
             userid = self._login_to_userid.get(login)
             if userid:
                 # Update the login in the credentials, as they might
                 # be used elsewhere.
                 credentials['login'] = login
             else:
                 return None
             # HERE ENDS THE EXTRA CODE.
         reference = self._user_passwords.get(userid)
         if reference is None:
             return None
         ...  # etcetera


For example, in the case of Plone, we may be using the email address as 
login name.  Some people use a mix of upper and lower case in their 
email address, for example "Maurits at VanRees.Org".  When logging in 
fails, they start to wonder whether they have remembered their password 
wrongly or if they have entered their email address in lower case or if 
they have capitalized it differently.  The result: a support call.

I have seen this happen several times for a customer and have heard the 
same from one other person on the plone core developers list.

It would help if PAS would first check with the exact spelling given and 
if that fails, try the completely lowercase version.  Note that this 
should be safe: if this somehow gets a different user id than intended, 
the password should still match that user.

I have used the above code in a patch in the collective.emaillogin 
add-on in Plone 3 for a long time now and have not had complaints since. 
  Of course it has more patches that make sure that the login name is 
actually lowercased before adding a new user, but that is outside the 
scope of this mail.

I think the above code would be fine to put in core PAS.  It is safe as 
far as I can tell and the extra processing time required when a login 
fails should be small.  Is anyone against that?


By the way, I remember having seen somewhere in PAS or PlonePAS or 
somewhere else a while ago a class that had a boolean attribute called 
something like '__case_insensitive', which was False by default.  That 
was intended to do something similar, but it did not work when I tried 
using it.  This is all very vague and I cannot find it back.  Maybe it 
was simply removed.  But does this ring a bell for anyone?

Thanks,


-- 
Maurits van Rees: http://maurits.vanrees.org/
Zest Software: http://zestsoftware.nl



More information about the Zope-CMF mailing list