Diff for /loncom/lond between versions 1.489.2.35.2.5 and 1.489.2.39

version 1.489.2.35.2.5, 2021/06/20 18:41:28 version 1.489.2.39, 2020/10/26 03:47:15
Line 4662  sub put_domain_handler { Line 4662  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 4679  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 5533  sub validate_instcode_handler { Line 5515  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 5639  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.39


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