summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2014-12-08 12:05:06 -0500
committerSimo Sorce <simo@redhat.com>2015-03-21 14:12:42 -0400
commit13afa2608e1e7d8e757295dda35fa1def1be663f (patch)
tree02658157d07e54823785e95ee63a959fac42bae7
parent91709e90f47a7e4542c9d299bf0975bedc2e6df9 (diff)
Generalize GSS Display Status logger code
This way it can be used both in stderr debugging as well as for sending errors to syslog. Signed-off-by: Simo Sorce <simo@redhat.com>
-rw-r--r--proxy/Makefile.am1
-rw-r--r--proxy/src/gp_debug.c28
-rw-r--r--proxy/src/gp_log.c51
-rw-r--r--proxy/src/gp_log.h7
4 files changed, 65 insertions, 22 deletions
diff --git a/proxy/Makefile.am b/proxy/Makefile.am
index 86b5933..4ba129d 100644
--- a/proxy/Makefile.am
+++ b/proxy/Makefile.am
@@ -183,6 +183,7 @@ proxymech_la_LDFLAGS = \
cli_srv_comm_SOURCES = \
src/gp_conv.c \
src/gp_debug.c \
+ src/gp_log.c \
$(GP_RPCGEN_OBJ) \
$(GP_RPCCLI_OBJ) \
tests/cli_srv_comm.c
diff --git a/proxy/src/gp_debug.c b/proxy/src/gp_debug.c
index dbf7c49..1312488 100644
--- a/proxy/src/gp_debug.c
+++ b/proxy/src/gp_debug.c
@@ -24,8 +24,8 @@
*/
#include "config.h"
-#include <gssapi/gssapi.h>
#include "gp_debug.h"
+#include "gp_log.h"
/* global debug switch */
int gp_debug;
@@ -38,25 +38,9 @@ void gp_debug_enable(void)
void gp_log_failure(gss_OID mech, uint32_t maj, uint32_t min)
{
- uint32_t msgctx;
- uint32_t discard;
- gss_buffer_desc tmp;
-
- fprintf(stderr, "Failed with:");
-
- if (mech != GSS_C_NO_OID) {
- gss_oid_to_str(&discard, mech, &tmp);
- fprintf(stderr, " (OID: %s)", (char *)tmp.value);
- gss_release_buffer(&discard, &tmp);
- }
-
- msgctx = 0;
- gss_display_status(&discard, maj, GSS_C_GSS_CODE, mech, &msgctx, &tmp);
- fprintf(stderr, " %s,", (char *)tmp.value);
- gss_release_buffer(&discard, &tmp);
-
- msgctx = 0;
- gss_display_status(&discard, min, GSS_C_MECH_CODE, mech, &msgctx, &tmp);
- fprintf(stderr, " %s\n", (char *)tmp.value);
- gss_release_buffer(&discard, &tmp);
+ char buf[MAX_LOG_LINE];
+
+ gp_fmt_status(mech, maj, min, buf, MAX_LOG_LINE);
+
+ fprintf(stderr, "Failed with: %s\n", buf);
}
diff --git a/proxy/src/gp_log.c b/proxy/src/gp_log.c
index 31006f6..2fb3d7c 100644
--- a/proxy/src/gp_log.c
+++ b/proxy/src/gp_log.c
@@ -23,7 +23,10 @@
DEALINGS IN THE SOFTWARE.
*/
+#include "config.h"
#include "gp_log.h"
+#include <stdio.h>
+#include <stdarg.h>
void gp_logging_init(void)
{
@@ -31,3 +34,51 @@ void gp_logging_init(void)
LOG_CONS|LOG_NDELAY|LOG_NOWAIT|LOG_PERROR|LOG_PID,
LOG_AUTHPRIV);
}
+static size_t gp_append(char *buf, size_t max, const char *fmt, ...)
+{
+ va_list ap;
+ size_t res;
+
+ if (max <= 0) return 0;
+
+ va_start(ap, fmt);
+ res = vsnprintf(buf, max, fmt, ap);
+ va_end(ap);
+
+ return res;
+}
+
+void gp_fmt_status(gss_OID mech, uint32_t maj, uint32_t min,
+ char *buf, size_t buf_size)
+{
+ uint32_t msgctx;
+ uint32_t discard;
+ gss_buffer_desc tmp;
+ size_t used = 0;
+
+ if (mech != GSS_C_NO_OID) {
+ gss_oid_to_str(&discard, mech, &tmp);
+ used += gp_append(buf + used, buf_size - used,
+ "(OID: %s) ", (char *)tmp.value);
+ gss_release_buffer(&discard, &tmp);
+ }
+
+ msgctx = 0;
+ gss_display_status(&discard, maj, GSS_C_GSS_CODE, mech, &msgctx, &tmp);
+ used += gp_append(buf + used, buf_size - used, "%s, ", (char *)tmp.value);
+ gss_release_buffer(&discard, &tmp);
+
+ msgctx = 0;
+ gss_display_status(&discard, min, GSS_C_MECH_CODE, mech, &msgctx, &tmp);
+ used += gp_append(buf + used, buf_size - used, "%s", (char *)tmp.value);
+ gss_release_buffer(&discard, &tmp);
+}
+
+void gp_log_status(gss_OID mech, uint32_t maj, uint32_t min)
+{
+ char buf[MAX_LOG_LINE];
+
+ gp_fmt_status(mech, maj, min, buf, MAX_LOG_LINE);
+
+ GPERROR("%s\n", buf);
+}
diff --git a/proxy/src/gp_log.h b/proxy/src/gp_log.h
index f3549d1..36ed8d8 100644
--- a/proxy/src/gp_log.h
+++ b/proxy/src/gp_log.h
@@ -27,10 +27,17 @@
#define _GP_LOG_H_
#include <syslog.h>
+#include <gssapi/gssapi.h>
+#define MAX_LOG_LINE 1024
#define GPERROR(...) syslog(LOG_ERR, __VA_ARGS__);
#define GPAUDIT(...) syslog(LOG_INFO, __VA_ARGS__);
void gp_logging_init(void);
+void gp_fmt_status(gss_OID mech, uint32_t maj, uint32_t min,
+ char *buf, size_t buf_size);
+
+void gp_log_status(gss_OID mech, uint32_t maj, uint32_t min);
+
#endif /* _GP_LOG_H_ */