summaryrefslogtreecommitdiff
path: root/nslcd_server
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2017-12-18 22:23:11 -0500
committerLuke Shumaker <lukeshu@lukeshu.com>2017-12-18 23:07:56 -0500
commit055b10405ea02fb7adb3867141dc56464fda9a90 (patch)
tree88c3ca0cea58541d5915a921265021405ff0a1c5 /nslcd_server
parent379e4d7e4d2539f35d559d4b0752531e546238a9 (diff)
use contexts for logging
Diffstat (limited to 'nslcd_server')
-rw-r--r--nslcd_server/ctx.go30
-rwxr-xr-xnslcd_server/func_handlerequest.go.gen11
2 files changed, 36 insertions, 5 deletions
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
)