ud-echelon fixes
authorPeter Palfrader <peter@palfrader.org>
Sat, 21 May 2011 13:13:31 +0000 (15:13 +0200)
committerPeter Palfrader <peter@palfrader.org>
Sat, 21 May 2011 13:13:31 +0000 (15:13 +0200)
debian/changelog
ud-echelon
userdir_gpg.py

index 51b7f5a..6d80f95 100644 (file)
@@ -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 <weasel@debian.org>  Sat, 21 May 2011 14:57:05 +0200
+ -- Peter Palfrader <weasel@debian.org>  Sat, 21 May 2011 15:12:23 +0200
 
 userdir-ldap (0.3.79) unstable; urgency=low
 
index 2c0f984..1bd90ca 100755 (executable)
@@ -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));
 
index a6bfa55..b84a76d 100644 (file)
@@ -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: