From 3b19770f41e7c4bf7882c9ae3c1e41025bcf8ea9 Mon Sep 17 00:00:00 2001 From: jgg <> Date: Sun, 30 Apr 2000 20:34:07 +0000 Subject: [PATCH] Lowercase UIN --- ud-generate | 149 ++++++++++++++++++++++++++++++++++++++++++++-------- ud-info | 4 +- 2 files changed, 129 insertions(+), 24 deletions(-) diff --git a/ud-generate b/ud-generate index 792383e..d556f8b 100755 --- a/ud-generate +++ b/ud-generate @@ -2,7 +2,7 @@ # -*- mode: python -*- # Generates passwd, shadow and group files from the ldap directory. -import string, re, time, ldap, getopt, sys, os, pwd; +import string, re, time, ldap, getopt, sys, os, pwd, posix; from userdir_ldap import *; PasswdAttrs = None; @@ -13,6 +13,11 @@ CurrentHost = ""; def Sanitize(Str): return string.translate(Str,string.maketrans("\n\r\t","$$$")); +def DoLink(From,To,File): + try: posix.remove(To+File); + except: pass; + posix.link(From+File,To+File); + # See if this user is in the group list def IsInGroup(DnRecord): global Allowed,CurrentHost; @@ -39,7 +44,7 @@ def IsInGroup(DnRecord): return 1; return 0; -def Die(F,Fdb): +def Die(File,F,Fdb): if F != None: F.close(); if Fdb != None: @@ -91,7 +96,7 @@ def GenPasswd(l,File,HomePrefix): # Oops, something unspeakable happened. except: - Die(F,Fdb); + Die(File,F,Fdb); raise; Done(File,F,Fdb); @@ -133,7 +138,7 @@ def GenShadow(l,File): # Oops, something unspeakable happened. except: - Die(F,Fdb); + Die(File,F,Fdb); raise; Done(File,F,Fdb); @@ -144,7 +149,7 @@ def GenSSHShadow(l,File): try: OldMask = os.umask(0077); F = open(File + ".tmp","w",0600); - Fdb = None; + Fdb = os.popen("cdbmake %s.cdb %s.cdb.tmp"%(File,File),"w"); os.umask(OldMask); # Fetch all the users @@ -154,19 +159,23 @@ def GenSSHShadow(l,File): I = 0; for x in PasswdAttrs: - if x[1].has_key("uidnumber") == 0 or IsInGroup(x) == 0 or \ + if x[1].has_key("uidnumber") == 0 or \ x[1].has_key("sshrsaauthkey") == 0: continue; for I in x[1]["sshrsaauthkey"]: - Line = "%s: %s" %(GetAttr(x,"uid"),I); + 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(F,Fdb); + Die(File,F,Fdb); raise; - Done(File,F,Fdb); + if Fdb.close() != None: + raise "cdbmake gave an error"; + Done(File,F,None); # Generate the group list def GenGroup(l,File): @@ -218,7 +227,7 @@ def GenGroup(l,File): # Oops, something unspeakable happened. except: - Die(F,Fdb); + Die(File,F,Fdb); raise; Done(File,F,Fdb); @@ -229,7 +238,6 @@ def GenForward(l,File): try: OldMask = os.umask(0022); F = open(File + ".tmp","w",0644); - Fdb = None; os.umask(OldMask); # Fetch all the users @@ -252,10 +260,42 @@ def GenForward(l,File): # Oops, something unspeakable happened. except: - Die(F,Fdb); + Die(File,F,Fdb); raise; Done(File,F,Fdb); +def GenAllForward(l,File): + Fdb = None; + try: + OldMask = os.umask(0022); + Fdb = os.popen("cdbmake %s %s.tmp"%(File,File),"w"); + os.umask(OldMask); + + # Fetch all the users + global PasswdAttrs; + if PasswdAttrs == None: + raise "No Users"; + + # Write out the email address for each user + for x in PasswdAttrs: + if x[1].has_key("emailforward") == 0: + continue; + + # Do not allow people to try to buffer overflow busted parsers + Forward = GetAttr(x,"emailforward"); + if len(Forward) > 200: + continue; + + User = GetAttr(x,"uid"); + Fdb.write("+%d,%d:%s->%s\n"%(len(User),len(Forward),User,Forward)); + Fdb.write("\n"); + # Oops, something unspeakable happened. + except: + Fdb.close(); + raise; + if Fdb.close() != None: + raise "cdbmake gave an error"; + # Generate the anon XEarth marker file def GenMarkers(l,File): F = None; @@ -282,10 +322,53 @@ def GenMarkers(l,File): # Oops, something unspeakable happened. except: - Die(F,Fdb); + Die(File,F,Fdb); raise; Done(File,F,Fdb); - + +# Generate the debian-private subscription list +def GenPrivate(l,File): + F = None; + Fdb = None; + try: + F = open(File + ".tmp","w"); + Fdb = None; + + # Fetch all the users + global PasswdAttrs; + if PasswdAttrs == None: + raise "No Users"; + + # Write out the position for each user + for x in PasswdAttrs: + if x[1].has_key("privatesub") == 0: + continue; + + # If the account is locked, do not write it + if (string.find(GetAttr(x,"userpassword"),"*LK*") != -1): + continue; + + # If the account has no PGP key, do not write it + if x[1].has_key("keyfingerprint") == 0: + continue; + + # Must be in the Debian group (yuk, hard coded for now) + if GetAttr(x,"gidnumber") != "800": + continue; + + try: + Line = "%s"%(GetAttr(x,"privatesub")); + Line = Sanitize(Line) + "\n"; + F.write(Line); + except: + pass; + + # Oops, something unspeakable happened. + except: + Die(File,F,Fdb); + raise; + Done(File,F,Fdb); + # Generate the DNS Zone file def GenDNS(l,File): F = None; @@ -330,7 +413,7 @@ def GenDNS(l,File): # Oops, something unspeakable happened. except: - Die(F,Fdb); + Die(File,F,Fdb); raise; Done(File,F,Fdb); @@ -359,13 +442,25 @@ PasswdAttrs = l.search_s(BaseDn,ldap.SCOPE_ONELEVEL,"uid=*",\ "shadowmin","shadowmax","shadowwarning","shadowinactive", "shadowexpire","emailforward","latitude","longitude",\ "allowedhosts","sshrsaauthkey","dnszoneentry","cn","sn",\ - "keyfingerprint"]); + "keyfingerprint","privatesub"]); # Open the control file if len(sys.argv) == 1: F = open(GenerateConf,"r"); else: F = open(sys.argv[1],"r") + +# Generate global things +GlobalDir = GenerateDir+"/"; +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. +GenForward(l,GlobalDir+"forward-alias"); + while(1): Line = F.readline(); if Line == "": @@ -396,13 +491,23 @@ while(1): Allowed = GroupList; CurrentHost = Split[0]; + sys.stdout.flush(); GenPasswd(l,OutDir+"passwd",Split[1]); + sys.stdout.flush(); GenGroup(l,OutDir+"group"); GenShadow(l,OutDir+"shadow"); - GenSSHShadow(l,OutDir+"ssh-rsa-shadow"); - GenForward(l,OutDir+"forward-alias"); - GenMarkers(l,OutDir+"markers"); + + # Link in global things + DoLink(GlobalDir,OutDir,"ssh-rsa-shadow"); + DoLink(GlobalDir,OutDir,"ssh-rsa-shadow.cdb"); + DoLink(GlobalDir,OutDir,"markers"); + DoLink(GlobalDir,OutDir,"mail-forward.cdb"); - if ExtraList.has_key("[DNS]"): - GenDNS(l,OutDir+"dns-zone"); + # Compatibility. + DoLink(GlobalDir,OutDir,"forward-alias"); + if ExtraList.has_key("[DNS]"): + DoLink(GlobalDir,OutDir,"dns-zone"); + + if ExtraList.has_key("[PRIVATE]"): + DoLink(GlobalDir,OutDir,"debian-private"); diff --git a/ud-info b/ud-info index f27a49e..2adbd24 100755 --- a/ud-info +++ b/ud-info @@ -42,7 +42,7 @@ AttrInfo = {"cn": ["First Name", 101], "labeledurl": ["Home Page",11], "latitude": ["Latitude",12], "longitude": ["Longitude",13], - "icqUIN": ["ICQ UIN",14], + "icquin": ["ICQ UIN",14], "privatesub": ["Debian-Private",15], "comment": ["Comment",116], "userpassword": ["Crypted Password",117], @@ -71,7 +71,7 @@ AttrPrompt = {"cn": ["Common name or first name"], "longitude": ["XEarth latitude in ISO 6709 format - see /usr/share/zoneinfo/zone.tab or etak.com"], "dnszoneentry": ["DNS Zone fragment associated this this user"], "labeledurl": ["Web home page"], - "icqUIN": ["ICQ UIN Number"]}; + "icquin": ["ICQ UIN Number"]}; # Create a map of IDs to desc,value,attr OrderedIndex = {}; -- 2.20.1