X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=ud-generate;h=a0c735deda2a2bc6c37e4f754cbb127c40fada8c;hb=e07de89f89d40fd6221657bef704de7a72deefb4;hp=e4f2e40e37694fea3f1043fba457c1987c7d0a57;hpb=654ee77ad6d1e94e3374758e4b435e99f39407c2;p=mirror%2Fuserdir-ldap.git diff --git a/ud-generate b/ud-generate index e4f2e40..a0c735d 100755 --- a/ud-generate +++ b/ud-generate @@ -5,6 +5,9 @@ import string, re, time, ldap, getopt, sys, os, pwd, posix, socket; from userdir_ldap import *; +global Allowed; +global CurrentHost; + PasswdAttrs = None; GroupIDMap = {}; Allowed = None; @@ -24,7 +27,6 @@ def DoLink(From,To,File): # See if this user is in the group list def IsInGroup(DnRecord): - global Allowed,CurrentHost; if Allowed == None: return 1; @@ -70,13 +72,14 @@ def Done(File,F,Fdb): def GenPasswd(l,File,HomePrefix): F = None; try: - F = open(File + ".tmp","w"); + F = open(File + ".tdb.tmp","w"); # 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 IsInGroup(x) == 0: continue; @@ -85,24 +88,29 @@ def GenPasswd(l,File,HomePrefix): if len(GetAttr(x,"gecos")) > 100 or len(GetAttr(x,"loginshell")) > 50: continue; - Line = "%s:x:%s:%s:%s:%s%s:%s\n" % (GetAttr(x,"uid"),\ + Line = "%s:x:%s:%s:%s:%s%s:%s" % (GetAttr(x,"uid"),\ GetAttr(x,"uidnumber"),GetAttr(x,"gidnumber"),\ GetAttr(x,"gecos"),HomePrefix,GetAttr(x,"uid"),\ GetAttr(x,"loginshell")); - F.write(Line); + + Line = Sanitize(Line) + "\n"; + F.write("0%u %s" % (I,Line)); + F.write(".%s %s" % (GetAttr(x,"uid"),Line)); + F.write("=%s %s" % (GetAttr(x,"uidnumber"),Line)); + I = I + 1; # Oops, something unspeakable happened. except: - Die(File,F,None); + Die(File,None,F); raise; - Done(File,F,None); + Done(File,None,F); # Generate the shadow list def GenShadow(l,File): F = None; try: OldMask = os.umask(0077); - F = open(File + ".tmp","w",0600); + F = open(File + ".tdb.tmp","w",0600); os.umask(OldMask); # Fetch all the users @@ -110,6 +118,7 @@ def GenShadow(l,File): if PasswdAttrs == None: raise "No Users"; + I = 0; for x in PasswdAttrs: if x[1].has_key("uidnumber") == 0 or IsInGroup(x) == 0: continue; @@ -125,13 +134,15 @@ def GenShadow(l,File): GetAttr(x,"shadowwarning"),GetAttr(x,"shadowinactive"),\ GetAttr(x,"shadowexpire")); Line = Sanitize(Line) + "\n"; - F.write(Line); + F.write("0%u %s" % (I,Line)); + F.write(".%s %s" % (GetAttr(x,"uid"),Line)); + I = I + 1; # Oops, something unspeakable happened. except: - Die(File,F,None); + Die(File,None,F); raise; - Done(File,F,None); + Done(File,None,F); # Generate the shadow list def GenSSHShadow(l,File): @@ -165,7 +176,7 @@ def GenSSHShadow(l,File): def GenGroup(l,File): F = None; try: - F = open(File + ".tmp","w"); + F = open(File + ".tdb.tmp","w"); # Generate the GroupMap GroupMap = {}; @@ -191,6 +202,7 @@ def GenGroup(l,File): print "Group does not exist ",I,"but",GetAttr(x,"uid"),"is in it"; # Output the group file. + J = 0; for x in GroupMap.keys(): if GroupIDMap.has_key(x) == 0: continue; @@ -200,13 +212,16 @@ def GenGroup(l,File): Line = Line + ("%s%s" % (Comma,I)); Comma = ','; Line = Sanitize(Line) + "\n"; - F.write(Line); + F.write("0%u %s" % (J,Line)); + F.write(".%s %s" % (x,Line)); + F.write("=%u %s" % (GroupIDMap[x],Line)); + J = J + 1; # Oops, something unspeakable happened. except: - Die(File,F,None); + Die(File,None,F); raise; - Done(File,F,None); + Done(File,None,F); # Generate the email forwarding list def GenForward(l,File): @@ -405,7 +420,7 @@ def GenDNS(l,File,HomePrefix): Done(File,F,None); # Generate the BSMTP file -def GenBSMTP(l,File): +def GenBSMTP(l,File,HomePrefix): F = None; try: F = open(File + ".tmp","w"); @@ -433,7 +448,6 @@ def GenBSMTP(l,File): F.write("%s: user=%s group=Debian file=%s%s/bsmtp/%s\n"%(Host, GetAttr(x,"uid"),HomePrefix,GetAttr(x,"uid"),Host)); - F.write("\n"); except: F.write("; Errors\n"); pass; @@ -549,7 +563,6 @@ while(1): if GroupIDMap.has_key(I): GroupList[str(GroupIDMap[I])] = None; - global Allowed,CurrentHost; Allowed = GroupList; CurrentHost = Split[0]; @@ -572,7 +585,7 @@ while(1): GenDNS(l,OutDir+"dns-zone",Split[1]); if ExtraList.has_key("[BSMTP]"): - GenBSMTP(l,OutDir+"bsmtp"); + GenBSMTP(l,OutDir+"bsmtp",Split[1]); if ExtraList.has_key("[PRIVATE]"): DoLink(GlobalDir,OutDir,"debian-private");