summaryrefslogtreecommitdiff
path: root/nslcd_server/ctx.go
diff options
context:
space:
mode:
Diffstat (limited to 'nslcd_server/ctx.go')
-rw-r--r--nslcd_server/ctx.go30
1 files changed, 30 insertions, 0 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
+}