From 055b10405ea02fb7adb3867141dc56464fda9a90 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Mon, 18 Dec 2017 22:23:11 -0500 Subject: use contexts for logging --- nslcd_server/ctx.go | 30 ++++++++++++++++++++++++++++++ nslcd_server/func_handlerequest.go.gen | 11 ++++++----- 2 files changed, 36 insertions(+), 5 deletions(-) (limited to 'nslcd_server') diff --git a/nslcd_server/ctx.go b/nslcd_server/ctx.go index 5214adc..9722017 100644 --- a/nslcd_server/ctx.go +++ b/nslcd_server/ctx.go @@ -20,9 +20,26 @@ package nslcd_server import ( "context" + "git.lukeshu.com/go/libsystemd/sd_daemon" "golang.org/x/sys/unix" ) +// Logger is the common interface between +// `"git.lukeshu.com/go/libsystemd/sd_daemon".Logger` and +// `"log/syslog".Writer`. +type Logger interface { + Emerg(m string) error + Alert(m string) error + Crit(m string) error + Err(m string) error + Warning(m string) error + Notice(m string) error + Info(m string) error + Debug(m string) error + + Write(m []byte) (int, error) +} + // contextKey is a value for use with context.WithValue. It's used as // a pointer so it fits in an interface{} without allocation. type contextKey struct { @@ -35,6 +52,11 @@ var ( // The associated value will be of type // "golang.org/x/sys/unix".Ucred PeerCredKey = &contextKey{"peercred"} + + // LoggerKey is a context key. It can be used in the backend + // methods to access a logger. The associated value will be + // an implementation of Logger. + LoggerKey = &contextKey{"log"} ) // PeerCredFromContext is a convenience function for @@ -44,3 +66,11 @@ func PeerCredFromContext(ctx context.Context) (unix.Ucred, bool) { cred, ok := ctx.Value(PeerCredKey).(unix.Ucred) return cred, ok } + +func LoggerFromContext(ctx context.Context) Logger { + logger, ok := ctx.Value(LoggerKey).(Logger) + if !ok { + return sd_daemon.Log + } + return logger +} diff --git a/nslcd_server/func_handlerequest.go.gen b/nslcd_server/func_handlerequest.go.gen index 750a7b0..8abfb01 100755 --- a/nslcd_server/func_handlerequest.go.gen +++ b/nslcd_server/func_handlerequest.go.gen @@ -28,7 +28,6 @@ import ( "context" "fmt" "io" - "os" "time" p "git.lukeshu.com/go/libnslcd/nslcd_proto" @@ -109,6 +108,8 @@ func HandleRequest(backend Backend, limits Limits, conn Conn, ctx context.Contex } } + log := LoggerFromContext(ctx) + var in io.Reader = conn if limits.RequestMaxSize > 0 { in = &io.LimitedReader{R: in, N: limits.RequestMaxSize} @@ -135,7 +136,7 @@ while read -r request; do PAM_Authentication) echo '_req := req' echo '_req.Password = sensitive' - echo 'fmt.Fprintf(os.Stderr, "Request: %#v\n", _req)' + echo 'log.Info(fmt.Sprintf("Request: %#v\n", _req))' ;; PAM_PwMod) echo '_req := req' @@ -143,15 +144,15 @@ while read -r request; do echo ' _req.OldPassword = sensitive' echo '}' echo '_req.NewPassword = sensitive' - echo 'fmt.Fprintf(os.Stderr, "Request: %#v\n", _req)' + echo 'log.Info(fmt.Sprintf("Request: %#v", _req))' ;; PAM_UserMod) echo '_req := req' echo '_req.Password = sensitive' - echo 'fmt.Fprintf(os.Stderr, "Request: %#v\n", _req)' + echo 'log.Info(fmt.Sprintf("Request: %#v", _req))' ;; *) - echo 'fmt.Fprintf(os.Stderr, "Request: %#v\n", req)' + echo 'log.Info(fmt.Sprintf("Request: %#v", req))' ;; esac ) -- cgit v1.2.3