X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=ud-generate;h=a8977661ba3d1a2e0010208598738741ca25f022;hb=38f362d842fe6a0f642cd5bae44ca41b5d0a5897;hp=b5e80d12a32d79bfee92ca10b3d66ad80e6e0786;hpb=741c7c1576b4e48b22ae6b4f7e98c687ae1937b7;p=mirror%2Fuserdir-ldap.git diff --git a/ud-generate b/ud-generate index b5e80d1..a897766 100755 --- a/ud-generate +++ b/ud-generate @@ -91,10 +91,10 @@ def safe_rmtree(dir): def get_lock(fn, wait=5*60, max_age=3600*6): try: - stat = os.stat(fn) - if stat[ST_MTIME] < time.time() - max_age: - sys.stderr.write("Removing stale lock %s"%(fn)) - os.unlink(fn) + stat = os.stat(fn + '.lock') + if stat.st_mtime < time.time() - max_age: + sys.stderr.write("Removing stale lock %s"%(fn + '.lock')) + os.unlink(fn + '.lock') except OSError, error: if error.errno == errno.ENOENT: pass @@ -374,6 +374,27 @@ def GenSSHShadow(global_dir, accounts): return userfiles +# Generate the webPassword list +def GenWebPassword(accounts, File): + F = None + try: + OldMask = os.umask(0077) + F = open(File, "w", 0600) + os.umask(OldMask) + + for a in accounts: + if not 'webPassword' in a: continue + if not a.pw_active(): continue + + Pass = str(a['webPassword']) + Line = "%s:%s" % (a['uid'], Pass) + Line = Sanitize(Line) + "\n" + F.write("%s" % (Line)) + + except: + Die(File, None, F) + raise + def GenSSHtarballs(global_dir, userlist, SSHFiles, grouprevmap, target): OldMask = os.umask(0077) tf = tarfile.open(name=os.path.join(global_dir, 'ssh-keys-%s.tar.gz' % CurrentHost), mode='w:gz') @@ -1006,7 +1027,7 @@ def get_accounts(ldap_conn): "keyFingerPrint", "privateSub", "mailDisableMessage",\ "mailGreylisting", "mailCallout", "mailRBL", "mailRHSBL",\ "mailWhitelist", "sudoPassword", "objectClass", "accountStatus",\ - "mailContentInspectionAction"]) + "mailContentInspectionAction", "webPassword"]) if passwd_attrs is None: raise UDEmptyList, "No Users" @@ -1067,6 +1088,7 @@ def generate_all(global_dir, ldap_conn): GenMailList(accounts, global_dir + "mail-rbl", "mailRBL") GenMailList(accounts, global_dir + "mail-rhsbl", "mailRHSBL") GenMailList(accounts, global_dir + "mail-whitelist", "mailWhitelist") + GenWebPassword(accounts, global_dir + "web-passwords") GenKeyrings(global_dir) # Compatibility. @@ -1171,6 +1193,9 @@ def generate_host(host, global_dir, accounts, ssh_files): if 'PRIVATE' in ExtraList: DoLink(global_dir, OutDir, "debian-private") + if 'WEB-PASSWORDS' in ExtraList: + DoLink(global_dir, OutDir, "web-passwords") + if 'KEYRING' in ExtraList: for k in Keyrings: bn = os.path.basename(k) @@ -1190,6 +1215,7 @@ def generate_host(host, global_dir, accounts, ssh_files): posix.remove(target) except: pass + DoLink(global_dir, OutDir, "last_update.trace") l = make_ldap_conn() @@ -1209,23 +1235,23 @@ last = sorted_mods[-1][1]['reqEnd'][0].split('.')[0] if 'UD_GENERATEDIR' in os.environ: GenerateDir = os.environ['UD_GENERATEDIR'] -cache_last_mod = 0 +cache_last_mod = [0,0] try: fd = open(os.path.join(GenerateDir, "last_update.trace"), "r") - cache_last_mod=fd.read().strip() + cache_last_mod=fd.read().split() fd.close() except IOError, e: if e.errno == errno.ENOENT: pass else: raise e -if cache_last_mod >= last: - sys.exit(0) -fd = open(os.path.join(GenerateDir, "last_update.trace"), "w") -fd.write(last) -fd.close() +if cache_last_mod[0] >= last: + fd = open(os.path.join(GenerateDir, "last_update.trace"), "w") + fd.write("%s\n%s\n" % (last, int(time.time()))) + fd.close() + sys.exit(0) # Fetch all the groups GroupIDMap = {} @@ -1242,18 +1268,24 @@ for x in attrs: if x[1].has_key("subGroup") != 0: SubGroupMap.setdefault(x[1]["gid"][0], []).extend(x[1]["subGroup"]) +lock = None try: - lock = get_lock( os.path.join(GenerateDir, 'ud-generate.lock') ) + lockf = os.path.join(GenerateDir, 'ud-generate.lock') + lock = get_lock( lockf ) if lock is None: - sys.stderr.write("Could not acquire lock %s.\n"%(fn)) + sys.stderr.write("Could not acquire lock %s.\n"%(lockf)) sys.exit(1) generate_all(GenerateDir, l) finally: - if not lock is None: + if lock is not None: lock.release() +fd = open(os.path.join(GenerateDir, "last_update.trace"), "w") +fd.write("%s\n%s\n" % (last, int(time.time()))) +fd.close() + # vim:set et: # vim:set ts=3: # vim:set shiftwidth=3: