/* Copyright (C) 2012 the GSS-PROXY contributors, see COPYING for license */
#include "gss_plugin.h"
OM_uint32 gssi_display_status(OM_uint32 *minor_status,
OM_uint32 status_value,
int status_type,
const gss_OID mech_type,
OM_uint32 *message_context,
gss_buffer_t status_string)
{
OM_uint32 maj, min, val;
GSSI_TRACE();
/* This function is only ever called for minor status values */
if (status_type != GSS_C_MECH_CODE) {
return GSS_S_BAD_STATUS;
}
val = gpp_unmap_error(status_value);
maj = gpm_display_status(&min,
val,
GSS_C_MECH_CODE,
GSS_C_NO_OID,
message_context,
status_string);
/* if we do not have a matching saved error code
* try to see if we can come up with one from the
* mechglue by re-entering it.
* We do not spcify the mech in this case it's not used by
* the mechglue anyways */
if (maj == GSS_S_UNAVAILABLE) {
return gss_display_status(minor_status,
val,
GSS_C_MECH_CODE,
GSS_C_NO_OID,
message_context,
status_string);
}
*minor_status = min;
return maj;
}