# HG changeset patch # User Sandro Knauß # Date 1321652210 -3600 # Node ID 67ecea2d9b677413e6b95dc162cad644633733ca # Parent 85fc1e5dea79e4604759179b288d7d1a7e36dc87# Parent d1912509f37532361385315426178f8c362e76e3 merging diff -r 85fc1e5dea79 -r 67ecea2d9b67 iro/acounting.py --- a/iro/acounting.py Thu Nov 03 22:47:30 2011 +0100 +++ b/iro/acounting.py Fri Nov 18 22:36:50 2011 +0100 @@ -9,8 +9,13 @@ Database.__init__(self,connection) self.id=id - def setId(self,id): + def setId(self,id, user): self.id=id + if user: + self.connect() + self.cursor.execute ("INSERT INTO %s (id,user) VALUES ('%s','%s')" % (self.connection['overview'], self.id,user.name)) + self.disconnect() + def getStatus(self): self.connect() diff -r 85fc1e5dea79 -r 67ecea2d9b67 iro/anbieter/content.py --- a/iro/anbieter/content.py Thu Nov 03 22:47:30 2011 +0100 +++ b/iro/anbieter/content.py Fri Nov 18 22:36:50 2011 +0100 @@ -24,6 +24,12 @@ def getContent(self): return self.content + def __eq__(self,other): + return self.content == other.content + + def __ne__(self,other): + return not self.__eq__(other) + class SMS(content): def __init__(self, cont): content.__init__(self,cont) @@ -31,6 +37,7 @@ def sendto(self,anbieter,recipients): anbieter.sendSMS(self,recipients) + class FAX(content): def __init__(self,header,cont,attachments): content.__init__(self,cont) @@ -41,9 +48,26 @@ anbieter.sendFAX(self,recipients) def getAttachment(self,i): - print self.attachments return self.attachments[i] + def __eq__(self,other): + if not content.__eq__(self,other): + return False + + if self.header != other.header: + return False + + if len(self.attachments) != len(other.attachments): + return False + + for i in range(len(self.attachments)): + if self.attachments[i] != other.attachments[i]: + return False + + return True + + + class Mail(content): def __init__(self, subject, body, frm): con=MIMEText(body.encode("utf-8"), _charset='utf-8') @@ -60,3 +84,12 @@ def getFrom(self): return self.frm + + def __eq__(self,other): + if self.as_string() != other.as_string(): + return False + + if self.frm != other.frm: + return False + + return True diff -r 85fc1e5dea79 -r 67ecea2d9b67 iro/anbieter/sipgate.py --- a/iro/anbieter/sipgate.py Thu Nov 03 22:47:30 2011 +0100 +++ b/iro/anbieter/sipgate.py Fri Nov 18 22:36:50 2011 +0100 @@ -16,12 +16,15 @@ from telnumber import telnumber, NotATelNumber import ConfigParser import xmlrpclib -import base64 import logging logger=logging.getLogger("sipgate") class NoValidStatusCode(Exception): - pass + def __init__(self, value): + self.value = value + + def __str__(self): + return repr(self.value) class sipgate(anbieter): """ @@ -53,30 +56,30 @@ def sendFAX(self,fax,recipients): """send the PDF file $fax to $recipients""" logger.debug('sipgate.sendFAX(%s,%s)'%(fax, str(recipients))) - logger.debug(fax.getAttachment(0)); - pdf=open(fax.getAttachment(0),"rb") args={ "TOS" : "fax", - "Content" : base64.encodestring(pdf.read()) + "Content" : xmlrpclib.Binary(fax.getAttachment(0)), } - pdf.close() self.__send(args,recipients) def __connect(self): """connect to sipgate XMLRPC Server""" logger.debug("sipgate.__connect()-"+self.url%(self.user,"XXXXXXXX")) - - self.samurai=xmlrpclib.Server(self.url%(self.user,self.password)).samurai + + self.serv=xmlrpclib.ServerProxy(self.url%(self.user,self.password)) + self.samurai=self.serv.samurai + args_identify = { "ClientName" : "anbieter.py", "ClientVersion" : "V1.0", "ClientVendor" : "Sandro Knauss" } - self.__send_method(self.samurai.ClientIdentify, args_identify) + return self.serv def __send_method(self, func, args=None): """execute $func and test weather if the func ran successfully or not""" + logger.debug("sipgate.__send_method(func,%s)"%( args)) if args==None: xmlrpc_result = func() @@ -84,16 +87,15 @@ xmlrpc_result = func(args) if xmlrpc_result['StatusCode'] != 200: raise NoValidStatusCode("There was an error during identification to the server! %d %s"% (xmlrpc_result['StatusCode'], xmlrpc_result['StatusString'])) - - + logger.debug("sipgate.__send_method(..):ok"); return xmlrpc_result def __send(self,args,recipients): """main sending method - sending the args to $recipients""" sended=[] - self.__connect() - logger.debug('sipgate.__send(%s,%s)'%(str(args), str(recipients))) + serv=self.__connect() + logger.debug('sipgate.__send(%s,%s)'%(args, recipients)) for recipient in recipients: try: tel = telnumber(recipient) @@ -103,10 +105,10 @@ sended.append(tel) args["RemoteUri"]="sip:%s%s@sipgate.net"%(tel.land,tel.number) - self.__send_method(self.samurai.SessionInitiate, args) + self.__send_method(serv.samurai.SessionInitiate, args) self.updateStatus(arranged=recipient) - except NotATelNumber, NoValidStatusCode: + except (NotATelNumber, NoValidStatusCode): self.updateStatus(failed=recipient) self.__disconnect() @@ -149,4 +151,7 @@ def __disconnect(self): """disconnect xmlrpc client""" + logger.debug('sipgate.__disconnect()') + self.samurai=None + self.serv=None self.xmlrpc=None diff -r 85fc1e5dea79 -r 67ecea2d9b67 iro/dump_test_log.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/iro/dump_test_log.py Fri Nov 18 22:36:50 2011 +0100 @@ -0,0 +1,42 @@ +import time, os, signal +LOG_FILE = 'test.log' + +log_file = open(LOG_FILE, 'a') + +def log(msg): + log_file.write(msg + '\n') + log_file.flush() + +def SigUSR1Handler(signum, frame): + print "Reacting on USR1 signal (signal 10)" + global log_file + log_file.close() + log_file = open(LOG_FILE, 'a') + return + +def init(): + if os.path.isfile('/var/usr/dump_test_log.pid'): + print 'Have to stop server first' + os.exit(1) + else: + print 'Starting server...' + #write process id file + f = open('/var/run/dump_test_log.pid', 'w') + f.write(str(os.getpid())) + f.flush() + f.close() + print 'Process start with pid ', os.getpid() + + signal.signal(signal.SIGUSR1, SigUSR1Handler) + +def main(): + init() + count = 1 + while True: + log('log line #%d, pid: %d' % (count, os.getpid())) + count = count + 1 + time.sleep(1) + +if __name__ == '__main__': + main() + diff -r 85fc1e5dea79 -r 67ecea2d9b67 iro/iro.py --- a/iro/iro.py Thu Nov 03 22:47:30 2011 +0100 +++ b/iro/iro.py Fri Nov 18 22:36:50 2011 +0100 @@ -34,7 +34,7 @@ UserDB.__init__(self, None,userlist,jobqueue) def createUser(self, user): - self.userlist[self.createHash(user)]=user["class"](self.jobqueue) + self.userlist[self.createHash(user)]=user["class"](user["name"],self.jobqueue) diff -r 85fc1e5dea79 -r 67ecea2d9b67 iro/joblist.py --- a/iro/joblist.py Thu Nov 03 22:47:30 2011 +0100 +++ b/iro/joblist.py Fri Nov 18 22:36:50 2011 +0100 @@ -12,7 +12,7 @@ #along with this program; if not, see . from anbieter import content -import md5, os, time +import hashlib, os, time import logging logger=logging.getLogger("iro.joblist"); @@ -31,42 +31,42 @@ def __getitem__(self,key): return self.jobs[key] - def __registerJob__(self, job): + def __registerJob__(self, job, user): id = self._createID() if self.dbconn: job.setAcounting(self.manager.Acounting(id,self.dbconn)) - job.setId(id) + job.setId(id, user) self.jobs[id]=job self.queue.put(job) return id - def newSMS(self, message, recipients, provider="default"): + def newSMS(self, message, recipients, provider="default", user=None): ''' creates a new SMS ''' job=self.manager.SMSJob(self.providerlist, provider,message, content.SMS(message),recipients) - return self.__registerJob__(job) + return self.__registerJob__(job,user) - def newFAX(self,subject, fax,recipients,provider="default"): + def newFAX(self,subject, fax,recipients,provider="default",user=None): ''' creates a new Fax ''' job=self.manager.FaxJob(self.providerlist, provider,subject, content.FAX(subject,'' ,fax),recipients) - return self.__registerJob__(job) + return self.__registerJob__(job,user) - def newMail(self, subject, body, recipients, frm, provider="default"): + def newMail(self, subject, body, recipients, frm, provider="default",user=None): ''' creates a new Mail ''' job=self.manager.MailJob(self.providerlist, provider,subject, content.Mail(subject, body, frm),recipients) - return self.__registerJob__(job) + return self.__registerJob__(job,user) def _createID(self): ''' creats a random hash id ''' while True: - m = md5.new() + m = hashlib.sha1() m.update(str(time.time())) m.update(os.urandom(10)) if not self.jobs.has_key(m.hexdigest): diff -r 85fc1e5dea79 -r 67ecea2d9b67 iro/tests/stopableServer.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/iro/tests/stopableServer.py Fri Nov 18 22:36:50 2011 +0100 @@ -0,0 +1,118 @@ +import ConfigParser + +import threading + +from multiprocessing import Queue +from multiprocessing.managers import BaseManager + +from iro import xmlrpc,anbieter +from iro.user import User, Admin +from iro.iro import MySMTP,MySmstrade,MyUserDB +from iro.job import SMSJob, FAXJob, MailJob +from iro.joblist import Joblist +from iro.providerlist import Providerlist + +class StoppableXMLRPCServer(xmlrpc.SecureUserDBXMLRPCServer, threading.Thread): + running=False + def __init__(self, *args, **kwargs): + xmlrpc.SecureUserDBXMLRPCServer.__init__(self, *args, **kwargs) + threading.Thread.__init__(self) + self.timeout=.5 + + def start(self): + self.running=True + threading.Thread.start(self) + + + def run(self): + # *serve_forever* muss in einem eigenen Thread laufen, damit man es + # unterbrochen werden kann! + while (self.running): + try: + self.handle_request() + except : + break + + def stop(self): + if (self.running): + self.running=False + self.server_close() + self.join() + + def __del__(self): + self.stop() + + def __enter__(self): + self.start() + return self + + def __exit__(self,type,value,traceback): + self.stop() + + +class Internal: + pass + +def init_server(): + userlist=[{"name":"test","password":"test", "class":User}, + {"name":"test2","password":"test2", "class": User}, + {"name":"admin","password":"admin", "class": Admin}] + + + + class MyManager(BaseManager): + pass + + internal=Internal() + + MyManager.register('SMSJob', SMSJob) + MyManager.register('FaxJob', FAXJob) + MyManager.register('MailJob',MailJob) + MyManager.register('Providerlist',Providerlist) + manager = MyManager() + manager.start() + + internal.manager=manager + + #anbieter erzeugen und konfigurieren + sip=anbieter.sipgate() + sip.read_basic_config("iro.conf") + + localhost=MySMTP() + localhost.read_basic_config("iro.conf") + + smstrade=MySmstrade() + smstrade.read_basic_config("iro.conf") + + #Benutzerdatenbank erstellen + queue = Queue() + internal.queue=queue + provider=Providerlist() + internal.provider=provider + provider.add("sipgate", sip, ["sms", "fax", ]) + provider.add("smstrade", smstrade, ["sms", ]) + provider.add("geonet", None, ["sms", "fax", ]) + provider.add("fax.de", None, ["sms", "fax", ]) + provider.add("localhost", localhost, ["mail", ]) + provider.setDefault("sms","smstrade") + provider.setDefault("fax","sipgate") + provider.setDefault("mail","localhost") + jobqueue=Joblist(manager, queue, provider) + internal.jobqueue=jobqueue + userdb=MyUserDB(userlist,jobqueue) + internal.userdb=userdb + + + #Server starten + cp = ConfigParser.ConfigParser() + cp.read(["iro.conf"]) + cert=cp.get('server', 'cert') + key=cp.get('server', 'key') + serv = StoppableXMLRPCServer(addr=("localhost", 8000), + userdb=userdb, + certificate=cert,privatekey=key, + logRequests=False) + serv.relam="xmlrpc" + internal.serv=serv + return internal + diff -r 85fc1e5dea79 -r 67ecea2d9b67 iro/tests/test.pdf Binary file iro/tests/test.pdf has changed diff -r 85fc1e5dea79 -r 67ecea2d9b67 iro/tests/testJob.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/iro/tests/testJob.py Fri Nov 18 22:36:50 2011 +0100 @@ -0,0 +1,82 @@ +# -*- coding: utf-8 -*- + +import unittest + +import xmlrpclib +from stopableServer import init_server +from iro.anbieter.content import SMS,FAX,Mail + +class TestServer(unittest.TestCase): + + def setUp(self): + self.i = init_server() + self.serv=self.i.serv + self.serv.start() + + def tearDown(self): + self.serv.stop() + + + def SendSMS(self,msg): + servstr="https://test:test@localhost:8000" + client=xmlrpclib.Server(servstr) + id=client.startSMS(msg,["01234", ] ) + self.assertEqual(client.status(id),{id: {'status': ['init',{}], 'name': unicode(msg)}} ) + ele=self.i.queue.get(.1) + self.assertEqual(ele.getRecipients(),["01234", ] ) + self.assertNotEqual(ele.getMessage(),SMS('') ) + self.assertEqual(ele.getMessage(),SMS(msg) ) + + def testSimpleSMS(self): + self.SendSMS("test") + + def testSpecialCharacters(self): + self.SendSMS(u"!\"§$%&/()=?\'") + self.SendSMS(u"@ł€ł€¶ŧł¼¼½¬¬↓ŧ←ĸ↓→øđŋħ“”µ·…–|") + + def testSendFAX(self): + servstr="https://test:test@localhost:8000" + client=xmlrpclib.Server(servstr) + msg="2134wergsdfg4w56q34134æſðđæðſđŋ³@¼ŧæðđŋł€¶ŧ€¶ŧ" + id=client.startFAX("test",xmlrpclib.Binary(msg),["01234", ] ) + self.assertEqual(client.status(id),{id: {'status': ['init',{}], 'name': 'test'}} ) + ele=self.i.queue.get(.1) + self.assertEqual(ele.getRecipients(),["01234", ] ) + self.assertEqual(ele.getMessage(),FAX('test','',[msg])) + + def testDoubleFAX(self): + servstr="https://test:test@localhost:8000" + client=xmlrpclib.Server(servstr) + msg="2134wergsdfg4w56q34134æſðđæðſđŋ³@¼ŧæðđŋł€¶ŧ€¶ŧ" + pdf=open('tests/test.pdf').read() + id=client.startFAX("test",[xmlrpclib.Binary(msg),xmlrpclib.Binary(pdf)],["01234", ] ) + self.assertEqual(client.status(id),{id: {'status': ['init',{}], 'name': 'test'}} ) + ele=self.i.queue.get(.1) + self.assertEqual(ele.getRecipients(),["01234", ] ) + self.assertEqual(ele.getMessage(),FAX('test','',[msg, pdf])) + + def testSendMail(self): + servstr="https://test:test@localhost:8000" + client=xmlrpclib.Server(servstr) + msg=u"2134wergsdfg4w56q34134æſðđæðſđŋ³@¼ŧæðđŋł€¶ŧ€¶ŧ" + id=client.startMail("test",msg,["test@test.de", ],'absender@test.de' ) + self.assertEqual(client.status(id),{id: {'status': ['init',{}], 'name': 'test'}} ) + ele=self.i.queue.get(.1) + self.assertEqual(ele.getRecipients(),["test@test.de", ] ) + self.assertEqual(ele.getMessage(),Mail('test',msg,'absender@test.de')) + self.assertEqual(ele.getMessage().as_string(),"""Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: base64 +Subject: =?utf-8?q?test?= + +MjEzNHdlcmdzZGZnNHc1NnEzNDEzNMOmxb/DsMSRw6bDsMW/xJHFi8KzQMK8xafDpsOwxJHFi8WC +4oKswrbFp+KCrMK2xac= +""") + sub=u"³¼½ſðđŋſ€¼½ÖÄÜß" + id=client.startMail(sub,msg,["test@test.de", ],'absender@test.de' ) + self.assertEqual(client.status(id),{id: {'status': ['init',{}], 'name': sub}}) + ele=self.i.queue.get(.1) + self.assertEqual(ele.getMessage(),Mail(sub, msg, 'absender@test.de')) + +if __name__ == "__main__": + unittest.main() diff -r 85fc1e5dea79 -r 67ecea2d9b67 iro/tests/testXMLRPCServer.py --- a/iro/tests/testXMLRPCServer.py Thu Nov 03 22:47:30 2011 +0100 +++ b/iro/tests/testXMLRPCServer.py Fri Nov 18 22:36:50 2011 +0100 @@ -1,115 +1,16 @@ # -*- coding: utf-8 -*- -import unittest, ConfigParser - -import threading, xmlrpclib -from multiprocessing import Queue -from multiprocessing.managers import BaseManager - -from iro import xmlrpc,anbieter -from iro.iro import MySMTP,MySmstrade,MyUserDB -from iro.job import SMSJob, FAXJob, MailJob -from iro.joblist import Joblist -from iro.providerlist import Providerlist -from iro.user import User, Admin - - -class StoppableXMLRPCServer(xmlrpc.SecureUserDBXMLRPCServer, threading.Thread): - running=False - def __init__(self, *args, **kwargs): - xmlrpc.SecureUserDBXMLRPCServer.__init__(self, *args, **kwargs) - threading.Thread.__init__(self) - self.timeout=.5 - - def start(self): - self.running=True - threading.Thread.start(self) - - - def run(self): - # *serve_forever* muss in einem eigenen Thread laufen, damit man es - # unterbrochen werden kann! - while (self.running): - self.handle_request() - - def stop(self): - if (self.running): - self.running=False - self.server_close() - self.join() - - def __del__(self): - self.stop() - - def __enter__(self): - self.start() - return self - - def __exit__(self,type,value,traceback): - self.stop() - - +import unittest -def init_server(): - userlist=[{"name":"test","password":"test", "class":User}, - {"name":"test2","password":"test2", "class": User}, - {"name":"admin","password":"admin", "class": Admin}] - - - - class MyManager(BaseManager): - pass - - MyManager.register('SMSJob', SMSJob) - MyManager.register('FAXob', FAXJob) - MyManager.register('MailJob',MailJob) - MyManager.register('Providerlist',Providerlist) - manager = MyManager() - manager.start() - - - #anbieter erzeugen und konfigurieren - sip=anbieter.sipgate() - sip.read_basic_config("iro.conf") - - localhost=MySMTP() - localhost.read_basic_config("iro.conf") - - smstrade=MySmstrade() - smstrade.read_basic_config("iro.conf") +import xmlrpclib +from stopableServer import init_server - #Benutzerdatenbank erstellen - queue = Queue() - provider=Providerlist() - provider.add("sipgate", sip, ["sms", "fax", ]) - provider.add("smstrade", smstrade, ["sms", ]) - provider.add("geonet", None, ["sms", "fax", ]) - provider.add("fax.de", None, ["sms", "fax", ]) - provider.add("localhost", localhost, ["mail", ]) - provider.setDefault("sms","smstrade") - provider.setDefault("fax","sipgate") - provider.setDefault("mail","localhost") - jobqueue=Joblist(manager, queue, provider) - userdb=MyUserDB(userlist,jobqueue) - - - #Server starten - cp = ConfigParser.ConfigParser() - cp.read(["iro.conf"]) - cert=cp.get('server', 'cert') - key=cp.get('server', 'key') - serv = StoppableXMLRPCServer(addr=("localhost", 8000), - userdb=userdb, - certificate=cert,privatekey=key, - logRequests=False) - serv.relam="xmlrpc" - return serv - - class TestServer(unittest.TestCase): def setUp(self): - self.serv = init_server() + self.i = init_server() + self.serv=self.i.serv + self.serv.start() def tearDown(self): diff -r 85fc1e5dea79 -r 67ecea2d9b67 iro/tests/testloglock.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/iro/tests/testloglock.py Fri Nov 18 22:36:50 2011 +0100 @@ -0,0 +1,98 @@ + +import unittest +import os +import tempfile +import signal +import threading +import time + +class testLogLock(unittest.TestCase): + def test_ThreadingAndLocks(self): + #create a thread, have that thread grab a lock, and sleep. + fd, file = tempfile.mkstemp('.nonlog') + _lock = threading.RLock() + os.close(fd) + def locker(): + os.write(fd, 'Thread acquiring lock\n') + _lock.acquire() + os.write(fd, 'Thread acquired lock\n') + time.sleep(0.4) + os.write(fd, 'Thread releasing lock\n') + _lock.release() + os.write(fd, 'Thread released lock\n') + + #Then in the main thread, throw a signal to self + def handleSignal(sigNum, frame): + os.write(fd, 'Main Thread acquiring lock\n') + lock = False + endtime = time.time() + 1.0 + while not lock: + lock = _lock.acquire(blocking=0) + time.sleep(0.01) + if time.time() > endtime: + break + if not lock: + os.write(fd, 'Main Thread could not acquire lock\n') + return + os.write(fd, 'Main Thread acquired lock\n') + os.write(fd, 'Main Thread releasing lock\n') + _lock.release() + os.write(fd, 'Main Thread released lock\n') + + sighndlr = signal.signal(signal.SIGUSR1, handleSignal) + try: + fd = os.open(file, os.O_SYNC | os.O_WRONLY | os.O_CREAT) + thread = threading.Thread(target=locker) + thread.start() + time.sleep(0.1) + os.kill(os.getpid(), signal.SIGUSR1) + thread.join() + + #check the results + os.close(fd) + fileconts = open(file, 'r').read() + self.assertTrue('Main Thread released lock' in fileconts) + self.assertEqual(fileconts, + '''Thread acquiring lock +Thread acquired lock +Main Thread acquiring lock +Thread releasing lock +Thread released lock +Main Thread acquired lock +Main Thread releasing lock +Main Thread released lock +''') + + #Now try after acquiring the lock from the main thread + fd = os.open(file, os.O_SYNC | os.O_WRONLY | os.O_CREAT) + _lock.acquire() + thread = threading.Thread(target=locker) + thread.start() + time.sleep(0.1) + os.kill(os.getpid(), signal.SIGUSR1) + _lock.release() + thread.join() + os.close(fd) + fileconts = open(file, 'r').read() + self.assertEqual(fileconts, + '''Thread acquiring lock +Main Thread acquiring lock +Main Thread acquired lock +Main Thread releasing lock +Main Thread released lock +Thread acquired lock +Thread releasing lock +Thread released lock +''') + + finally: + signal.signal(signal.SIGUSR1, sighndlr) + try: + os.close(fd) + except OSError: + pass + try: + os.unlink(file) + except OSError: + pass + diff -r 85fc1e5dea79 -r 67ecea2d9b67 iro/user.py --- a/iro/user.py Thu Nov 03 22:47:30 2011 +0100 +++ b/iro/user.py Fri Nov 18 22:36:50 2011 +0100 @@ -31,9 +31,10 @@ ''' class for a xmlrpc user ''' - def __init__(self,jobqueue): + def __init__(self, name, jobqueue): self.jobqueue=jobqueue self.jobs={} + self.name=name self.features=["mail", "sms", "fax", ] def status(self,id=None,detailed=False): @@ -82,7 +83,7 @@ ''' if not "sms" in self.features: raise NotSupportedFeature("sms") - id = self.jobqueue.newSMS(message,recipients,provider) + id = self.jobqueue.newSMS(message,recipients,provider,user=self) self.jobs[id]=self.jobqueue[id] return id @@ -94,7 +95,12 @@ logger.debug("startFAX(%s,%s,%s,%s)"%(subject, fax, recipients, provider)) if not "fax" in self.features: raise NotSupportedFeature("fax") - id = self.jobqueue.newFAX(subject, fax,recipients,provider) + + if type(fax) != list: + fax=[fax] + f=[i.data for i in fax] + + id = self.jobqueue.newFAX(subject, f,recipients,provider,user=self) self.jobs[id]=self.jobqueue[id] return id @@ -102,7 +108,7 @@ if not "mail" in self.features: raise NotSupportedFeature("mail") logger.debug("startMail(%s,%s,%s,%s,%s)"%(subject, body, recipients, frm, provider)) - id = self.jobqueue.newMail(subject, body, recipients, frm, provider) + id = self.jobqueue.newMail(subject, body, recipients, frm, provider,user=self) self.jobs[id]=self.jobqueue[id] return id @@ -119,6 +125,6 @@ return self.jobqueue.providerlist.getDefault(name)["name"] class Admin(User): - def __init__(self,jobqueue): - User.__init__(self, jobqueue) + def __init__(self, name, jobqueue): + User.__init__(self, name, jobqueue) self.jobs=jobqueue.jobs diff -r 85fc1e5dea79 -r 67ecea2d9b67 iro/worker.py --- a/iro/worker.py Thu Nov 03 22:47:30 2011 +0100 +++ b/iro/worker.py Fri Nov 18 22:36:50 2011 +0100 @@ -11,6 +11,7 @@ self.queue=queue def run(self): + logger.info('Workerprocess läuft nun...') indifier=0 while 1: job=self.queue.get() diff -r 85fc1e5dea79 -r 67ecea2d9b67 iro/xmlrpc/SecureUserdbXMLRPCServer.py --- a/iro/xmlrpc/SecureUserdbXMLRPCServer.py Thu Nov 03 22:47:30 2011 +0100 +++ b/iro/xmlrpc/SecureUserdbXMLRPCServer.py Fri Nov 18 22:36:50 2011 +0100 @@ -1,6 +1,6 @@ from SecureAuthentificateXMLRPCServer import SecureAuthentificateXMLRPCRequestHandler from SecureXMLRPCServer import SecureXMLRPCServer -import os, md5 +import os, hashlib class UserDB: ''' @@ -20,14 +20,14 @@ returns a hash out of username and the password and self.salt user is a directory with two keys: username and password """ - m=md5.new() + m=hashlib.sha512() m.update(user["name"]) m.update(self.salt) m.update(user["password"]) return m.hexdigest() def createUser(self,user): - self.userlist[self.createHash(user)]=self.userClass(self.jobqueue) + self.userlist[self.createHash(user)]=self.userClass(user["name"],self.jobqueue) def __getitem__(self,key): return self.userlist[key]