diff options
-rw-r--r-- | whitelist.py | 218 |
1 files changed, 109 insertions, 109 deletions
diff --git a/whitelist.py b/whitelist.py index 7eb88cd..fab0824 100644 --- a/whitelist.py +++ b/whitelist.py @@ -3,7 +3,7 @@ Author: Cosimo Alfarano Date: June 11 2000 -whitelist.py - Copyright 2000 by Cosimo Alfarano <Alfarano@Students.CS.UniBo.It> +whitelist.py - (C) 2000 by Cosimo Alfarano <Alfarano@Students.CS.UniBo.It> You can use this software under the terms of the GPL. If we meet some day, and you think this stuff is worth it, you can buy me a beer in return. @@ -13,117 +13,117 @@ whitelist manage a list of trusted user. """ import sys -import string import time import fcntl -import pyginfo import wlp -class whitelist: - """whitelist handling class - - Do you really want anyone can post? Ah ah ah. - """ - - wl = {} - debug = None - log = None # filedescriptor - - # constants - DENY = 0 - ACCEPT = 1 - - def __init__(self, wlfile='wl.pyg', logfile='pyg.log', debug=0): - - self.debug = debug - - try: - wlp.setfilebyname(wlfile) - except (Exception), (errno,message): - print 'Opening %s: %s (errno %d)' % (wlfile,message,errno) - sys.exit(0) - - # dict is a { ownername : {variable: value}} dictionary of dictionaries - self.wl = wlp.mkdict() - -# print 'owner: option = value' -# for owner in self.wl.keys(): -# for option in self.wl[owner].keys(): -# print '%s: %s = %s' % (owner,option,self.wl[owner][option]) - - try: - self.log = open(logfile, 'a') - self.lock() - except (Exception), message: - print '%s\nAre you authorized to use this program? ' % message - sys.exit(1) - - def lock(self): - fcntl.flock(self.log.fileno(),fcntl.LOCK_EX) - - # to unlock fd locked, usually fd are unlocked after process exit() - def unlock(self): - fcntl.flock(self.log.fileno(),fcntl.LOCK_UN) - - def checkfrom(self, fromhead): - """have you permission to be here, sir?""" - - for owner in self.wl.keys(): -# if(self.wl[owner]['From:'] == fromhead[:-1]): # remove '\n' - if(string.find(fromhead[:-1],self.wl[owner]['From:']) >= 0): - return owner - else: - return None - - - def log(self, string): - """Captain Diary, Astral Date 962555394 from epoch. - it rawly write a line in logfile. Remeber to indent it, if you - like. - """ - - self.log.write(string + '\n') - - def logmsg(self, heads, ok=DENY,owner=None): - """who are walking through my gate? - log - """ - - ltime = time.ctime(time.time()) - - if time.daylight: - tzone = time.tzname[1] - else: - tzone = time.tzname[0] - - if(ok == self.ACCEPT): - self.log.write('Permission Accorded ') - else: - self.log.write('Permission Denied ') - - self.log.write('at %s (%s)\n' % (ltime,tzone)) - if(owner != None): - self.log.write('\tWLOwner: ' + owner + '\n') - self.log.write('\tFrom: ' + heads.get('From:','NOT PRESENT\n')) - self.log.write('\tSubject: ' + heads.get('Subject:','NOT PRESENT\n')) - self.log.write('\tSender: ' + heads.get('Sender:','NOT PRESENT\n')) - self.log.write('\tDate: ' + heads.get('Date:','NOT PRESENT\n')) - - # some client create Message-Id other Message-ID. - if(heads.has_key('Message-ID:')): - self.log.write('\tMessage-ID: ' + heads.get('Message-ID:')) - else: - self.log.write('\tMessage-Id: ' + heads.get('Message-Id:','NOT PRESENT\n')) - - # X-Newsgroups: and To: are present if user is trusted, else - # Newsgroup: exists since no changes on nntp headers are done. - if(heads.has_key('X-Newsgroups:')): - self.log.write('\tTo: ' + heads.get('To:','NOT PRESENT\n')) - self.log.write('\tX-Newsgroups: ' + heads.get('X-Newsgroups:','NOT PRESENT\n')) - else: - self.log.write('\tNewsgroups: ' + heads.get('Newsgroups:','NOT PRESENT\n')) - - - self.log.write('\n') +class whitelist(object): + """whitelist handling class + + Do you really want anyone can post? Ah ah ah. + """ + + wl = {} + debug = None + log = None # filedescriptor + + # constants + DENY = 0 + ACCEPT = 1 + + def __init__(self, wlfile='wl.pyg', logfile='pyg.log', debug=0): + + self.debug = debug + + try: + wlp.setfilebyname(wlfile) + except (Exception), (errno, message): + print 'Opening %s: %s (errno %d)' % (wlfile, message, errno) + sys.exit(0) + + # dict is a { ownername : {variable: value}} dictionary of dictionaries + self.wl = wlp.mkdict() + +# print 'owner: option = value' +# for owner in self.wl.keys(): +# for option in self.wl[owner].keys(): +# print '%s: %s = %s' % (owner,option,self.wl[owner][option]) + + try: + self.log = open(logfile, 'a') + self.lock() + except (Exception), message: + print '%s\nAre you authorized to use this program? ' % message + sys.exit(1) + + def lock(self): + fcntl.flock(self.log.fileno(), fcntl.LOCK_EX) + + # to unlock fd locked, usually fd are unlocked after process exit() + def unlock(self): + fcntl.flock(self.log.fileno(), fcntl.LOCK_UN) + + def checkfrom(self, fromhead): + """have you permission to be here, sir?""" + + for owner in self.wl.keys(): +# if(self.wl[owner]['From:'] == fromhead[:-1]): # remove '\n' + if fromhead[:-1].find(self.wl[owner]['From:']) >= 0: + return owner + else: + return None + + # FIXME self.log has been already defined as a variable of None value on + # line 30. + def log(self, string): + """Captain Diary, Astral Date 962555394 from epoch. + it rawly write a line in logfile. Remeber to indent it, if you + like. + """ + self.log.write(string + '\n') + + def logmsg(self, heads, ok=DENY, owner=None): + """who are walking through my gate? + log + """ + + ltime = time.ctime(time.time()) + + if time.daylight: + tzone = time.tzname[1] + else: + tzone = time.tzname[0] + + if ok == self.ACCEPT: + self.log.write('Permission Accorded ') + else: + self.log.write('Permission Denied ') + + self.log.write('at %s (%s)\n' % (ltime, tzone)) + if owner is not None: + self.log.write('\tWLOwner: ' + owner + '\n') + self.log.write('\tFrom: ' + heads.get('From:', 'NOT PRESENT\n')) + self.log.write('\tSubject: ' + heads.get('Subject:', 'NOT PRESENT\n')) + self.log.write('\tSender: ' + heads.get('Sender:', 'NOT PRESENT\n')) + self.log.write('\tDate: ' + heads.get('Date:', 'NOT PRESENT\n')) + + # some client create Message-Id other Message-ID. + if 'Message-ID:' in heads: + self.log.write('\tMessage-ID: ' + heads.get('Message-ID:')) + else: + self.log.write('\tMessage-Id: ' + heads.get('Message-Id:', + 'NOT PRESENT\n')) + + # X-Newsgroups: and To: are present if user is trusted, else + # Newsgroup: exists since no changes on nntp headers are done. + if 'X-Newsgroups:' in heads: + self.log.write('\tTo: ' + heads.get('To:', 'NOT PRESENT\n')) + self.log.write('\tX-Newsgroups: ' + heads.get('X-Newsgroups:', + 'NOT PRESENT\n')) + else: + self.log.write('\tNewsgroups: ' + + heads.get('Newsgroups:', 'NOT PRESENT\n')) + + self.log.write('\n') |