45f3a6
From 1948864cc8ace15d2e0bbb527091cca6a025676e Mon Sep 17 00:00:00 2001
45f3a6
From: Robbie Harwood <rharwood@redhat.com>
45f3a6
Date: Mon, 30 Sep 2019 15:00:56 -0400
45f3a6
Subject: [PATCH] Make syslog of call status configurable
45f3a6
45f3a6
Add a parameter (syslog_status) to configuration and
45f3a6
CLI (--syslog-status).  This logs the results of GSSAPI calls at
45f3a6
LOG_DEBUG.  Typically these calls resemble:
45f3a6
45f3a6
    gssproxy[28914]: (OID: { 1 2 840 113554 1 2 2 }) Unspecified GSS
45f3a6
    failure.  Minor code may provide more information, No credentials
45f3a6
    cache found
45f3a6
45f3a6
Since these messages worry some admins, turn them off by default.
45f3a6
45f3a6
Signed-off-by: Robbie Harwood <rharwood@redhat.com>
45f3a6
(cherry picked from commit 116618e1523038691fcb481107ba15ffd42942ac)
45f3a6
(cherry picked from commit cc61409b7b20974332549dd028d889b87dbff98d)
45f3a6
(cherry picked from commit 07b32184ee337ec06a405724b4b88cad22829c6d)
45f3a6
[conflict: gssproxy.conf.5.xml over program being added]
45f3a6
---
45f3a6
 proxy/man/gssproxy.8.xml      |  8 ++++++++
45f3a6
 proxy/man/gssproxy.conf.5.xml | 10 ++++++++++
45f3a6
 proxy/src/gp_config.c         |  6 ++++++
45f3a6
 proxy/src/gp_log.c            |  9 +++++++--
45f3a6
 proxy/src/gp_log.h            |  3 +++
45f3a6
 proxy/src/gssproxy.c          |  6 ++++++
45f3a6
 6 files changed, 40 insertions(+), 2 deletions(-)
45f3a6
45f3a6
diff --git a/proxy/man/gssproxy.8.xml b/proxy/man/gssproxy.8.xml
45f3a6
index 21f7e6a..4019135 100644
45f3a6
--- a/proxy/man/gssproxy.8.xml
45f3a6
+++ b/proxy/man/gssproxy.8.xml
45f3a6
@@ -151,6 +151,14 @@
45f3a6
                 </listitem>
45f3a6
             </varlistentry>
45f3a6
 
45f3a6
+            <varlistentry>
45f3a6
+                <term>
45f3a6
+                    <option>--syslog-status</option>
45f3a6
+                </term>
45f3a6
+                <listitem>
45f3a6
+                    <para>Enable additional logging to syslog.</para>
45f3a6
+                </listitem>
45f3a6
+            </varlistentry>
45f3a6
             <varlistentry>
45f3a6
                 <term>
45f3a6
                     <option>--version</option>
45f3a6
diff --git a/proxy/man/gssproxy.conf.5.xml b/proxy/man/gssproxy.conf.5.xml
45f3a6
index 7874c6e..79f64e7 100644
45f3a6
--- a/proxy/man/gssproxy.conf.5.xml
45f3a6
+++ b/proxy/man/gssproxy.conf.5.xml
45f3a6
@@ -361,6 +361,16 @@
45f3a6
                     </listitem>
45f3a6
                     </varlistentry>
45f3a6
 
45f3a6
+                <varlistentry>
45f3a6
+                    <term>syslog_status (boolean)</term>
45f3a6
+                    <listitem>
45f3a6
+                        <para>Enable per-call debugging output to the syslog.
45f3a6
+                        This may be useful for investigating problems in
45f3a6
+                        applications using gssproxy.</para>
45f3a6
+                        <para>Default: syslog_status = false</para>
45f3a6
+                    </listitem>
45f3a6
+                </varlistentry>
45f3a6
+
45f3a6
                 <varlistentry>
45f3a6
                     <term>trusted (boolean)</term>
45f3a6
                         <listitem><para>Defines whether this service is considered trusted. Use with caution, this enables impersonation.</para>
45f3a6
diff --git a/proxy/src/gp_config.c b/proxy/src/gp_config.c
45f3a6
index cd057a0..57dcfc6 100644
45f3a6
--- a/proxy/src/gp_config.c
45f3a6
+++ b/proxy/src/gp_config.c
45f3a6
@@ -586,6 +586,12 @@ int load_config(struct gp_config *cfg)
45f3a6
         goto done;
45f3a6
     }
45f3a6
 
