X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;ds=sidebyside;f=userdir_ldap.py;h=f3f9ba7a306016c6407d6c9f7857b0d1284de95c;hb=d34f4cb87a80d211f07fc1bfb2b9a630d1346e7c;hp=21b215bd7c24f0634b495cbeb00b0de6a0cdcb3a;hpb=51f98437460dd3adac2cacd9510551dd2f3d54a7;p=mirror%2Fuserdir-ldap.git diff --git a/userdir_ldap.py b/userdir_ldap.py index 21b215b..f3f9ba7 100644 --- a/userdir_ldap.py +++ b/userdir_ldap.py @@ -1,5 +1,5 @@ # Some routines and configuration that are used by the ldap progams -import termios, TERMIOS, re, string, imp, ldap, sys, whrandom, crypt; +import termios, TERMIOS, re, string, imp, ldap, sys, whrandom, crypt, rfc822; try: File = open("/etc/userdir-ldap/userdir-ldap.conf"); @@ -8,6 +8,7 @@ except: ConfModule = imp.load_source("userdir_config","/etc/userdir-ldap.conf",File); File.close(); +# Cheap hack BaseDn = ConfModule.basedn; BaseDn = ConfModule.basedn; LDAPServer = ConfModule.ldaphost; @@ -18,10 +19,17 @@ GenerateConf = ConfModule.generateconf; DefaultGID = ConfModule.defaultgid; TemplatesDir = ConfModule.templatesdir; PassDir = ConfModule.passdir; +Ech_ErrorLog = ConfModule.ech_errorlog; +Ech_MainLog = ConfModule.ech_mainlog; # This is a list of common last-name prefixes LastNamesPre = {"van": None, "le": None, "de": None, "di": None}; - + +# SSH Key splitting. The result is: +# (options,size,modulous,exponent,comment) +SSHAuthSplit = re.compile('^(.* )?(\d+) (\d+) (\d+) ?(.+)$'); +#'^([^\d](?:[^ "]+(?:".*")?)*)? ?(\d+) (\d+) (\d+) (.+)$'); + # Safely get an attribute from a tuple representing a dn and an attribute # list. It returns the first attribute if there are multi. def GetAttr(DnRecord,Attribute,Default = ""): @@ -170,9 +178,9 @@ def FlushOutstanding(l,Outstanding,Fast=0): return Outstanding; # Convert a lat/long attribute into Decimal degrees -def DecDegree(Attr,Type,Anon=0): - Parts = re.match('[+-]?(\d*)\\.?(\d*)?',GetAttr(Attr,Type)).groups(); - Val = string.atof(GetAttr(Attr,Type)); +def DecDegree(Posn,Anon=0): + Parts = re.match('[+-]?(\d*)\\.?(\d*)?',Posn).groups(); + Val = string.atof(Posn); if (abs(Val) >= 1806060.0): raise ValueError,"Too Big"; @@ -198,3 +206,52 @@ def DecDegree(Attr,Type,Anon=0): if Val >= 0: return "+" + Str; return Str; + +def FormatSSHAuth(Str): + Match = SSHAuthSplit.match(Str); + if Match == None: + return ""; + G = Match.groups(); + + # No options + if G[0] == None: + return "%s %s %s..%s %s"%(G[1],G[2],G[3][:8],G[3][-8:],G[4]); + return "%s %s %s %s..%s %s"%(G[0],G[1],G[2],G[3][:8],G[3][-8:],G[4]); + +def FormatPGPKey(Str): + Res = ""; + + # PGP 2.x Print + if (len(Str) == 32): + I = 0; + while (I < len(Str)): + if I+2 == 32/2: + Res = "%s %s%s "%(Res,Str[I],Str[I+1]); + else: + Res = "%s%s%s "%(Res,Str[I],Str[I+1]); + I = I + 2; + elif (len(Str) == 40): + # OpenPGP Print + I = 0; + while (I < len(Str)): + if I+4 == 40/2: + Res = "%s %s%s%s%s "%(Res,Str[I],Str[I+1],Str[I+2],Str[I+3]); + else: + Res = "%s%s%s%s%s "%(Res,Str[I],Str[I+1],Str[I+2],Str[I+3]); + I = I + 4; + else: + Res = Str; + return string.strip(Res); + +# Take an email address and split it into 3 parts, (Name,UID,Domain) +def SplitEmail(Addr): + Res1 = rfc822.AddrlistClass(Addr).getaddress(); + if len(Res1) != 1: + return ("","",Addr); + Res1 = Res1[0]; + if Res1[1] == None: + return (Res1[0],"",""); + Res2 = string.split(Res1[1],"@"); + if len(Res2) != 2: + return (Res1[0],"",Res1[1]); + return (Res1[0],Res2[0],Res2[1]);