From cde06ff7cea982c206a99a34457a07d392a65552 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Mon, 8 Dec 2014 12:05:06 -0500 Subject: 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 --- proxy/Makefile.am | 1 + proxy/src/gp_debug.c | 28 ++++++---------------------- proxy/src/gp_log.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ proxy/src/gp_log.h | 7 +++++++ 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 #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 +#include 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 +#include +#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_ */ -- cgit