Major status codes are encoded intheOM_uint32 as shown in the following figure.
Figure 15 Major Status Encoding
If a GSS-API routine returns a GSS status code whose upper 16 bits containa nonzero value, the call has failed. If the calling error field is nonzero,the application's call of the routine was erroneous. Thecallingerrors are listed inFigure 3, Table 3, GSS-API Calling Errors. If the routine error field is nonzero, the routine failed becauseof aroutine-specific error, as listed inFigure 4, Table 4, GSS-API Routine Errors. The bits in thesupplementary information field of the status code can be set whether theupper 16 bits indicate a failure or a success. The meaning of individual bitsis listed inFigure 5, Table 5, GSS-API Supplementary Information Codes.
The following tables list thecalling errors that are returned by GSS-API. These errors are specific toa particular language-binding, which is C in this case.
|
The following table lists the GSS-API routine errors, generic errorsthat are returned by GSS-API functions.
|
The name GSS_S_COMPLETE, which is a zero value,indicates an absence of any API errors or supplementary information bits.
The following table lists the supplementary information values returnedby GSS-API functions.
|
For more on status codes, seeGSS-API Status Codes.
The functiongss_display_status() translates GSS-APIstatus codes into text format. This format allows the codes to be displayedto a user or put in a text log.gss_display_status() onlydisplays one status code at a time, and some functions can return multiplestatus conditions. Accordingly,gss_display_status() shouldbe called as part of a loop. Whengss_display_status() indicatesa non-zero status code, another status code is available for the functionto fetch.
Example 29 Displaying Status Codes withgss_display_status()OM_uint32 message_context;OM_uint32 status_code;OM_uint32 maj_status;OM_uint32 min_status;gss_buffer_desc status_string;...message_context = 0;do { maj_status = gss_display_status( &min_status, status_code, GSS_C_GSS_CODE, GSS_C_NO_OID, &message_context, &status_string); fprintf(stderr, "%.*s\n", \ (int)status_string.length, \ (char *)status_string.value); gss_release_buffer(&min_status, &status_string,);} while (message_context != 0);
The macros,GSS_CALLING_ERROR(),GSS_ROUTINE_ERROR() andGSS_SUPPLEMENTARY_INFO(), take a GSS statuscode. These macros remove all information except for the relevant field. For example, theGSS_ROUTINE_ERROR() can be applied toa status code to remove the calling errors and supplementary information fields.This operation leaves the routine errors field only. The values deliveredby these macros can be directly compared with a GSS_S_xxx symbolof the appropriate type. The macroGSS_ERROR() returnsa non-zero value if a status code indicates a calling or routine error, anda zero value otherwise. All macros that are defined by GSS-API evaluate thearguments exactly once.