--- 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("WARNING:".
+ " Critical message to unknown server ($server)");
+ 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("WARNING: ".
@@ -243,8 +250,17 @@ sub appenv {
unless ($fh=Apache::File->new("$ENV{'user.environment'}")) {
return 'error';
}
+ unless (flock($fh,LOCK_SH)) {
+ &logthis("WARNING: ".
+ 'Could not obtain shared lock in appenv: '.$!);
+ $fh->close();
+ return 'error: '.$!;
+ }
@oldenv=<$fh>;
+ $in=$#oldenv+1;
+ $fh->close();
}
+ &logthis("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("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("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("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("WARNING: ".
+ 'Could not obtain exclusive lock in delenv: '.$!);
+ $fh->close();
+ return 'error: '.$!;
+ }
map {
unless ($_=~/^$delthis/) { print $fh $_; }
} @oldenv;