~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to lib/common/db.py

  • Committer: mattgiuca
  • Date: 2008-02-19 08:26:11 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:509
common.db: Rewrote user_authenticate to return 3 values (True, false, None)
    Now returns False if the password did not match, None if the password
    field is NULL (None implying a soft failure, with the possibility of
    validating against LDAP or something else).

auth.authenticate: Rewrote this module with a new plugin interface
    (as discussed with Tom Conway). Allows successive modules to try to
    authenticate the user.
    Changed the authenticate function interface: Now raises an AuthError
    when auth fails, instead of returning None.

dispatch.login: Handle new auth interface (exception catch).
    Auth is now able to provide an error message, in the exception.
    The exception message is displayed as an error to the user.

Show diffs side-by-side

added added

removed removed

Lines of Context:
368
368
    def user_authenticate(self, login, password, dry=False):
369
369
        """Performs a password authentication on a user. Returns True if
370
370
        "passhash" is the correct passhash for the given login, False
371
 
        otherwise.
 
371
        if the passhash does not match the password in the DB,
 
372
        and None if the passhash in the DB is NULL.
372
373
        Also returns False if the login does not exist (so if you want to
373
374
        differentiate these cases, use get_user and catch an exception).
374
375
        """
375
 
        query = ("SELECT login FROM login "
376
 
            "WHERE login = '%s' AND passhash = %s;"
377
 
            % (login, _escape(_passhash(password))))
 
376
        query = "SELECT passhash FROM login WHERE login = '%s';" % login
378
377
        if dry: return query
379
378
        result = self.db.query(query)
380
 
        # If one row was returned, succeed.
381
 
        # Otherwise, fail to authenticate.
382
 
        return result.ntuples() == 1
 
379
        if result.ntuples() == 1:
 
380
            # Valid username. Check password.
 
381
            passhash = result.getresult()[0][0]
 
382
            if passhash is None:
 
383
                return None
 
384
            return _passhash(password) == passhash
 
385
        else:
 
386
            return False
383
387
 
384
388
    def close(self):
385
389
        """Close the DB connection. Do not call any other functions after