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/gp_log.c | |
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/gp_log.c')
-rw-r--r-- | proxy/src/gp_log.c | 51 |
1 files changed, 51 insertions, 0 deletions
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); +} |