]> andersk Git - moira.git/blobdiff - incremental/afs_create.pl
Moved %vtypes declaration to afs_utils.pl
[moira.git] / incremental / afs_create.pl
index 0929fc3bfc3db7774244510f40b7f2a49aa6528f..e5a33f851c740d7b3bbccbf227ffec335471ec51 100644 (file)
@@ -1,4 +1,4 @@
-#!/afs/athena/contrib/perl/perl
+#!/usr/athena/bin/perl
 # Usage: afs_create locker type cell path quota user group
 
 require "/moira/bin/afs_utils.pl";
@@ -6,19 +6,6 @@ require "/moira/bin/afs_utils.pl";
 $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",
-     );
-
 %proc =
     ("ATHENA.MIT.EDU", 'athena_proc' );
 
@@ -32,6 +19,7 @@ die "Usage: $0 locker type cell path user group\n" if (@ARGV != 6);
 $vtype = eval "\$vtypes_$c{$type}";
 die "Cannot create $type volumes in $cell\n" unless $vtype;
 $vname = $vtype . "." . $locker;
+$vname =~ s/[^-A-Za-z0-9_.]//g;                # strip out illegal characters
 
 # Find free space
 ($asrv,$apart) = &afs_find($cell,$type,$quota);
@@ -44,11 +32,11 @@ 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");
 
-# Obtain user/group information
+# Obtain user/group information (uid >= 0, gid <= 0)
 $uid = $gid = 0;
 open(PTS, "$pts ex $user -cell $cell|");
 chop($_ = <PTS>);
@@ -59,7 +47,6 @@ open(PTS, "$pts ex system:$group -cell $cell|");
 chop($_ = <PTS>);
 close(PTS);
 ($gid,$gid,$gid,$gid) = split(/[:,] /, $_) unless ($?);
-$gid = 0-$gid;
 
 # Dispatch to the cell-specific creation routines
 eval "&$proc{$cell}";
@@ -110,21 +97,22 @@ sub athena_proc
     # REF       <user> all system:anyuser rl
     # SW        <user> all system:swmaint all system:authuser rl
     # SYSTEM    system:administrators all system:anyuser rl
+    # UROP     <user> all <group> all system:facdev all system:authuser rl
     #
     # Notes:
     # 1. All directories also have "system:expunge ld".
 
     @acl=("system:expunge ld");
-    push(@acl,"system:facdev all") if ($type =~ /^(COURSE)/);
+    push(@acl,"system:facdev all") if ($type =~ /^(COURSE|UROP)/);
     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)/);
+       if ($uid != 0 && $type =~ /^(ACTIVITY|APROJ|AREF|CONTRIB|COURSE|HOMEDIR|PROJECT|REF|SW|UROP)/);
     push(@acl,"system:$group all")
-       if ($gid != 0 && $type =~ /^(ACTIVITY|APROJ|COURSE|PROJECT)/);
-    push(@acl,"system:$group rl") if ($gid != -1 && $type =~ /^(AREF)/);
+       if ($gid != 0 && $type =~ /^(ACTIVITY|APROJ|COURSE|PROJECT|UROP)/);
+    push(@acl,"system:$group rl") if ($gid != 0 && $type =~ /^(AREF)/);
     push(@acl,"system:authuser rl")
-       if ($type =~ /^(COURSE|SW)/);
+       if ($type =~ /^(COURSE|SW|UROP)/);
     push(@acl,"system:anyuser rl")
        if ($type =~ /^(ACTIVITY|APROJ|CONTRIB|REF|SYSTEM)/);
 
@@ -133,6 +121,14 @@ sub athena_proc
        warn "$locker: Unable to create OldFiles mountpoint\n" if ($?);
     }
 
+    if ($type =~ /ACTIVITY|APROJ|PROJECT/) {
+       chown($gid,0,$path) ||
+           die "Unable to set volume ownership\n";
+    } elsif ($type =~ /HOMEDIR|UROP/) {
+       chown($uid,0,$path) ||
+           die "Unable to set volume ownership\n";
+    }
+
     if ($type eq "HOMEDIR") {
        die "Unable to get uid for user\n" unless ($uid);
 
@@ -159,9 +155,8 @@ sub athena_proc
            close(IN);
            chown($uid,0,"$path/$i");
        }
-       chown($uid,0,$path) && 
-           system("$fs sa $path @acl system:anyuser l -clear") &&
-               die "Unable to set acl on top-level directory\n";
+       system("$fs sa $path @acl system:anyuser l -clear") &&
+           die "Unable to set acl on top-level directory\n";
        return;
     }
 
This page took 0.035688 seconds and 4 git commands to generate.