Diff for /loncom/lond between versions 1.419 and 1.429

version 1.419, 2009/07/31 02:20:12 version 1.429, 2009/10/19 23:16:36
Line 1815  sub change_password_handler { Line 1815  sub change_password_handler {
     #  npass - New password.      #  npass - New password.
     #  context - Context in which this was called       #  context - Context in which this was called 
     #            (preferences or reset_by_email).      #            (preferences or reset_by_email).
       #  lonhost - HostID of server where request originated 
         
     my ($udom,$uname,$upass,$npass,$context)=split(/:/,$tail);      my ($udom,$uname,$upass,$npass,$context,$lonhost)=split(/:/,$tail);
   
     $upass=&unescape($upass);      $upass=&unescape($upass);
     $npass=&unescape($npass);      $npass=&unescape($npass);
Line 1825  sub change_password_handler { Line 1826  sub change_password_handler {
     # First require that the user can be authenticated with their      # First require that the user can be authenticated with their
     # old password unless context was 'reset_by_email':      # old password unless context was 'reset_by_email':
           
     my $validated;      my ($validated,$failure);
     if ($context eq 'reset_by_email') {      if ($context eq 'reset_by_email') {
         $validated = 1;          if ($lonhost eq '') {
               $failure = 'invalid_client';
           } else {
               $validated = 1;
           }
     } else {      } else {
         $validated = &validate_user($udom, $uname, $upass);          $validated = &validate_user($udom, $uname, $upass);
     }      }
Line 1841  sub change_password_handler { Line 1846  sub change_password_handler {
     $salt=substr($salt,6,2);      $salt=substr($salt,6,2);
     my $ncpass=crypt($npass,$salt);      my $ncpass=crypt($npass,$salt);
     if(&rewrite_password_file($udom, $uname, "internal:$ncpass")) {      if(&rewrite_password_file($udom, $uname, "internal:$ncpass")) {
  &logthis("Result of password change for "   my $msg="Result of password change for $uname: pwchange_success";
  ."$uname: pwchange_success");                  if ($lonhost) {
                       $msg .= " - request originated from: $lonhost";
                   }
                   &logthis($msg);
  &Reply($client, "ok\n", $userinput);   &Reply($client, "ok\n", $userinput);
     } else {      } else {
  &logthis("Unable to open $uname passwd "                  &logthis("Unable to open $uname passwd "               
Line 1863  sub change_password_handler { Line 1871  sub change_password_handler {
  }     }  
   
     } else {      } else {
  &Failure( $client, "non_authorized\n", $userinput);   if ($failure eq '') {
       $failure = 'non_authorized';
    }
    &Failure( $client, "$failure\n", $userinput);
     }      }
   
     return 1;      return 1;
Line 3693  sub put_course_id_hash_handler { Line 3704  sub put_course_id_hash_handler {
 #                 caller -  if set to 'coursecatalog', courses set to be hidden  #                 caller -  if set to 'coursecatalog', courses set to be hidden
 #                           from course catalog will be excluded from results (unless  #                           from course catalog will be excluded from results (unless
 #                           overridden by "showhidden".  #                           overridden by "showhidden".
 #                 cloner - escaped username:domain of course cloner (if picking course to#   #                 cloner - escaped username:domain of course cloner (if picking course to
 #                          clone).  #                          clone).
 #                 cc_clone_list - escaped comma separated list of courses for which   #                 cc_clone_list - escaped comma separated list of courses for which 
 #                                 course cloner has active CC role (and so can clone  #                                 course cloner has active CC role (and so can clone
 #                                 automatically).  #                                 automatically).
 #                 cloneonly - filter by courses for which cloner has rights to clone.   #                 cloneonly - filter by courses for which cloner has rights to clone.
   #                 createdbefore - include courses for which creation date preceeded this date.
   #                 createdafter - include courses for which creation date followed this date.
   #                 creationcontext - include courses created in specified context 
 #  #
 #     $client  - The socket open on the client.  #     $client  - The socket open on the client.
 # Returns:  # Returns:
Line 3711  sub dump_course_id_handler { Line 3725  sub dump_course_id_handler {
   
     my ($udom,$since,$description,$instcodefilter,$ownerfilter,$coursefilter,      my ($udom,$since,$description,$instcodefilter,$ownerfilter,$coursefilter,
         $typefilter,$regexp_ok,$rtn_as_hash,$selfenrollonly,$catfilter,$showhidden,          $typefilter,$regexp_ok,$rtn_as_hash,$selfenrollonly,$catfilter,$showhidden,
         $caller,$cloner,$cc_clone_list,$cloneonly) =split(/:/,$tail);          $caller,$cloner,$cc_clone_list,$cloneonly,$createdbefore,$createdafter,
           $creationcontext) =split(/:/,$tail);
     my $now = time;      my $now = time;
     my ($cloneruname,$clonerudom,%cc_clone);      my ($cloneruname,$clonerudom,%cc_clone);
     if (defined($description)) {      if (defined($description)) {
Line 3769  sub dump_course_id_handler { Line 3784  sub dump_course_id_handler {
             $cc_clone{$clonedom.'_'.$clonenum} = 1;              $cc_clone{$clonedom.'_'.$clonenum} = 1;
         }           } 
     }      }
       if (defined($createdbefore)) {
           $createdbefore = &unescape($createdbefore);
       } else {
          $createdbefore = 0;
       }
       if (defined($createdafter)) {
           $createdafter = &unescape($createdafter);
       } else {
           $createdafter = 0;
       }
       if (defined($creationcontext)) {
           $creationcontext = &unescape($creationcontext);
       } else {
           $creationcontext = '.';
       }
           
     my $unpack = 1;      my $unpack = 1;
     if ($description eq '.' && $instcodefilter eq '.' && $coursefilter eq '.' &&       if ($description eq '.' && $instcodefilter eq '.' && $coursefilter eq '.' && 
Line 3781  sub dump_course_id_handler { Line 3811  sub dump_course_id_handler {
     if ($hashref) {      if ($hashref) {
  while (my ($key,$value) = each(%$hashref)) {   while (my ($key,$value) = each(%$hashref)) {
             my ($unesc_key,$lasttime_key,$lasttime,$is_hash,%val,              my ($unesc_key,$lasttime_key,$lasttime,$is_hash,%val,
                 %unesc_val,$selfenroll_end,$selfenroll_types);                  %unesc_val,$selfenroll_end,$selfenroll_types,$created,
                   $context);
             $unesc_key = &unescape($key);              $unesc_key = &unescape($key);
             if ($unesc_key =~ /^lasttime:/) {              if ($unesc_key =~ /^lasttime:/) {
                 next;                  next;
Line 3795  sub dump_course_id_handler { Line 3826  sub dump_course_id_handler {
             my ($canclone,$valchange);              my ($canclone,$valchange);
             my $items = &Apache::lonnet::thaw_unescape($value);              my $items = &Apache::lonnet::thaw_unescape($value);
             if (ref($items) eq 'HASH') {              if (ref($items) eq 'HASH') {
                   if ($hashref->{$lasttime_key} eq '') {
                       next if ($since > 0);
                   }
                 $is_hash =  1;                  $is_hash =  1;
                 if (defined($clonerudom)) {                  if (defined($clonerudom)) {
                     if ($items->{'cloners'}) {                      if ($items->{'cloners'}) {
Line 3832  sub dump_course_id_handler { Line 3866  sub dump_course_id_handler {
                     $unesc_val{'owner'} = $items->{'owner'};                      $unesc_val{'owner'} = $items->{'owner'};
                     $unesc_val{'type'} = $items->{'type'};                      $unesc_val{'type'} = $items->{'type'};
                     $unesc_val{'cloners'} = $items->{'cloners'};                      $unesc_val{'cloners'} = $items->{'cloners'};
                       $unesc_val{'created'} = $items->{'created'};
                       $unesc_val{'context'} = $items->{'context'};
                 }                  }
                 $selfenroll_types = $items->{'selfenroll_types'};                  $selfenroll_types = $items->{'selfenroll_types'};
                 $selfenroll_end = $items->{'selfenroll_end_date'};                  $selfenroll_end = $items->{'selfenroll_end_date'};
                   $created = $items->{'created'};
                   $context = $items->{'context'};
                 if ($selfenrollonly) {                  if ($selfenrollonly) {
                     next if (!$selfenroll_types);                      next if (!$selfenroll_types);
                     if (($selfenroll_end > 0) && ($selfenroll_end <= $now)) {                      if (($selfenroll_end > 0) && ($selfenroll_end <= $now)) {
                         next;                          next;
                     }                      }
                 }                  }
                   if ($creationcontext ne '.') {
                       next if (($context ne '') && ($context ne $creationcontext));  
                   }
                   if ($createdbefore > 0) {
                       next if (($created eq '') || ($created > $createdbefore));   
                   }
                   if ($createdafter > 0) {
                       next if (($created eq '') || ($created <= $createdafter)); 
                   }
                 if ($catfilter ne '') {                  if ($catfilter ne '') {
                     next if ($items->{'categories'} eq '');                      next if ($items->{'categories'} eq '');
                     my @categories = split('&',$items->{'categories'});                       my @categories = split('&',$items->{'categories'}); 
Line 3863  sub dump_course_id_handler { Line 3910  sub dump_course_id_handler {
             } else {              } else {
                 next if ($catfilter ne '');                  next if ($catfilter ne '');
                 next if ($selfenrollonly);                  next if ($selfenrollonly);
                   next if ($createdbefore || $createdafter);
                   next if ($creationcontext ne '.');
                 if ((defined($clonerudom)) && (defined($cloneruname)))  {                  if ((defined($clonerudom)) && (defined($cloneruname)))  {
                     if ($cc_clone{$unesc_key}) {                      if ($cc_clone{$unesc_key}) {
                         $canclone = 1;                          $canclone = 1;
Line 4101  sub get_domain_handler { Line 4150  sub get_domain_handler {
 }  }
 &register_handler("getdom", \&get_domain_handler, 0, 1, 0);  &register_handler("getdom", \&get_domain_handler, 0, 1, 0);
   
   
 #  #
 #  Puts an id to a domains id database.   #  Puts an id to a domains id database. 
 #  #
Line 4408  sub dump_domainroles_handler { Line 4456  sub dump_domainroles_handler {
         $rolesfilter=&unescape($rolesfilter);          $rolesfilter=&unescape($rolesfilter);
  @roles = split(/\&/,$rolesfilter);   @roles = split(/\&/,$rolesfilter);
     }      }
                                                                                              
     my $hashref = &tie_domain_hash($udom, "nohist_domainroles", &GDBM_WRCREAT());      my $hashref = &tie_domain_hash($udom, "nohist_domainroles", &GDBM_WRCREAT());
     if ($hashref) {      if ($hashref) {
         my $qresult = '';          my $qresult = '';
         while (my ($key,$value) = each(%$hashref)) {          while (my ($key,$value) = each(%$hashref)) {
             my $match = 1;              my $match = 1;
             my ($start,$end) = split(/:/,&unescape($value));              my ($end,$start) = split(/:/,&unescape($value));
             my ($trole,$uname,$udom,$runame,$rudom,$rsec) = split(/:/,&unescape($key));              my ($trole,$uname,$udom,$runame,$rudom,$rsec) = split(/:/,&unescape($key));
             unless ($startfilter eq '.' || !defined($startfilter)) {              unless (@roles < 1) {
                 if ((defined($start)) && ($start >= $startfilter)) {                  unless (grep/^\Q$trole\E$/,@roles) {
                     $match = 0;                      $match = 0;
                       next;
                 }                  }
             }              }
             unless ($endfilter eq '.' || !defined($endfilter)) {              unless ($startfilter eq '.' || !defined($startfilter)) {
                 if ((defined($end)) && ($end <= $endfilter)) {                  if ((defined($start)) && ($start >= $startfilter)) {
                     $match = 0;                      $match = 0;
                       next;
                 }                  }
             }              }
             unless (@roles < 1) {              unless ($endfilter eq '.' || !defined($endfilter)) {
                 unless (grep/^\Q$trole\E$/,@roles) {                  if ((defined($end)) && (($end > 0) && ($end <= $endfilter))) {
                     $match = 0;                      $match = 0;
                       next;
                 }                  }
             }              }
             if ($match == 1) {              if ($match == 1) {
Line 4716  sub enrollment_enabled_handler { Line 4767  sub enrollment_enabled_handler {
 &register_handler("autorun", \&enrollment_enabled_handler, 0, 1, 0);  &register_handler("autorun", \&enrollment_enabled_handler, 0, 1, 0);
   
 #  #
 #   Validate an institutional code use for a LON-CAPA course.            #   Validate an institutional code used for a LON-CAPA course.          
 #  #
 # Formal Parameters:  # Formal Parameters:
 #   $cmd          - The command request that got us dispatched.  #   $cmd          - The command request that got us dispatched.
 #   $tail         - The tail of the command.  In this case,  #   $tail         - The tail of the command.  In this case,
 #                   this is a colon separated set of words that will be split  #                   this is a colon separated set of words that will be split
 #                   into:  #                   into:
 #                        $inst_course_id - The institutional cod3 from the  #                        $dom      - The domain for which the check of 
 #                                          institutions point of view.  #                                    institutional course code will occur.
 #                        $cdom           - The domain from the institutions  #
 #                                          point of view.  #                        $instcode - The institutional code for the course
   #                                    being requested, or validated for rights
   #                                    to request.
   #
   #                        $owner    - The course requestor (who will be the
   #                                    course owner, in the form username:domain
   #
 #   $client       - Socket open on the client.  #   $client       - Socket open on the client.
 # Returns:  # Returns:
 #    1           - Indicating processing should continue.  #    1           - Indicating processing should continue.
Line 4735  sub validate_instcode_handler { Line 4792  sub validate_instcode_handler {
     my ($cmd, $tail, $client) = @_;      my ($cmd, $tail, $client) = @_;
     my $userinput = "$cmd:$tail";      my $userinput = "$cmd:$tail";
     my ($dom,$instcode,$owner) = split(/:/, $tail);      my ($dom,$instcode,$owner) = split(/:/, $tail);
     my $outcome=&localenroll::validate_instcode($dom,$instcode,$owner);      $instcode = &unescape($instcode);
     &Reply($client, \$outcome, $userinput);      $owner = &unescape($owner);
       my ($outcome,$description) = 
           &localenroll::validate_instcode($dom,$instcode,$owner);
       my $result = &escape($outcome).'&'.&escape($description);
       &Reply($client, \$result, $userinput);
   
     return 1;      return 1;
 }  }
Line 4945  sub retrieve_auto_file_handler { Line 5006  sub retrieve_auto_file_handler {
 }  }
 &register_handler("autoretrieve", \&retrieve_auto_file_handler, 0,1,0);  &register_handler("autoretrieve", \&retrieve_auto_file_handler, 0,1,0);
   
   sub crsreq_checks_handler {
       my ($cmd, $tail, $client) = @_;
       my $userinput = "$cmd:$tail";
       my $dom = $tail;
       my $result;
       my @reqtypes = ('official','unofficial','community');
       eval {
           local($SIG{__DIE__})='DEFAULT';
           my %validations;
           my $response = &localenroll::crsreq_checks($dom,\@reqtypes,
                                                      \%validations);
           if ($response eq 'ok') { 
               foreach my $key (keys(%validations)) {
                   $result .= &escape($key).'='.&Apache::lonnet::freeze_escape($validations{$key}).'&';
               }
               $result =~ s/\&$//;
           } else {
               $result = 'error';
           }
       };
       if (!$@) {
           &Reply($client, \$result, $userinput);
       } else {
           &Failure($client,"unknown_cmd\n",$userinput);
       }
       return 1;
   }
   &register_handler("autocrsreqchecks", \&crsreq_checks_handler, 0, 1, 0);
   
   sub validate_crsreq_handler {
       my ($cmd, $tail, $client) = @_;
       my $userinput = "$cmd:$tail";
       my ($dom,$owner,$crstype,$inststatuslist,$instcode,$instseclist) = split(/:/, $tail);
       $instcode = &unescape($instcode);
       $owner = &unescape($owner);
       $crstype = &unescape($crstype);
       $inststatuslist = &unescape($inststatuslist);
       $instcode = &unescape($instcode);
       $instseclist = &unescape($instseclist);
       my $outcome;
       eval {
           local($SIG{__DIE__})='DEFAULT';
           $outcome = &localenroll::validate_crsreq($dom,$owner,$crstype,
                                                    $inststatuslist,$instcode,
                                                    $instseclist);
       };
       if (!$@) {
           &Reply($client, \$outcome, $userinput);
       } else {
           &Failure($client,"unknown_cmd\n",$userinput);
       }
       return 1;
   }
   &register_handler("autocrsreqvalidation", \&validate_crsreq_handler, 0, 1, 0);
   
 #  #
 #   Read and retrieve institutional code format (for support form).  #   Read and retrieve institutional code format (for support form).
 # Formal Parameters:  # Formal Parameters:

Removed from v.1.419  
changed lines
  Added in v.1.429


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