From 1fbfe88bb245e7dd0fbccee420280db9e3a5e40f Mon Sep 17 00:00:00 2001 From: "kim (grufwub)" Date: Mon, 13 Jul 2020 09:21:13 +0100 Subject: [PATCH] update CGI implementation to include more required variables Signed-off-by: kim (grufwub) --- core/cgi.go | 7 +++++++ core/server.go | 9 ++++++--- core/string_constants.go | 4 ++-- gopher/main.go | 2 +- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/core/cgi.go b/core/cgi.go index d9a272a..3fb963f 100644 --- a/core/cgi.go +++ b/core/cgi.go @@ -10,6 +10,8 @@ import ( ) var ( + protocol string + // cgiEnv holds the global slice of constant CGI environment variables cgiEnv []string @@ -28,6 +30,11 @@ func setupInitialCGIEnv(safePath string) []string { env := make([]string, 0) SystemLog.Info("CGI safe path: %s", safePath) + env = append(env, "GATEWAY_INTERFACE=CGI/1.1") + env = append(env, "SERVER_SOFTWARE=gophor "+Version) + env = append(env, "SERVER_PROTOCOL="+protocol) + env = append(env, "REQUEST_METHOD=GET") // always GET (in HTTP terms anywho) + env = append(env, "CONTENT_LENGTH=0") // always 0 env = append(env, "PATH="+safePath) env = append(env, "SERVER_NAME="+Hostname) env = append(env, "SERVER_PORT="+FwdPort) diff --git a/core/server.go b/core/server.go index 89f1925..766e691 100644 --- a/core/server.go +++ b/core/server.go @@ -23,7 +23,7 @@ var ( ) // ParseFlagsAndSetup parses necessary core server flags, and sets up the core ready for Start() to be called -func ParseFlagsAndSetup(errorMessageFunc func(ErrorCode) string) { +func ParseFlagsAndSetup(proto string, errorMessageFunc func(ErrorCode) string) { // Setup numerous temporary flag variables, and store the rest // directly in their final operating location. Strings are stored // in `string_constants.go` to allow for later localization @@ -91,11 +91,14 @@ func ParseFlagsAndSetup(errorMessageFunc func(ErrorCode) string) { Port = strconv.Itoa(int(*port)) FwdPort = strconv.Itoa(int(*fwdPort)) + // Set protocol string (only really used by CGI and one call to SystemLog) + protocol = proto + // Setup listener var err Error serverListener, err = newListener(BindAddr, Port) if err != nil { - SystemLog.Fatal(listenerBeginFailStr, BindAddr, Port, err.Error()) + SystemLog.Fatal(listenerBeginFailStr, protocol, Hostname, FwdPort, BindAddr, Port, err.Error()) } // Host buffer sizes @@ -180,7 +183,7 @@ func Start(serve func(*Client)) { go FileSystem.StartMonitor() // Start the listener - SystemLog.Info(listeningOnStr, BindAddr, Port, Hostname, FwdPort) + SystemLog.Info(listeningOnStr, protocol, Hostname, FwdPort, BindAddr, Port) go func() { for { client, err := serverListener.Accept() diff --git a/core/string_constants.go b/core/string_constants.go index b9343c8..d4ecafb 100644 --- a/core/string_constants.go +++ b/core/string_constants.go @@ -85,8 +85,8 @@ const ( chDirStr = "Entered server dir: %s" chDirErrStr = "Error entering server directory: %s" - listenerBeginFailStr = "Failed to start listener on %s:%s (%s)" - listeningOnStr = "Listening on: %s:%s (%s:%s)" + listenerBeginFailStr = "Failed to start listener on %s://%s:%s (%s:%s) - %s" + listeningOnStr = "Listening on %s://%s:%s (%s:%s)" cacheMonitorStartStr = "Starting cache monitor with freq: %s" diff --git a/gopher/main.go b/gopher/main.go index 134a436..231978b 100644 --- a/gopher/main.go +++ b/gopher/main.go @@ -13,7 +13,7 @@ func setup() { admin := flag.String(adminFlagStr, "", adminDescStr) desc := flag.String(descFlagStr, "", descDescStr) geo := flag.String(geoFlagStr, "", geoDescStr) - core.ParseFlagsAndSetup(generateErrorMessage) + core.ParseFlagsAndSetup("gopher", generateErrorMessage) // Setup gopher specific global variables subgophermapSizeMax = int64(1048576.0 * *subgopherSizeMax) // convert float to megabytes