diff options
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); +} |