Diff for /loncom/build/add_domain_coordinator_privilege.pl between versions 1.4 and 1.8

version 1.4, 2008/01/03 21:16:11 version 1.8, 2012/08/17 22:43:03
Line 79  use LONCAPA; Line 79  use LONCAPA;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::loncommon;  use Apache::loncommon;
 use Apache::lonlocal;  use Apache::lonlocal;
 &Apache::lonlocal::get_language_handle();  use Storable qw(nfreeze);
   
 =pod  =pod
   
Line 95  The second argument specifies the domain Line 95  The second argument specifies the domain
   
 =cut  =cut
   
   my ($user,$add_domain)=(@ARGV);
   my $lang = &Apache::lonlocal::choose_language();
   &Apache::lonlocal::get_language_handle(undef,$lang);
   
   if ($< != 0) { # Am I root?
      print(&mt('You must be root in order to assign domain coordinator roles.').
            "\n");
   }
   
 # ----------------------------------------------- So, are we invoked correctly?  # ----------------------------------------------- So, are we invoked correctly?
 # Two arguments or abort  # Two arguments or abort
 if (@ARGV!=2) {  if (@ARGV!=2) {
     die('usage: add_domain_coordinator_privilege.pl [USERNAME:DOMAIN] [NEWDOMAIN]'.      print(&mt('usage: [_1]','add_domain_coordinator_privilege.pl [USERNAME:DOMAIN] [NEWDOMAIN]').
  "\n");   "\n");
       exit;
 }  }
 my ($user,$add_domain)=(@ARGV);  
 my ($username,$domain)=split(':',$user);  my ($username,$domain)=split(':',$user);
 if (!grep(/^\Q$add_domain\E$/,&Apache::lonnet::current_machine_domains())) {  if (!grep(/^\Q$add_domain\E$/,&Apache::lonnet::current_machine_domains())) {
     die('**** ERROR **** Domain '.$add_domain.' is unknown'."\n");      print(&mt('**** ERROR **** Domain [_1] is unknown.',$add_domain)."\n");
       exit;
 }  }
   
 my $udpath=&propath($domain,$username);  my $udpath=&propath($domain,$username);
 if (!-d $udpath) {  if (!-d $udpath) {
     die ('**** ERROR **** '.$user.' is NOT already defined as a LON-CAPA '.      print(&mt('**** ERROR **** [_1] is NOT already defined as a LON-CAPA '.
  'user.'."\n");   'user.',$user)."\n");
       exit;
 }  }
   
 =pod  =pod
