- UnknownMap[Split[0]] = string.strip(Split[1]);
-
-# Convert the PGP name string to a uid value
-def GetUID(l,Name):
- # Crack up the email address into a best guess first/middle/last name
- (cn,mn,sn) = NameSplit(re.sub('["]','',Name[0]))
-
- # Brackets anger the ldap searcher
- cn = re.sub('[(")]','?',cn);
- sn = re.sub('[(")]','?',sn);
-
- # First check the unknown map for the email address
- if UnknownMap.has_key(Name[1] + '@' + Name[2]):
- print "unknown map hit for",Name;
- return UnknownMap[Name[1] + '@' + Name[2]];
-
- # Then the cruft component (ie there was no email address to match)
- if UnknownMap.has_key(Name[2]):
- print "unknown map hit for",Name;
- return UnknownMap[Name[2]];
-
- # Search for a possible first/last name hit
- try:
- Attrs = l.search_s(BaseDn,ldap.SCOPE_ONELEVEL,"(&(cn=%s)(sn=%s))"%(cn,sn),["uid"]);
- except ldap.FILTER_ERROR:
- print "Filter failure:","(&(cn=%s)(sn=%s))"%(cn,sn);
- return None;
-
- # Hmm, more than one/no return
- if (len(Attrs) != 1):
- # Key claims a local address
- if Name[2] == EmailAppend:
-
- # Pull out the record for the claimed user
- Attrs = l.search_s(BaseDn,ldap.SCOPE_ONELEVEL,"(uid=%s)"%(Name[1]),["uid","sn","cn"]);
-
- # We require the UID surname to be someplace in the key name, this
- # deals with special purpose keys like 'James Troup (Alternate Debian key)'
- # Some people put their names backwards on their key too.. check that as well
- if len(Attrs) == 1 and \
- (string.find(string.lower(sn),string.lower(Attrs[0][1]["sn"][0])) != -1 or \
- string.find(string.lower(cn),string.lower(Attrs[0][1]["sn"][0])) != -1):
- print EmailAppend,"hit for",Name;
- return Name[1];
-
- # Attempt to give some best guess suggestions for use in editing the
- # override file.
- print "None for",Name;
- Attrs = l.search_s(BaseDn,ldap.SCOPE_ONELEVEL,"(sn~=%s)"%(sn),["uid","sn","cn"]);
- for x in Attrs:
- print " But might be:",x[1]["cn"][0],x[1]["sn"][0],"<" + x[1]["uid"][0] + "@debian.org>";
- else:
- return Attrs[0][1]["uid"][0];
+ UnknownMap[Split[0]] = Split[1].strip()
+
+
+def load_keys_from_gpg(keyrings):
+ keys = {}
+
+ # Popen GPG with the correct magic special options
+ ClearKeyrings()
+ SetKeyrings(keyrings)
+
+ Args = [GPGPath] + GPGBasicOptions + GPGKeyRings + GPGSearchOptions + [" 2> /dev/null"]
+ Keys = os.popen(" ".join(Args),"r");
+
+ # Loop over the GPG key file
+ Outstanding = 0;
+ while(1):
+ Line = Keys.readline();
+ if Line == "":
+ break;
+
+ Split = Line.split(":")
+ if len(Split) < 8 or Split[0] != "pub":
+ continue;
+
+ while (1):
+ Line2 = Keys.readline();
+ if Line2 == "":
+ break;
+ Split2 = Line2.split(":");
+ if len(Split2) < 11 or Split2[0] != "fpr":
+ continue;
+ break;
+ if Line2 == "":
+ break;
+
+ pgp_uid = Split[9]
+ fingerprint = Split2[9]
+
+ if fingerprint in keys:
+ print "Duplicate key in keyrings: %s, belonging to %s"%(fingerprint, pgp_uid)
+ continue
+ keys[fingerprint] = pgp_uid
+
+ if Keys.close() is not None:
+ raise Exception("GPG failed")
+
+ return keys
+
+
+
+