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

« back to all changes in this revision

Viewing changes to ivle/makeuser.py

  • Committer: Matt Giuca
  • Date: 2009-05-12 15:08:45 UTC
  • mto: This revision was merged to the branch mainline in revision 1247.
  • Revision ID: matt.giuca@gmail.com-20090512150845-fg480l1qh7le0ypz
ivle-fetchsubmissions: In a stunningly awful hack, detects pre-Python2.6 and
    changes make_zip to behave correctly for the awful restriction in zipfile
    that you can't add directories.
    (Stops trying to add directories, and hacks in the footer writing if there
    is an empty file).

Show diffs side-by-side

added added

removed removed

Lines of Context:
102
102
                    User.login,
103
103
                    User.id == Enrolment.user_id,
104
104
                    Enrolment.offering_id == offeringid,
105
 
                    Enrolment.role.is_in((u'tutor', u'lecturer')),
106
 
                    Enrolment.active == True,
 
105
                    Enrolment.role.is_in((u'tutor', u'lecturer'))
107
106
                )
108
107
            )
109
108
 
186
185
                    User.login,
187
186
                    User.id == Enrolment.user_id,
188
187
                    Enrolment.offering_id == offeringid,
189
 
                    Enrolment.role.is_in((u'tutor', u'lecturer')),
190
 
                    Enrolment.active == True,
 
188
                    Enrolment.role.is_in((u'tutor', u'lecturer'))
191
189
                )
192
190
            )
193
191
 
213
211
    """
214
212
    # filename is, eg, /var/lib/ivle/svn/ivle.auth
215
213
    filename = config['paths']['svn']['auth_ivle']
 
214
    passwd = hashlib.md5(uuid.uuid4().bytes).hexdigest()
216
215
    if os.path.exists(filename):
217
216
        create = ""
218
217
    else:
219
218
        create = "c"
220
219
 
221
220
    user = User.get_by_login(store, login)
222
 
 
223
 
    if user.svn_pass is None:
224
 
        passwd = hashlib.md5(uuid.uuid4().bytes).hexdigest()
225
 
        user.svn_pass = unicode(passwd)
 
221
    user.svn_pass = unicode(passwd)
226
222
 
227
223
    res = subprocess.call(['htpasswd', '-%smb' % create,
228
 
                           filename, login, user.svn_pass])
 
224
                           filename, login, passwd])
229
225
    if res != 0 and throw_on_error:
230
226
        raise Exception("Unable to create ivle-auth for %s" % login)
231
227
 
233
229
    if create == "c":
234
230
        chown_to_webserver(filename)
235
231
 
236
 
    return user.svn_pass
 
232
    return passwd
237
233
 
238
234
def make_jail(user, config, force=True):
239
235
    """Create or update a user's jail.
262
258
        os.mkdir(tempdir)
263
259
    userdir = os.path.join(jail_src_base, user.login)
264
260
    homedir = os.path.join(userdir, 'home')
265
 
    tmpdir = os.path.join(userdir, 'tmp')
266
261
    userhomedir = os.path.join(homedir, user.login)   # Return value
267
262
 
268
263
    if os.path.exists(userdir):
271
266
        # User jail already exists. Blow it away but preserve their home
272
267
        # directory. It should be all that is there anyway, but you never
273
268
        # know!
274
 
        # Ignore warnings about the use of tempnam
 
269
        # Ignore warnings about the use of tmpnam
275
270
        warnings.simplefilter('ignore')
276
271
        homebackup = os.tempnam(tempdir)
277
272
        warnings.resetwarnings()
280
275
        # NOTE that shutil.move changed in Python 2.6, it now moves a
281
276
        # directory INTO the target (like `mv`), which it didn't use to do.
282
277
        # This code works regardless.
283
 
        shutil.move(userhomedir, homebackup)
 
278
        shutil.move(homedir, homebackup)
284
279
        shutil.rmtree(userdir)
285
 
        os.makedirs(homedir)
286
 
        shutil.move(homebackup, userhomedir)
 
280
        os.makedirs(userdir)
 
281
        shutil.move(homebackup, homedir)
287
282
        # Change the ownership of all the files to the right unixid
288
283
        logging.debug("chown %s's home directory files to uid %d"
289
284
            %(user.login, user.unixid))
301
296
    make_ivle_conf(user.login, userdir, user.svn_pass, config)
302
297
    make_etc_passwd(user.login, userdir, config['paths']['jails']['template'],
303
298
                    user.unixid)
304
 
    os.makedirs(tmpdir)
305
 
    os.chmod(tmpdir, 01777)
306
299
 
307
300
    return userhomedir
308
301
 
317
310
    @param svn_pass: User's SVN password.
318
311
    @param sys_config: An ivle.config.Config object (the system-wide config).
319
312
    """
320
 
    conf_path = os.path.join(user_jail_dir, "home/.ivle.conf")
321
 
    if not os.path.exists(os.path.dirname(conf_path)):
322
 
        os.makedirs(os.path.dirname(conf_path))
 
313
    conf_path = os.path.join(user_jail_dir, "etc/ivle/ivle.conf")
 
314
    os.makedirs(os.path.dirname(conf_path))
323
315
 
324
316
    # In the "in-jail" version of conf, we don't need MOST of the details
325
317
    # (it would be a security risk to have them here).
344
336
    Creates /etc/passwd in the given user's jail. This will be identical to
345
337
    that in the template jail, except for the added entry for this user.
346
338
    """
347
 
    template_passwd_path = os.path.join(template_dir, "home/.passwd")
348
 
    passwd_path = os.path.join(user_jail_dir, "home/.passwd")
 
339
    template_passwd_path = os.path.join(template_dir, "etc/passwd")
 
340
    passwd_path = os.path.join(user_jail_dir, "etc/passwd")
349
341
    passwd_dir = os.path.dirname(passwd_path)
350
342
    if not os.path.exists(passwd_dir):
351
343
        os.makedirs(passwd_dir)