Line 150  use GDBM_File; # A simple key-value pair Line 161  use GDBM_File; # A simple key-value pair
   
 my $rolesref=&LONCAPA::locking_hash_tie("$udpath/roles.db",&GDBM_WRCREAT());  my $rolesref=&LONCAPA::locking_hash_tie("$udpath/roles.db",&GDBM_WRCREAT());
 if (!$rolesref) {  if (!$rolesref) {
     die('unable to tie roles db: '."$udpath/roles.db");      print(&mt('unable to tie [_1]',"roles db: $udpath/roles.db")."\n");
       exit;
 }  }
   my $status;
   my $now = time;
 if (exists($rolesref->{'/'.$add_domain.'/_dc'})) {  if (exists($rolesref->{'/'.$add_domain.'/_dc'})) {
     my ($role,$end,$start) = split('_',$rolesref->{'/'.$add_domain.'/_dc'});      my ($role,$end,$start) = split('_',$rolesref->{'/'.$add_domain.'/_dc'});
     print(&mt("[_1] already has a dc privilege for [_2].",      print(&mt("[_1] already has a dc privilege for [_2].",
Line 161  if (exists($rolesref->{'/'.$add_domain.' Line 175  if (exists($rolesref->{'/'.$add_domain.'
       "\n");        "\n");
  if (!$end) {   if (!$end) {
     print(&mt("No planned end date.")."\n");      print(&mt("No planned end date.")."\n");
  }   } else {
  if ($start < time() && (!$end || $end > time())) {              print(&mt("End date: [_1]",&Apache::lonlocal::locallocaltime($end)).
     print(&mt("It is currently active."));                    "\n");
     exit(0);          }
    if (($start <= $now) && (!$end || $end > $now)) {
       print(&mt("It is currently active.")."\n");
       $status = 'active';
  }   }
     } elsif ($end) {      } elsif ($end) {
  print(&mt("End date: [_1]",&Apache::lonlocal::locallocaltime($end)).   print(&mt("End date: [_1]",&Apache::lonlocal::locallocaltime($end)).
       "\n");        "\n");
  if ($end > time()) {   if ($end > $now) {
     print(&mt("It is currently active.")."\n");      print(&mt("It is currently active.")."\n");
     exit(0);      $status = 'active';
  }   }
     }      }
     if (!$start and !$end) {      if ((!$start) && (!$end)) {
  print(&mt("It is currently active.")."\n");   print(&mt("It is currently active.")."\n");
  exit(0);   $status = 'active';
     }      }
     print(&mt("It is currently not active. Proceeding to re-enable")."\n");      unless ($status eq 'active') {
           print(&mt("It is currently not active. Proceeding to make role active now.")."\n");
       }
   }
   
   if ($status eq 'active') {
       &LONCAPA::locking_hash_untie($rolesref);
       exit(0);
 }  }
   
 my $now = time;  my $now = time;
Line 199  my $dompath = $perlvar{'lonUsersDir'}.'/ Line 223  my $dompath = $perlvar{'lonUsersDir'}.'/
 my $domrolesref = &LONCAPA::locking_hash_tie("$dompath/nohist_domainroles.db",&GDBM_WRCREAT());  my $domrolesref = &LONCAPA::locking_hash_tie("$dompath/nohist_domainroles.db",&GDBM_WRCREAT());
   
 if (!$domrolesref) {  if (!$domrolesref) {
     die('unable to tie nohist_domainroles db: '."$dompath/nohist_domainroles.db");      print(&mt('unable to tie [_1]',"nohist_domainroles db: $dompath/nohist_domainroles.db")."\n");
       exit;
 }  }
   
 # Store in nohist_domainroles.db  # Store in nohist_domainroles.db
Line 207  my $domkey=&LONCAPA::escape('dc:'.$usern Line 232  my $domkey=&LONCAPA::escape('dc:'.$usern
 $domrolesref->{$domkey}= &LONCAPA::escape('0:'.$now);  $domrolesref->{$domkey}= &LONCAPA::escape('0:'.$now);
 &LONCAPA::locking_hash_untie($domrolesref);  &LONCAPA::locking_hash_untie($domrolesref);
   
  system('/bin/chown',"www:www","$dompath/nohist_domainroles.db"); # Must be writeable by httpd process.  system('/bin/chown',"www:www","$dompath/nohist_domainroles.db"); # Must be writeable by httpd process.
  system('/bin/chown',"www:www","$dompath/nohist_domainroles.db.lock");  system('/bin/chown',"www:www","$dompath/nohist_domainroles.db.lock");
   
   # Log with domainconfiguser in nohist_rolelog.db
   my $domconfiguser = $domain.'-domainconfig';
   my $subdir = $domconfiguser;
   $subdir =~ s/(.)(.)(.).*/$1\/$2\/$3/;
   
   my $rolelogref = &LONCAPA::locking_hash_tie("$dompath/$subdir/$domconfiguser/nohist_rolelog.db",&GDBM_WRCREAT());
   my $domlogkey = &LONCAPA::escape($now.'00000'.$$.'000000');
   my $storehash = {
                      role    => 'dc',
                      start   => $now,
                      end     => 0,
                      context => 'server',
                   };
   my $domlogvalue = {
                       'exe_uname' => '',
                       'exe_udom'  => $domain,
                       'exe_time'  => $now,
                       'exe_ip'    => '127.0.0.1',
                       'delflag'   => '',
                       'logentry'  => $storehash,
                       'uname'     => $username,
                       'udom'      => $domain,
                    };
   $rolelogref->{$domlogkey}=&freeze_escape($domlogvalue);
   &LONCAPA::locking_hash_untie($rolelogref);
   
    system('/bin/chown',"www:www","$dompath/$subdir/nohist_rolelog.db"); # Must be writeable by httpd process.
    system('/bin/chown',"www:www","$dompath/$subdir/nohist_rolelog.db.lock");
   
 =pod  =pod
   
Line 220  by going to http://MACHINENAME/adm/creat Line 274  by going to http://MACHINENAME/adm/creat
 =cut  =cut
   
 # Output success message, and inform sysadmin about how to further proceed.  # Output success message, and inform sysadmin about how to further proceed.
 print("$username is now a domain coordinator for $add_domain\n");  print(&mt('[_1] is now a domain coordinator for [_2].',$username,$add_domain).
 my $hostname=`hostname`; chomp($hostname); # Read in hostname.        "\n");
 print("http://$hostname/adm/createuser will allow you to further define".  exit;
       " this user.\n"); # Output a suggested URL.  
   sub freeze_escape {
       my ($value)=@_;
       if (ref($value)) {
           $value=&nfreeze($value);
           return '__FROZEN__'.&LONCAPA::escape($value);
       }
       return &LONCAPA::escape($value);
   }
   

Removed from v.1.4  
changed lines
  Added in v.1.8


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>