--- loncom/lond 2003/12/22 11:29:58 1.167 +++ loncom/lond 2003/12/22 12:01:54 1.168 @@ -2,7 +2,7 @@ # The LearningOnline Network # lond "LON Daemon" Server (port "LOND" 5663) # -# $Id: lond,v 1.167 2003/12/22 11:29:58 foxr Exp $ +# $Id: lond,v 1.168 2003/12/22 12:01:54 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -52,7 +52,7 @@ my $DEBUG = 0; # Non zero to ena my $status=''; my $lastlog=''; -my $VERSION='$Revision: 1.167 $'; #' stupid emacs +my $VERSION='$Revision: 1.168 $'; #' stupid emacs my $remoteVERSION; my $currenthostid; my $currentdomainid; @@ -476,18 +476,67 @@ sub ReinitProcess { } return 'ok'; } +# Validate a line in a configuration file edit script: +# Validation includes: +# - Ensuring the command is valid. +# - Ensuring the command has sufficient parameters +# Parameters: +# scriptline - A line to validate (\n has been stripped for what it's worth). # -# Called to edit a file +# Return: +# 0 - Invalid scriptline. +# 1 - Valid scriptline +# NOTE: +# Only the command syntax is checked, not the executability of the +# command. +# +sub isValidEditCommand { + my $scriptline = shift; + + # Line elements are pipe separated: + + my ($command, $key, $newline) = split(/\|/, $scriptline); + &logthis(' isValideditCommand checking: '. + "Command = '$command', Key = '$key', Newline = '$newline' \n"); + + if ($command eq "delete") { + # + # key with no newline. + # + if( ($key eq "") || ($newline ne "")) { + return 0; # Must have key but no newline. + } else { + return 1; # Valid syntax. + } + } elsif (($command eq "append") || ($command eq "replace")) { + # + # key and newline: + # + if (($key eq "") || ($newline eq "")) { + return 0; + } else { + return 1; + } + } else { + return 0; # Invalid command. + } + return 0; # Should not get here!!! +} + +# +# +# Called to edit a configuration table file # Parameters: # request - The entire command/request sent by lonc or lonManage # Return: # The reply to send to the client. +# sub EditFile { my $request = shift; # Split the command into it's pieces: edit:filetype:script - my ($request, $filetype, $script) = split(":", $request); + my ($request, $filetype, $script) = split(/:/, $request,3); # : in script # Check the pre-coditions for success: @@ -501,6 +550,15 @@ sub EditFile { # Split the edit script and check it's validity. + my @scriptlines = split(/\n/, $script); # one line per element. + my $linecount = scalar(@scriptlines); + for(my $i = 0; $i < $linecount; $i++) { + chomp($scriptlines[$i]); + if(!isValidEditCommand($scriptlines[$i])) { + return "error:edit with bad script line: '$scriptlines[$i]' \n"; + } + } + # Execute the edit operation. 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.