diff options
author | Simo Sorce <simo@redhat.com> | 2014-12-08 12:05:06 -0500 |
---|---|---|
committer | Simo Sorce <simo@redhat.com> | 2015-03-24 11:46:24 -0400 |
commit | cde06ff7cea982c206a99a34457a07d392a65552 (patch) | |
tree | 02658157d07e54823785e95ee63a959fac42bae7 /proxy/src | |
parent | cc2a47f5ea19df0126774f8ad99534d059323b3a (diff) | |
download | gss-proxy-cde06ff7cea982c206a99a34457a07d392a65552.tar.gz gss-proxy-cde06ff7cea982c206a99a34457a07d392a65552.tar.xz gss-proxy-cde06ff7cea982c206a99a34457a07d392a65552.zip |
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>
Diffstat (limited to 'proxy/src')
-rw-r--r-- | proxy/src/gp_debug.c | 28 | ||||
-rw-r--r-- | proxy/src/gp_log.c | 51 | ||||
-rw-r--r-- | proxy/src/gp_log.h | 7 |
3 files changed, 64 insertions, 22 deletions
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_ */ |