~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to makeuser.py

  • Committer: mattgiuca
  • Date: 2008-02-15 04:45:12 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:472
db.py: No longer exceptions if password is not supplied.
makeuser: Converted explicit args into kwargs which are simply forwarded along
    to db. Makeuser db NO LONGER accepts "force" argument (which used to
    delete and replace login rows). This is dangerous, and we have removed the
    delete user functionality altogether - because we never delete users.
makeuser.py (script): Major change. Replaced the command-line interface so it
    now only takes 3 required arguments, and a bunch of optional arguments
    getopts style.
    All the arguments are specified at the top; the rest of the code works
    with these data structures so they are only specified in one place
    (including all the work of putting them into a dict and passing it to the
    database).
    Note that makeuser.py is a *second* point of control for the list of the
    login fields (the other is in db.DB.login_fields_list). This is by design,
    because there is a semantic difference between "what fields are in the db"
    and "what arguments should we accept on the command line".

Show diffs side-by-side

added added

removed removed

Lines of Context:
31
31
import os
32
32
import os.path
33
33
import pwd
 
34
import getopt
34
35
# Import modules from the website is tricky since they're in the www
35
36
# directory.
36
37
sys.path.append(os.path.join(os.getcwd(), 'www'))
37
38
import conf
38
 
import common.makeuser
39
 
 
40
 
if len(sys.argv) <= 6:
41
 
    print "Usage: python makeuser.py <username> <password> <email> " \
42
 
        "<nick> <fullname> <rolenm> [<studentid>]"
43
 
    sys.exit()
 
39
import common.makeuser, common.db
 
40
 
 
41
# Requireds and optionals will be used to display the usage message
 
42
# AND do argument processing
 
43
# The names here must correspond to the fields in the database.
 
44
requireds = ["login", "fullname", "rolenm"]
 
45
optionals = [
 
46
    ('p', 'password', "Cleartext password for this user"),
 
47
    ('n', 'nick', "Display name (defaults to <fullname>)"),
 
48
    ('e', 'email', "Email address"),
 
49
    ('s', 'studentid', "Student ID"),
 
50
]
 
51
 
 
52
if len(sys.argv) <= 3:
 
53
    # Nicely format the usage message using the optionals
 
54
    print ("Usage: python makeuser.py [OPTIONS] %s\n    OPTIONS"
 
55
        % ' '.join(['<%s>' % x for x in requireds]))
 
56
    for short, long, desc in optionals:
 
57
        t = "        -%s | --%s" % (short, long)
 
58
        print t + (' ' * max(28 - len(t), 2)) + desc
 
59
    sys.exit(1)
44
60
 
45
61
if os.getuid() != 0:
46
62
    print "Must run makeuser.py as root."
47
 
    sys.exit()
48
 
 
49
 
username = sys.argv[1]
50
 
password = sys.argv[2]
51
 
email = sys.argv[3]
52
 
nick = sys.argv[4]
53
 
fullname = sys.argv[5]
54
 
rolenm = sys.argv[6]
55
 
if len(sys.argv) > 7:
56
 
    studentid = sys.argv[7]
57
 
else:
58
 
    studentid = None
59
 
 
60
 
try:
 
63
    sys.exit(1)
 
64
 
 
65
shorts = ''.join([o[0] + ":" for o in optionals])
 
66
longs = [o[1] + "=" for o in optionals]
 
67
opts, args = getopt.gnu_getopt(sys.argv[1:], shorts, longs)
 
68
opts = dict(opts)
 
69
 
 
70
# Get the dictionary of fields from opts and args
 
71
dict = {}
 
72
for i in range(0, len(requireds)):
 
73
    dict[requireds[i]] = args[i]
 
74
for short, long, _ in optionals:
 
75
    try:
 
76
        dict[long] = opts['-' + short]
 
77
    except KeyError:
 
78
        try:
 
79
            dict[long] = opts['--' + long]
 
80
        except KeyError:
 
81
            pass
 
82
login = dict['login']
 
83
if 'nick' not in dict:
 
84
    dict['nick'] = dict['fullname']
 
85
 
 
86
if True:
61
87
    # Resolve the user's username into a UID
62
88
    # Create the user if it does not exist
63
89
    try:
64
 
        (_,_,uid,_,_,_,_) = pwd.getpwnam(username)
 
90
        (_,_,uid,_,_,_,_) = pwd.getpwnam(login)
65
91
    except KeyError:
66
 
        if os.system("useradd '%s'" % username) != 0:
 
92
        if os.system("useradd '%s'" % login) != 0:
67
93
            raise Exception("Failed to add Unix user account")
68
94
        try:
69
 
            (_,_,uid,_,_,_,_) = pwd.getpwnam(username)
 
95
            (_,_,uid,_,_,_,_) = pwd.getpwnam(login)
70
96
        except KeyError:
71
97
            raise Exception("Failed to add Unix user account")
 
98
    dict['unixid'] = uid
72
99
    # Make the user's jail
73
 
    common.makeuser.make_jail(username, uid)
 
100
    common.makeuser.make_jail(login, uid)
74
101
    # Make the user's database entry
75
 
    common.makeuser.make_user_db(username, password, uid, email, nick,
76
 
        fullname, rolenm, studentid)
77
 
except Exception, message:
78
 
    print "Error: " + str(message)
79
 
    sys.exit(1)
 
102
    common.makeuser.make_user_db(**dict)
 
103
#except Exception, message:
 
104
#    print "Error: " + str(message)
 
105
#    sys.exit(1)
80
106
 
81
 
print "Successfully created user %s (%s)." % (username, fullname)
 
107
print "Successfully created user %s (%s)." % (login, dict['fullname'])