Diff for /loncom/lonsql between versions 1.69 and 1.77

version 1.69, 2005/11/24 20:03:49 version 1.77, 2006/05/11 17:53:22
Line 102  the database. Line 102  the database.
 use strict;  use strict;
   
 use lib '/home/httpd/lib/perl/';  use lib '/home/httpd/lib/perl/';
   use LONCAPA;
 use LONCAPA::Configuration;  use LONCAPA::Configuration;
 use LONCAPA::lonmetadata();  use LONCAPA::lonmetadata();
   
Line 260  if (-e $pidfile) { Line 261  if (-e $pidfile) {
 # Read hosts file  # Read hosts file
 #  #
 my $thisserver;  my $thisserver;
   my %hostname;
 my $PREFORK=4; # number of children to maintain, at least four spare  my $PREFORK=4; # number of children to maintain, at least four spare
 open (CONFIG,"$perlvar{'lonTabDir'}/hosts.tab") || die "Can't read host file";  open (CONFIG,"$perlvar{'lonTabDir'}/hosts.tab") || die "Can't read host file";
 while (my $configline=<CONFIG>) {  while (my $configline=<CONFIG>) {
     my ($id,$domain,$role,$name)=split(/:/,$configline);      my ($id,$domain,$role,$name)=split(/:/,$configline);
     $name=~s/\s//g;      $name=~s/\s//g;
     $thisserver=$name if ($id eq $perlvar{'lonHostID'});      $thisserver=$name if ($id eq $perlvar{'lonHostID'});
       $hostname{$id}=$name;
     #$PREFORK++;      #$PREFORK++;
 }  }
 close(CONFIG);  close(CONFIG);
Line 386  sub make_new_child { Line 389  sub make_new_child {
     $run = $run+1;      $run = $run+1;
     my $userinput = <$client>;      my $userinput = <$client>;
     chomp($userinput);      chomp($userinput);
               $userinput=~s/\:(\w+)$//;
               my $searchdomain=$1;
             #              #
     my ($conserver,$query,      my ($conserver,$query,
  $arg1,$arg2,$arg3)=split(/&/,$userinput);   $arg1,$arg2,$arg3)=split(/&/,$userinput);
Line 423  sub make_new_child { Line 428  sub make_new_child {
                     $result='no_such_file';                      $result='no_such_file';
                 }                  }
                 # end of log query                  # end of log query
             } elsif ($query eq 'fetchenrollment') {              } elsif (($query eq 'fetchenrollment') || 
        ($query eq 'institutionalphotos')) {
                 # retrieve institutional class lists                  # retrieve institutional class lists
                 my $dom = &unescape($arg1);                  my $dom = &unescape($arg1);
                 my %affiliates = ();                  my %affiliates = ();
Line 435  sub make_new_child { Line 441  sub make_new_child {
                         @{$affiliates{$1}} = split/,/,$2;                          @{$affiliates{$1}} = split/,/,$2;
                     }                      }
                 }                  }
                 $locresult = &localenroll::fetch_enrollment($dom,\%affiliates,\%replies);                  if ($query eq 'fetchenrollment') { 
                       $locresult = &localenroll::fetch_enrollment($dom,\%affiliates,\%replies);
                   } elsif ($query eq 'institutionalphotos') {
                       my $crs = &unescape($arg2);
       eval {
    local($SIG{__DIE__})='DEFAULT';
    $locresult = &localenroll::institutional_photos($dom,$crs,\%affiliates,\%replies,'update');
       };
       if ($@) {
    $locresult = 'error';
       }
                   }
                 $result = &escape($locresult.':');                  $result = &escape($locresult.':');
                 if ($locresult) {                  if ($locresult) {
                     $result .= &escape(join(':',map{$_.'='.$replies{$_}} keys %replies));                      $result .= &escape(join(':',map{$_.'='.$replies{$_}} keys %replies));
Line 456  sub make_new_child { Line 473  sub make_new_child {
                 }                  }
             } else {              } else {
                 # Do an sql query                  # Do an sql query
                 $result = &do_sql_query($query,$arg1,$arg2);                  $result = &do_sql_query($query,$arg1,$arg2,$searchdomain);
             }              }
             # result does not need to be escaped because it has already been              # result does not need to be escaped because it has already been
             # escaped.              # escaped.
Line 507  sub process_file { Line 524  sub process_file {
 }  }
   
 sub do_sql_query {  sub do_sql_query {
     my ($query,$custom,$customshow) = @_;      my ($query,$custom,$customshow,$searchdomain) = @_;
 #    &logthis('doing query '.$query);  
   #
   # limit to searchdomain if given and table is metadata
   #
       if (($searchdomain) && ($query=~/FROM metadata/)) {
    $query.=' HAVING (domain="'.$searchdomain.'")';
       }
   #    &logthis('doing query ('.$searchdomain.')'.$query);
   
   
   
     $custom     = &unescape($custom);      $custom     = &unescape($custom);
     $customshow = &unescape($customshow);      $customshow = &unescape($customshow);
     #      #
Line 652  Returns: The results of the message or ' Line 679  Returns: The results of the message or '
 ########################################################  ########################################################
 sub subreply {  sub subreply {
     my ($cmd,$server)=@_;      my ($cmd,$server)=@_;
     my $peerfile="$perlvar{'lonSockDir'}/$server";      my $peerfile="$perlvar{'lonSockDir'}/".$hostname{$server};
     my $sclient=IO::Socket::UNIX->new(Peer    =>"$peerfile",      my $sclient=IO::Socket::UNIX->new(Peer    =>"$peerfile",
                                       Type    => SOCK_STREAM,                                        Type    => SOCK_STREAM,
                                       Timeout => 10)                                        Timeout => 10)
        or return "con_lost";         or return "con_lost";
     print $sclient "$cmd\n";      print $sclient "sethost:$server:$cmd\n";
     my $answer=<$sclient>;      my $answer=<$sclient>;
     chomp($answer);      chomp($answer);
     $answer="con_lost" if (!$answer);      $answer="con_lost" if (!$answer);
Line 698  sub reply { Line 725  sub reply {
 }  }
   
 ########################################################  ########################################################
 ########################################################  
   
 =pod  
   
 =item &escape  
   
 Escape special characters in a string.  
   
 Inputs: string to escape  
   
 Returns: The input string with special characters escaped.  
   
 =cut  
   
 ########################################################  
 ########################################################  
 sub escape {  
     my $str=shift;  
     $str =~ s/(\W)/"%".unpack('H2',$1)/eg;  
     return $str;  
 }  
   
 ########################################################  
 ########################################################  
   
 =pod  
   
 =item &unescape  
   
 Unescape special characters in a string.  
   
 Inputs: string to unescape  
   
 Returns: The input string with special characters unescaped.  
   
 =cut  
   
 ########################################################  
 ########################################################  
 sub unescape {  
     my $str=shift;  
     $str =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;  
     return $str;  
 }  
   
 ########################################################  
 ########################################################  ########################################################
   
 =pod  =pod

Removed from v.1.69  
changed lines
  Added in v.1.77


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