X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=userdir_ldap.py;h=15e387563531f5e1a58036367e887afcb44e678c;hb=756718139caf15c974793881ecd5e089ff11a964;hp=eab3cabbf2a6c2c41cf6378a4af921737b6bc8bd;hpb=c50d88536a4feb3087d1aa802e110250cb2861fc;p=mirror%2Fuserdir-ldap.git diff --git a/userdir_ldap.py b/userdir_ldap.py index eab3cab..15e3875 100644 --- a/userdir_ldap.py +++ b/userdir_ldap.py @@ -21,7 +21,12 @@ PassDir = ConfModule.passdir; # 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 = ""): @@ -168,3 +173,70 @@ def FlushOutstanding(l,Outstanding,Fast=0): if Fast == 0: print; return Outstanding; + +# Convert a lat/long attribute into Decimal degrees +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"; + + # Val is in DGMS + if abs(Val) >= 18060.0 or len(Parts[0]) > 5: + Val = Val/100.0; + Secs = Val - long(Val); + Val = long(Val)/100.0; + Min = Val - long(Val); + Val = long(Val) + (Min*100.0 + Secs*100.0/60.0)/60.0; + + # Val is in DGM + elif abs(Val) >= 180 or len(Parts[0]) > 3: + Val = Val/100.0; + Min = Val - long(Val); + Val = long(Val) + Min*100.0/60.0; + + if Anon != 0: + Str = "%3.2f"%(Val); + else: + Str = str(Val); + 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 Res; +