X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=ud-generate;h=f49b20ad095384d38b500a6737552d23296a8a26;hb=80dd33be3b3d898d9bc54e4b44687fafd2ec5a8b;hp=fc6dbb20b85d5abc155c5937ad16161d412d24fa;hpb=92ba9e85b9d04a159ca5e15add1b5c8d5eb7ac16;p=mirror%2Fuserdir-ldap.git diff --git a/ud-generate b/ud-generate index fc6dbb2..f49b20a 100755 --- a/ud-generate +++ b/ud-generate @@ -31,6 +31,7 @@ import string, re, time, ldap, getopt, sys, os, pwd, posix, socket, base64, sha, shutil, errno, tarfile, grp from userdir_ldap import * from userdir_exceptions import * +import UDLdap try: from cStringIO import StringIO except ImportError: @@ -580,10 +581,11 @@ def GenMarkers(File): # Write out the position for each user for x in PasswdAttrs: - if x[1].has_key("latitude") == 0 or x[1].has_key("longitude") == 0: + a = UDLdap.Account(x[0], x[1]) + if not ('latitude' in a and 'longitude' in a): continue try: - Line = "%8s %8s \"\""%(DecDegree(GetAttr(x, "latitude"), 1), DecDegree(GetAttr(x, "longitude"), 1)) + Line = "%8s %8s \"\""%(a.latitude_dec(True), a.longitude_dec(True)) Line = Sanitize(Line) + "\n" F.write(Line) except: @@ -606,15 +608,13 @@ def GenPrivate(File): # Write out the position for each user for x in DebianDDUsers: - if x[1].has_key("privateSub") == 0: + a = UDLdap.Account(x[0], x[1]) + if not a.is_active_user(): continue - - # If the account has no PGP key, do not write it - if x[1].has_key("keyFingerPrint") == 0: + if not 'privateSub' in a: continue - try: - Line = "%s"%(GetAttr(x, "privateSub")) + Line = "%s"%(a['privateSub']) Line = Sanitize(Line) + "\n" F.write(Line) except: @@ -638,22 +638,13 @@ def GenDisabledAccounts(File): I = 0 for x in PasswdAttrs: - if x[1].has_key("uidNumber") == 0: + a = UDLdap.Account(x[0], x[1]) + if a.pw_active(): continue - - Pass = GetAttr(x, "userPassword") - Line = "" - # *LK* is the reference value for a locked account - # password starting with ! is also a locked account - if Pass.find("*LK*") != -1 or Pass.startswith("!"): - # Format is : - Line = "%s:%s" % (GetAttr(x, "uid"), "Account is locked") - DisabledUsers.append(x) - - if Line != "": - F.write(Sanitize(Line) + "\n") - - + Line = "%s:%s" % (a['uid'], "Account is locked") + DisabledUsers.append(x) + F.write(Sanitize(Line) + "\n") + # Oops, something unspeakable happened. except: Die(File, F, None) @@ -670,19 +661,12 @@ def GenMailDisable(File): global PasswdAttrs for x in PasswdAttrs: - Reason = None - - if x[1].has_key("mailDisableMessage"): - Reason = GetAttr(x, "mailDisableMessage") - else: + a = UDLdap.Account(x[0], x[1]) + if not 'mailDisableMessage' in a: continue - - try: - Line = "%s: %s"%(GetAttr(x, "uid"), Reason) - Line = Sanitize(Line) + "\n" - F.write(Line) - except: - pass + Line = "%s: %s"%(a['uid'], a['mailDisableMessage']) + Line = Sanitize(Line) + "\n" + F.write(Line) # Oops, something unspeakable happened. except: @@ -1076,9 +1060,14 @@ def GenKeyrings(OutDir): # Connect to the ldap server l = connectLDAP() -F = open(PassDir + "/pass-" + pwd.getpwuid(os.getuid())[0], "r") -Pass = F.readline().strip().split(" ") -F.close() +# for testing purposes it's sometimes useful to pass username/password +# via the environment +if 'UD_CREDENTIALS' in os.environ: + Pass = os.environ['UD_CREDENTIALS'].split() +else: + F = open(PassDir + "/pass-" + pwd.getpwuid(os.getuid())[0], "r") + Pass = F.readline().strip().split(" ") + F.close() l.simple_bind_s("uid=" + Pass[0] + "," + BaseDn, Pass[1]) # Fetch all the groups @@ -1097,7 +1086,7 @@ for x in Attrs: SubGroupMap.setdefault(x[1]["gid"][0], []).extend(x[1]["subGroup"]) # Fetch all the users -PasswdAttrs = l.search_s(BaseDn, ldap.SCOPE_ONELEVEL, "uid=*",\ +PasswdAttrs = l.search_s(BaseDn, ldap.SCOPE_ONELEVEL, "(&(uid=*)(!(uidNumber=0)))",\ ["uid", "uidNumber", "gidNumber", "supplementaryGid",\ "gecos", "loginShell", "userPassword", "shadowLastChange",\ "shadowMin", "shadowMax", "shadowWarning", "shadowInactive", @@ -1123,6 +1112,10 @@ if HostAttrs == None: HostAttrs.sort(lambda x, y: cmp((GetAttr(x, "hostname")).lower(), (GetAttr(y, "hostname")).lower())) +# override globaldir for testing +if 'UD_GENERATEDIR' in os.environ: + GenerateDir = os.environ['UD_GENERATEDIR'] + # Generate global things GlobalDir = GenerateDir + "/" GenDisabledAccounts(GlobalDir + "disabled-accounts")