45f3a6
+    ret = gp_config_get_string(ctx, "gssproxy", "syslog_status", &tmpstr);
45f3a6
+    if (ret == 0)
45f3a6
+        gp_syslog_status = gp_boolean_is_true(tmpstr);
45f3a6
+    else if (ret != ENOENT)
45f3a6
+        goto done;
45f3a6
+
45f3a6
     ret = gp_config_get_string(ctx, "gssproxy", "run_as_user", &tmpstr);
45f3a6
     if (ret == 0) {
45f3a6
         cfg->proxy_user = strdup(tmpstr);
45f3a6
diff --git a/proxy/src/gp_log.c b/proxy/src/gp_log.c
45f3a6
index b6eb161..e67e8d3 100644
45f3a6
--- a/proxy/src/gp_log.c
45f3a6
+++ b/proxy/src/gp_log.c
45f3a6
@@ -5,6 +5,9 @@
45f3a6
 #include <stdio.h>
45f3a6
 #include <stdarg.h>
45f3a6
 
45f3a6
+/* global logging switch */
45f3a6
+bool gp_syslog_status = false;
45f3a6
+
45f3a6
 void gp_logging_init(void)
45f3a6
 {
45f3a6
     openlog("gssproxy",
45f3a6
@@ -55,7 +58,9 @@ void gp_log_status(gss_OID mech, uint32_t maj, uint32_t min)
45f3a6
 {
45f3a6
     char buf[MAX_LOG_LINE];
45f3a6
 
45f3a6
-    gp_fmt_status(mech, maj, min, buf, MAX_LOG_LINE);
45f3a6
+    if (!gp_syslog_status)
45f3a6
+        return;
45f3a6
 
45f3a6
-    GPERROR("%s\n", buf);
45f3a6
+    gp_fmt_status(mech, maj, min, buf, MAX_LOG_LINE);
45f3a6
+    syslog(LOG_DEBUG, "%s\n", buf);
45f3a6
 }
45f3a6
diff --git a/proxy/src/gp_log.h b/proxy/src/gp_log.h
45f3a6
index fc8cbdb..31ad648 100644
45f3a6
--- a/proxy/src/gp_log.h
45f3a6
+++ b/proxy/src/gp_log.h
45f3a6
@@ -3,9 +3,12 @@
45f3a6
 #ifndef _GP_LOG_H_
45f3a6
 #define _GP_LOG_H_
45f3a6
 
45f3a6
+#include <stdbool.h>
45f3a6
 #include <syslog.h>
45f3a6
 #include <gssapi/gssapi.h>
45f3a6
 
45f3a6
+extern bool gp_syslog_status;
45f3a6
+
45f3a6
 #define MAX_LOG_LINE 1024
45f3a6
 #define GPERROR(...) syslog(LOG_ERR, __VA_ARGS__);
45f3a6
 #define GPAUDIT(...) syslog(LOG_INFO, __VA_ARGS__);
45f3a6
diff --git a/proxy/src/gssproxy.c b/proxy/src/gssproxy.c
45f3a6
index 3221615..5112ebf 100644
45f3a6
--- a/proxy/src/gssproxy.c
45f3a6
+++ b/proxy/src/gssproxy.c
45f3a6
@@ -157,6 +157,7 @@ int main(int argc, const char *argv[])
45f3a6
     int opt_version = 0;
45f3a6
     int opt_debug = 0;
45f3a6
     int opt_debug_level = 0;
45f3a6
+    int opt_syslog_status = 0;
45f3a6
     verto_ctx *vctx;
45f3a6
     verto_ev *ev;
45f3a6
     int wait_fd;
45f3a6
@@ -182,6 +183,8 @@ int main(int argc, const char *argv[])
45f3a6
          _("Enable debugging"), NULL}, \
45f3a6
         {"debug-level", '\0', POPT_ARG_INT, &opt_debug_level, 0, \
45f3a6
          _("Set debugging level"), NULL}, \
45f3a6
+        {"syslog-status", '\0', POPT_ARG_NONE, &opt_syslog_status, 0, \
45f3a6
+         _("Enable GSSAPI status logging to syslog"), NULL}, \
45f3a6
         {"version", '\0', POPT_ARG_NONE, &opt_version, 0, \
45f3a6
          _("Print version number and exit"), NULL }, \
45f3a6
         POPT_TABLEEND
45f3a6
@@ -211,6 +214,9 @@ int main(int argc, const char *argv[])
45f3a6
         gp_debug_toggle(opt_debug_level);
45f3a6
     }
45f3a6
 
45f3a6
+    if (opt_syslog_status)
45f3a6
+        gp_syslog_status = true;
45f3a6
+
45f3a6
     if (opt_daemon && opt_interactive) {
45f3a6
         fprintf(stderr, "Option -i|--interactive is not allowed together with -D|--daemon\n");
45f3a6
         poptPrintUsage(pc, stderr, 0);