#!/usr/bin/env python
-# Sync PostgreSQL with (LDAP-generated) passwd file
-# Copyright (C) 2001 James Troup <james@nocrew.org>
-# $Id: julia,v 1.1 2001-09-13 23:55:51 troup Exp $
+# 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
# 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!!!
################################################################################
-import os, pg, string, sys;
+import pg, pwd, sys;
import utils;
import apt_pkg;
projectB = None;
################################################################################
-def usage (exit_code):
- print """Usage: julia [OPTION]... PASSWD_FILE
-Sync postgres' pg_shadow with PASSWD_FILE.
+def usage (exit_code=0):
+ print """Usage: julia [OPTION]...
+Sync PostgreSQL's users with system users.
- -v, --verbose explain what is being done
- -h, --help display this help and exit"""
+ -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;
- apt_pkg.init();
+ Cnf = utils.get_conf()
- Cnf = apt_pkg.newConfiguration();
- apt_pkg.ReadConfigFileISC(Cnf,utils.which_conf_file());
-
- Arguments = [('q',"quiet","Julia::Options::Quiet"),
- ('v',"verbose","Julia::Options::Verbose"),
- ('D',"debug","Julia::Options::Debug", "IntVal"),
- ('h',"help","Julia::Options::Help"),
- ('V',"version","Julia::Options::Version")];
+ 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(0);
- if 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.");
+ usage();
+ 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);
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()
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));
#######################################################################################