# # userdb.py for kippo # by Walter de Jong # # adopted and further modified by Upi Tamminen # from kippo.core.config import config import os import string class UserDB: def __init__(self): self.userdb = [] self.load() def load(self): '''load the user db''' userdb_file = '%s/userdb.txt' % \ (config().get('honeypot', 'data_path'),) f = open(userdb_file, 'r') while True: line = f.readline() if not line: break line = string.strip(line) if not line: continue (login, uid_str, passwd) = line.split(':', 2) uid = 0 try: uid = int(uid_str) except ValueError: uid = 1001 self.userdb.append((login, uid, passwd)) f.close() def save(self): '''save the user db''' userdb_file = '%s/userdb.txt' % \ (config().get('honeypot', 'data_path'),) # Note: this is subject to races between kippo instances, but hey ... f = open(userdb_file, 'w') for (login, uid, passwd) in self.userdb: f.write('%s:%d:%s\n' % (login, uid, passwd)) f.close() def checklogin(self, thelogin, thepasswd): '''check entered username/password against database''' '''note that it allows multiple passwords for a single username''' for (login, uid, passwd) in self.userdb: if login == thelogin and (passwd == thepasswd or passwd == '*'): return True return False def user_exists(self, thelogin): for (login, uid, passwd) in self.userdb: if login == thelogin: return True return False def user_password_exists(self, thelogin, thepasswd): for (login, uid, passwd) in self.userdb: if login == thelogin and passwd == thepasswd: return True return False def getUID(self, loginname): for (login, uid, passwd) in self.userdb: if loginname == login: return uid return 1001 def allocUID(self): '''allocate the next UID''' min_uid = 0 for (login, uid, passwd) in self.userdb: if uid > min_uid: min_uid = uid return min_uid + 1 def adduser(self, login, uid, passwd): if self.user_password_exists(login, passwd): return self.userdb.append((login, uid, passwd)) self.save() # vim: set sw=4 et: