X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=ud-generate;h=f9f884103be175cd4421a875ce48d4f14c04f39b;hb=9c46f82fc6e9dc4f6966dafcf2cca92d5f01ec80;hp=201f0e2d27d58d6322c02f7b386116a58134ce03;hpb=564435f0ad9477a23251cbf4c13e21af5c00702c;p=mirror%2Fuserdir-ldap.git diff --git a/ud-generate b/ud-generate index 201f0e2..f9f8841 100755 --- a/ud-generate +++ b/ud-generate @@ -10,7 +10,9 @@ GroupIDMap = {}; Allowed = None; CurrentHost = ""; -EmailCheck = re.compile("^([^<>@]+@.+)?$"); +EmailCheck = re.compile("^([^ <>@]+@[^ ,<>@]+)?$"); +BSMTPCheck = re.compile(".*mx 0 klecker\.debian\.org\..*",re.DOTALL); +DNSZone = ".debian.net" def Sanitize(Str): return string.translate(Str,string.maketrans("\n\r\t","$$$")); @@ -179,6 +181,40 @@ def GenSSHShadow(l,File): raise "cdbmake gave an error"; Done(File,F,None); +def GenSSH2Shadow(l,File): + F = None; + Fdb = None; + try: + OldMask = os.umask(0077); + F = open(File + ".tmp","w",0600); + Fdb = os.popen("cdbmake %s.cdb %s.cdb.tmp"%(File,File),"w"); + os.umask(OldMask); + + # Fetch all the users + global PasswdAttrs; + if PasswdAttrs == None: + raise "No Users"; + + I = 0; + for x in PasswdAttrs: + if x[1].has_key("uidnumber") == 0 or \ + x[1].has_key("sshdsaauthkey") == 0: + continue; + for I in x[1]["sshdsaauthkey"]: + User = GetAttr(x,"uid"); + Line = "%s: %s" %(User,I); + Line = Sanitize(Line) + "\n"; + F.write(Line); + Fdb.write("+%d,%d:%s->%s\n"%(len(User),len(I),User,I)); + Fdb.write("\n"); + # Oops, something unspeakable happened. + except: + Die(File,F,Fdb); + raise; + if Fdb.close() != None: + raise "cdbmake gave an error"; + Done(File,F,None); + # Generate the group list def GenGroup(l,File): F = None; @@ -379,13 +415,13 @@ def GenPrivate(l,File): Done(File,F,Fdb); # Generate the DNS Zone file -def GenDNS(l,File): +def GenDNS(l,File,BSMTPFile,HomePrefix): F = None; - Fdb = None; + FB = None; try: F = open(File + ".tmp","w"); - Fdb = None; - + FB = open(BSMTPFile + ".tmp","w"); + # Fetch all the users global PasswdAttrs; if PasswdAttrs == None: @@ -406,8 +442,14 @@ def GenDNS(l,File): Line = string.join(Split," ") + "\n"; F.write(Line); - # Write some identication information - if string.lower(Split[2]) != "cname": + Host = Split[0] + DNSZone; + if BSMTPCheck.match(Line) != None: + F.write("; Has BSMTP\n"); + FB.write("%s: user=%s group=Debian file=%s%s/bsmtp/%s\n"%(Host, + GetAttr(x,"uid"),HomePrefix,GetAttr(x,"uid"),Host)); + + # Write some identification information + if string.lower(Split[2]) == "a": Line = "%s IN TXT \"%s\"\n"%(Split[0],EmailAddress(x)); for y in x[1]["keyfingerprint"]: Line = Line + "%s IN TXT \"PGP %s\"\n"%(Split[0],FormatPGPKey(y)); @@ -418,13 +460,16 @@ def GenDNS(l,File): F.write("\n"); except: + F.write("; Errors\n"); pass; # Oops, something unspeakable happened. except: - Die(File,F,Fdb); + Die(File,F,None); + Die(BSMTPFile,FB,None); raise; - Done(File,F,Fdb); + Done(File,F,None); + Done(BSMTPFile,FB,None); # Connect to the ldap server l = ldap.open(LDAPServer); @@ -451,7 +496,7 @@ PasswdAttrs = l.search_s(BaseDn,ldap.SCOPE_ONELEVEL,"uid=*",\ "shadowmin","shadowmax","shadowwarning","shadowinactive", "shadowexpire","emailforward","latitude","longitude",\ "allowedhosts","sshrsaauthkey","dnszoneentry","cn","sn",\ - "keyfingerprint","privatesub"]); + "keyfingerprint","privatesub","sshdsaauthkey"]); # Open the control file if len(sys.argv) == 1: @@ -461,10 +506,10 @@ else: # Generate global things GlobalDir = GenerateDir+"/"; +GenSSH2Shadow(l,GlobalDir+"ssh-dsa-shadow"); GenSSHShadow(l,GlobalDir+"ssh-rsa-shadow"); GenAllForward(l,GlobalDir+"mail-forward.cdb"); GenMarkers(l,GlobalDir+"markers"); -GenDNS(l,GlobalDir+"dns-zone"); GenPrivate(l,GlobalDir+"debian-private"); # Compatibility. @@ -516,7 +561,7 @@ while(1): DoLink(GlobalDir,OutDir,"forward-alias"); if ExtraList.has_key("[DNS]"): - DoLink(GlobalDir,OutDir,"dns-zone"); + GenDNS(l,OutDir+"dns-zone",OutDir+"bsmtp",Split[1]); if ExtraList.has_key("[PRIVATE]"): DoLink(GlobalDir,OutDir,"debian-private");