[LON-CAPA-cvs] cvs: loncom / lond

foxr lon-capa-cvs@mail.lon-capa.org
Mon, 22 Dec 2003 11:03:37 -0000


foxr		Mon Dec 22 06:03:37 2003 EDT

  Modified files:              
    /loncom	lond 
  Log:
  Skeletal support for edit subcommand.
  
  
Index: loncom/lond
diff -u loncom/lond:1.165 loncom/lond:1.166
--- loncom/lond:1.165	Fri Dec 12 16:37:42 2003
+++ loncom/lond	Mon Dec 22 06:03:37 2003
@@ -2,7 +2,7 @@
 # The LearningOnline Network
 # lond "LON Daemon" Server (port "LOND" 5663)
 #
-# $Id: lond,v 1.165 2003/12/12 21:37:42 albertel Exp $
+# $Id: lond,v 1.166 2003/12/22 11:03:37 foxr Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -52,7 +52,7 @@
 my $status='';
 my $lastlog='';
 
-my $VERSION='$Revision: 1.165 $'; #' stupid emacs
+my $VERSION='$Revision: 1.166 $'; #' stupid emacs
 my $remoteVERSION;
 my $currenthostid;
 my $currentdomainid;
@@ -162,37 +162,42 @@
 
     #   Clean out the old table first..
 
-    foreach my $key (keys %managers) {
-	delete $managers{$key};
-    }
-
-    my $tablename = $perlvar{'lonTabDir'}."/managers.tab";
-    if (!open (MANAGERS, $tablename)) {
-	logthis('<font color="red">No manager table.  Nobody can manage!!</font>');
-	return;
-    }
-    while(my $host = <MANAGERS>) {
-	chomp($host);
-	if (!defined $hostip{$host}) { # This is a non cluster member
-
+   foreach my $key (keys %managers) {
+      delete $managers{$key};
+   }
+
+   my $tablename = $perlvar{'lonTabDir'}."/managers.tab";
+   if (!open (MANAGERS, $tablename)) {
+      logthis('<font color="red">No manager table.  Nobody can manage!!</font>');
+      return;
+   }
+   while(my $host = <MANAGERS>) {
+      chomp($host);
+      if ($host =~ "^#") {                  # Comment line.
+         logthis('<font color="green"> Skipping line: '. "$host</font>\n");
+         next;
+      }
+      if (!defined $hostip{$host}) { # This is a non cluster member
 	    #  The entry is of the form:
 	    #    cluname:hostname
 	    #  cluname - A 'cluster hostname' is needed in order to negotiate
 	    #            the host key.
 	    #  hostname- The dns name of the host.
 	    #
-	    
-	    my($cluname, $dnsname) = split(/:/, $host);
-	    open(MGRPIPE, "/usr/bin/host $dnsname |") || die "Can't make host pipeline";
-	    my $dnsinfo = <MGRPIPE>;
-	    chomp $dnsinfo;
-	    close MGRPIPE;
-	    my($jname, $jhas, $jaddress, $hostip) = split(/ /, $dnsinfo);
-	    $managers{$hostip} = $cluname;
-	} else {
-	    $managers{$hostip{$host}} = $host;  # Use info from cluster tab if clumemeber
-	}
-    }
+          my($cluname, $dnsname) = split(/:/, $host);
+          
+          my $ip = gethostbyname($dnsname);
+          if(defined($ip)) {                 # bad names don't deserve entry.
+            my $hostip = inet_ntoa($ip);
+            $managers{$hostip} = $cluname;
+            logthis('<font color="green"> registering manager '.
+                    "$dnsname as $cluname with $hostip </font>\n");
+         }
+      } else {
+         logthis('<font color="green"> existing host'." $host</font>\n");
+         $managers{$hostip{$host}} = $host;  # Use info from cluster tab if clumemeber
+      }
+   }
 }
 
 #
@@ -279,42 +284,30 @@
     my $adjusted;
     my $me        = $perlvar{'lonHostID'};
 
