Check if a key has encryption capabilities and fail saying so when trying to userdir-ldap-0.3.35
authorPeter Palfrader <peter@palfrader.org>
Sat, 19 Jul 2008 14:20:56 +0000 (16:20 +0200)
committerPeter Palfrader <peter@palfrader.org>
Sat, 19 Jul 2008 14:20:56 +0000 (16:20 +0200)
encrypt stuff (like passwords) to users.  All this does is give nicer error
messages, it previously failed with just "gpg failed".

debian/changelog
userdir_gpg.py

index 9cedc58..0a103f5 100644 (file)
@@ -1,3 +1,11 @@
+userdir-ldap (0.3.35) unstable; urgency=low
+
+  * Check if a key has encryption capabilities and fail saying so when
+    trying to encrypt stuff (like passwords) to users.  All this does is
+    give nicer error messages, it previously failed with just "gpg failed".
+
+ -- Peter Palfrader <weasel@debian.org>  Sat, 19 Jul 2008 16:17:13 +0200
+
 userdir-ldap (0.3.34) unstable; urgency=low
 
   * ud-info: fix changing of DD status/DD status comment -
index c883d14..1140d44 100644 (file)
@@ -259,6 +259,14 @@ def GPGEncrypt(Message,To,PGP2):
    # In PGP2 compatible mode IDEA and rfc1991 encoding are used so that
    # PGP2 can read the result. RSA keys do not need PGP2 to be set, as GPG
    # can read a message encrypted with blowfish and RSA.
+   searchkey = GPGKeySearch(To);
+   if len(searchkey) == 0:
+      raise Error, "No key found matching %s"%(To);
+   elif len(searchkey) > 1:
+      raise Error, "Multiple keys found matching %s"%(To);
+   if searchkey[0][4].find("E") < 0:
+      raise Error, "Key %s has no encryption capability - are all encryption subkeys expired or revoked?  Are there any encryption subkeys?"%(To);
+
    if PGP2 == 0:
       try:
          Res = None;
@@ -443,6 +451,7 @@ def GPGKeySearch(SearchCriteria):
    Result = [];
    Owner = "";
    KeyID = "";
+   Capabilities = ""
    Expired = None;
    Hits = {};
 
@@ -464,7 +473,8 @@ def GPGKeySearch(SearchCriteria):
          if Split[0] == 'pub':
             KeyID = Split[4];
             Owner = Split[9];
-            Length = int(Split[2]);
+            Length = int(Split[2])
+            Capabilities = Split[11]
             Expired = Split[1] == 'e'
 
          # Output the key
@@ -473,7 +483,7 @@ def GPGKeySearch(SearchCriteria):
                continue;
             Hits[Split[9]] = None;
             if not Expired:
-               Result.append( (KeyID,Split[9],Owner,Length) );
+               Result.append( (KeyID,Split[9],Owner,Length,Capabilities) );
    finally:
       if Strm != None:
          Strm.close();