[Nym3-commit] r492 - trunk/nymbaron/Server

laurent at conuropsis.org laurent at conuropsis.org
Sun Mar 19 21:14:38 CET 2006


Author: laurent
Date: 2006-03-19 21:14:37 +0100 (Sun, 19 Mar 2006)
New Revision: 492

Modified:
   trunk/nymbaron/Server/Main.py
Log:
Fix breakage introduced in r486, account creation should work again.


Modified: trunk/nymbaron/Server/Main.py
===================================================================
--- trunk/nymbaron/Server/Main.py	2006-03-19 18:17:23 UTC (rev 491)
+++ trunk/nymbaron/Server/Main.py	2006-03-19 20:14:37 UTC (rev 492)
@@ -134,7 +134,7 @@
 
 def findCommand(ccode, clist):
     """Find a command of given code in the argument list, return index"""
-    for i in range(clist.len()):
+    for i in range(len(clist)):
         if clist[i].ct() == ccode:
             return i
     return IndexError
@@ -144,8 +144,8 @@
        to a valid creation request. Also checks the signature.
     """
     sr = Message.StrReader(msg)
+    h = sr.readHeader()
     comList = sr.readCommandCToSList()
-    h = sr.readHeader()
     digest = _cr.sha1(msg)
     try:
         if len(comList) != 3:
@@ -199,6 +199,7 @@
             logger.info("No Surb Command")
             nymUser.abort()
             raise MalformedControlMessage()
+        com = comList[idx]
         nymUser.addSurbs(com.surbs)
         if nymUser['nSurbs'] < 3:
             logger.info("Not Enough Surbs")
@@ -243,118 +244,114 @@
     
     logger.debug("Processing control message:\n%s" % base64.encodestring(msg))
     sr = Message.StrReader(msg)
-    try:
-        h = sr.readHeader()
-        if h.nym == "":
-            processCreationRequest(msg)
-        else:
-            try:
-                nymUser = User.User(h.nym, config)
-            except User.NoSuchUser:
-                logger.debug("No such user %s" % h.nym)
-                sys.exit(73) #TODO is it the smart error code
-            if not nymUser.checkMessageSign(msg[Message.sigLength:], h.sig):
-                return
-            #The message comes from a known nick and is authenticated
-            #register the seqNo as received
-            #TODO is it ok?
-            nymUser.received(h.seqNo)
-            nymUser['lastSeen'] = time.time()
-            comList = sr.readCommandCToSList()
-            for com in comList:
-                if com.ct() == Message.CToSCODE['Create']:
-                    #we ignore the Create command if it comes from the nymholder of an account, should we rise an error?
-                    pass
-                #if the account is not initialized, or if it is already up we ignore Create2 messages
-                elif com.ct() == Message.CToSCODE['Create2']:
-                    #for the time being we forget about CREATE2 messages
-                    pass
-                    #if not nymUser.isUp():
-                #       if(nymUser.checkChallenge(com.cr)):
-                #           nymUser.setUp()
-                #other commands are only taken into account if the account is up
-                elif nymUser.isUp():
-                    if com.ct() == Message.CToSCODE['Surb']:
-                        if len(com.surbs) == 0:
-                            nymUser.delSurbs()
-                        else:
-                            nymUser.addSurbs(com.surbs)
-                    elif com.ct() == Message.CToSCODE['Newpk']:
-                        nymUser.setKeys(com.kid, com.kenc)
-                    elif com.ct() == Message.CToSCODE['Relay']:
+    h = sr.readHeader()
+    if h.nym == "":
+        processCreationRequest(msg)
+    else:
+        try:
+            nymUser = User.User(h.nym, config)
+        except User.NoSuchUser:
+            logger.debug("No such user %s" % h.nym)
+            sys.exit(73) #TODO is it the smart error code
+        if not nymUser.checkMessageSign(msg[Message.sigLength:], h.sig):
+            return
+        #The message comes from a known nick and is authenticated
+        #register the seqNo as received
+        #TODO is it ok?
+        nymUser.received(h.seqNo)
+        nymUser['lastSeen'] = time.time()
+        comList = sr.readCommandCToSList()
+        for com in comList:
+            if com.ct() == Message.CToSCODE['Create']:
+                #we ignore the Create command if it comes from the nymholder of an account, should we rise an error?
+                pass
+            #if the account is not initialized, or if it is already up we ignore Create2 messages
+            elif com.ct() == Message.CToSCODE['Create2']:
+                #for the time being we forget about CREATE2 messages
+                pass
+                #if not nymUser.isUp():
+            #       if(nymUser.checkChallenge(com.cr)):
+            #           nymUser.setUp()
+            #other commands are only taken into account if the account is up
+            elif nymUser.isUp():
+                if com.ct() == Message.CToSCODE['Surb']:
+                    if len(com.surbs) == 0:
+                        nymUser.delSurbs()
+                    else:
+                        nymUser.addSurbs(com.surbs)
+                elif com.ct() == Message.CToSCODE['Newpk']:
+                    nymUser.setKeys(com.kid, com.kenc)
+                elif com.ct() == Message.CToSCODE['Relay']:
 #                        ec = Mail.relay(h.nym, com.rt, com.ri,
 #                                        config.serverName, com.body)
 #                        if (ec != 0):
 #                            logger.error("mixminion exited abnormally with error code %d" % ec)
 #                            sys.exit(2)
 
-                        #TODO: Passing this many args is messy.  Perhaps they should be
-                        # written to a dictionary and passed as one?
-                        payload = Mail.relay_prep(h.nym, com.ri, config.serverName, com.body,
-                                                  config.abuse_address)
-                        if config.relay_method == 'smtp':
-                            Mail.relay_smtp(h.nym, com.ri, config.serverName, payload,
-                                            config.timeout, config.smtphost)
-                        elif config.relay_method == 'sendmail':
-                            Mail.relay_sendmail(payload, config.sendmail_path)
-                        else:
-                            logger.error('Unsupported relay option %s specified' % config.relay_method)
-                            sys.exit(2)
+                    #TODO: Passing this many args is messy.  Perhaps they should be
+                    # written to a dictionary and passed as one?
+                    payload = Mail.relay_prep(h.nym, com.ri, config.serverName, com.body,
+                                              config.abuse_address)
+                    if config.relay_method == 'smtp':
+                        Mail.relay_smtp(h.nym, com.ri, config.serverName, payload,
+                                        config.timeout, config.smtphost)
+                    elif config.relay_method == 'sendmail':
+                        Mail.relay_sendmail(payload, config.sendmail_path)
+                    else:
+                        logger.error('Unsupported relay option %s specified' % config.relay_method)
+                        sys.exit(2)
+                        
+                elif com.ct() == Message.CToSCODE['Get']:
+                    logger.debug("Control message is a Get request from %s" % h.nym)
+                    msgList = []
+                    sendList = []
+                    for m in com.l:
+                        if nymUser.hasMail(m):
+                            msgCom = Message.Msg()
+                            msgCom.fromData(m, nymUser.getMail(m))
+                            msgList.append(msgCom)
+                            sendList.append(m)
+                    ec = nymUser.advanced_send(
+                            Message.buildMessage(msgList))
+                    logger.debug("EC is " + str(ec))
+                    if ec == 0:
+                        nymUser.markMid(sendList, lifeCycle['sent-in-full'])
+                        if nymUser['HoldUntilAck'] == 'never':
+                            map(nymUser.delete_msg, sendList)
+                        
+                    else:
+                        logger.error("mixminion exited abnormally with error code %d" % ec)
+                        sys.exit(2)
                             
-                    elif com.ct() == Message.CToSCODE['Get']:
-                        logger.debug("Control message is a Get request from %s" % h.nym)
-                        msgList = []
-                        sendList = []
-                        for m in com.l:
-                            if nymUser.hasMail(m):
-                                msgCom = Message.Msg()
-                                msgCom.fromData(m, nymUser.getMail(m))
-                                msgList.append(msgCom)
-                                sendList.append(m)
-                        ec = nymUser.advanced_send(
-                                Message.buildMessage(msgList))
-                        logger.debug("EC is " + str(ec))
-                        if ec == 0:
-                            nymUser.markMid(sendList, lifeCycle['sent-in-full'])
-                            if nymUser['HoldUntilAck'] == 'never':
-                                map(nymUser.delete_msg, sendList)
-                            
-                        else:
-                            logger.error("mixminion exited abnormally with error code %d" % ec)
-                            sys.exit(2)
-                                
-                    elif com.ct() == Message.CToSCODE['Summarize']:
-                        comList = []
-                        sendList = nymUser.prepareSummary(com.num, com.after)
-                        mList = []
-                        if sendList:
-                            for (ml, bf, blob) in sendList:
-                                sumCom = Message.Summary()
-                                sumCom.fromData(bf, blob)
-                                comList.append(sumCom)
-                                mList = mList + ml
-                        else:
+                elif com.ct() == Message.CToSCODE['Summarize']:
+                    comList = []
+                    sendList = nymUser.prepareSummary(com.num, com.after)
+                    mList = []
+                    if sendList:
+                        for (ml, bf, blob) in sendList:
                             sumCom = Message.Summary()
-                            sumCom.fromData("\x00\x00","")
-                            comList = [sumCom]
-                        ec = nymUser.send(Message.buildMessage(comList))
-                        if ec == 0:
-                            nymUser.markMid(mList, lifeCycle['synopsis-sent'])
-                        else:
-                            logger.error("mixminion exited abnormally with error code %d" % ec)
-                            sys.exit(2)
+                            sumCom.fromData(bf, blob)
+                            comList.append(sumCom)
+                            mList = mList + ml
+                    else:
+                        sumCom = Message.Summary()
+                        sumCom.fromData("\x00\x00","")
+                        comList = [sumCom]
+                    ec = nymUser.send(Message.buildMessage(comList))
+                    if ec == 0:
+                        nymUser.markMid(mList, lifeCycle['synopsis-sent'])
+                    else:
+                        logger.error("mixminion exited abnormally with error code %d" % ec)
+                        sys.exit(2)
 
-                    elif com.ct() == Message.CToSCODE['Delete']:
-                        for mid in com.l:
-                            nymUser.delete_msg(mid)
-                    elif com.ct() == Message.CToSCODE['Policy']:
-                        if(com.opt in Common.userPolicy):
-                            nymUser[com.opt] = com.val
-                    else:
-                        pass
-    except Message.ParseError, inst:
-        logger.error("Parse error in incoming control message %s" % str(inst))
-        sys.exit(2) #TODO error code            
+                elif com.ct() == Message.CToSCODE['Delete']:
+                    for mid in com.l:
+                        nymUser.delete_msg(mid)
+                elif com.ct() == Message.CToSCODE['Policy']:
+                    if(com.opt in Common.userPolicy):
+                        nymUser[com.opt] = com.val
+                else:
+                    pass
               
 def main(args):
     if len(args) < 2:
@@ -401,13 +398,22 @@
         try:
             msg = readMessage(options.file)
             processMessage(msg)
-        except MalformedControlMessage:
+        except MalformedControlMessage, inst:
+            logger.info("Tried to parse as binary control message, failed: %s"\
+                        % str(inst))
             # see if we got a base64 encoded message.
             m = re.search("binary\\n\\n(.*)\\n---", msg, re.S)
             if m:
-                processMessage(base64.decodestring(m.group(1)))
+                try:
+                    processMessage(base64.decodestring(m.group(1)))
+                except MalformedControlMessage, inst:
+                    # We really had garbage as input, as we can't
+                    # parse it as binary or as base64 encoded.
+                    logger.error("Parse error in incoming control message %s" % str(inst))
+                    sys.exit(2) #TODO error code            
             else:
-                sys.stderr.write("Unable to find valid control message")
+                logger.error("Unable to find valid control message")
+                sys.exit(2) #TODO error code            
         sys.exit(0)
     
     if args[1] == "clean-surbs":



More information about the Nym3-commit mailing list