X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=display_status.c;h=44b5390c5a11d77c6fba88af4f76cb95c3ef6f35;hb=15c93f06ee6ddefa7e7b095351f6e66698c7cc9e;hp=9426d73761ea55835c15a68db877de49c9cc4adc;hpb=024a153bbd6c24d0f1c76ea442018bfca568a793;p=mech_eap.git diff --git a/display_status.c b/display_status.c index 9426d73..44b5390 100644 --- a/display_status.c +++ b/display_status.c @@ -62,30 +62,32 @@ createStatusInfoKey(void) static void saveStatusInfoNoCopy(OM_uint32 minor, char *message) { - struct gss_eap_status_info *info, *p; + struct gss_eap_status_info **next = NULL, *p; GSSEAP_ONCE(&gssEapStatusInfoKeyOnce, createStatusInfoKey); - info = GSSEAP_CALLOC(1, sizeof(*info)); - if (info == NULL) { - GSSEAP_FREE(message); - return; + p = GSSEAP_GETSPECIFIC(gssEapStatusInfoKey); + for (; p != NULL; p = p->next) { + if (p->code == minor) { + p->message = message; + return; + } + next = &p->next; } - info->code = minor; - info->message = message; - - p = GSSEAP_GETSPECIFIC(gssEapStatusInfoKey); + p = GSSEAP_CALLOC(1, sizeof(*p)); if (p == NULL) { - GSSEAP_SETSPECIFIC(gssEapStatusInfoKey, info); - } else { - struct gss_eap_status_info **next = &p; + GSSEAP_FREE(message); + return; + } - for (; p != NULL; p = p->next) - next = &p->next; + p->code = minor; + p->message = message; - *next = info; - } + if (p != NULL) + *next = p; + else + GSSEAP_SETSPECIFIC(gssEapStatusInfoKey, p); } static const char * @@ -120,25 +122,6 @@ gssEapSaveStatusInfo(OM_uint32 minor, const char *format, ...) saveStatusInfoNoCopy(minor, s); } -#if 0 -void -gssEapSaveKrbStatusInfo(OM_uint32 minor) -{ - krb5_context krbContext = NULL; - OM_uint32 tmpMinor; - const char *s; - - gssEapKerberosInit(&tmpMinor, &krbContext); - - if (krbContext != NULL) { - s = krb5_get_error_message(krbContext, minor); - gssEapSaveStatusInfo(minor, "%s", s); - krb5_set_error_message(krbContext, minor, "%s", s); - krb5_free_error_message(krbContext, s); - } -} -#endif - OM_uint32 gss_display_status(OM_uint32 *minor, OM_uint32 status_value, @@ -148,7 +131,7 @@ gss_display_status(OM_uint32 *minor, gss_buffer_t status_string) { OM_uint32 major = GSS_S_COMPLETE; - krb5_context krbContext; + krb5_context krbContext = NULL; const char *errMsg; status_string->length = 0; @@ -163,15 +146,18 @@ gss_display_status(OM_uint32 *minor, return GSS_S_BAD_STATUS; } - GSSEAP_KRB_INIT(&krbContext); + errMsg = getStatusInfo(status_value); + if (errMsg == NULL) { + GSSEAP_KRB_INIT(&krbContext); - errMsg = krb5_get_error_message(krbContext, status_value); + errMsg = krb5_get_error_message(krbContext, status_value); + } - if (errMsg != NULL) { + if (errMsg != NULL) major = makeStringBuffer(minor, errMsg, status_string); - } - krb5_free_error_message(krbContext, errMsg); + if (krbContext != NULL) + krb5_free_error_message(krbContext, errMsg); return major; }