--- /dev/null
+#!/usr/bin/env python
+
+# Sync PostgreSQL users with system users
+# Copyright (C) 2001, 2002 James Troup <james@nocrew.org>
+# $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
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+################################################################################
+
+# <aj> ARRRGGGHHH
+# <aj> what's wrong with me!?!?!?
+# <aj> i was just nice to some mormon doorknockers!!!
+# <Omnic> AJ?!?!
+# <aj> i know!!!!!
+# <Omnic> I'm gonna have to kick your ass when you come over
+# <Culus> aj: GET THE HELL OUT OF THE CABAL! :P
+
+################################################################################
+
+import pg, pwd, sys;
+import utils;
+import apt_pkg;
+
+################################################################################
+
+Cnf = None;
+projectB = None;
+################################################################################
+
+def usage (exit_code=0):
+ 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"""
+ sys.exit(exit_code)
+
+################################################################################
+
+def main ():
+ global Cnf, projectB;
+
+ Cnf = utils.get_conf()
+
+ 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)] = "";
+
+ arguments = apt_pkg.ParseCommandLine(Cnf,Arguments,sys.argv);
+ Options = Cnf.SubTree("Julia::Options")
+
+ if Options["Help"]:
+ usage();
+ elif arguments:
+ utils.warn("julia takes no non-option arguments.");
+ usage(1);
+
+ projectB = pg.connect(Cnf["DB::Name"], Cnf["DB::Host"], int(Cnf["DB::Port"]));
+ valid_gid = int(Cnf.get("Julia::ValidGID",""));
+
+ passwd_unames = {};
+ 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);
+ continue;
+ passwd_unames[uname] = "";
+
+ postgres_unames = {};
+ q = projectB.query("SELECT usename FROM pg_user");
+ ql = q.getresult();
+ for i in ql:
+ uname = i[0];
+ postgres_unames[uname] = "";
+
+ known_postgres_unames = {};
+ for i in Cnf.get("Julia::KnownPostgres","").split(","):
+ uname = i.strip();
+ known_postgres_unames[uname] = "";
+
+ keys = postgres_unames.keys()
+ keys.sort();
+ for uname in keys:
+ if not passwd_unames.has_key(uname)and not known_postgres_unames.has_key(uname):
+ print "W: %s is in Postgres but not the passwd file or list of known Postgres users." % (uname);
+
+ keys = passwd_unames.keys()
+ keys.sort();
+ for uname in keys:
+ if not postgres_unames.has_key(uname):
+ if not Options["Quiet"]:
+ print "Creating %s user in Postgres." % (uname);
+ if not Options["No-Action"]:
+ q = projectB.query('CREATE USER "%s"' % (uname));
+
+#######################################################################################
+
+if __name__ == '__main__':
+ main()
+