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

version 1.1, 2007/06/26 19:39:25 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 87  use Apache::lonlocal; Line 87  use Apache::lonlocal;
   
 There are no flags to this script.  There are no flags to this script.
   
 usage: add_domain_coordinator_privledge.pl [USERNAME:DOMAIN] [NEWDOMAIN]  usage: add_domain_coordinator_privilege.pl [USERNAME:DOMAIN] [NEWDOMAIN]
   
 The first argument specifies the user name domain of an existing user.  The first argument specifies the user name domain of an existing user.
   
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 priviledge for [_2].",      print(&mt("[_1] already has a dc privilege for [_2].",
       $user,$add_domain)."\n");        $user,$add_domain)."\n");
     if ($start) {      if ($start) {
  print(&mt("Start date: [_1]",&Apache::lonlocal::locallocaltime($start)).   print(&mt("Start date: [_1]",&Apache::lonlocal::locallocaltime($start)).
       "\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';
     }      }
       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);
 }  }
   
 $rolesref->{'/'.$add_domain.'/_dc'}='dc'; # Set the domain coordinator role.  my $now = time;
   $rolesref->{'/'.$add_domain.'/_dc'}='dc_0_'.$now; # Set the domain coordinator role.
 open(OUT, ">$udpath/roles.hist"); # roles.hist is the synchronous plain text.  open(OUT, ">$udpath/roles.hist"); # roles.hist is the synchronous plain text.
 foreach my $key (keys(%{$rolesref})) {  foreach my $key (keys(%{$rolesref})) {
     print(OUT $key.' : '.$rolesref->{$key}."\n");      print(OUT $key.' : '.$rolesref->{$key}."\n");
Line 192  close(OUT); Line 218  close(OUT);
 `chown www:www $udpath/roles.hist`; # Must be writeable by httpd process.  `chown www:www $udpath/roles.hist`; # Must be writeable by httpd process.
 `chown www:www $udpath/roles.db`; # Must be writeable by httpd process.  `chown www:www $udpath/roles.db`; # Must be writeable by httpd process.
   
   my %perlvar = %{&LONCAPA::Configuration::read_conf('loncapa.conf')};
   my $dompath = $perlvar{'lonUsersDir'}.'/'.$domain;
   my $domrolesref = &LONCAPA::locking_hash_tie("$dompath/nohist_domainroles.db",&GDBM_WRCREAT());
   
   if (!$domrolesref) {
       print(&mt('unable to tie [_1]',"nohist_domainroles db: $dompath/nohist_domainroles.db")."\n");
       exit;
   }
   
   # Store in nohist_domainroles.db
   my $domkey=&LONCAPA::escape('dc:'.$username.':'.$domain.'::'.$domain.':');
   $domrolesref->{$domkey}= &LONCAPA::escape('0:'.$now);
   &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.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
   
 =item 2.  =item 2.
Line 202  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.1  
changed lines
  Added in v.1.8


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