X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=mech_eap%2Fdisplay_status.c;fp=mech_eap%2Fdisplay_status.c;h=6eac550e09bdedeb2f5ddead9c04af1a619c731f;hb=5bf61a81066da96847e6317c00db9d4f96447db2;hp=89d8628a5a9c591f9c7252b7aadf3cd5bc9c1d1a;hpb=a6c7d98460d495778ea61b180dfa7a38b385c1ba;p=mech_eap.orig diff --git a/mech_eap/display_status.c b/mech_eap/display_status.c index 89d8628..6eac550 100644 --- a/mech_eap/display_status.c +++ b/mech_eap/display_status.c @@ -43,7 +43,7 @@ struct gss_eap_status_info { }; void -gssEapDestroyStatusInfo(struct gss_eap_status_info* p) +gssEapDestroyStatusInfo(struct gss_eap_status_info *p) { struct gss_eap_status_info *next; @@ -65,10 +65,10 @@ static void saveStatusInfoNoCopy(OM_uint32 minor, char *message) { struct gss_eap_status_info **next = NULL, *p=NULL; + struct gss_eap_thread_local_data *tld = gssEapGetThreadLocalData(); - struct gss_eap_thread_local_data* tld = gssEapGetThreadLocalData(); if (tld != NULL) { - for (p = tld->status_info; p != NULL; p = p->next) { + for (p = tld->statusInfo; p != NULL; p = p->next) { if (p->code == minor) { /* Set message in-place */ if (p->message != NULL) @@ -78,9 +78,9 @@ saveStatusInfoNoCopy(OM_uint32 minor, char *message) } next = &p->next; } - p = GSSEAP_CALLOC(1, sizeof(*p)); } + if (p == NULL) { if (message != NULL) GSSEAP_FREE(message); @@ -93,18 +93,17 @@ saveStatusInfoNoCopy(OM_uint32 minor, char *message) if (next != NULL) *next = p; else - tld->status_info = p; + tld->statusInfo = p; } static const char * getStatusInfo(OM_uint32 minor) { struct gss_eap_status_info *p; - struct gss_eap_thread_local_data *tld=gssEapGetThreadLocalData(); + struct gss_eap_thread_local_data *tld = gssEapGetThreadLocalData(); + if (tld != NULL) { - for (p = tld->status_info; - p != NULL; - p = p->next) { + for (p = tld->statusInfo; p != NULL; p = p->next) { if (p->code == minor) return p->message; } @@ -115,6 +114,22 @@ getStatusInfo(OM_uint32 minor) void gssEapSaveStatusInfo(OM_uint32 minor, const char *format, ...) { +#ifdef WIN32 + OM_uint32 tmpMajor, tmpMinor; + char buf[BUFSIZ]; + gss_buffer_desc s = GSS_C_EMPTY_BUFFER; + va_list ap; + + if (format != NULL) { + va_start(ap, format); + snprintf(buf, sizeof(buf), format, ap); + va_end(ap); + } + + tmpMajor = makeStringBuffer(&tmpMinor, buf, &s); + if (!GSS_ERROR(tmpMajor)) + saveStatusInfoNoCopy(minor, (char *)s.value); +#else char *s = NULL; int n; va_list ap; @@ -122,19 +137,19 @@ gssEapSaveStatusInfo(OM_uint32 minor, const char *format, ...) if (format != NULL) { va_start(ap, format); n = vasprintf(&s, format, ap); + if (n == -1) + s = NULL; va_end(ap); } saveStatusInfoNoCopy(minor, s); +#endif /* WIN32 */ } -OM_uint32 KRB5_CALLCONV -gss_display_status(OM_uint32 *minor, - OM_uint32 status_value, - int status_type, - gss_OID mech_type, - OM_uint32 *message_context, - gss_buffer_t status_string) +OM_uint32 +gssEapDisplayStatus(OM_uint32 *minor, + OM_uint32 status_value, + gss_buffer_t status_string) { OM_uint32 major; krb5_context krbContext = NULL; @@ -143,18 +158,6 @@ gss_display_status(OM_uint32 *minor, status_string->length = 0; status_string->value = NULL; - if (!gssEapIsMechanismOid(mech_type)) { - *minor = GSSEAP_WRONG_MECH; - return GSS_S_BAD_MECH; - } - - if (status_type != GSS_C_MECH_CODE || - *message_context != 0) { - /* we rely on the mechglue for GSS_C_GSS_CODE */ - *minor = 0; - return GSS_S_BAD_STATUS; - } - errMsg = getStatusInfo(status_value); if (errMsg == NULL) { GSSEAP_KRB_INIT(&krbContext); @@ -175,3 +178,26 @@ gss_display_status(OM_uint32 *minor, return major; } + +OM_uint32 GSSAPI_CALLCONV +gss_display_status(OM_uint32 *minor, + OM_uint32 status_value, + int status_type, + gss_OID mech_type, + OM_uint32 *message_context, + gss_buffer_t status_string) +{ + if (!gssEapIsMechanismOid(mech_type)) { + *minor = GSSEAP_WRONG_MECH; + return GSS_S_BAD_MECH; + } + + if (status_type != GSS_C_MECH_CODE || + *message_context != 0) { + /* we rely on the mechglue for GSS_C_GSS_CODE */ + *minor = 0; + return GSS_S_BAD_STATUS; + } + + return gssEapDisplayStatus(minor, status_value, status_string); +}