Diff for /loncom/lonnet/perl/lonnet.pm between versions 1.12 and 1.19

version 1.12, 2000/05/01 20:19:38 version 1.19, 2000/07/18 13:46:49
Line 11 Line 11
 # eget(namesp,array) : returns hash with keys from array filled in from namesp  # eget(namesp,array) : returns hash with keys from array filled in from namesp
 # get(namesp,array)  : returns hash with keys from array filled in from namesp  # get(namesp,array)  : returns hash with keys from array filled in from namesp
 # put(namesp,hash)   : stores hash in namesp  # put(namesp,hash)   : stores hash in namesp
   # dump(namesp)       : dumps the complete namespace into a hash
   # ssi(url)           : does a complete request cycle on url to localhost
   # repcopy(filename)  : replicate file
   # dirlist(url)       : gets a directory listing
 #  #
 # 6/1/99,6/2,6/10,6/11,6/12,6/14,6/26,6/28,6/29,6/30,  # 6/1/99,6/2,6/10,6/11,6/12,6/14,6/26,6/28,6/29,6/30,
 # 7/1,7/2,7/9,7/10,7/12,7/14,7/15,7/19,  # 7/1,7/2,7/9,7/10,7/12,7/14,7/15,7/19,
 # 11/8,11/16,11/18,11/22,11/23,12/22,  # 11/8,11/16,11/18,11/22,11/23,12/22,
 # 01/06,01/13,02/24,02/28,02/29,  # 01/06,01/13,02/24,02/28,02/29,
 # 03/01,03/02,03/06,03/07,03/13,  # 03/01,03/02,03/06,03/07,03/13,
 # 04/05 Gerd Kortemeyer  # 04/05,05/29,05/31,06/01,
   # 06/05,06/26 Gerd Kortemeyer
   # 06/26 Ben Tyszka
   # 06/30,07/15,07/17,07/18 Gerd Kortemeyer
   
 package Apache::lonnet;  package Apache::lonnet;
   
 use strict;  use strict;
 use Apache::File;  use Apache::File;
 use LWP::UserAgent();  use LWP::UserAgent();
   use HTTP::Headers;
 use vars   use vars 
 qw(%perlvar %hostname %homecache %spareid %hostdom %libserv %pr %prp $readit);  qw(%perlvar %hostname %homecache %spareid %hostdom %libserv %pr %prp $readit);
 use IO::Socket;  use IO::Socket;
