From c2b05b3d0fb871c3fee48e83e61c5ad833ce4881 Mon Sep 17 00:00:00 2001 From: Michael Spang Date: Sun, 20 Sep 2009 20:10:11 -0400 Subject: [PATCH] Fix gss error reporting bug --- src/gss.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/gss.c b/src/gss.c index 13d0c6d..f1a404b 100644 --- a/src/gss.c +++ b/src/gss.c @@ -49,21 +49,33 @@ void free_gss(void) { free(peer_username); } +static char *gssbuf2str(gss_buffer_t buf) { + char *msgstr = xmalloc(buf->length + 1); + memcpy(msgstr, buf->value, buf->length); + msgstr[buf->length] = '\0'; + return msgstr; +} + static void display_status(char *prefix, OM_uint32 code, int type) { OM_uint32 maj_stat, min_stat; gss_buffer_desc msg; OM_uint32 msg_ctx = 0; + char *msgstr; maj_stat = gss_display_status(&min_stat, code, type, GSS_C_NULL_OID, &msg_ctx, &msg); - logmsg(LOG_ERR, "%s: %s", prefix, (char *)msg.value); + msgstr = gssbuf2str(&msg); + logmsg(LOG_ERR, "%s: %s", prefix, msgstr); gss_release_buffer(&min_stat, &msg); + free(msgstr); while (msg_ctx) { maj_stat = gss_display_status(&min_stat, code, type, GSS_C_NULL_OID, &msg_ctx, &msg); - logmsg(LOG_ERR, "additional: %s", (char *)msg.value); + msgstr = gssbuf2str(&msg); + logmsg(LOG_ERR, "additional: %s", msgstr); gss_release_buffer(&min_stat, &msg); + free(msgstr); } }