From: Tom Clegg Date: Fri, 12 Jun 2015 05:53:05 +0000 (-0400) Subject: 5824: Move quoted-logging function to SDK. X-Git-Tag: 1.1.0~1406^2~14 X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/e14e011f667d314e557c580de69a271534b6149f?hp=2dfb886e960cf918e54b5f03477f464afb322a9b 5824: Move quoted-logging function to SDK. --- diff --git a/sdk/go/httpserver/log.go b/sdk/go/httpserver/log.go new file mode 100644 index 0000000000..7bee88742c --- /dev/null +++ b/sdk/go/httpserver/log.go @@ -0,0 +1,23 @@ +package httpserver + +import ( + "log" + "strings" +) + +var escaper = strings.NewReplacer("\"", "\\\"", "\\", "\\\\", "\n", "\\n") + +// Log calls log.Println but first transforms strings so they are +// safer to write in logs (e.g., 'foo"bar' becomes +// '"foo\"bar"'). Non-string args are left alone. +func Log(args ...interface{}) { + newargs := make([]interface{}, len(args)) + for i, arg := range args { + if s, ok := arg.(string); ok { + newargs[i] = "\"" + escaper.Replace(s) + "\"" + } else { + newargs[i] = arg + } + } + log.Println(newargs...) +} diff --git a/services/arv-git-httpd/auth_handler.go b/services/arv-git-httpd/auth_handler.go index ff1a1d5e9b..741e543850 100644 --- a/services/arv-git-httpd/auth_handler.go +++ b/services/arv-git-httpd/auth_handler.go @@ -57,7 +57,7 @@ func (h *authHandler) ServeHTTP(wOrig http.ResponseWriter, r *http.Request) { passwordToLog = apiToken[0:10] } - log.Println(quoteStrings(r.RemoteAddr, passwordToLog, w.WroteStatus(), statusText, repoName, r.Method, r.URL.Path)...) + httpserver.Log(r.RemoteAddr, passwordToLog, w.WroteStatus(), statusText, repoName, r.Method, r.URL.Path) }() creds := auth.NewCredentialsFromHTTPRequest(r) @@ -164,16 +164,3 @@ func (h *authHandler) ServeHTTP(wOrig http.ResponseWriter, r *http.Request) { handlerCopy.Env = append(handlerCopy.Env, "REMOTE_USER="+r.RemoteAddr) // Should be username handlerCopy.ServeHTTP(&w, r) } - -var escaper = strings.NewReplacer("\"", "\\\"", "\\", "\\\\", "\n", "\\n") - -// Transform strings so they are safer to write in logs (e.g., -// 'foo"bar' becomes '"foo\"bar"'). Non-string args are left alone. -func quoteStrings(args ...interface{}) []interface{} { - for i, arg := range args { - if s, ok := arg.(string); ok { - args[i] = "\"" + escaper.Replace(s) + "\"" - } - } - return args -}