$protodir="/moira/dotfiles";
$quota=1;
-%vtypes_ATHENA_MIT_EDU =
- ("ACTIVITY", "activity",
- "APROJ", "aproj",
- "AREF", "aref",
- "CONTRIB", "contrib",
- "COURSE", "course",
- "HOMEDIR", "user",
- "PROJECT", "project",
- "REF", "ref",
- "SW", "sw",
- "SYSTEM", "system",
- "UROP", "urop",
- );
-
%proc =
("ATHENA.MIT.EDU", 'athena_proc' );
$vtype = eval "\$vtypes_$c{$type}";
die "Cannot create $type volumes in $cell\n" unless $vtype;
$vname = $vtype . "." . $locker;
-
-# Find free space
-($asrv,$apart) = &afs_find($cell,$type,$quota);
-die "Unable to find space to create $vname in $cell\n" unless ($asrv&&$apart);
-
-# Create volume
-system("$vos create $asrv $apart $vname -cell $cell >/dev/null") &&
- &fatal("Unable to create $vname in $cell");
+$vname =~ s/[^-A-Za-z0-9_.]//g; # strip out illegal characters
+
+# Find free space/Create volume
+$tries = 0; $code = 1;
+while ($tries<3 && $code) {
+ ($asrv,$apart) = &afs_find($cell,$type,$quota,@except);
+ die "Unable to find space to create $vname in $cell\n" unless ($asrv&&$apart);
+ $code = system("$vos create $asrv $apart $vname -cell $cell >/dev/null");
+ push(@except, $asrv);
+ $tries++;
+}
+&fatal("Unable to create $vname in $cell") if ($code); # Too many create errors
push(@clean, "$vos remove $asrv $apart $vname -cell $cell >/dev/null");
# Create mountpoint and set quota
$path =~ s:^/afs/([^.]):/afs/.\1:;
-system("$fs checkb >/dev/null; $fs mkm $path $vname");
+system("$fs checkv >/dev/null; $fs mkm $path $vname");
&fatal("Unable to create $path") if ($?);
push(@clean, "$fs rmm $path");
close(FS);
&fatal("Can't get information about $p") if ($?);
@tmp = (split(/ /,$_));
-system("$vos release $tmp[$#tmp] -cell $cell >/dev/null") &&
- &fatal("Can't release $tmp[$#tmp] in cell $cell");
+if ($tmp[$#tmp] !~ /user\../) {
+ system("$vos release $tmp[$#tmp] -cell $cell >/dev/null") &&
+ &fatal("Can't release $tmp[$#tmp] in cell $cell");
+}
&afs_quota_adj($cell,$asrv,$apart,$quota);
exit(0);
# CONTRIB <user> all system:anyuser rl
# COURSE <user> all <group> all system:facdev all system:authuser rl
# HOMEDIR <user> all
+ # LEASE <user> all
# PROJECT <user> all <group> all
# REF <user> all system:anyuser rl
# SW <user> all system:swmaint all system:authuser rl
push(@acl,"system:swmaint all") if ($type =~ /^(SW)/);
push(@acl,"system:administrators all") if ($type =~ /^(SYSTEM)/);
push(@acl,"$user all")
- if ($uid != 0 && $type =~ /^(ACTIVITY|APROJ|AREF|CONTRIB|COURSE|HOMEDIR|PROJECT|REF|SW|UROP)/);
+ if ($uid != 0 && $type =~ /^(ACTIVITY|APROJ|AREF|CONTRIB|COURSE|HOMEDIR|LEASE|PROJECT|REF|SW|UROP)/);
push(@acl,"system:$group all")
if ($gid != 0 && $type =~ /^(ACTIVITY|APROJ|COURSE|PROJECT|UROP)/);
push(@acl,"system:$group rl") if ($gid != 0 && $type =~ /^(AREF)/);