summaryrefslogtreecommitdiff
path: root/source4/heimdal/lib/gssapi/display_status.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/heimdal/lib/gssapi/display_status.c')
-rw-r--r--source4/heimdal/lib/gssapi/display_status.c42
1 files changed, 32 insertions, 10 deletions
diff --git a/source4/heimdal/lib/gssapi/display_status.c b/source4/heimdal/lib/gssapi/display_status.c
index 6e9456aa2e..0aa88bb57c 100644
--- a/source4/heimdal/lib/gssapi/display_status.c
+++ b/source4/heimdal/lib/gssapi/display_status.c
@@ -33,7 +33,7 @@
#include "gssapi_locl.h"
-RCSID("$Id: display_status.c,v 1.13 2005/08/23 08:30:55 lha Exp $");
+RCSID("$Id: display_status.c,v 1.14 2005/10/12 07:23:03 lha Exp $");
static const char *
calling_error(OM_uint32 v)
@@ -112,25 +112,47 @@ supplementary_error(OM_uint32 v)
}
void
-gssapi_krb5_set_error_string (void)
+gssapi_krb5_clear_status (void)
{
struct gssapi_thr_context *ctx = gssapi_get_thread_context(1);
- char *e;
+ if (ctx == NULL)
+ return;
+ HEIMDAL_MUTEX_lock(&ctx->mutex);
+ if (ctx->error_string)
+ free(ctx->error_string);
+ ctx->error_string = NULL;
+ HEIMDAL_MUTEX_unlock(&ctx->mutex);
+}
+
+void
+gssapi_krb5_set_status (const char *fmt, ...)
+{
+ struct gssapi_thr_context *ctx = gssapi_get_thread_context(1);
+ va_list args;
if (ctx == NULL)
return;
HEIMDAL_MUTEX_lock(&ctx->mutex);
+ va_start(args, fmt);
if (ctx->error_string)
free(ctx->error_string);
+ /* ignore failures, will use status code instead */
+ vasprintf(&ctx->error_string, fmt, args);
+ va_end(args);
+ HEIMDAL_MUTEX_unlock(&ctx->mutex);
+}
+
+void
+gssapi_krb5_set_error_string (void)
+{
+ char *e;
+
e = krb5_get_error_string(gssapi_krb5_context);
- if (e == NULL)
- ctx->error_string = NULL;
- else {
- /* ignore failures, will use status code instead */
- ctx->error_string = strdup(e);
+ if (e) {
+ gssapi_krb5_set_status("%s", e);
krb5_free_error_string(gssapi_krb5_context, e);
- }
- HEIMDAL_MUTEX_unlock(&ctx->mutex);
+ } else
+ gssapi_krb5_clear_status();
}
char *