Diff for /loncom/lond between versions 1.489.2.35.2.5 and 1.489.2.36

version 1.489.2.35.2.5, 2021/06/20 18:41:28 version 1.489.2.36, 2020/05/04 15:15:16
Line 4589  sub course_sessions_handler { Line 4589  sub course_sessions_handler {
             next if ($filename=~/^\./);              next if ($filename=~/^\./);
             next if ($filename=~/^publicuser_/);              next if ($filename=~/^publicuser_/);
             next if ($filename=~/^[a-f0-9]+_(linked|lti_\d+)\.id$/);              next if ($filename=~/^[a-f0-9]+_(linked|lti_\d+)\.id$/);
             if ($filename =~ /^($LONCAPA::match_username)_\d+_($LONCAPA::match_domain)_/) {              if ($filename =~ /^($LONCAPA::match_user)_\d+_($LONCAPA::match_domain)_/) {
                 my ($uname,$udom) = ($1,$2);                  my ($uname,$udom) = ($1,$2);
                 next unless (-e "$perlvar{'lonDaemons'}/tmp/$uname$dbsuffix");                  next unless (-e "$perlvar{'lonDaemons'}/$uname$dbsuffix");
                 my $mtime = (stat("$perlvar{'lonIDsDir'}/$filename"))[9];                  my $mtime = (stat("$perlvar{'lonIDsDir'}/$filename"))[9];
                   my $since=$now-$mtime;
                 if ($lastactivity < 0) {                  if ($lastactivity < 0) {
                     next if ($mtime-$now > $lastactivity);                      next if ($since <= $lastactivity);
                 } else {                  } else {
                     next if ($now-$mtime > $lastactivity);                      next if ($since > $lastactivity);
                 }                  }
                 $sessions{$uname.':'.$udom} = $mtime;                  $sessions{$uname.':'.$udom} = $mtime;
             }              }
Line 4662  sub put_domain_handler { Line 4663  sub put_domain_handler {
 # domain directory.  # domain directory.
 #  #
 # Parameters:  # Parameters:
 #   $cmd             - Command request keyword (getdom).  #   $cmd             - Command request keyword (get).
 #   $tail            - Tail of the command.  This is a colon separated list  #   $tail            - Tail of the command.  This is a colon separated list
 #                      consisting of the domain and the 'namespace'   #                      consisting of the domain and the 'namespace' 
 #                      which selects the gdbm file to do the lookup in,  #                      which selects the gdbm file to do the lookup in,
Line 4679  sub put_domain_handler { Line 4680  sub put_domain_handler {
 sub get_domain_handler {  sub get_domain_handler {
     my ($cmd, $tail, $client) = @_;      my ($cmd, $tail, $client) = @_;
   
   
     my $userinput = "$cmd:$tail";      my $userinput = "$cmd:$tail";
   
     my ($udom,$namespace,$what)=split(/:/,$tail,3);      my ($udom,$namespace,$what)=split(/:/,$tail,3);
     if ($namespace =~ /^enc/) {      chomp($what);
         &Failure( $client, "refused\n", $userinput);      my @queries=split(/\&/,$what);
     } else {      my $qresult='';
         my $res = LONCAPA::Lond::get_dom($userinput);      my $hashref = &tie_domain_hash($udom, "$namespace", &GDBM_READER());
         if ($res =~ /^error:/) {      if ($hashref) {
             &Failure($client, \$res, $userinput);          for (my $i=0;$i<=$#queries;$i++) {
               $qresult.="$hashref->{$queries[$i]}&";
           }
           if (&untie_domain_hash($hashref)) {
               $qresult=~s/\&$//;
               &Reply($client, \$qresult, $userinput);
         } else {          } else {
             &Reply($client, \$res, $userinput);              &Failure( $client, "error: ".($!+0)." untie(GDBM) Failed ".
                         "while attempting getdom\n",$userinput);
         }          }
       } else {
           &Failure($client, "error: ".($!+0)." tie(GDBM) Failed ".
                    "while attempting getdom\n",$userinput);
     }      }
   
     return 1;      return 1;
 }  }
 &register_handler("getdom", \&get_domain_handler, 0, 1, 0);  &register_handler("getdom", \&get_domain_handler, 0, 1, 0);
   
 sub encrypted_get_domain_handler {  
     my ($cmd, $tail, $client) = @_;  
   
     my $userinput = "$cmd:$tail";  
   
     my $res = LONCAPA::Lond::get_dom($userinput);  
     if ($res =~ /^error:/) {  
         &Failure($client, \$res, $userinput);  
     } else {  
         if ($cipher) {  
             my $cmdlength=length($res);  
             $res.="         ";  
             my $encres='';  
             for (my $encidx=0;$encidx<=$cmdlength;$encidx+=8) {  
                 $encres.= unpack("H16",  
                                  $cipher->encrypt(substr($res,  
                                                          $encidx,  
                                                          8)));  
             }  
             &Reply( $client,"enc:$cmdlength:$encres\n",$userinput);  
         } else {  
             &Failure( $client, "error:no_key\n",$userinput);  
         }  
     }  
     return 1;  
 }  
 &register_handler("egetdom", \&encrypted_get_domain_handler, 1, 1, 0);  
   
 #  #
 #  Puts an id to a domains id database.   #  Puts an id to a domains id database. 
 #  #
Line 5241  sub tmp_del_handler { Line 5224  sub tmp_del_handler {
 &register_handler("tmpdel", \&tmp_del_handler, 0, 1, 0);  &register_handler("tmpdel", \&tmp_del_handler, 0, 1, 0);
   
 #  #
 #  Process the updatebalcookie command.  This command updates a  
 #  cookie in the lonBalancedir directory on a load balancer node.  
 #  
 # Parameters:  
 #   $cmd      - Command that got us here.  
 #   $tail     - Tail of the request (escaped cookie: escaped current entry)  
 #  
 #   $client   - socket open on the client process.  
 #  
 # Returns:  
 #   1     - Indicating processing should continue.  
 # Side Effects:  
 #   A cookie file is updated from the lonBalancedir directory  
 #   A reply is sent to the client.  
 #  
 sub update_balcookie_handler {  
     my ($cmd, $tail, $client) = @_;  
   
     my $userinput= "$cmd:$tail";  
     chomp($tail);  
     my ($cookie,$lastentry) = map { &unescape($_) } (split(/:/,$tail));  
   
     my $updatedone;  
     if ($cookie =~ /^$LONCAPA::match_domain\_$LONCAPA::match_username\_[a-f0-9]{32}$/) {  
         my $execdir=$perlvar{'lonBalanceDir'};  
         if (-e "$execdir/$cookie.id") {  
             my $doupdate;  
             if (open(my $fh,'<',"$execdir/$cookie.id")) {  
                 while (my $line = <$fh>) {  
                     chomp($line);  
                     if ($line eq $lastentry) {  
                         $doupdate = 1;  
                         last;  
                     }  
                 }  
                 close($fh);  
             }  
             if ($doupdate) {  
                 if (open(my $fh,'>',"$execdir/$cookie.id")) {  
                     print $fh $clientname;  
                     close($fh);  
                     $updatedone = 1;  
                 }  
             }  
         }  
     }  
     if ($updatedone) {  
         &Reply($client, "ok\n", $userinput);  
     } else {  
         &Failure( $client, "error: ".($!+0)."file update failed ".  
                   "while attempting updatebalcookie\n", $userinput);  
     }  
     return 1;  
 }  
 &register_handler("updatebalcookie", \&update_balcookie_handler, 0, 1, 0);  
   
 #  
 #  Process the delbalcookie command. This command deletes a balancer  #  Process the delbalcookie command. This command deletes a balancer
 #  cookie in the lonBalancedir directory on a load balancer node.  #  cookie in the lonBalancedir directory created by switchserver
 #  #
 # Parameters:  # Parameters:
 #   $cmd      - Command that got us here.  #   $cmd      - Command that got us here.
Line 5317  sub del_balcookie_handler { Line 5243  sub del_balcookie_handler {
     my $userinput= "$cmd:$cookie";      my $userinput= "$cmd:$cookie";
   
     chomp($cookie);      chomp($cookie);
     $cookie = &unescape($cookie);  
     my $deleted = '';      my $deleted = '';
     if ($cookie =~ /^$LONCAPA::match_domain\_$LONCAPA::match_username\_[a-f0-9]{32}$/) {      if ($cookie =~ /^$LONCAPA::match_domain\_$LONCAPA::match_username\_[a-f0-9]{32}$/) {
         my $execdir=$perlvar{'lonBalanceDir'};          my $execdir=$perlvar{'lonBalanceDir'};
Line 5533  sub validate_instcode_handler { Line 5458  sub validate_instcode_handler {
 }  }
 &register_handler("autovalidateinstcode", \&validate_instcode_handler, 0, 1, 0);  &register_handler("autovalidateinstcode", \&validate_instcode_handler, 0, 1, 0);
   
 #  
 #  Validate co-owner for cross-listed institutional code and  
 #  institutional course code itself used for a LON-CAPA course.  
 #  
 # Formal Parameters:  
 #   $cmd          - The command request that got us dispatched.  
 #   $tail         - The tail of the command.  In this case,  
 #                   this is a colon separated string containing:  
 #      $dom            - Course's LON-CAPA domain  
 #      $instcode       - Institutional course code for the course  
 #      $inst_xlist     - Institutional course Id for the crosslisting  
 #      $coowner        - Username of co-owner  
 #      (values for all but $dom have been escaped).  
 #  
 #   $client       - Socket open on the client.  
 # Returns:  
 #    1           - Indicating processing should continue.  
 #  
 sub validate_instcrosslist_handler  {  
     my ($cmd, $tail, $client) = @_;  
     my $userinput = "$cmd:$tail";  
     my ($dom,$instcode,$inst_xlist,$coowner) = split(/:/,$tail);  
     $instcode = &unescape($instcode);  
     $inst_xlist = &unescape($inst_xlist);  
     $coowner = &unescape($coowner);  
     my $outcome = &localenroll::validate_crosslist_access($dom,$instcode,  
                                                           $inst_xlist,$coowner);  
     &Reply($client, \$outcome, $userinput);  
   
     return 1;  
 }  
 &register_handler("autovalidateinstcrosslist", \&validate_instcrosslist_handler, 0, 1, 0);  
   
 #   Get the official sections for which auto-enrollment is possible.  #   Get the official sections for which auto-enrollment is possible.
 #   Since the admin people won't know about 'unofficial sections'   #   Since the admin people won't know about 'unofficial sections' 
 #   we cannot auto-enroll on them.  #   we cannot auto-enroll on them.
Line 5690  sub validate_class_access_handler { Line 5582  sub validate_class_access_handler {
 &register_handler("autovalidateclass_sec", \&validate_class_access_handler, 0, 1, 0);  &register_handler("autovalidateclass_sec", \&validate_class_access_handler, 0, 1, 0);
   
 #  #
 #    Modify institutional sections (using customized &instsec_reformat()  
 #    routine in localenroll.pm), to either clutter or declutter, for  
 #    purposes of ensuring an institutional course section (string) can  
 #    be unambiguously separated into institutional course and section.  
 #  
 # Formal Parameters:  
 #    $cmd     - The command request that got us dispatched.  
 #    $tail    - The tail of the command.   In this case this is a colon separated  
 #               set of values that will be split into:  
 #               $cdom        - The LON-CAPA domain of the course.  
 #               $action      - Either: clutter or declutter  
 #                              clutter adds character(s) to eliminate ambiguity  
 #                              declutter removes the added characters (e.g., for  
 #                              display of the institutional course section string.  
 #               $info        - A frozen hash in which keys are:  
 #                              LON-CAPA course number:Institutional course code  
 #                              and values are a reference to an array of the  
 #                              items to modify -- either institutional sections,  
 #                              or institutional course sections (for crosslistings).  
 #    $client  - The socket open on the client.  
 # Returns:  
 #    1 - continue processing.  
 #  
   
 sub instsec_reformat_handler {  
     my ($cmd, $tail, $client) = @_;  
     my $userinput = "$cmd:$tail";  
     my ($cdom,$action,$info) = split(/:/,$tail);  
     my $instsecref = &Apache::lonnet::thaw_unescape($info);  
     my ($outcome,$result);  
     eval {  
         local($SIG{__DIE__})='DEFAULT';  
         $outcome=&localenroll::instsec_reformat($cdom,$action,$instsecref);  
         if ($outcome eq 'ok') {  
             if (ref($instsecref) eq 'HASH') {  
                 foreach my $key (keys(%{$instsecref})) {  
                     $result .= &escape($key).'='.&Apache::lonnet::freeze_escape($instsecref->{$key}).'&';  
                 }  
                 $result =~ s/\&$//;  
             }  
         }  
     };  
     if (!$@) {  
         if ($outcome eq 'ok') {  
             &Reply( $client, \$result, $userinput);  
         } else {  
             &Reply($client,\$outcome, $userinput);  
         }  
     } else {  
         &Failure($client,"unknown_cmd\n",$userinput);  
     }  
     return 1;  
 }  
 &register_handler("autoinstsecreformat",\&instsec_reformat_handler, 0, 1, 0);  
   
 #  
 #   Validate course owner or co-owners(s) access to enrollment data for all sections  #   Validate course owner or co-owners(s) access to enrollment data for all sections
 #   and crosslistings for a particular course.  #   and crosslistings for a particular course.
 #  #

Removed from v.1.489.2.35.2.5  
changed lines
  Added in v.1.489.2.36


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