#!/usr/bin/env python # mkapachepw.py # Copyright (c) 2005 TundraWare Inc. All Rights Reserved. # For Updates See: http://www.tundraware.com/Software/mkapachepw # Program Information PROGNAME = "mkapachepw" RCSID = "$Id: mkapachepw.py,v 1.102 2005/04/01 18:17:55 root Exp $" VERSION = RCSID.split()[2] # Copyright Information CPRT = "(c)" DATE = "2005" OWNER = "TundraWare Inc." RIGHTS = "All Rights Reserved" COPYRIGHT = "Copyright %s %s %s %s. " % (CPRT, DATE, OWNER, RIGHTS) #----------------------------------------------------------# # Variables User Might Change # #----------------------------------------------------------# STARTUID = 100 # User IDs below this ignored STARTGID = 100 # Group IDS below this ignored #------------------- Nothing Below Here Should Need Changing ------------------# #----------------------------------------------------------# # Imports # #----------------------------------------------------------# import getopt import grp import os import pwd import sys import tconfpy #----------------------------------------------------------# # Aliases & Redefinitions # #----------------------------------------------------------# #----------------------------------------------------------# # Constants & Literals # #----------------------------------------------------------# ##### # Constants ##### ##### # Literals ##### #----------------------------------------------------------# # Prompts, & Application Strings # #----------------------------------------------------------# ##### # Error Messages ##### eERROR = "ERROR" ##### # Informational Messages ##### ##### # Usage Prompts ##### 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", ] #----------------------------------------------------------# # Global Variables & Data Structures # #----------------------------------------------------------# CFGFILE = "" # Default is no config file DEBUG = False # Request debug output #--------------------------- Code Begins Here ---------------------------------# #----------------------------------------------------------# # Object Base Class Definitions # #----------------------------------------------------------# #----------------------------------------------------------# # Supporting Function Definitions # #----------------------------------------------------------# ##### # Print An Error Message ##### def ErrorMsg(emsg): print PROGNAME + " " + VERSION + " " + eERROR + ": " + emsg # End of 'ErrorMsg()' ##### # Print Usage Information ##### def Usage(): for line in uTable: print line # End of 'Usage()' #----------------------------------------------------------# # 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()) if envopt: OPTIONS = envopt.split() + OPTIONS try: 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": Usage() sys.exit(0) if opt == "-v": print RCSID sys.exit(0) # Process the configuration file, if any if CFGFILE: retval = tconfpy.ParseConfig(CFGFILE, CallingProgram="%s %s " % (PROGNAME, VERSION)) # 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 "%s: %s" % (x, " ".join(groups[x])) print