summaryrefslogtreecommitdiff
path: root/nslcd_server/func_handlerequest.go.gen
diff options
context:
space:
mode:
Diffstat (limited to 'nslcd_server/func_handlerequest.go.gen')
-rwxr-xr-xnslcd_server/func_handlerequest.go.gen120
1 files changed, 120 insertions, 0 deletions
diff --git a/nslcd_server/func_handlerequest.go.gen b/nslcd_server/func_handlerequest.go.gen
new file mode 100755
index 0000000..4c58ae0
--- /dev/null
+++ b/nslcd_server/func_handlerequest.go.gen
@@ -0,0 +1,120 @@
+#!/usr/bin/env bash
+# -*- Mode: Go -*-
+# Copyright (C) 2015 Luke Shumaker <lukeshu@sbcglobal.net>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 USA
+
+requests=$1
+printf '//'
+printf ' %q' "$0" "$@"
+printf '\n// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n'
+cat <<EOF | gofmt
+package nslcd_server
+
+import (
+ "fmt"
+ "io"
+ "os"
+ s "syscall"
+
+ p "lukeshu.com/git/go/libnslcd.git/nslcd_proto"
+)
+
+var sensitive = "<omitted-from-log>"
+
+// Handle a request to nslcd
+func HandleRequest(backend Backend, in io.Reader, out io.Writer, cred s.Ucred) (err error) {
+ err = nil
+ defer func() {
+ if r := recover(); r != nil {
+ switch r := r.(type) {
+ case error:
+ err = r
+ default:
+ panic(r)
+ }
+ }
+ }()
+ handleRequest(backend, in, out, cred)
+ return
+}
+
+func handleRequest(backend Backend, in io.Reader, out io.Writer, cred s.Ucred) {
+ var version int32
+ p.Read(in, &version)
+ if version != p.NSLCD_VERSION {
+ panic(p.NslcdError(fmt.Sprintf("Version mismatch: server=%#08x client=%#08x", p.NSLCD_VERSION, version)))
+ }
+ var action int32
+ p.Read(in, &action)
+
+ ch := make(chan interface{})
+ switch action {
+$(
+while read -r request; do
+ cat <<EOT
+ case p.NSLCD_ACTION_${request^^}:
+ var req p.Request_${request}
+ p.Read(in, &req)
+ $(
+ case "$request" in
+ PAM_Authentication)
+ echo '_req := req'
+ echo '_req.Password = sensitive'
+ echo 'fmt.Fprintf(os.Stderr, "Request: %#v\n", _req)'
+ ;;
+ PAM_PwMod)
+ echo '_req := req'
+ echo 'if len(_req.OldPassword) > 0 {'
+ echo ' _req.OldPassword = sensitive'
+ echo '}'
+ echo '_req.NewPassword = sensitive'
+ echo 'fmt.Fprintf(os.Stderr, "Request: %#v\n", _req)'
+ ;;
+ PAM_UserMod)
+ echo '_req := req'
+ echo '_req.Password = sensitive'
+ echo 'fmt.Fprintf(os.Stderr, "Request: %#v\n", _req)'
+ ;;
+ *)
+ echo 'fmt.Fprintf(os.Stderr, "Request: %#v\n", req)'
+ ;;
+ esac
+ )
+ _ch := backend.${request}(cred, req)
+ go func() {
+ defer close(ch)
+ for obj := range _ch {
+ ch <- obj
+ }
+ }()
+EOT
+done < "$requests"
+)
+ default:
+ close(ch)
+ panic(p.NslcdError(fmt.Sprintf("Unknown request action: %#08x", action)))
+ }
+ p.Write(out, p.NSLCD_VERSION)
+ p.Write(out, action)
+
+ for result := range ch {
+ p.Write(out, p.NSLCD_RESULT_BEGIN)
+ p.Write(out, result)
+ }
+ p.Write(out, p.NSLCD_RESULT_END)
+}
+EOF