Diff for /loncom/lonnet/perl/lonnet.pm between versions 1.824.2.5 and 1.825

version 1.824.2.5, 2007/05/02 22:01:32 version 1.825, 2007/01/16 22:08:48
Line 367  sub transfer_profile_to_env { Line 367  sub transfer_profile_to_env {
     }      }
 }  }
   
 sub timed_flock {  
     my ($file,$lock_type) = @_;  
     my $failed=0;  
     eval {  
  local $SIG{__DIE__}='DEFAULT';  
  local $SIG{ALRM}=sub {  
     $failed=1;  
     die("failed lock");  
  };  
  alarm(13);  
  flock($file,$lock_type);  
  alarm(0);  
     };  
     if ($failed) {  
  return undef;  
     } else {  
  return 1;  
     }  
 }  
   
 # ---------------------------------------------------------- Append Environment  # ---------------------------------------------------------- Append Environment
   
 sub appenv {  sub appenv {
Line 401  sub appenv { Line 381  sub appenv {
             $env{$key}=$newenv{$key};              $env{$key}=$newenv{$key};
         }          }
     }      }
     open(my $env_file,$env{'user.environment'});      if (tie(my %disk_env,'GDBM_File',$env{'user.environment'},&GDBM_WRITER(),
     if (&timed_flock($env_file,LOCK_EX)      0640)) {
  &&  
  tie(my %disk_env,'GDBM_File',$env{'user.environment'},  
     (&GDBM_WRITER()|&GDBM_NOLOCK()),0640)) {  
  while (my ($key,$value) = each(%newenv)) {   while (my ($key,$value) = each(%newenv)) {
     $disk_env{$key} = $value;      $disk_env{$key} = $value;
  }   }
Line 422  sub delenv { Line 399  sub delenv {
                 "Attempt to delete from environment ".$delthis);                  "Attempt to delete from environment ".$delthis);
         return 'error';          return 'error';
     }      }
     open(my $env_file,$env{'user.environment'});      if (tie(my %disk_env,'GDBM_File',$env{'user.environment'},&GDBM_WRITER(),
     if (&timed_flock($env_file,LOCK_EX)      0640)) {
  &&  
  tie(my %disk_env,'GDBM_File',$env{'user.environment'},  
     (&GDBM_WRITER()|&GDBM_NOLOCK()),0640)) {  
  foreach my $key (keys(%disk_env)) {   foreach my $key (keys(%disk_env)) {
     if ($key=~/^$delthis/) {       if ($key=~/^$delthis/) { 
                 delete($env{$key});                  delete($env{$key});
Line 990  my %remembered; Line 964  my %remembered;
 my %accessed;  my %accessed;
 my $kicks=0;  my $kicks=0;
 my $hits=0;  my $hits=0;
 sub make_key {  
     my ($name,$id) = @_;  
     if (length($id) > 65   
  && length(&escape($id)) > 200) {  
  $id=length($id).':'.&Digest::MD5::md5_hex($id);  
     }  
     return &escape($name.':'.$id);  
 }  
   
 sub devalidate_cache_new {  sub devalidate_cache_new {
     my ($name,$id,$debug) = @_;      my ($name,$id,$debug) = @_;
     if ($debug) { &Apache::lonnet::logthis("deleting $name:$id"); }      if ($debug) { &Apache::lonnet::logthis("deleting $name:$id"); }
     $id=&make_key($name,$id);      $id=&escape($name.':'.$id);
     $memcache->delete($id);      $memcache->delete($id);
     delete($remembered{$id});      delete($remembered{$id});
     delete($accessed{$id});      delete($accessed{$id});
Line 1010  sub devalidate_cache_new { Line 975  sub devalidate_cache_new {
   
 sub is_cached_new {  sub is_cached_new {
     my ($name,$id,$debug) = @_;      my ($name,$id,$debug) = @_;
     $id=&make_key($name,$id);      $id=&escape($name.':'.$id);
     if (exists($remembered{$id})) {      if (exists($remembered{$id})) {
  if ($debug) { &Apache::lonnet::logthis("Earyl return $id of $remembered{$id} "); }   if ($debug) { &Apache::lonnet::logthis("Earyl return $id of $remembered{$id} "); }
  $accessed{$id}=[&gettimeofday()];   $accessed{$id}=[&gettimeofday()];
Line 1033  sub is_cached_new { Line 998  sub is_cached_new {
   
 sub do_cache_new {  sub do_cache_new {
     my ($name,$id,$value,$time,$debug) = @_;      my ($name,$id,$value,$time,$debug) = @_;
     $id=&make_key($name,$id);      $id=&escape($name.':'.$id);
     my $setvalue=$value;      my $setvalue=$value;
     if (!defined($setvalue)) {      if (!defined($setvalue)) {
  $setvalue='__undef__';   $setvalue='__undef__';
Line 1042  sub do_cache_new { Line 1007  sub do_cache_new {
  $time=600;   $time=600;
     }      }
     if ($debug) { &Apache::lonnet::logthis("Setting $id to $value"); }      if ($debug) { &Apache::lonnet::logthis("Setting $id to $value"); }
     if (!($memcache->set($id,$setvalue,$time))) {      $memcache->set($id,$setvalue,$time);
  &logthis("caching of id -> $id  failed");  
     }  
     # need to make a copy of $value      # need to make a copy of $value
     #&make_room($id,$value,$debug);      #&make_room($id,$value,$debug);
     return $value;      return $value;
Line 3466  sub get_portfolio_access { Line 3429  sub get_portfolio_access {
             }              }
             if (@users > 0) {              if (@users > 0) {
                 foreach my $userkey (@users) {                  foreach my $userkey (@users) {
                     if (ref($access_hash->{$userkey}{'users'}) eq 'ARRAY') {                      if (exists($access_hash->{$userkey}{'users'}{$env{'user.name'}.':'.$env{'user.domain'}})) {
                         foreach my $item (@{$access_hash->{$userkey}{'users'}}) {                          return 'ok';
                             if (ref($item) eq 'HASH') {                      }
                                 if (($item->{'uname'} eq $env{'user.name'}) &&  
                                     ($item->{'udom'} eq $env{'user.domain'})) {  
                                     return 'ok';  
                                 }  
                             }  
                         }  
                     }   
                 }                  }
             }              }
             my %roleshash;              my %roleshash;
Line 7185  sub repcopy_userfile { Line 7141  sub repcopy_userfile {
     } else {      } else {
  my $lwpresp = &getuploaded('GET',$uri,$cdom,$cnum,\$info,\$rtncode);   my $lwpresp = &getuploaded('GET',$uri,$cdom,$cnum,\$info,\$rtncode);
  if ($lwpresp ne 'ok') {   if ($lwpresp ne 'ok') {
     return -1;      my $ua=new LWP::UserAgent;
       my $request=new HTTP::Request('GET',&tokenwrapper($uri));
       # FIXME, right reads everything into memory then writes it out
       # doing something like
       #    my $response=$ua->request($request,$file);
       # would make this write directly to disk
       my $response=$ua->request($request);
       if ($response->is_success()) {
    $info=$response->content;
       } else {
    return -1;
       }
  }   }
  my @parts = ($cdom,$cnum);    my @parts = ($cdom,$cnum); 
  if ($filename =~ m|^(.+)/[^/]+$|) {   if ($filename =~ m|^(.+)/[^/]+$|) {

Removed from v.1.824.2.5  
changed lines
  Added in v.1.825


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