ud-roleadd: fix role account creation.
[mirror/userdir-ldap.git] / userdir_gpg.py
index 9f494fb..ab192c7 100644 (file)
@@ -1,4 +1,5 @@
 #   Copyright (c) 1999-2001  Jason Gunthorpe <jgg@debian.org>
+#   Copyright (c) 2005       Joey Schulze <joey@infodrom.org>
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
@@ -26,7 +27,7 @@
 #    pgp2 encrypting mode.
 
 import string, mimetools, multifile, sys, StringIO, os, tempfile, re;
-import rfc822, time, fcntl, FCNTL, anydbm
+import rfc822, time, fcntl, anydbm
 
 # General GPG options
 GPGPath = "gpg"
@@ -367,12 +368,12 @@ def GPGCheckSig(Message):
             Why = "Unable to verify signature, signing key missing.";
 
         # Expired signature
-        if Split[1] == "SIGEXPIRED":
+        if Split[1] == "SIGEXPIRED" or Split[1] == "EXPSIG":
            GoodSig = 0;
             Why = "Signature has expired";
            
         # Revoked key
-        if Split[1] == "KEYREVOKED":
+        if Split[1] == "KEYREVOKED" or Split[1] == "REVKEYSIG":
            GoodSig = 0;
             Why = "Signing key has been revoked";
 
@@ -388,7 +389,11 @@ def GPGCheckSig(Message):
 
          # ValidSig has the key finger print
         if Split[1] == "VALIDSIG":
-           KeyFinger = Split[2];
+           # Use the fingerprint of the primary key when available
+           if len(Split) >= 12:
+               KeyFinger = Split[11];
+            else:
+              KeyFinger = Split[2];
 
       # Reopen the stream as a readable stream
       Text = Res[2].read();
@@ -424,6 +429,11 @@ def GPGKeySearch(SearchCriteria):
    Owner = "";
    KeyID = "";
    Hits = {};
+
+   dir = os.path.expanduser("~/.gnupg")
+   if not os.path.isdir(dir):
+      os.mkdir(dir, 0700)
+                      
    try:
       Strm = os.popen(string.join(Args," "),"r");
       
@@ -479,7 +489,7 @@ def TemplateSubst(Map,Template):
 class ReplayCache:
    def __init__(self,Database):
       self.Lock = open(Database + ".lock","w",0600);
-      fcntl.flock(self.Lock.fileno(),FCNTL.LOCK_EX);
+      fcntl.flock(self.Lock.fileno(),fcntl.LOCK_EX);
       self.DB = anydbm.open(Database,"c",0600);
       self.CleanCutOff = CleanCutOff;
       self.AgeCutOff = AgeCutOff;