From: Peter Palfrader Date: Sat, 21 May 2011 13:13:31 +0000 (+0200) Subject: ud-echelon fixes X-Git-Tag: userdir-ldap-0.3.85~107 X-Git-Url: https://git.adam-barratt.org.uk/?p=mirror%2Fuserdir-ldap.git;a=commitdiff_plain;h=b00b7eec003232f689b194f8d2ab7d03c74cc78d ud-echelon fixes --- diff --git a/debian/changelog b/debian/changelog index 51b7f5a..6d80f95 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,10 @@ userdir-ldap (0.3.XXX) UNRELEASED; urgency=low - * + * some ud-echelon fixes, + * userdir_gpg.py: GetClearSig: add lax_multipart to deal + with random multipart mails. - -- Peter Palfrader Sat, 21 May 2011 14:57:05 +0200 + -- Peter Palfrader Sat, 21 May 2011 15:12:23 +0200 userdir-ldap (0.3.79) unstable; urgency=low diff --git a/ud-echelon b/ud-echelon index 2c0f984..1bd90ca 100755 --- a/ud-echelon +++ b/ud-echelon @@ -14,7 +14,7 @@ Debug = None; def TryGPG(email): # Try to get a pgp text try: - Msg = GetClearSig(email); + Msg = GetClearSig(email, lax_multipart=True); except: # Log an exception.. but continue. This is to deal with 'sort of' # PGP-MIME things @@ -113,10 +113,8 @@ try: User = TryMatcher(email); # Get any mailing list information - if 'X-Mailing-List' in email: - List = email['X-Mailing-List'] - else: - List = "-"; + List = email['X-Mailing-List'] + if not List: List = "-"; # Tada, write a log message if User != None: @@ -129,7 +127,7 @@ try: else: print Rec; else: - User = ("-","UKN",email("From")); + User = ("-","UKN",email["From"]); Msg = "[%s] \"%s\" \"%s\" \"%s\""%(Now,User[2],List,MsgID); MainLog.write("%s %s %s\n"%(User[0],User[1],Msg)); diff --git a/userdir_gpg.py b/userdir_gpg.py index a6bfa55..b84a76d 100644 --- a/userdir_gpg.py +++ b/userdir_gpg.py @@ -77,13 +77,23 @@ def SetKeyrings(Rings): # # Paranoid will check the message text to make sure that all the plaintext is # in fact signed (bounded by a PGP packet) -def GetClearSig(Msg,Paranoid = 0): +# +# lax_multipart: treat multipart bodies other than multipart/signed +# as one big plain text body +def GetClearSig(Msg, Paranoid = 0, lax_multipart = False): if not Msg.__class__ == email.message.Message: raise RuntimeError, "GetClearSign() not called with a email.message.Message" + if Paranoid and lax_multipart: + raise RuntimeError, "Paranoid and lax_multipart don't mix well" + # See if this is a MIME encoded multipart signed message if Msg.is_multipart(): if not Msg.get_content_type() == "multipart/signed": + if lax_multipart: + payloads = Msg.get_payload() + msg = "\n".join(map( lambda p: p.get_payload(decode=True), payloads)) + return (msg, 0) raise UDFormatError, "Cannot handle multipart messages not of type multipart/signed"; if Paranoid: