-def GetUID(l,Name,UnknownMap = {}):
- # 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]):
- Stat = "unknown map hit for "+str(Name);
- return (UnknownMap[Name[1] + '@' + Name[2]],[Stat]);
-
- # Then the cruft component (ie there was no email address to match)
- if UnknownMap.has_key(Name[2]):
- Stat = "unknown map hit for"+str(Name);
- return (UnknownMap[Name[2]],[Stat]);
-
- # Then the name component (another ie there was no email address to match)
- if UnknownMap.has_key(Name[0]):
- Stat = "unknown map hit for"+str(Name);
- return (UnknownMap[Name[0]],[Stat]);
-
- # 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:
- Stat = "Filter failure: (&(cn=%s)(sn=%s))"%(cn,sn);
- return (None,[Stat]);
-
- # Try matching on the email address
- if (len(Attrs) != 1):
- try:
- Attrs = l.search_s(BaseDn,ldap.SCOPE_ONELEVEL,"emailforward=%s"%(Name[2]),["uid"]);
- except ldap.FILTER_ERROR:
- pass;
-
- # 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 \
- ( sn.lower().find(Attrs[0][1]["sn"][0].lower()) != -1 or \
- cn.lower().find(Attrs[0][1]["sn"][0].lower()) != -1 ):
- Stat = EmailAppend+" hit for "+str(Name);
- return (Name[1],[Stat]);
-
- # Attempt to give some best guess suggestions for use in editing the
- # override file.
- Attrs = l.search_s(BaseDn,ldap.SCOPE_ONELEVEL,"(sn~=%s)"%(sn),["uid","sn","cn"]);
-
- Stat = [];
- if len(Attrs) != 0:
- Stat = ["None for %s"%(str(Name))];
- for x in Attrs:
- Stat.append("But might be: %s %s <%s@debian.org>"%(x[1]["cn"][0],x[1]["sn"][0],x[1]["uid"][0]));
- return (None,Stat);
- else:
- return (Attrs[0][1]["uid"][0],None);
-
- return (None,None);
+def GetUID(l, Name, UnknownMap={}):
+ # 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 Name[1] + '@' + Name[2] in UnknownMap:
+ Stat = "unknown map hit for " + str(Name)
+ return (UnknownMap[Name[1] + '@' + Name[2]], [Stat])
+
+ # Then the cruft component (ie there was no email address to match)
+ if Name[2] in UnknownMap:
+ Stat = "unknown map hit for" + str(Name)
+ return (UnknownMap[Name[2]], [Stat])
+
+ # Then the name component (another ie there was no email address to match)
+ if Name[0] in UnknownMap:
+ Stat = "unknown map hit for" + str(Name)
+ return (UnknownMap[Name[0]], [Stat])
+
+ # 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:
+ Stat = "Filter failure: (&(cn=%s)(sn=%s))" % (cn, sn)
+ return (None, [Stat])
+
+ # Try matching on the email address
+ if len(Attrs) != 1:
+ try:
+ Attrs = l.search_s(BaseDn, ldap.SCOPE_ONELEVEL, "emailforward=%s" % (Name[2]), ["uid"])
+ except ldap.FILTER_ERROR:
+ pass
+
+ # 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 \
+ (sn.lower().find(Attrs[0][1]["sn"][0].lower()) != -1 or
+ cn.lower().find(Attrs[0][1]["sn"][0].lower()) != -1):
+ Stat = EmailAppend + " hit for " + str(Name)
+ return (Name[1], [Stat])
+
+ # Attempt to give some best guess suggestions for use in editing the
+ # override file.
+ Attrs = l.search_s(BaseDn, ldap.SCOPE_ONELEVEL, "(sn~=%s)" % (sn,), ["uid", "sn", "cn"])
+
+ Stat = []
+ if len(Attrs) != 0:
+ Stat = ["None for %s" % (str(Name))]
+ for x in Attrs:
+ Stat.append("But might be: %s %s <%s@debian.org>" % (x[1]["cn"][0], x[1]["sn"][0], x[1]["uid"][0]))
+ return (None, Stat)
+ else:
+ return (Attrs[0][1]["uid"][0], None)
+
+ return (None, None)
+