--- loncom/lonnet/perl/lonnet.pm 2001/01/05 20:45:09 1.87 +++ loncom/lonnet/perl/lonnet.pm 2001/01/09 22:12:28 1.90 @@ -83,7 +83,7 @@ # 11/2,11/14,11/15,11/16,11/20,11/21,11/22,11/25,11/27, # 12/02,12/12,12/13,12/14,12/28,12/29 Gerd Kortemeyer # 05/01/01 Guy Albertelli -# 05/01 Gerd Kortemeyer +# 05/01,06/01,09/01 Gerd Kortemeyer package Apache::lonnet; @@ -97,6 +97,7 @@ use IO::Socket; use GDBM_File; use Apache::Constants qw(:common :http); use HTML::TokeParser; +use Fcntl qw(:flock); # --------------------------------------------------------------------- Logging @@ -179,6 +180,11 @@ sub reconlonc { sub critical { my ($cmd,$server)=@_; + unless ($hostname{$server}) { + &logthis("<font color=blue>WARNING:". + " Critical message to unknown server ($server)</font>"); + return 'no_such_host'; + } my $answer=reply($cmd,$server); if ($answer eq 'con_lost') { my $pingreply=reply('ping',$server); @@ -228,6 +234,7 @@ sub critical { sub appenv { my %newenv=@_; + my ($in,$out); map { if (($newenv{$_}=~/^user\.role/) || ($newenv{$_}=~/^user\.priv/)) { &logthis("<font color=blue>WARNING: ". @@ -243,8 +250,17 @@ sub appenv { unless ($fh=Apache::File->new("$ENV{'user.environment'}")) { return 'error'; } + unless (flock($fh,LOCK_SH)) { + &logthis("<font color=blue>WARNING: ". + 'Could not obtain shared lock in appenv: '.$!); + $fh->close(); + return 'error: '.$!; + } @oldenv=<$fh>; + $in=$#oldenv+1; + $fh->close(); } + &logthis("<font color=green>Number of elements read appenv: ".$in."from".join(" ",caller)); for (my $i=0; $i<=$#oldenv; $i++) { chomp($oldenv[$i]); if ($oldenv[$i] ne '') { @@ -260,12 +276,20 @@ sub appenv { return 'error'; } my $newname; - flock($fh,'LOCK_EX'); - foreach $newname (keys %newenv) { + unless (flock($fh,LOCK_EX)) { + &logthis("<font color=blue>WARNING: ". + 'Could not obtain exclusive lock in appenv: '.$!); + $fh->close(); + return 'error: '.$!; + } + $out=0; + foreach $newname (sort keys %newenv) { print $fh "$newname=$newenv{$newname}\n"; + $out++; } $fh->close(); } + &logthis("<font color=green>Number of elements read appenv: ".$in." number out:".$out."from".join(" ",caller)); return 'ok'; } # ----------------------------------------------------- Delete from Environment @@ -284,14 +308,26 @@ sub delenv { unless ($fh=Apache::File->new("$ENV{'user.environment'}")) { return 'error'; } + unless (flock($fh,LOCK_SH)) { + &logthis("<font color=blue>WARNING: ". + 'Could not obtain shared lock in delenv: '.$!); + $fh->close(); + return 'error: '.$!; + } @oldenv=<$fh>; + $fh->close(); } { my $fh; unless ($fh=Apache::File->new(">$ENV{'user.environment'}")) { return 'error'; } - flock($fh,'LOCK_EX'); + unless (flock($fh,LOCK_EX)) { + &logthis("<font color=blue>WARNING: ". + 'Could not obtain exclusive lock in delenv: '.$!); + $fh->close(); + return 'error: '.$!; + } map { unless ($_=~/^$delthis/) { print $fh $_; } } @oldenv;