#!/usr/bin/perl
#
-# Copyright (C)1995-9 Ian Jackson <ijackson@chiark.greenend.org.uk>
+# Copyright (C) 1995-9, 2003 Ian Jackson <ijackson@chiark.greenend.org.uk>
# Copyright (C) 1999, 2003
-# Chancellor Masters and Scholars of the University of Cambridge
+# Chancellor Masters and Scholars of the University of Cambridge
#
-# Hacked by Ben Harris <bjh21@cam.ac.uk> in 1999 and 2003 for Unix
+# Improved by Ben Harris <bjh21@cam.ac.uk> in 1999 and 2003 for Unix
# Support's own nefarious purposes.
#
# This is free software; you can redistribute it and/or modify it
@ARGV || push(@ARGV,'--info');
$callinguser= exists $ENV{'USERV_UID'} ? $ENV{'USERV_UID'} : $<;
-$callingname = exists $ENV{'USERV_USER'} ? $ENV{'USERV_USER'} : getpwuid($<);
%opt= ('user-create','0',
'user-create-minunameu','5',
if ($ARGV[0] eq '--create') {
$opt{'user-create'} || !$callinguser ||
- ($opt{'admin-group'} &&
- (getgrnam($opt{'admin-group'}))[3] =~ /(^| )$callingname( |$)/) ||
&quit("group creation by users disabled by administrator");
length($groupname) <= 8 || &quit("group names must be 8 chars or fewer");
$!=0; (@pw= getpwuid($callinguser))
}
&weare($owner) || grep(&weare($_),@managers) || !$callinguser ||
- ($opt{'admin-group'} &&
- (getgrnam($opt{'admin-group'}))[3] =~ /(^| )$callingname( |$)/) ||
&quit("you may not manage $groupname");
$action= 'none';
&save($opt{'group-file'},@groupfile);
&save($opt{'grouplist-file'},@grouplist);
if ($opt{'finish-command'}) {
- !system($opt{'finish-command'}) || &quit("finish-command: $!");
+ !system($opt{'finish-command'}) || &quit("finish-command: $?");
}
unlink($opt{'gtmp-file'}) || &quit("unlock group (remove gtmp): $!");
&p_out;
}
sub lock {
- # NFS-safe Locking per Linux open(2)
- my($hostname) = `hostname`;
- chomp($hostname);
- my($hitching_post) = "$opt{'gtmp-file'}.$hostname.$$";
- open(LOCK, ">$hitching_post") || die "$hitching_post: $!";
- close(LOCK);
- link($hitching_post, $opt{'gtmp-file'});
- if ((stat($hitching_post))[3] != 2) {
- close(OUT);
- unlink($hitching_post);
- &quit("group file locked -- giving up...");
- }
- unlink($hitching_post);
-# link($opt{'group-file'},$opt{'gtmp-file'}) || &quit("create gtmp: $!");
+ link($opt{'group-file'},$opt{'gtmp-file'}) || &quit("create gtmp: $!");
$locked++;
}