--- loncom/lond 2021/02/10 16:07:28 1.489.2.35.2.4 +++ loncom/lond 2020/05/04 17:08:26 1.489.2.37 @@ -2,7 +2,7 @@ # The LearningOnline Network # lond "LON Daemon" Server (port "LOND" 5663) # -# $Id: lond,v 1.489.2.35.2.4 2021/02/10 16:07:28 raeburn Exp $ +# $Id: lond,v 1.489.2.37 2020/05/04 17:08:26 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -63,7 +63,7 @@ my $DEBUG = 0; # Non zero to ena my $status=''; my $lastlog=''; -my $VERSION='$Revision: 1.489.2.35.2.4 $'; #' stupid emacs +my $VERSION='$Revision: 1.489.2.37 $'; #' stupid emacs my $remoteVERSION; my $currenthostid="default"; my $currentdomainid; @@ -4593,10 +4593,11 @@ sub course_sessions_handler { my ($uname,$udom) = ($1,$2); next unless (-e "$perlvar{'lonDaemons'}/tmp/$uname$dbsuffix"); my $mtime = (stat("$perlvar{'lonIDsDir'}/$filename"))[9]; + my $since=$now-$mtime; if ($lastactivity < 0) { - next if ($mtime-$now > $lastactivity); + next if ($since <= $lastactivity); } else { - next if ($now-$mtime > $lastactivity); + next if ($since > $lastactivity); } $sessions{$uname.':'.$udom} = $mtime; } @@ -4662,7 +4663,7 @@ sub put_domain_handler { # domain directory. # # Parameters: -# $cmd - Command request keyword (getdom). +# $cmd - Command request keyword (get). # $tail - Tail of the command. This is a colon separated list # consisting of the domain and the 'namespace' # which selects the gdbm file to do the lookup in, @@ -4679,52 +4680,34 @@ sub put_domain_handler { sub get_domain_handler { my ($cmd, $tail, $client) = @_; + my $userinput = "$cmd:$tail"; my ($udom,$namespace,$what)=split(/:/,$tail,3); - if ($namespace =~ /^enc/) { - &Failure( $client, "refused\n", $userinput); - } else { - my $res = LONCAPA::Lond::get_dom($userinput); - if ($res =~ /^error:/) { - &Failure($client, \$res, $userinput); + chomp($what); + my @queries=split(/\&/,$what); + my $qresult=''; + my $hashref = &tie_domain_hash($udom, "$namespace", &GDBM_READER()); + if ($hashref) { + for (my $i=0;$i<=$#queries;$i++) { + $qresult.="$hashref->{$queries[$i]}&"; + } + if (&untie_domain_hash($hashref)) { + $qresult=~s/\&$//; + &Reply($client, \$qresult, $userinput); } else { - &Reply($client, \$res, $userinput); + &Failure( $client, "error: ".($!+0)." untie(GDBM) Failed ". + "while attempting getdom\n",$userinput); } + } else { + &Failure($client, "error: ".($!+0)." tie(GDBM) Failed ". + "while attempting getdom\n",$userinput); } return 1; } ®ister_handler("getdom", \&get_domain_handler, 0, 1, 0); -sub encrypted_get_domain_handler { - my ($cmd, $tail, $client) = @_; - - my $userinput = "$cmd:$tail"; - - my $res = LONCAPA::Lond::get_dom($userinput); - if ($res =~ /^error:/) { - &Failure($client, \$res, $userinput); - } else { - if ($cipher) { - my $cmdlength=length($res); - $res.=" "; - my $encres=''; - for (my $encidx=0;$encidx<=$cmdlength;$encidx+=8) { - $encres.= unpack("H16", - $cipher->encrypt(substr($res, - $encidx, - 8))); - } - &Reply( $client,"enc:$cmdlength:$encres\n",$userinput); - } else { - &Failure( $client, "error:no_key\n",$userinput); - } - } - return 1; -} -®ister_handler("egetdom", \&encrypted_get_domain_handler, 1, 1, 0); - # # Puts an id to a domains id database. # @@ -5241,65 +5224,8 @@ sub tmp_del_handler { ®ister_handler("tmpdel", \&tmp_del_handler, 0, 1, 0); # -# Process the updatebalcookie command. This command updates a -# cookie in the lonBalancedir directory on a load balancer node. -# -# Parameters: -# $cmd - Command that got us here. -# $tail - Tail of the request (escaped cookie: escaped current entry) -# -# $client - socket open on the client process. -# -# Returns: -# 1 - Indicating processing should continue. -# Side Effects: -# A cookie file is updated from the lonBalancedir directory -# A reply is sent to the client. -# -sub update_balcookie_handler { - my ($cmd, $tail, $client) = @_; - - my $userinput= "$cmd:$tail"; - chomp($tail); - my ($cookie,$lastentry) = map { &unescape($_) } (split(/:/,$tail)); - - my $updatedone; - if ($cookie =~ /^$LONCAPA::match_domain\_$LONCAPA::match_username\_[a-f0-9]{32}$/) { - my $execdir=$perlvar{'lonBalanceDir'}; - if (-e "$execdir/$cookie.id") { - my $doupdate; - if (open(my $fh,'<',"$execdir/$cookie.id")) { - while (my $line = <$fh>) { - chomp($line); - if ($line eq $lastentry) { - $doupdate = 1; - last; - } - } - close($fh); - } - if ($doupdate) { - if (open(my $fh,'>',"$execdir/$cookie.id")) { - print $fh $clientname; - close($fh); - $updatedone = 1; - } - } - } - } - if ($updatedone) { - &Reply($client, "ok\n", $userinput); - } else { - &Failure( $client, "error: ".($!+0)."file update failed ". - "while attempting updatebalcookie\n", $userinput); - } - return 1; -} -®ister_handler("updatebalcookie", \&update_balcookie_handler, 0, 1, 0); - -# # Process the delbalcookie command. This command deletes a balancer -# cookie in the lonBalancedir directory on a load balancer node. +# cookie in the lonBalancedir directory created by switchserver # # Parameters: # $cmd - Command that got us here. @@ -5317,7 +5243,6 @@ sub del_balcookie_handler { my $userinput= "$cmd:$cookie"; chomp($cookie); - $cookie = &unescape($cookie); my $deleted = ''; if ($cookie =~ /^$LONCAPA::match_domain\_$LONCAPA::match_username\_[a-f0-9]{32}$/) { my $execdir=$perlvar{'lonBalanceDir'};