X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=ud-generate;h=b31418a765c921da1040920caa64ee4e91d3bddb;hb=bfb5521e851c8aa513d8a62a45f0d811fb475aa5;hp=1617821ba38de4eec4787aac1a3fc96a3137dad6;hpb=d355ef6e793853db50849d19a5c53bbb2b7c5871;p=mirror%2Fuserdir-ldap.git diff --git a/ud-generate b/ud-generate index 1617821..b31418a 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: @@ -39,6 +40,10 @@ except ImportError: global Allowed global CurrentHost +if os.getuid() == 0: + sys.stderr.write("You should probably not run ud-generate as root.\n") + sys.exit(1) + PasswdAttrs = None DebianUsers = None DisabledUsers = [] @@ -54,6 +59,7 @@ BSMTPCheck = re.compile(".*mx 0 (master)\.debian\.org\..*",re.DOTALL) PurposeHostField = re.compile(r".*\[\[([\*\-]?[a-z0-9.\-]*)(?:\|.*)?\]\]") IsV6Addr = re.compile("^[a-fA-F0-9:]+$") IsDebianHost = re.compile(ConfModule.dns_hostmatch) +isSSHFP = re.compile("^\s*IN\s+SSHFP") DNSZone = ".debian.net" Keyrings = ConfModule.sync_keyrings.split(":") @@ -575,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 \"\""%(DecDegree(a['latitude'], 1), DecDegree(a['longitude'], 1)) Line = Sanitize(Line) + "\n" F.write(Line) except: @@ -896,6 +903,29 @@ def GenZoneRecords(File): F.write(Line + "\n") + # this would write sshfp lines for services on machines + # but we can't yet, since some are cnames and we'll make + # an invalid zonefile + # + # for i in x[1].get("purpose", []): + # m = PurposeHostField.match(i) + # if m: + # m = m.group(1) + # # we ignore [[*..]] entries + # if m.startswith('*'): + # continue + # if m.startswith('-'): + # m = m[1:] + # if m: + # if not m.endswith(HostDomain): + # continue + # if not m.endswith('.'): + # m = m + "." + # for Line in DNSInfo: + # if isSSHFP.match(Line): + # Line = "%s\t%s" % (m, Line) + # F.write(Line + "\n") + # Oops, something unspeakable happened. except: Die(File, F, None) @@ -1048,9 +1078,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 @@ -1095,6 +1130,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")