################################################################################
import pwd
+import grp
import sys
import re
import apt_pkg
if not cnf.has_key("Import-Users-From-Passwd::Options::%s" % (i)):
cnf["Import-Users-From-Passwd::Options::%s" % (i)] = ""
- arguments = apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv)
- Options = cnf.SubTree("Import-Users-From-Passwd::Options")
+ arguments = apt_pkg.parse_commandline(cnf.Cnf, Arguments, sys.argv)
+ Options = cnf.subtree("Import-Users-From-Passwd::Options")
if Options["Help"]:
usage()
usage(1)
session = DBConn().session()
- valid_gid = int(cnf.get("Import-Users-From-Passwd::ValidGID",""))
+ valid_gid = cnf.get("Import-Users-From-Passwd::ValidGID", "")
+ if valid_gid:
+ debiangrp = grp.getgrnam(valid_gid).gr_mem
+ else:
+ debiangrp = []
passwd_unames = {}
for entry in pwd.getpwall():
uname = entry[0]
- gid = entry[3]
- if valid_gid and gid != valid_gid:
+ if uname not in debiangrp:
if Options["Verbose"]:
- print "Skipping %s (GID %s != Valid GID %s)." % (uname, gid, valid_gid)
+ print "Skipping %s (Not in group %s)." % (uname, valid_gid)
continue
passwd_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)
+ if not passwd_unames.has_key(uname) and not known_postgres_unames.has_key(uname):
+ print "I: Deleting %s from Postgres, no longer in passwd or list of known Postgres users" % (uname)
+ q = session.execute('DROP USER "%s"' % (uname))
keys = passwd_unames.keys()
keys.sort()
# NB: I never figured out how to use a bind parameter for this query
# XXX: Fix this as it looks like a potential SQL injection attack to me
# (hence the safe_name match we do)
- q = session.execute('CREATE USER "%s"' % (uname))
+ try:
+ q = session.execute('CREATE USER "%s"' % (uname))
+ session.commit()
+ except Exception as e:
+ utils.warn("Could not create user %s (%s)" % (uname, str(e)))
+ session.rollback()
else:
print "NOT CREATING USER %s. Doesn't match safety regex" % uname