ud-mailgate: remove exception for münchen.debian.net
[mirror/userdir-ldap.git] / ud-echelon
index cdca2de..38e0718 100755 (executable)
@@ -1,7 +1,8 @@
 #!/usr/bin/env python
 # -*- mode: python -*-
 import userdir_gpg, userdir_ldap, sys, traceback, time, ldap, os, getopt;
-import string, pwd
+import pwd
+import email, email.parser
 from userdir_gpg import *;
 from userdir_ldap import *;
 
@@ -10,10 +11,10 @@ EX_PERMFAIL = 65;      # EX_DATAERR
 Debug = None;
 
 # Try to extract a key fingerprint from a PGP siged message
-def TryGPG(Email):
+def TryGPG(mail):
    # Try to get a pgp text
    try:
-      Msg = GetClearSig(Email);
+      Msg = GetClearSig(mail, lax_multipart=True);
    except:
       # Log an exception.. but continue. This is to deal with 'sort of' 
       # PGP-MIME things
@@ -22,29 +23,29 @@ def TryGPG(Email):
       ErrLog.write(S);
       return None;
 
-   if string.find(Msg[0],"-----BEGIN PGP SIGNED MESSAGE-----") == -1:
+   if Msg[0].find("-----BEGIN PGP SIGNED MESSAGE-----") == -1:
       return None;
 
-   Res = GPGCheckSig(Msg[0]);
+   pgp = GPGCheckSig2(Msg[0]);
 
    # Failed to find a matching sig
-   if Res[0] != None:
-      S = "%s: %s -> PGP Checking failed '%s': %s %s\n" %(Now,MsgID,Email.getheader("From"),str(Res[0]),str(Res[2]));
+   if not pgp.ok:
+      S = "%s: %s -> PGP Checking failed '%s': %s %s\n" %(Now,MsgID,mail["From"],str(pgp.why),str(pgp.key_info));
       ErrLog.write(S);
       return None;
       
    # Search for the matching key fingerprint
-   Attrs = l.search_s(BaseDn,ldap.SCOPE_ONELEVEL,"keyFingerPrint=" + Res[2][1]);
+   Attrs = l.search_s(BaseDn,ldap.SCOPE_ONELEVEL,"keyFingerPrint=" + pgp.key_fpr);
    if len(Attrs) == 0:
       return None;
    if len(Attrs) != 1:
       raise Error, "Oddly your key fingerprint is assigned to more than one account.."
    
-   return (Attrs[0][1]["uid"][0],"PGP",FormatPGPKey(Res[2][1]));
+   return (Attrs[0][1]["uid"][0],"PGP",FormatPGPKey(pgp.key_fpr));
 
 # Try to guess the name from the email address
-def TryMatcher(Email):
-   Sender = Email.getheader("From");
+def TryMatcher(mail):
+   Sender = mail["From"];
    if Sender == None:
       return None;
       
@@ -87,17 +88,17 @@ try:
    # Get the email 
    ErrType = EX_PERMFAIL;
    ErrMsg = "Failed to understand the email or find a signature:";
-   Email = mimetools.Message(sys.stdin,0);
-   MsgID = Email.getheader("Message-ID");
-   
+   mail = email.parser.Parser().parse(sys.stdin);
+   MsgID = mail["Message-ID"]
+
    # Connect to the ldap server
    ErrType = EX_TEMPFAIL;
    ErrMsg = "An error occured while performing the LDAP lookup";
    global l;
-   l = ldap.open(LDAPServer);
+   l = connectLDAP()
    if Debug == None:
       F = open(PassDir+"/pass-"+pwd.getpwuid(os.getuid())[0],"r");
-      AccessPass = string.split(string.strip(F.readline())," ");
+      AccessPass = F.readline().strip().split(" ")
       l.simple_bind_s("uid="+AccessPass[0]+","+BaseDn,AccessPass[1]);
       F.close();
    else:
@@ -106,15 +107,14 @@ try:
    # Try to decode
    ErrType = EX_TEMPFAIL;
    ErrMsg = "An error occured while trying GPG decoding";
-   User = TryGPG(Email);
+   User = TryGPG(mail);
    if User == None:
       ErrMsg = "An error occured while trying Matcher decoding";
-      User = TryMatcher(Email);
+      User = TryMatcher(mail);
 
    # Get any mailing list information   
-   List = Email.getheader("X-Mailing-List");
-   if List == None:
-      List = "-";
+   List = mail['X-Mailing-List']
+   if not List: List = "-";
 
    # Tada, write a log message
    if User != None:
@@ -127,7 +127,7 @@ try:
       else:
          print Rec;
    else:
-      User = ("-","UKN",Email.getheader("From"));
+      User = ("-","UKN",mail["From"]);
       Msg = "[%s] \"%s\" \"%s\" \"%s\""%(Now,User[2],List,MsgID);
       MainLog.write("%s %s %s\n"%(User[0],User[1],Msg));