-    foreach my $line (split(/\n/,$contents)) {
+ foreach my $line (split(/\n/,$contents)) {
 	if(!(($line eq "") || ($line =~ /^ *\#/) || ($line =~ /^ *$/))) {
 	    chomp($line);
 	    my ($id,$domain,$role,$name,$ip,$maxcon,$idleto,$mincon)=split(/:/,$line);
 	    if ($id eq $me) {
-		open(PIPE, " /usr/bin/host $name |") || die "Cant' make host pipeline";
-		my $hostinfo = <PIPE>;
-		close PIPE;
-		
-		my ($hostname, $has, $address, $ipnew) = split(/ /,$hostinfo);
-		&logthis('<font color="green">'.
-			 "hostname = $hostname me = $me, name = $name   actual ip = $ipnew </font>");
-		
-		if ($hostname eq $name) { # Lookup succeeded..
-		    &logthis('<font color="green"> look up ok <font>');
-		    $ip = $ipnew;
-		} else {
-		    &logthis('<font color="green"> Lookup failed: '
-			     .$hostname." ne $name </font>");
-		}
+          my $ip = gethostbyname($name);
+          my $ipnew = inet_ntoa($ip);
+         $ip = $ipnew;
 		#  Reconstruct the host line and append to adjusted:
 		
-		my $newline = "$id:$domain:$role:$name:$ip";
-		if($maxcon ne "") { # Not all hosts have loncnew tuning params
-		    $newline .= ":$maxcon:$idleto:$mincon";
-		}
-		$adjusted .= $newline."\n";
+		   my $newline = "$id:$domain:$role:$name:$ip";
+		   if($maxcon ne "") { # Not all hosts have loncnew tuning params
+		     $newline .= ":$maxcon:$idleto:$mincon";
+		   }
+		   $adjusted .= $newline."\n";
 		
-	    } else {		# Not me, pass unmodified.
-		$adjusted .= $line."\n";
-	    }
+      } else {		# Not me, pass unmodified.
+		   $adjusted .= $line."\n";
+      }
 	} else {                  # Blank or comment never re-written.
 	    $adjusted .= $line."\n";	# Pass blanks and comments as is.
 	}
-    }
-    return $adjusted;
+ }
+ return $adjusted;
 }
 #
 #   InstallFile: Called to install an administrative file:
@@ -1224,22 +1217,41 @@
 		    }
 #--------------------------------------------------------------------- reinit
 		} elsif($userinput =~ /^reinit/) { # Encoded and manager
-		    if (($wasenc == 1) && isManager) {
-			my $cert = GetCertificate($userinput);
-			if(ValidManager($cert)) {
-			    chomp($userinput);
-			    my $reply = ReinitProcess($userinput);
-			    print $client  "$reply\n";
+			if (($wasenc == 1) && isManager) {
+				my $cert = GetCertificate($userinput);
+				if(ValidManager($cert)) {
+					chomp($userinput);
+					my $reply = ReinitProcess($userinput);
+					print $client  "$reply\n";
+				} else {
+					 print $client "refused\n";
+				}
 			} else {
-			    print $client "refused\n";
+				Reply($client, "refused\n", $userinput);
 			}
-		    } else {
-			Reply($client, "refused\n", $userinput);
-
-
-		    }
+#------------------------------------------------------------------------- edit
+		    } elsif ($userinput =~ /^edit/) {    # encoded and manager:
+			if(($wasenc ==1) && (isManager)) {
+			    my $cert = GetCertificate($userinput);
+			    if(ValidManager($cert)) {
+               my($command, $filetype, $script) = split(/:/, $userinput);
+               if (($filetype eq "hosts") || ($filetype eq "domain")) {
+                  if($script ne "") {
+                     Reply($client,"ok\n",$userinput);       # DEBUG: Call EditFile here.
+                  } else {
+                     Reply($client,"refused\n",$userinput);
+                  }
+               } else {
+                  Reply($client,"refused\n",$userinput);
+               }
+            } else {
+               Reply($client,"refused\n",$userinput);
+            }
+         } else {
+	     Reply($client,"refused\n",$userinput);
+	 }
 # ------------------------------------------------------------------------ auth
-		} elsif ($userinput =~ /^auth/) { # Encoded and client only.
+		    } elsif ($userinput =~ /^auth/) { # Encoded and client only.
 		    if (($wasenc==1) && isClient) {
 			my ($cmd,$udom,$uname,$upass)=split(/:/,$userinput);
 			chomp($upass);