]> git.decadent.org.uk Git - dak.git/blobdiff - julia
Add new top level directories
[dak.git] / julia
diff --git a/julia b/julia
index 07e436724629e448094194072f715e0afb59f9e9..6cf0e46ae33765b50e28eb8a9d4569a13dac237d 100755 (executable)
--- a/julia
+++ b/julia
@@ -1,8 +1,8 @@
 #!/usr/bin/env python
 
-# Sync PostgreSQL with (LDAP-generated) passwd file
+# Sync PostgreSQL users with system users
 # Copyright (C) 2001, 2002  James Troup <james@nocrew.org>
-# $Id: julia,v 1.6 2002-05-03 16:06:45 troup Exp $
+# $Id: julia,v 1.9 2003-01-02 18:12:50 troup Exp $
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -30,7 +30,7 @@
 
 ################################################################################
 
-import pg, string, sys;
+import pg, pwd, sys;
 import utils;
 import apt_pkg;
 
@@ -41,12 +41,13 @@ projectB = None;
 ################################################################################
 
 def usage (exit_code=0):
-    print """Usage: julia [OPTION]... PASSWD_FILE
-Sync PostgreSQL's pg_user with PASSWD_FILE.
+    print """Usage: julia [OPTION]...
+Sync PostgreSQL's users with system users.
 
+  -h, --help                 show this help and exit
+  -n, --no-action            don't do anything
   -q, --quiet                be quiet about what is being done
-  -v, --verbose              explain what is being done
-  -h, --help                 show this help and exit"""
+  -v, --verbose              explain what is being done"""
     sys.exit(exit_code)
 
 ################################################################################
@@ -56,10 +57,11 @@ def main ():
 
     Cnf = utils.get_conf()
 
-    Arguments = [('q',"quiet","Julia::Options::Quiet"),
-                 ('v',"verbose","Julia::Options::Verbose"),
-                 ('h',"help","Julia::Options::Help")];
-    for i in ["quiet", "verbose", "help" ]:
+    Arguments = [('n', "no-action", "Julia::Options::No-Action"),
+                 ('q', "quiet", "Julia::Options::Quiet"),
+                 ('v', "verbose", "Julia::Options::Verbose"),
+                 ('h', "help", "Julia::Options::Help")];
+    for i in [ "no-action", "quiet", "verbose", "help" ]:
        if not Cnf.has_key("Julia::Options::%s" % (i)):
            Cnf["Julia::Options::%s" % (i)] = "";
 
@@ -68,23 +70,17 @@ def main ():
 
     if Options["Help"]:
         usage();
-    if not arguments:
-        utils.warn("julia needs the name of the passwd file to sync with as an argument.");
-        usage(1);
-    elif len(arguments) > 1:
-        utils.warn("julia only takes one non-option argument, the passwd file to sync with.");
+    elif arguments:
+        utils.warn("julia takes no non-option arguments.");
         usage(1);
 
-    passwd = arguments[0];
     projectB = pg.connect(Cnf["DB::Name"], Cnf["DB::Host"], int(Cnf["DB::Port"]));
-    valid_gid = Cnf.get("Julia::ValidGID","");
+    valid_gid = int(Cnf.get("Julia::ValidGID",""));
 
     passwd_unames = {};
-    passwd_file = utils.open_file(passwd);
-    for line in passwd_file.readlines():
-        split = string.split(line, ':');
-        uname = split[0];
-        gid = split[3];
+    for entry in pwd.getpwall():
+        uname = entry[0];
+        gid = entry[3];
         if valid_gid and gid != valid_gid:
             if Options["Verbose"]:
                 print "Skipping %s (GID %s != Valid GID %s)." % (uname, gid, valid_gid);
@@ -99,8 +95,8 @@ def main ():
         postgres_unames[uname] = "";
 
     known_postgres_unames = {};
-    for i in string.split(Cnf.get("Julia::KnownPostgres",""),","):
-        uname = string.strip(i);
+    for i in Cnf.get("Julia::KnownPostgres","").split(","):
+        uname = i.strip();
         known_postgres_unames[uname] = "";
 
     keys = postgres_unames.keys()
@@ -115,7 +111,8 @@ def main ():
         if not postgres_unames.has_key(uname):
             if not Options["Quiet"]:
                 print "Creating %s user in Postgres." % (uname);
-            q = projectB.query('CREATE USER "%s"' % (uname));
+            if not Options["No-Action"]:
+                q = projectB.query('CREATE USER "%s"' % (uname));
 
 #######################################################################################