diff --git a/mkapachepw.py b/mkapachepw.py index 4e4a46a..e013e4e 100755 --- a/mkapachepw.py +++ b/mkapachepw.py @@ -6,7 +6,7 @@ # Program Information PROGNAME = "mkapachepw" -RCSID = "$Id: mkapachepw.py,v 1.100 2005/03/31 23:12:16 tundra Exp $" +RCSID = "$Id: mkapachepw.py,v 1.101 2005/04/01 06:08:38 root Exp $" VERSION = RCSID.split()[2] # Copyright Information @@ -22,6 +22,8 @@ # Variables User Might Change # #----------------------------------------------------------# +STARTUID = 100 # User IDs below this ignored +STARTGID = 100 # Group IDS below this ignored #------------------- Nothing Below Here Should Need Changing ------------------# @@ -32,7 +34,9 @@ #----------------------------------------------------------# import getopt +import grp import os +import pwd import sys import tconfpy @@ -84,6 +88,7 @@ uTable = [PROGNAME + " " + VERSION + " - %s\n" % COPYRIGHT, "usage: " + PROGNAME + " [-fhv] where,\n", + " -d dump debug output", " -f file configuration file to use", " -h print this help information", " -v print detailed version information", @@ -94,8 +99,8 @@ # Global Variables & Data Structures # #----------------------------------------------------------# -CFGFILE = os.path.join(os.getenv("HOME"), "." + PROGNAME) # conf file - +CFGFILE = "" # Default is no config file +DEBUG = False # Request debug output #--------------------------- Code Begins Here ---------------------------------# @@ -136,8 +141,10 @@ # Program Entry Point # #----------------------------------------------------------# +##### # Command line processing - Process any options set in the # environment first, and then those given on the command line +##### OPTIONS = sys.argv[1:] envopt = os.getenv(PROGNAME.upper()) @@ -145,12 +152,14 @@ OPTIONS = envopt.split() + OPTIONS try: - opts, args = getopt.getopt(OPTIONS, '-f:hv') + opts, args = getopt.getopt(OPTIONS, '-df:hv') except getopt.GetoptError: Usage() sys.exit(1) for opt, val in opts: + if opt == "-d": + DEBUG = True if opt == "-f": CFGFILE=val if opt == "-h": @@ -160,17 +169,70 @@ print RCSID sys.exit(0) -# Process the configuration file -retval = tconfpy.ParseConfig(CFGFILE) +# Process the configuration file, if any -# Print any errors or warning generated by the parse +if CFGFILE: -for x in (retval.Errors, retval.Warnings): - for y in x: - y = "%s %s %s" % (PROGNAME, VERSION, " ".join(y.split()[2:])) - print y + retval = tconfpy.ParseConfig(CFGFILE, CallingProgram="%s %s " % (PROGNAME, VERSION)) -# If there were any errors, we're done -if retval.Errors: - sys.exit(0) + # Print any errors or warning generated by the parse + + for x in (retval.ErrMsgs, retval.WarnMsgs): + for y in x: + print y + + # If there were any errors, we're done + if retval.ErrMsgs: + sys.exit(0) + + +##### +# Build List Of Groups +##### + +groups = {} +gid2name = {} + +for group in grp.getgrall(): + gname, gpw, gid, gmembers = group[:4] + gid2name[gid] = gname + + groups[gname] = [] + for member in gmembers: + groups[gname].append(member) + +##### +# Build A List Of Users +##### + +users = {} + +for user in pwd.getpwall(): + + uname, pw, uid, gid = user[:4] + gname = gid2name[gid] + + users[uname] = pw + + if uname not in groups[gname]: + groups[gname].append(uname) + +##### +# Dump Results If Asked +##### + + +if DEBUG: + for x in users: + print x, users[x] + print + + + grlist = gid2name.keys() + grlist.sort() + + for y in grlist: + x = gid2name[y] + print x, groups[x] + print