1
2
3
4
5
6
7
8
9
10
11
12 import sys
13 import os
14 import re
15 from certificate import getCertificateSubject
16 from userManagement import UserDB
17 from directoryManagement import Collections
18
19
20
21
22 _defaultPlatform = 'slc3_gcc323'
23 _defaultExternalHome = "/afs/cern.ch/sw/ganga/external"
24 _externalPackage = {'name':'Optik', 'version': '1.4.1',
25 'syspath': 'lib/python2.2/site-packages',
26 'maxHexVersion': '0x20300f0'}
27
28 DEBUG = False
29
30
31
33 ss = subject.split('/')
34 if len(ss) < 2:
35 return subject
36 else:
37 ss = ', '.join(ss[1:])
38 ss = re.sub(r'=(?!\s+)', '= ', ss)
39 ss = re.sub(r'(?<!\s)=', ' =', ss)
40 return ss
41
42
43 -def create(user,
44 cert_subject = '',
45 cert_path = '',
46 cert_file = '',
47 home_dir = '',
48 **kwds):
49
50
51 udb = UserDB(**kwds)
52 try:
53 udb.userCreate(user, password = 'ganga')
54 except Exception, e:
55 print str(e)
56 return
57 try:
58 if not cert_subject:
59 if cert_path == '':
60 cert_path = '/afs/cern.ch/user/'+ user[0] + '/' + user + '/.globus'
61 cert_subject = getCertificateSubject(cert_path, cert_file)
62 if cert_subject:
63 udb.userSubjectAdd(user, translateSubject(cert_subject))
64 else:
65 print "WARNING: Can't get certificate subject. \n\
66 Certificate subject was't mapped to the user " + user
67 except Exception, e:
68 print str(e)
69
70
71 cls = Collections(**kwds)
72 if home_dir == '':
73 home_dir = '/users/' + user
74 try:
75 cls.createDir(home_dir)
76 except Exception, e:
77 print str(e)
78 return
79 try:
80 cls.chown(home_dir, user)
81 cls.chmod(home_dir, 'rwx')
82 except Exception, e:
83 print str(e)
84 return
85
86
88 if sys.hexversion < _externalPackage['maxHexVersion']:
89 path = os.path.join(_defaultExternalHome,
90 _externalPackage['name'],
91 _externalPackage['version'],
92 _defaultPlatform,
93 _externalPackage['syspath'])
94 sys.path.insert(1,path)
95
96 from optparse import OptionParser
97 parser = OptionParser()
98 parser.add_option("--cert-subject", dest = "cert_subject",
99 help = "subject of user certificate")
100 parser.add_option("--cert-file", dest = "cert_file",
101 help = "name of user certificate file")
102 parser.add_option("--cert-path", dest = "cert_path",
103 help = "path where to look for the user certificate")
104 parser.add_option("--home-dir", dest = "home_dir",
105 help = "name of user home directory in the repository")
106 parser.add_option("--host", dest = "host",
107 help = "url of the repository server")
108 parser.add_option("--port", dest = "port", type = "int",
109 help = "port number")
110 parser.add_option("--login", dest = "login",
111 help = "login name for the administrator")
112 parser.add_option("--password", dest = "password",
113 help = "administrator's password")
114
115 (options, args) = parser.parse_args()
116
117 if len(args) > 0:
118 user = args[0]
119 else:
120 print "No user name was given. Exiting..."
121 return
122
123 kwargs = {}
124 for o in ['cert_subject','cert_file','cert_path','home_dir','host','port','login','password']:
125 v = getattr(options, o)
126 if v:
127 kwargs[o] = v
128
129 create(user, **kwargs)
130
131
132
133 usage = """
134 """
135
136 if __name__ == '__main__':
137 main()
138