f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg# -*- coding: utf-8 -*-
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg# $Id: auth.py 1634 2013-04-12 15:36:36Z amelung $
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg# Copyright (c) 2007-2011 Otto-von-Guericke-Universität Magdeburg
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg# This file is part of ECSpooler.
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankgfrom types import StringType, UnicodeType, DictionaryType
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg#import shelve
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg# this will prevent dictionary attacks
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg# authorization levels
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankgREQUIRES_ROOT = 5 # Operations with a higher level require root privilege
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg User/password authentification with a file containing
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg md5 encrypted passwords
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg @param: userFile Absolute path to a file containing usernames and
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg md5 encrypted passwords
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg @param: args A dictionary with keys and values for username and encrypted password
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg @param: level
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg @return: True if username and password are correct, otherwise False
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg LOG.warn("Authorization failed for %s: Root privileges "
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg "required for level %d operation" % (username, level))
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg # do some parameter testing
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg assert username and type(username) in (StringType, UnicodeType), \
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg "Missing or invalid 'username'"
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg assert password and type(password) in (StringType, UnicodeType), \
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg "Missing or invalid 'password'"
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg @return: True if username and password are correct, otherwise False
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg self.db[username] == hashlib.md5(password).hexdigest()
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg LOG.warn('Wrong password. Waiting %d seconds to prevent '
f83d2c5238c9d61f4420d2f7406c70a591a9b593fuankg @return: A list with all usernames
lines = []
usrdb = {}
return usrdb