diff --git a/dynamic.go b/dynamic.go index 624d5af..d89d6a2 100644 --- a/dynamic.go +++ b/dynamic.go @@ -73,7 +73,7 @@ func handleCGI(config Config, path string, cgiPath string, URL *url.URL, log *Lo header, _, err := bufio.NewReader(strings.NewReader(string(response))).ReadLine() status, err2 := strconv.Atoi(strings.Fields(string(header))[0]) if err != nil || err2 != nil { - errorLog.Println("Unable to parse first line of output from CGI process " + path + " as valid Gemini response header.") + errorLog.Println("Unable to parse first line of output from CGI process " + path + " as valid Gemini response header. Line was: " + string(header)) conn.Write([]byte("42 CGI error!\r\n")) log.Status = 42 return @@ -83,11 +83,12 @@ func handleCGI(config Config, path string, cgiPath string, URL *url.URL, log *Lo conn.Write(response) } -func handleSCGI(URL *url.URL, scgiPath string, scgiSocket string, config Config, log *LogEntry, conn net.Conn) { +func handleSCGI(URL *url.URL, scgiPath string, scgiSocket string, config Config, log *LogEntry, errorLog *log.Logger, conn net.Conn) { // Connect to socket socket, err := net.Dial("unix", scgiSocket) if err != nil { + errorLog.Println("Error connecting to SCGI socket " + scgiSocket + ": " + err.Error()) conn.Write([]byte("42 Error connecting to SCGI service!\r\n")) log.Status = 42 return @@ -119,6 +120,7 @@ func handleSCGI(URL *url.URL, scgiPath string, scgiSocket string, config Config, break } else if !first { // Err + errorLog.Println("Error reading from SCGI socket " + scgiSocket + ": " + err.Error()) conn.Write([]byte("42 Error reading from SCGI service!\r\n")) log.Status = 42 return diff --git a/handler.go b/handler.go index a7c0118..53c173c 100644 --- a/handler.go +++ b/handler.go @@ -86,7 +86,7 @@ func handleGeminiRequest(conn net.Conn, config Config, accessLogEntries chan Log } // Check for redirects - handleRedirects(URL, config, conn, &log) + handleRedirects(URL, config, conn, &log, errorLog) if log.Status != 0 { return } @@ -94,7 +94,7 @@ func handleGeminiRequest(conn net.Conn, config Config, accessLogEntries chan Log // Check whether this URL is mapped to an SCGI app for scgiPath, scgiSocket := range config.SCGIPaths { if strings.HasPrefix(URL.Path, scgiPath) { - handleSCGI(URL, scgiPath, scgiSocket, config, &log, conn) + handleSCGI(URL, scgiPath, scgiSocket, config, &log, errorLog, conn) return } } @@ -116,6 +116,7 @@ func handleGeminiRequest(conn net.Conn, config Config, accessLogEntries chan Log log.Status = 51 return } else if err != nil { + errorLog.Println("Error getting info for file " + path + ": " + err.Error()) conn.Write([]byte("40 Temporary failure!\r\n")) log.Status = 40 return @@ -239,16 +240,17 @@ func parseMollyFiles(path string, config *Config, errorLog *log.Logger) { } } -func handleRedirects(URL *url.URL, config Config, conn net.Conn, log *LogEntry) { - handleRedirectsInner(URL, config.TempRedirects, 30, conn, log) - handleRedirectsInner(URL, config.PermRedirects, 31, conn, log) +func handleRedirects(URL *url.URL, config Config, conn net.Conn, log *LogEntry, errorLog *log.Logger) { + handleRedirectsInner(URL, config.TempRedirects, 30, conn, log, errorLog) + handleRedirectsInner(URL, config.PermRedirects, 31, conn, log, errorLog) } -func handleRedirectsInner(URL *url.URL, redirects map[string]string, status int, conn net.Conn, log *LogEntry) { +func handleRedirectsInner(URL *url.URL, redirects map[string]string, status int, conn net.Conn, log *LogEntry, errorLog *log.Logger) { strStatus := strconv.Itoa(status) for src, dst := range redirects { compiled, err := regexp.Compile(src) if err != nil { + errorLog.Println("Error compiling redirect regexp " + src + ": " + err.Error()) continue } if compiled.MatchString(URL.Path) { @@ -308,6 +310,7 @@ func serveFile(path string, log *LogEntry, conn net.Conn, config Config, errorLo contents, err := ioutil.ReadFile(path) if err != nil { + errorLog.Println("Error reading file " + path + ": " + err.Error()) conn.Write([]byte("50 Error!\r\n")) log.Status = 50 return