The routine documentation also uses the name GSS_S_COMPLETE, which is a zero value, to indicate an absence of any API errors or supplementary information bits.
The following table lists the supplementary information values returned by GSS-API functions.
Table B-4 Supplementary Information Codes
Code | Bit Number | Meaning |
---|---|---|
GSS_S_CONTINUE_NEEDED | 0 (LSB) | Returned only by gss_init_sec_context() or gss_accept_sec_context(). The routine must be called again to complete its function |
GSS_S_DUPLICATE_TOKEN | 1 | The token was a duplicate of an earlier token |
GSS_S_OLD_TOKEN | 2 | The token's validity period has expired |
GSS_S_UNSEQ_TOKEN | 3 | A later token has already been processed |
GSS_S_GAP_TOKEN | 4 | An expected per-message token was not received |
For more on status codes, see "Status Codes".
Displaying Status Codes
The function gss_display_status() translates GSS-API status codes into text format, allowing them to be displayed to a user or put in a text log. Because gss_display_status() only displays one status code at a time, and some functions can return multiple status conditions, it should be invoked as part of a loop. As long as gss_display_status() indicates a non-zero status code (in Example B-1, the value returned in the message_context parameter), another status code is available for the function to fetch.
Example B-1 Displaying Status Codes with gss_display_status()
Status Code Macros
The macros GSS_CALLING_ERROR(), GSS_ROUTINE_ERROR() and GSS_SUPPLEMENTARY_INFO() are provided, each of which takes a GSS status code and removes all but the relevant field. For example, the value obtained by applying GSS_ROUTINE_ERROR() to a status code removes the calling errors and supplementary information fields, leaving only the routine errors field. The values delivered by these macros can be directly compared with a GSS_S_xxx symbol of the appropriate type. The macro GSS_ERROR() is also provided, which when applied to a GSS-API status code returns a non-zero value if the status code indicated a calling or routine error, and a zero value otherwise. All macros defined by the GSS-API evaluate their argument(s) exactly once.
GSS-API Data Types and Values
This section covers various types of GSS-API data types and values. Certain data types that are opaque to the user, such as gss_cred_id_t or gss_name_t, are not covered here, since there is no advantage to knowing their structure. This section explains the following:
"Basic GSS-API Data Types" -- Shows the definitions of the OM_uint32, gss_buffer_desc, gss_OID_desc, gss_OID_set_desc_struct, and gss_channel_bindings_struct data types.
"Name Types" -- Shows the various name formats recognized by the GSS-API for specifying names.
"Address Types for Channel Bindings" -- Shows the various values that may be used as the initiator_addrtype and acceptor_addrtype fields of the gss_channel_bindings_t structure.
Basic GSS-API Data Types
These are some of the data types used by the GSS-API.
OM_uint32
The OM_uint32 is a platform-independent 32-bit unsigned integer.
gss_buffer_desc
This is the definition of the gss_buffer_desc and the gss_buffer_t pointer:
typedef struct gss_buffer_desc_struct { size_t length; void *value; } gss_buffer_desc, *gss_buffer_t; |
gss_OID_desc
This is the definition of the gss_OID_desc and the gss_OID pointer:
typedef struct gss_OID_desc_struct { OM_uint32 length; void*elements; } gss_OID_desc, *gss_OID; |
gss_OID_set_desc
This is the definition of the gss_OID_set_desc and the gss_OID_set pointer:
typedef struct gss_OID_set_desc_struct { size_t count; gss_OID elements; } gss_OID_set_desc, *gss_OID_set; |
gss_channel_bindings_struct
This is the definition of the gss_channel_bindings_struct structure and the gss_channel_bindings_t pointer:
typedef struct gss_channel_bindings_struct { OM_uint32 initiator_addrtype; gss_buffer_desc initiator_address; OM_uint32 acceptor_addrtype; gss_buffer_desc acceptor_address; gss_buffer_desc application_data; } *gss_channel_bindings_t; |
Name Types
A name type indicates the format of the name with which it is associated. (See "Names" and "OIDs" for more on names and name types.) The GSS-API supports the following name types, which are all gss_OID types:
Table B-5 Name Types
Name Type | Meaning |
---|---|
GSS_C_NO_NAME | The recommended symbolic name GSS_C_NO_NAME indicates that no name is being passed within a particular value of a parameter used for the purpose of transferring names. |
GSS_C_NO_OID | This value corresponds to a null input value instead of an actual object identifier. Where specified, it indicates interpretation of an associated name based on a mechanism-specific default printable syntax. |
GSS_C_NT_ANONYMOUS | Provided as a means to identify anonymous names, and can be compared against in order to determine, in a mechanism-independent fashion, whether a name refers to an anonymous principal. |
GSS_C_NT_EXPORT_NAME | A name that has been exported with the gss_export_name() function. |
GSS_C_NT_HOSTBASED_SERVICE | This name type is used to represent services associated with host computers. This name form is constructed using two elements, "service" and "hostname," as follows: service@hostname. |
GSS_C_NT_MACHINE_UID_NAME | This name type is used to indicate a numeric user identifier corresponding to a user on a local system. Its interpretation is OS-specific. The gss_import_name() function resolves this UID into a username, which is then treated as the User Name Form. |
GSS_C_NT_STRING_STRING_UID_NAME | This name type is used to indicate a string of digits representing the numeric user identifier of a user on a local system. Its interpretation is OS-specific. This name type is similar to the Machine UID Form, except that the buffer contains a string representing the user ID. |
GSS_C_NT_USER_NAME | A named user on a local system. Its interpretation is OS-specific. It takes the form: username. |
Address Types for Channel Bindings
Table B-6 shows the possible values for the initiator_addrtype and acceptor_addrtype fields of the gss_channel_bindings_struct structure. These fields indicate the format that a name can take (for example, ARPAnet IMP address format or AppleTalk address format). Channel bindings are discussed in "Channel Bindings".
Table B-6 Channel Binding Address Types
Field | Value (Decimal) | Address Type |
---|---|---|
GSS_C_AF_UNSPEC | 0 | Unspecified address type |
GSS_C_AF_LOCAL | 1 | Host-local |
GSS_C_AF_INET | 2 | Internet address type (example: IP) |
GSS_C_AF_IMPLINK | 3 | ARPAnet IMP |
GSS_C_AF_PUP | 4 | pup protocols (example: BSP) |
GSS_C_AF_CHAOS | 5 | MIT CHAOS protocol |
GSS_C_AF_NS | 6 | XEROX NS |
GSS_C_AF_NBS | 7 | nbs |
GSS_C_AF_ECMA | 8 | ECMA |
GSS_C_AF_DATAKIT | 9 | datakit protocols |
GSS_C_AF_CCITT | 10 | CCITT |
GSS_C_AF_SNA | 11 | IBM SNA |
GSS_C_AF_DECnet | 12 | DECnet |
GSS_C_AF_DLI | 13 | Direct data link interface |
GSS_C_AF_LAT | 14 | LAT |
GSS_C_AF_HYLINK | 15 | NSC Hyperchannel |
GSS_C_AF_APPLETALK | 16 | AppleTalk |
GSS_C_AF_BSC | 17 | BISYNC |
GSS_C_AF_DSS | 18 | Distributed system services |
GSS_C_AF_OSI | 19 | OSI TP4 |
GSS_C_AF_X25 | 21 | X.25 |
GSS_C_AF_NULLADDR | 255 | No address specified |