Line 285  sub subscribe { Line 293  sub subscribe {
 sub repcopy {  sub repcopy {
     my $filename=shift;      my $filename=shift;
     my $transname="$filename.in.transfer";      my $transname="$filename.in.transfer";
       if ((-e $filename) || (-e $transname)) { return OK; }
     my $remoteurl=subscribe($filename);      my $remoteurl=subscribe($filename);
     if ($remoteurl eq 'con_lost') {      if ($remoteurl eq 'con_lost') {
    &logthis("Subscribe returned con_lost: $filename");     &logthis("Subscribe returned con_lost: $filename");
Line 319  sub repcopy { Line 328  sub repcopy {
                        ." LWP get: $message: $filename</font>");                         ." LWP get: $message: $filename</font>");
                return HTTP_SERVICE_UNAVAILABLE;                 return HTTP_SERVICE_UNAVAILABLE;
            } else {             } else {
          if ($remoteurl!~/\.meta$/) {
                     my $mrequest=new HTTP::Request('GET',$remoteurl.'.meta');
                     my $mresponse=$ua->request($mrequest,$filename.'.meta');
                     if ($mresponse->is_error()) {
         unlink($filename.'.meta');
                         &logthis(
                        "<font color=yellow>INFO: No metadata: $filename</font>");
                     }
          }
                rename($transname,$filename);                 rename($transname,$filename);
                return OK;                 return OK;
            }             }
     }      }
 }  }
   
   # --------------------------------------------------------- Server Side Include
   
   sub ssi {
   
       my $fn=shift;
   
       my $ua=new LWP::UserAgent;
       my $request=new HTTP::Request('GET',"http://".$ENV{'HTTP_HOST'}.$fn);
       $request->header(Cookie => $ENV{'HTTP_COOKIE'});
       my $response=$ua->request($request);
   
       return $response->content;
   }
   
   # ------------------------------------------------------------------------- Log
   
   sub log {
       my ($dom,$nam,$hom,$what)=@_;
       return reply("log:$dom:$nam:$what",$hom);
   }
   
 # ----------------------------------------------------------------------- Store  # ----------------------------------------------------------------------- Store
   
 sub store {  sub store {
     my %storehash=shift;      my %storehash=shift;
     my $command=;  
     my $namevalue='';      my $namevalue='';
     map {      map {
         $namevalue.=escape($_).'='.escape($storehash{$_}).'&';          $namevalue.=escape($_).'='.escape($storehash{$_}).'&';
Line 351  sub restore { Line 389  sub restore {
  my ($name,$value)=split(/\=/,$_);   my ($name,$value)=split(/\=/,$_);
         $returnhash{&unescape($name)}=&unescape($value);          $returnhash{&unescape($name)}=&unescape($value);
     } split(/\&/,$answer);      } split(/\&/,$answer);
     return $returnhash;      return %returnhash;
 }  }
   
 # -------------------------------------------------------- Get user priviledges  # -------------------------------------------------------- Get user priviledges
Line 458  sub get { Line 496  sub get {
    return %returnhash;     return %returnhash;
 }  }
   
   # -------------------------------------------------------------- dump interface
   
   sub dump {
      my $namespace=shift;
      my $rep=reply("dump:$ENV{'user.domain'}:$ENV{'user.name'}:$namespace",
                   $ENV{'user.home'});
      my @pairs=split(/\&/,$rep);
      my %returnhash=();
      map {
         my ($key,$value)=split(/=/,$_);
         $returnhash{unespace($key)}=unescape($value);
      } @pairs;
      return %returnhash;
   }
   
 # --------------------------------------------------------------- put interface  # --------------------------------------------------------------- put interface
   
 sub put {  sub put {
Line 497  sub allowed { Line 550  sub allowed {
     my ($priv,$uri)=@_;      my ($priv,$uri)=@_;
     $uri=~s/^\/res//;      $uri=~s/^\/res//;
     $uri=~s/^\///;      $uri=~s/^\///;
       if ($uri=~/^adm\//) {
    return 'F';
       }
     my $thisallowed='';      my $thisallowed='';
     if ($ENV{'user.priv./'}=~/$priv\&([^\:]*)/) {      if ($ENV{'user.priv./'}=~/$priv\&([^\:]*)/) {
        $thisallowed.=$1;         $thisallowed.=$1;
Line 535  sub plaintext { Line 591  sub plaintext {
 sub assignrole {  sub assignrole {
 }  }
   
   # ------------------------------------------------------------ Directory lister
   
   sub dirlist {
       my $uri=shift;
       $uri=~s/^\///;
       $uri=~s/\/$//;
       my ($res,$udom,$uname,@rest)=split(/\//,$uri);
       if ($udom) {
        if ($uname) {
          my $listing=reply('ls:'.$perlvar{'lonDocRoot'}.'/'.$uri,
                         homeserver($uname,$udom));
          return split(/:/,$listing);
        } else {
          my $tryserver;
          my %allusers=();
          foreach $tryserver (keys %libserv) {
     if ($hostdom{$tryserver} eq $udom) {
                my $listing=reply('ls:'.$perlvar{'lonDocRoot'}.'/res/'.$udom,
          $tryserver);
                if (($listing ne 'no_such_dir') && ($listing ne 'empty')
                 && ($listing ne 'con_lost')) {
                   map {
                     my ($entry,@stat)=split(/&/,$_);
                     $allusers{$entry}=1;
                   } split(/:/,$listing);
                }
     }
          }
          my $alluserstr='';
          map {
              $alluserstr.=$_.'&user:';
          } sort keys %allusers;
          $alluserstr=~s/:$//;
          return split(/:/,$alluserstr);
        } 
      } else {
          my $tryserver;
          my %alldom=();
          foreach $tryserver (keys %libserv) {
      $alldom{$hostdom{$tryserver}}=1;
          }
          my $alldomstr='';
          map {
             $alldomstr.=$perlvar{'lonDocRoot'}.'/res/'.$_.'&domain:';
          } sort keys %alldom;
          $alldomstr=~s/:$//;
          return split(/:/,$alldomstr);       
      }
   }
   
 # -------------------------------------------------------- Escape Special Chars  # -------------------------------------------------------- Escape Special Chars
   
 sub escape {  sub escape {

Removed from v.1.12  
changed lines
  Added in v.1.19


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