#!/usr/local/bin/perl -w
#!/bin/bash

#---------------------------------------------------------------
#   lk.pl by K
#
#   The purpose of this program is to search a users personal 
#   directory structure to find, at least, read permissions on
#   any directory contained therein and print the information
#   out.
#
#   Modifications: option to copy contents of any or all
#                  directories found, ablility to input multiple
#		   user names.
#
#   Version 2.1 beta
#---------------------------------------------------------------


if ($#ARGV < 0) {
   print "List specified user directories with",
         "system:anyuser rl permissions.\nUsage:",
	 "$0 user1 user2 ...\n";
   exit 1;	 
}
foreach $user (@ARGV){
   $bool = 1;
   chomp ($user);
   $s = `/usr/athena/bin/hes $user filsys`;
   ($basedir) = ($s =~ /(\/afs.*) w/);

   if ($basedir){  
      $s = `/usr/afsws/bin/fs la $basedir 2> /dev/null`;
   }   
   else {
      print "\n$user is a bad username.\n\n";
      $bool = 0;
   }

   if ($basedir && $s !~ /(system:anyuser.*)/) {
      print "\n$user does not have system:anyuser access granted. \n\n";
      $bool = 0;
   }
      
   if($bool) {
      
      @s = `find $basedir -type d 2> /dev/null`;
      print "\nBase directory: $basedir\n\n";
      $num = 0;
      foreach $dir (@s) {  
	 chomp ($dir);
         $FSaccess = `/usr/afsws/bin/fs la $dir 2> /dev/null`;   
         ($permissions) = ($FSaccess =~ /(system:anyuser.*)/);
         if ($permissions) {
            chomp ($permissions);
            if ($permissions =~ /rl/){
	       push @dir_list, $dir;
	       if( $dir ne $basedir){ ($dir) = (($dir) =~ (/$basedir(.*)/))};
               ($who, $perm) = split(' ',$permissions);
   	       push @main_list, $num.") ".$dir." - ".$who." ".$perm."\n";
               $num++;
	    }	  	 
         }#if  
      }#foreach
      if ( $num == 0 ){ 
         print "\nNo read access permissions in $basedir directory tree.\n\n"; 
      }
      else {
         foreach $list_item (@main_list){
	    print $list_item;
	 }
	 $ans = 'a';
         until ($ans eq 'c' || $ans eq 'x' ) {
            print "\n(c)opy contents or e(x)it? ";
            chomp ($ans = <STDIN>);
         }
         if ($ans eq 'c'){
            $bool = 1;
	    while ($bool){ 
	       $ans = 'z';
	       until ($ans eq 'x' || $ans eq 'a' || 
	             (($ans =~ /[0-9]+/ && $ans !~ /[^0-9]/) && 
	             ($ans <= $#dir_list && $ans >= 0))) {
                  print "Enter directory number, (a)ll, or e(x)it copy: ";
                  chomp ($ans = <STDIN>);   
               }   
               if ( $ans eq 'x' ) { $bool = 0; }
	       elsif ( $ans eq 'a' ) { 
	          `mkdir /tmp/$user 2> /dev/null`;
		  print "Copying all contents to /tmp/$user/\n";
		  foreach $trgt_dir (@dir_list){
		     $trgt_dir = $trgt_dir."/*";
		     `cp $trgt_dir /tmp/$user 2> /dev/null`;    
		  }
		  $bool = 0;
	       }
	       else {
	          $trgt_dir = $dir_list[$ans]."/*";
		  $dot_files = $dir_list[$ans]."/.*";
		  `mkdir /tmp/$user 2> /dev/null`;
		  `cp $trgt_dir /tmp/$user 2> /dev/null`;
		  `cp $dot_files /tmp/$user 2> /dev/null`; 
		  print "Copying contents to /tmp/$user/\n";  
	       }
	    }#while
         }#if
      }#else	 
   }#if	 
}#foreach

   
