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

« back to all changes in this revision

Viewing changes to makeuser.py

  • Committer: mattgiuca
  • Date: 2008-07-15 07:19:34 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:875
Added "migrations" directory, which contains incremental database update
    scripts.
Updated users.sql, uniqueness key on offering table.
Added migration matching this update to the migrations directory. Mm handy!

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