[LON-CAPA-cvs] cvs: loncom(version_2_11_X) / lond

raeburn raeburn at source.lon-capa.org
Sun Oct 25 23:47:15 EDT 2020


raeburn		Mon Oct 26 03:47:15 2020 EDT

  Modified files:              (Branch: version_2_11_X)
    /loncom	lond 
  Log:
  - For 2.11
    Backport 1.564
  
  
Index: loncom/lond
diff -u loncom/lond:1.489.2.38 loncom/lond:1.489.2.39
--- loncom/lond:1.489.2.38	Tue May  5 20:28:56 2020
+++ loncom/lond	Mon Oct 26 03:47:15 2020
@@ -2,7 +2,7 @@
 # The LearningOnline Network
 # lond "LON Daemon" Server (port "LOND" 5663)
 #
-# $Id: lond,v 1.489.2.38 2020/05/05 20:28:56 raeburn Exp $
+# $Id: lond,v 1.489.2.39 2020/10/26 03:47:15 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -63,7 +63,7 @@
 my $status='';
 my $lastlog='';
 
-my $VERSION='$Revision: 1.489.2.38 $'; #' stupid emacs
+my $VERSION='$Revision: 1.489.2.39 $'; #' stupid emacs
 my $remoteVERSION;
 my $currenthostid="default";
 my $currentdomainid;
@@ -5223,8 +5223,65 @@
 &register_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;
+}
+&register_handler("updatebalcookie", \&update_balcookie_handler, 0, 1, 0);
+
+#
 #  Process the delbalcookie command. This command deletes a balancer
-#  cookie in the lonBalancedir directory created by switchserver
+#  cookie in the lonBalancedir directory on a load balancer node.
 #
 # Parameters:
 #   $cmd      - Command that got us here.
@@ -5242,6 +5299,7 @@
     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'};




More information about the LON-CAPA-cvs mailing list