b528cefc6b
Userland to follow.
2691 lines
97 KiB
Plaintext
2691 lines
97 KiB
Plaintext
|
||
|
||
|
||
|
||
|
||
|
||
Network Working Group J. Wray
|
||
Request for Comments: 1509 Digital Equipment Corporation
|
||
September 1993
|
||
|
||
|
||
Generic Security Service API : C-bindings
|
||
|
||
Status of this Memo
|
||
|
||
This RFC specifies an Internet standards track protocol for the
|
||
Internet community, and requests discussion and suggestions for
|
||
improvements. Please refer to the current edition of the "Internet
|
||
Official Protocol Standards" for the standardization state and status
|
||
of this protocol. Distribution of this memo is unlimited.
|
||
|
||
Abstract
|
||
|
||
This document specifies C language bindings for the Generic Security
|
||
Service Application Program Interface (GSS-API), which is described
|
||
at a language-independent conceptual level in other documents.
|
||
|
||
The Generic Security Service Application Programming Interface (GSS-
|
||
API) provides security services to its callers, and is intended for
|
||
implementation atop alternative underlying cryptographic mechanisms.
|
||
Typically, GSS-API callers will be application protocols into which
|
||
security enhancements are integrated through invocation of services
|
||
provided by the GSS-API. The GSS-API allows a caller application to
|
||
authenticate a principal identity associated with a peer application,
|
||
to delegate rights to a peer, and to apply security services such as
|
||
confidentiality and integrity on a per-message basis.
|
||
|
||
1. INTRODUCTION
|
||
|
||
The Generic Security Service Application Programming Interface [1]
|
||
provides security services to calling applications. It allows a
|
||
communicating application to authenticate the user associated with
|
||
another application, to delegate rights to another application, and
|
||
to apply security services such as confidentiality and integrity on a
|
||
per-message basis.
|
||
|
||
There are four stages to using the GSSAPI:
|
||
|
||
(a) The application acquires a set of credentials with which it may
|
||
prove its identity to other processes. The application's
|
||
credentials vouch for its global identity, which may or may not
|
||
be related to the local username under which it is running.
|
||
|
||
|
||
|
||
|
||
|
||
Wray [Page 1]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
(b) A pair of communicating applications establish a joint security
|
||
context using their credentials. The security context is a
|
||
pair of GSSAPI data structures that contain shared state
|
||
information, which is required in order that per-message
|
||
security services may be provided. As part of the
|
||
establishment of a security context, the context initiator is
|
||
authenticated to the responder, and may require that the
|
||
responder is authenticated in turn. The initiator may
|
||
optionally give the responder the right to initiate further
|
||
security contexts. This transfer of rights is termed
|
||
delegation, and is achieved by creating a set of credentials,
|
||
similar to those used by the originating application, but which
|
||
may be used by the responder. To establish and maintain the
|
||
shared information that makes up the security context, certain
|
||
GSSAPI calls will return a token data structure, which is a
|
||
cryptographically protected opaque data type. The caller of
|
||
such a GSSAPI routine is responsible for transferring the token
|
||
to the peer application, which should then pass it to a
|
||
corresponding GSSAPI routine which will decode it and extract
|
||
the information.
|
||
|
||
(c) Per-message services are invoked to apply either:
|
||
|
||
(i) integrity and data origin authentication, or
|
||
|
||
(ii) confidentiality, integrity and data origin authentication
|
||
to application data, which are treated by GSSAPI as
|
||
arbitrary octet-strings. The application transmitting a
|
||
message that it wishes to protect will call the appropriate
|
||
GSSAPI routine (sign or seal) to apply protection, specifying
|
||
the appropriate security context, and send the result to the
|
||
receiving application. The receiver will pass the received
|
||
data to the corresponding decoding routine (verify or unseal)
|
||
to remove the protection and validate the data.
|
||
|
||
(d) At the completion of a communications session (which may extend
|
||
across several connections), the peer applications call GSSAPI
|
||
routines to delete the security context. Multiple contexts may
|
||
also be used (either successively or simultaneously) within a
|
||
single communications association.
|
||
|
||
2. GSSAPI Routines
|
||
|
||
This section lists the functions performed by each of the GSSAPI
|
||
routines and discusses their major parameters, describing how they
|
||
are to be passed to the routines. The routines are listed in figure
|
||
4-1.
|
||
|
||
|
||
|
||
|
||
Wray [Page 2]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
Figure 4-1 GSSAPI Routines
|
||
|
||
|
||
Routine Function
|
||
|
||
gss_acquire_cred Assume a global identity
|
||
|
||
gss_release_cred Discard credentials
|
||
|
||
gss_init_sec_context Initiate a security context
|
||
with a peer application
|
||
|
||
gss_accept_sec_context Accept a security context
|
||
initiated by a peer
|
||
application
|
||
|
||
gss_process_context_token Process a token on a security
|
||
context from a peer
|
||
application
|
||
|
||
gss_delete_sec_context Discard a security context
|
||
|
||
gss_context_time Determine for how long a
|
||
context will remain valid
|
||
|
||
gss_sign Sign a message; integrity
|
||
service
|
||
|
||
gss_verify Check signature on a message
|
||
|
||
gss_seal Sign (optionally encrypt) a
|
||
message; confidentiality
|
||
service
|
||
|
||
gss_unseal Verify (optionally decrypt)
|
||
message
|
||
|
||
gss_display_status Convert an API status code
|
||
to text
|
||
|
||
gss_indicate_mechs Determine underlying
|
||
authentication mechanism
|
||
|
||
gss_compare_name Compare two internal-form
|
||
names
|
||
|
||
gss_display_name Convert opaque name to text
|
||
|
||
|
||
|
||
|
||
Wray [Page 3]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
gss_import_name Convert a textual name to
|
||
internal-form
|
||
|
||
gss_release_name Discard an internal-form
|
||
name
|
||
|
||
gss_release_buffer Discard a buffer
|
||
|
||
gss_release_oid_set Discard a set of object
|
||
identifiers
|
||
|
||
gss_inquire_cred Determine information about
|
||
a credential
|
||
|
||
Individual GSSAPI implementations may augment these routines by
|
||
providing additional mechanism-specific routines if required
|
||
functionality is not available from the generic forms. Applications
|
||
are encouraged to use the generic routines wherever possible on
|
||
portability grounds.
|
||
|
||
2.1. Data Types and Calling Conventions
|
||
|
||
The following conventions are used by the GSSAPI:
|
||
|
||
2.1.1. Structured data types
|
||
|
||
Wherever these GSSAPI C-bindings describe structured data, only
|
||
fields that must be provided by all GSSAPI implementation are
|
||
documented. Individual implementations may provide additional
|
||
fields, either for internal use within GSSAPI routines, or for use by
|
||
non-portable applications.
|
||
|
||
2.1.2. Integer types
|
||
|
||
GSSAPI defines the following integer data type:
|
||
|
||
OM_uint32 32-bit unsigned integer
|
||
|
||
Where guaranteed minimum bit-count is important, this portable data
|
||
type is used by the GSSAPI routine definitions. Individual GSSAPI
|
||
implementations will include appropriate typedef definitions to map
|
||
this type onto a built-in data type.
|
||
|
||
2.1.3. String and similar data
|
||
|
||
Many of the GSSAPI routines take arguments and return values that
|
||
describe contiguous multiple-byte data. All such data is passed
|
||
between the GSSAPI and the caller using the gss_buffer_t data type.
|
||
|
||
|
||
|
||
Wray [Page 4]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
This data type is a pointer to a buffer descriptor, which consists of
|
||
a length field that contains the total number of bytes in the datum,
|
||
and a value field which contains a pointer to the actual datum:
|
||
|
||
typedef struct gss_buffer_desc_struct {
|
||
size_t length;
|
||
void *value;
|
||
} gss_buffer_desc, *gss_buffer_t;
|
||
|
||
Storage for data passed to the application by a GSSAPI routine using
|
||
the gss_buffer_t conventions is allocated by the GSSAPI routine. The
|
||
application may free this storage by invoking the gss_release_buffer
|
||
routine. Allocation of the gss_buffer_desc object is always the
|
||
responsibility of the application; Unused gss_buffer_desc objects
|
||
may be initialized to the value GSS_C_EMPTY_BUFFER.
|
||
|
||
2.1.3.1. Opaque data types
|
||
|
||
Certain multiple-word data items are considered opaque data types at
|
||
the GSSAPI, because their internal structure has no significance
|
||
either to the GSSAPI or to the caller. Examples of such opaque data
|
||
types are the input_token parameter to gss_init_sec_context (which is
|
||
opaque to the caller), and the input_message parameter to gss_seal
|
||
(which is opaque to the GSSAPI). Opaque data is passed between the
|
||
GSSAPI and the application using the gss_buffer_t datatype.
|
||
|
||
2.1.3.2. Character strings
|
||
|
||
Certain multiple-word data items may be regarded as simple ISO
|
||
Latin-1 character strings. An example of this is the
|
||
input_name_buffer parameter to gss_import_name. Some GSSAPI routines
|
||
also return character strings. Character strings are passed between
|
||
the application and the GSSAPI using the gss_buffer_t datatype,
|
||
defined earlier.
|
||
|
||
2.1.4. Object Identifiers
|
||
|
||
Certain GSSAPI procedures take parameters of the type gss_OID, or
|
||
Object identifier. This is a type containing ISO-defined tree-
|
||
structured values, and is used by the GSSAPI caller to select an
|
||
underlying security mechanism. A value of type gss_OID has the
|
||
following structure:
|
||
|
||
typedef struct gss_OID_desc_struct {
|
||
OM_uint32 length;
|
||
void *elements;
|
||
} gss_OID_desc, *gss_OID;
|
||
|
||
|
||
|
||
|
||
Wray [Page 5]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
The elements field of this structure points to the first byte of an
|
||
octet string containing the ASN.1 BER encoding of the value of the
|
||
gss_OID. The length field contains the number of bytes in this
|
||
value. For example, the gss_OID value corresponding to {iso(1)
|
||
identified- oganization(3) icd-ecma(12) member-company(2) dec(1011)
|
||
cryptoAlgorithms(7) SPX(5)} meaning SPX (Digital's X.509
|
||
authentication mechanism) has a length field of 7 and an elements
|
||
field pointing to seven octets containing the following octal values:
|
||
53,14,2,207,163,7,5. GSSAPI implementations should provide constant
|
||
gss_OID values to allow callers to request any supported mechanism,
|
||
although applications are encouraged on portability grounds to accept
|
||
the default mechanism. gss_OID values should also be provided to
|
||
allow applications to specify particular name types (see section
|
||
2.1.10). Applications should treat gss_OID_desc values returned by
|
||
GSSAPI routines as read-only. In particular, the application should
|
||
not attempt to deallocate them. The gss_OID_desc datatype is
|
||
equivalent to the X/Open OM_object_identifier datatype [2].
|
||
|
||
2.1.5. Object Identifier Sets
|
||
|
||
Certain GSSAPI procedures take parameters of the type gss_OID_set.
|
||
This type represents one or more object identifiers (section 2.1.4).
|
||
A gss_OID_set object has the following structure:
|
||
|
||
typedef struct gss_OID_set_desc_struct {
|
||
int count;
|
||
gss_OID elements;
|
||
} gss_OID_set_desc, *gss_OID_set;
|
||
|
||
The count field contains the number of OIDs within the set. The
|
||
elements field is a pointer to an array of gss_OID_desc objects, each
|
||
of which describes a single OID. gss_OID_set values are used to name
|
||
the available mechanisms supported by the GSSAPI, to request the use
|
||
of specific mechanisms, and to indicate which mechanisms a given
|
||
credential supports. Storage associated with gss_OID_set values
|
||
returned to the application by the GSSAPI may be deallocated by the
|
||
gss_release_oid_set routine.
|
||
|
||
2.1.6. Credentials
|
||
|
||
A credential handle is a caller-opaque atomic datum that identifies a
|
||
GSSAPI credential data structure. It is represented by the caller-
|
||
opaque type gss_cred_id_t, which may be implemented as either an
|
||
arithmetic or a pointer type. Credentials describe a principal, and
|
||
they give their holder the ability to act as that principal. The
|
||
GSSAPI does not make the actual credentials available to
|
||
applications; instead the credential handle is used to identify a
|
||
particular credential, held internally by GSSAPI or underlying
|
||
|
||
|
||
|
||
Wray [Page 6]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
mechanism. Thus the credential handle contains no security-relavent
|
||
information, and requires no special protection by the application.
|
||
Depending on the implementation, a given credential handle may refer
|
||
to different credentials when presented to the GSSAPI by different
|
||
callers. Individual GSSAPI implementations should define both the
|
||
scope of a credential handle and the scope of a credential itself
|
||
(which must be at least as wide as that of a handle). Possibilities
|
||
for credential handle scope include the process that acquired the
|
||
handle, the acquiring process and its children, or all processes
|
||
sharing some local identification information (e.g., UID). If no
|
||
handles exist by which a given credential may be reached, the GSSAPI
|
||
may delete the credential.
|
||
|
||
Certain routines allow credential handle parameters to be omitted to
|
||
indicate the use of a default credential. The mechanism by which a
|
||
default credential is established and its scope should be defined by
|
||
the individual GSSAPI implementation.
|
||
|
||
2.1.7. Contexts
|
||
|
||
The gss_ctx_id_t data type contains a caller-opaque atomic value that
|
||
identifies one end of a GSSAPI security context. It may be
|
||
implemented as either an arithmetic or a pointer type. Depending on
|
||
the implementation, a given gss_ctx_id_t value may refer to different
|
||
GSSAPI security contexts when presented to the GSSAPI by different
|
||
callers. The security context holds state information about each end
|
||
of a peer communication, including cryptographic state information.
|
||
Individual GSSAPI implementations should define the scope of a
|
||
context. Since no way is provided by which a new gss_ctx_id_t value
|
||
may be obtained for an existing context, the scope of a context
|
||
should be the same as the scope of a gss_ctx_id_t.
|
||
|
||
2.1.8. Authentication tokens
|
||
|
||
A token is a caller-opaque type that GSSAPI uses to maintain
|
||
synchronization between the context data structures at each end of a
|
||
GSSAPI security context. The token is a cryptographically protected
|
||
bit-string, generated by the underlying mechanism at one end of a
|
||
GSSAPI security context for use by the peer mechanism at the other
|
||
end. Encapsulation (if required) and transfer of the token are the
|
||
responsibility of the peer applications. A token is passed between
|
||
the GSSAPI and the application using the gss_buffer_t conventions.
|
||
|
||
2.1.9. Status values
|
||
|
||
One or more status codes are returned by each GSSAPI routine. Two
|
||
distinct sorts of status codes are returned. These are termed GSS
|
||
status codes and Mechanism status codes.
|
||
|
||
|
||
|
||
Wray [Page 7]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
2.1.9.1. GSS status codes
|
||
|
||
GSSAPI routines return GSS status codes as their OM_uint32 function
|
||
value. These codes indicate errors that are independent of the
|
||
underlying mechanism used to provide the security service. The
|
||
errors that can be indicated via a GSS status code are either generic
|
||
API routine errors (errors that are defined in the GSSAPI
|
||
specification) or calling errors (errors that are specific to these
|
||
bindings).
|
||
|
||
A GSS status code can indicate a single fatal generic API error from
|
||
the routine and a single calling error. In addition, supplementary
|
||
status information may be indicated via the setting of bits in the
|
||
supplementary info field of a GSS status code.
|
||
|
||
These errors are encoded into the 32-bit GSS status code as follows:
|
||
|
||
MSB LSB
|
||
|------------------------------------------------------------|
|
||
| Calling Error | Routine Error | Supplementary Info |
|
||
|------------------------------------------------------------|
|
||
Bit 31 24 23 16 15 0
|
||
|
||
Hence if a GSSAPI routine returns a GSS status code whose upper 16
|
||
bits contain a non-zero value, the call failed. If the calling error
|
||
field is non-zero, the invoking application's call of the routine was
|
||
erroneous. Calling errors are defined in table 5-1. If the routine
|
||
error field is non-zero, the routine failed for one of the routine-
|
||
specific reasons listed below in table 5-2. Whether or not the upper
|
||
16 bits indicate a failure or a success, the routine may indicate
|
||
additional information by setting bits in the supplementary info
|
||
field of the status code. The meaning of individual bits is listed
|
||
below in table 5-3.
|
||
|
||
Table 5-1 Calling Errors
|
||
|
||
Name Value in Meaning
|
||
Field
|
||
GSS_S_CALL_INACCESSIBLE_READ 1 A required input
|
||
parameter could
|
||
not be read.
|
||
GSS_S_CALL_INACCESSIBLE_WRITE 2 A required output
|
||
parameter could
|
||
not be written.
|
||
GSS_S_CALL_BAD_STRUCTURE 3 A parameter was
|
||
malformed
|
||
|
||
|
||
|
||
|
||
|
||
Wray [Page 8]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
Table 5-2 Routine Errors
|
||
|
||
Name Value in Meaning
|
||
Field
|
||
|
||
GSS_S_BAD_MECH 1 An unsupported mechanism was
|
||
requested
|
||
GSS_S_BAD_NAME 2 An invalid name was supplied
|
||
GSS_S_BAD_NAMETYPE 3 A supplied name was of an
|
||
unsupported type
|
||
GSS_S_BAD_BINDINGS 4 Incorrect channel bindings
|
||
were supplied
|
||
GSS_S_BAD_STATUS 5 An invalid status code was
|
||
supplied
|
||
|
||
GSS_S_BAD_SIG 6 A token had an invalid
|
||
signature
|
||
GSS_S_NO_CRED 7 No credentials were supplied
|
||
GSS_S_NO_CONTEXT 8 No context has been
|
||
established
|
||
GSS_S_DEFECTIVE_TOKEN 9 A token was invalid
|
||
GSS_S_DEFECTIVE_CREDENTIAL 10 A credential was invalid
|
||
GSS_S_CREDENTIALS_EXPIRED 11 The referenced credentials
|
||
have expired
|
||
GSS_S_CONTEXT_EXPIRED 12 The context has expired
|
||
GSS_S_FAILURE 13 Miscellaneous failure
|
||
(see text)
|
||
|
||
Table 5-3 Supplementary Status Bits
|
||
|
||
Name Bit Number Meaning
|
||
GSS_S_CONTINUE_NEEDED 0 (LSB) The routine must be called
|
||
again to complete its
|
||
function.
|
||
See routine documentation for
|
||
detailed description.
|
||
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
|
||
|
||
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.
|
||
|
||
|
||
|
||
|
||
|
||
Wray [Page 9]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
All GSS_S_xxx symbols equate to complete OM_uint32 status codes,
|
||
rather than to bitfield values. For example, the actual value of the
|
||
symbol GSS_S_BAD_NAMETYPE (value 3 in the routine error field) is 3
|
||
<< 16.
|
||
|
||
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 info fields, leaving only the
|
||
routine errors field. The values delivered by these macros may 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
|
||
status code returns a non-zero value if the status code indicated a
|
||
calling or routine error, and a zero value otherwise.
|
||
|
||
A GSSAPI implementation may choose to signal calling errors in a
|
||
platform-specific manner instead of, or in addition to the routine
|
||
value; routine errors and supplementary info should be returned via
|
||
routine status values only.
|
||
|
||
2.1.9.2. Mechanism-specific status codes
|
||
|
||
GSSAPI routines return a minor_status parameter, which is used to
|
||
indicate specialized errors from the underlying security mechanism.
|
||
This parameter may contain a single mechanism-specific error,
|
||
indicated by a OM_uint32 value.
|
||
|
||
The minor_status parameter will always be set by a GSSAPI routine,
|
||
even if it returns a calling error or one of the generic API errors
|
||
indicated above as fatal, although other output parameters may remain
|
||
unset in such cases. However, output parameters that are expected to
|
||
return pointers to storage allocated by a routine must always set set
|
||
by the routine, even in the event of an error, although in such cases
|
||
the GSSAPI routine may elect to set the returned parameter value to
|
||
NULL to indicate that no storage was actually allocated. Any length
|
||
field associated with such pointers (as in a gss_buffer_desc
|
||
structure) should also be set to zero in such cases.
|
||
|
||
The GSS status code GSS_S_FAILURE is used to indicate that the
|
||
underlying mechanism detected an error for which no specific GSS
|
||
status code is defined. The mechanism status code will provide more
|
||
details about the error.
|
||
|
||
2.1.10. Names
|
||
|
||
A name is used to identify a person or entity. GSSAPI authenticates
|
||
the relationship between a name and the entity claiming the name.
|
||
|
||
|
||
|
||
Wray [Page 10]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
Two distinct representations are defined for names:
|
||
|
||
(a) A printable form, for presentation to a user
|
||
|
||
(b) An internal form, for presentation at the API
|
||
|
||
The syntax of a printable name is defined by the GSSAPI
|
||
implementation, and may be dependent on local system configuration,
|
||
or on individual user preference. The internal form provides a
|
||
canonical representation of the name that is independent of
|
||
configuration.
|
||
|
||
A given GSSAPI implementation may support names drawn from multiple
|
||
namespaces. In such an implementation, the internal form of the name
|
||
must include fields that identify the namespace from which the name
|
||
is drawn. The namespace from which a printable name is drawn is
|
||
specified by an accompanying object identifier.
|
||
|
||
Routines (gss_import_name and gss_display_name) are provided to
|
||
convert names between their printable representations and the
|
||
gss_name_t type. gss_import_name may support multiple syntaxes for
|
||
each supported namespace, allowing users the freedom to choose a
|
||
preferred name representation. gss_display_name should use an
|
||
implementation-chosen preferred syntax for each supported name-type.
|
||
|
||
Comparison of internal-form names is accomplished via the
|
||
gss_compare_names routine. This removes the need for the application
|
||
program to understand the syntaxes of the various printable names
|
||
that a given GSSAPI implementation may support.
|
||
|
||
Storage is allocated by routines that return gss_name_t values. A
|
||
procedure, gss_release_name, is provided to free storage associated
|
||
with a name.
|
||
|
||
2.1.11. Channel Bindings
|
||
|
||
GSSAPI supports the use of user-specified tags to identify a given
|
||
context to the peer application. These tags are used to identify the
|
||
particular communications channel that carries the context. Channel
|
||
bindings are communicated to the GSSAPI using the following
|
||
structure:
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Wray [Page 11]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
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;
|
||
|
||
The initiator_addrtype and acceptor_addrtype fields denote the type
|
||
of addresses contained in the initiator_address and acceptor_address
|
||
buffers. The address type should be one of the following:
|
||
|
||
GSS_C_AF_UNSPEC Unspecified address type
|
||
GSS_C_AF_LOCAL Host-local address type
|
||
GSS_C_AF_INET DARPA Internet address type
|
||
GSS_C_AF_IMPLINK ARPAnet IMP address type (eg IP)
|
||
GSS_C_AF_PUP pup protocols (eg BSP) address type
|
||
GSS_C_AF_CHAOS MIT CHAOS protocol address type
|
||
GSS_C_AF_NS XEROX NS address type
|
||
GSS_C_AF_NBS nbs address type
|
||
GSS_C_AF_ECMA ECMA address type
|
||
GSS_C_AF_DATAKIT datakit protocols address type
|
||
GSS_C_AF_CCITT CCITT protocols (eg X.25)
|
||
GSS_C_AF_SNA IBM SNA address type
|
||
GSS_C_AF_DECnet DECnet address type
|
||
GSS_C_AF_DLI Direct data link interface address type
|
||
GSS_C_AF_LAT LAT address type
|
||
GSS_C_AF_HYLINK NSC Hyperchannel address type
|
||
GSS_C_AF_APPLETALK AppleTalk address type
|
||
GSS_C_AF_BSC BISYNC 2780/3780 address type
|
||
GSS_C_AF_DSS Distributed system services address type
|
||
GSS_C_AF_OSI OSI TP4 address type
|
||
GSS_C_AF_X25 X25
|
||
GSS_C_AF_NULLADDR No address specified
|
||
|
||
Note that these name address families rather than specific addressing
|
||
formats. For address families that contain several alternative
|
||
address forms, the initiator_address and acceptor_address fields must
|
||
contain sufficient information to determine which address form is
|
||
used. When not otherwise specified, addresses should be specified in
|
||
network byte-order.
|
||
|
||
Conceptually, the GSSAPI concatenates the initiator_addrtype,
|
||
initiator_address, acceptor_addrtype, acceptor_address and
|
||
application_data to form an octet string. The mechanism signs this
|
||
octet string, and binds the signature to the context establishment
|
||
token emitted by gss_init_sec_context. The same bindings are
|
||
presented by the context acceptor to gss_accept_sec_context, and a
|
||
|
||
|
||
|
||
Wray [Page 12]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
signature is calculated in the same way. The calculated signature is
|
||
compared with that found in the token, and if the signatures differ,
|
||
gss_accept_sec_context will return a GSS_S_BAD_BINDINGS error, and
|
||
the context will not be established. Some mechanisms may include the
|
||
actual channel binding data in the token (rather than just a
|
||
signature); applications should therefore not use confidential data
|
||
as channel-binding components. Individual mechanisms may impose
|
||
additional constraints on addresses and address types that may appear
|
||
in channel bindings. For example, a mechanism may verify that the
|
||
initiator_address field of the channel bindings presented to
|
||
gss_init_sec_context contains the correct network address of the host
|
||
system.
|
||
|
||
2.1.12. Optional parameters
|
||
|
||
Various parameters are described as optional. This means that they
|
||
follow a convention whereby a default value may be requested. The
|
||
following conventions are used for omitted parameters. These
|
||
conventions apply only to those parameters that are explicitly
|
||
documented as optional.
|
||
|
||
2.1.12.1. gss_buffer_t types
|
||
|
||
Specify GSS_C_NO_BUFFER as a value. For an input parameter this
|
||
signifies that default behavior is requested, while for an output
|
||
parameter it indicates that the information that would be returned
|
||
via the parameter is not required by the application.
|
||
|
||
2.1.12.2. Integer types (input)
|
||
|
||
Individual parameter documentation lists values to be used to
|
||
indicate default actions.
|
||
|
||
2.1.12.3. Integer types (output)
|
||
|
||
Specify NULL as the value for the pointer.
|
||
|
||
2.1.12.4. Pointer types
|
||
|
||
Specify NULL as the value.
|
||
|
||
2.1.12.5. Object IDs
|
||
|
||
Specify GSS_C_NULL_OID as the value.
|
||
|
||
2.1.12.6. Object ID Sets
|
||
|
||
Specify GSS_C_NULL_OID_SET as the value.
|
||
|
||
|
||
|
||
Wray [Page 13]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
2.1.12.7. Credentials
|
||
|
||
Specify GSS_C_NO_CREDENTIAL to use the default credential handle.
|
||
|
||
2.1.12.8. Channel Bindings
|
||
|
||
Specify GSS_C_NO_CHANNEL_BINDINGS to indicate that channel bindings
|
||
are not to be used.
|
||
|
||
3. GSSAPI routine descriptions
|
||
|
||
2.1. gss_acquire_cred
|
||
|
||
OM_uint32 gss_acquire_cred (
|
||
OM_uint32 * minor_status,
|
||
gss_name_t desired_name,
|
||
OM_uint32 time_req,
|
||
gss_OID_set desired_mechs,
|
||
int cred_usage,
|
||
gss_cred_id_t * output_cred_handle,
|
||
gss_OID_set * actual_mechs,
|
||
OM_int32 * time_rec)
|
||
Purpose:
|
||
|
||
Allows an application to acquire a handle for a pre-existing
|
||
credential by name. GSSAPI implementations must impose a local
|
||
access-control policy on callers of this routine to prevent
|
||
unauthorized callers from acquiring credentials to which they are not
|
||
entitled. This routine is not intended to provide a "login to the
|
||
network" function, as such a function would result in the creation of
|
||
new credentials rather than merely acquiring a handle to existing
|
||
credentials. Such functions, if required, should be defined in
|
||
implementation-specific extensions to the API.
|
||
|
||
If credential acquisition is time-consuming for a mechanism, the
|
||
mechanism may chooses to delay the actual acquisition until the
|
||
credential is required (e.g., by gss_init_sec_context or
|
||
gss_accept_sec_context). Such mechanism-specific implementation
|
||
decisions should be invisible to the calling application; thus a call
|
||
of gss_inquire_cred immediately following the call of
|
||
gss_acquire_cred must return valid credential data, and may therefore
|
||
incur the overhead of a deferred credential acquisition.
|
||
|
||
Parameters:
|
||
|
||
desired_name gss_name_t, read
|
||
Name of principal whose credential
|
||
should be acquired
|
||
|
||
|
||
|
||
Wray [Page 14]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
time_req integer, read
|
||
number of seconds that credentials
|
||
should remain valid
|
||
|
||
desired_mechs Set of Object IDs, read
|
||
set of underlying security mechanisms that
|
||
may be used. GSS_C_NULL_OID_SET may be used
|
||
to obtain an implementation-specific default.
|
||
|
||
cred_usage integer, read
|
||
GSS_C_BOTH - Credentials may be used
|
||
either to initiate or accept
|
||
security contexts.
|
||
GSS_C_INITIATE - Credentials will only be
|
||
used to initiate security
|
||
contexts.
|
||
GSS_C_ACCEPT - Credentials will only be used to
|
||
accept security contexts.
|
||
|
||
output_cred_handle gss_cred_id_t, modify
|
||
The returned credential handle.
|
||
|
||
actual_mechs Set of Object IDs, modify, optional
|
||
The set of mechanisms for which the
|
||
credential is valid. Specify NULL
|
||
if not required.
|
||
|
||
time_rec Integer, modify, optional
|
||
Actual number of seconds for which the
|
||
returned credentials will remain valid. If the
|
||
implementation does not support expiration of
|
||
credentials, the value GSS_C_INDEFINITE will
|
||
be returned. Specify NULL if not required
|
||
|
||
minor_status Integer, modify
|
||
Mechanism specific status code.
|
||
Function value:
|
||
|
||
GSS status code:
|
||
|
||
GSS_S_COMPLETE Successful completion
|
||
|
||
GSS_S_BAD_MECH Unavailable mechanism requested
|
||
|
||
GSS_S_BAD_NAMETYPE Type contained within desired_name parameter is
|
||
not supported
|
||
|
||
GSS_S_BAD_NAME Value supplied for desired_name parameter is
|
||
|
||
|
||
|
||
Wray [Page 15]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
ill-formed.
|
||
|
||
GSS_S_FAILURE Unspecified failure. The minor_status parameter
|
||
contains more detailed information
|
||
|
||
3.2. gss_release_cred
|
||
|
||
OM_uint32 gss_release_cred (
|
||
OM_uint32 * minor_status,
|
||
gss_cred_id_t * cred_handle)
|
||
|
||
Purpose:
|
||
|
||
Informs GSSAPI that the specified credential handle is no longer
|
||
required by the process. When all processes have released a
|
||
credential, it will be deleted.
|
||
|
||
Parameters:
|
||
|
||
cred_handle gss_cred_id_t, modify, optional
|
||
buffer containing opaque credential
|
||
handle. If GSS_C_NO_CREDENTIAL is supplied,
|
||
the default credential will be released
|
||
|
||
minor_status integer, modify
|
||
Mechanism specific status code.
|
||
|
||
Function value:
|
||
|
||
GSS status code:
|
||
|
||
GSS_S_COMPLETE Successful completion
|
||
|
||
GSS_S_NO_CRED Credentials could not be accessed.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Wray [Page 16]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
3.3. gss_init_sec_context
|
||
|
||
OM_uint32 gss_init_sec_context (
|
||
OM_uint32 * minor_status,
|
||
gss_cred_id_t claimant_cred_handle,
|
||
gss_ctx_id_t * context_handle,
|
||
gss_name_t target_name,
|
||
gss_OID mech_type,
|
||
int req_flags,
|
||
int time_req,
|
||
gss_channel_bindings_t
|
||
input_chan_bindings,
|
||
gss_buffer_t input_token
|
||
gss_OID * actual_mech_type,
|
||
gss_buffer_t output_token,
|
||
int * ret_flags,
|
||
OM_uint32 * time_rec )
|
||
|
||
Purpose:
|
||
|
||
Initiates the establishment of a security context between the
|
||
application and a remote peer. Initially, the input_token parameter
|
||
should be specified as GSS_C_NO_BUFFER. The routine may return a
|
||
output_token which should be transferred to the peer application,
|
||
where the peer application will present it to gss_accept_sec_context.
|
||
If no token need be sent, gss_init_sec_context will indicate this by
|
||
setting the length field of the output_token argument to zero. To
|
||
complete the context establishment, one or more reply tokens may be
|
||
required from the peer application; if so, gss_init_sec_context will
|
||
return a status indicating GSS_S_CONTINUE_NEEDED in which case it
|
||
should be called again when the reply token is received from the peer
|
||
application, passing the token to gss_init_sec_context via the
|
||
input_token parameters.
|
||
|
||
The values returned via the ret_flags and time_rec parameters are not
|
||
defined unless the routine returns GSS_S_COMPLETE.
|
||
|
||
Parameters:
|
||
|
||
claimant_cred_handle gss_cred_id_t, read, optional
|
||
handle for credentials claimed. Supply
|
||
GSS_C_NO_CREDENTIAL to use default
|
||
credentials.
|
||
|
||
context_handle gss_ctx_id_t, read/modify
|
||
context handle for new context. Supply
|
||
GSS_C_NO_CONTEXT for first call; use value
|
||
returned by first call in continuation calls.
|
||
|
||
|
||
|
||
Wray [Page 17]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
target_name gss_name_t, read
|
||
Name of target
|
||
|
||
mech_type OID, read, optional
|
||
Object ID of desired mechanism. Supply
|
||
GSS_C_NULL_OID to obtain an implementation
|
||
specific default
|
||
|
||
req_flags bit-mask, read
|
||
Contains four independent flags, each of
|
||
which requests that the context support a
|
||
specific service option. Symbolic
|
||
names are provided for each flag, and the
|
||
symbolic names corresponding to the required
|
||
flags should be logically-ORed
|
||
together to form the bit-mask value. The
|
||
flags are:
|
||
|
||
GSS_C_DELEG_FLAG
|
||
True - Delegate credentials to remote peer
|
||
False - Don't delegate
|
||
GSS_C_MUTUAL_FLAG
|
||
True - Request that remote peer
|
||
authenticate itself
|
||
False - Authenticate self to remote peer
|
||
only
|
||
GSS_C_REPLAY_FLAG
|
||
True - Enable replay detection for signed
|
||
or sealed messages
|
||
False - Don't attempt to detect
|
||
replayed messages
|
||
GSS_C_SEQUENCE_FLAG
|
||
True - Enable detection of out-of-sequence
|
||
signed or sealed messages
|
||
False - Don't attempt to detect
|
||
out-of-sequence messages
|
||
|
||
time_req integer, read
|
||
Desired number of seconds for which context
|
||
should remain valid. Supply 0 to request a
|
||
default validity period.
|
||
|
||
input_chan_bindings channel bindings, read
|
||
Application-specified bindings. Allows
|
||
application to securely bind channel
|
||
identification information to the security
|
||
context.
|
||
|
||
|
||
|
||
|
||
Wray [Page 18]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
input_token buffer, opaque, read, optional (see text)
|
||
Token received from peer application.
|
||
Supply GSS_C_NO_BUFFER on initial call.
|
||
|
||
actual_mech_type OID, modify
|
||
actual mechanism used.
|
||
|
||
output_token buffer, opaque, modify
|
||
token to be sent to peer application. If
|
||
the length field of the returned buffer is
|
||
zero, no token need be sent to the peer
|
||
application.
|
||
|
||
ret_flags bit-mask, modify
|
||
Contains six independent flags, each of which
|
||
indicates that the context supports a specific
|
||
service option. Symbolic names are provided
|
||
for each flag, and the symbolic names
|
||
corresponding to the required flags should be
|
||
logically-ANDed with the ret_flags value to test
|
||
whether a given option is supported by the
|
||
context. The flags are:
|
||
|
||
GSS_C_DELEG_FLAG
|
||
True - Credentials were delegated to
|
||
the remote peer
|
||
False - No credentials were delegated
|
||
GSS_C_MUTUAL_FLAG
|
||
True - Remote peer has been asked to
|
||
authenticated itself
|
||
False - Remote peer has not been asked to
|
||
authenticate itself
|
||
GSS_C_REPLAY_FLAG
|
||
True - replay of signed or sealed messages
|
||
will be detected
|
||
False - replayed messages will not be
|
||
detected
|
||
GSS_C_SEQUENCE_FLAG
|
||
True - out-of-sequence signed or sealed
|
||
messages will be detected
|
||
False - out-of-sequence messages will not
|
||
be detected
|
||
GSS_C_CONF_FLAG
|
||
True - Confidentiality service may be
|
||
invoked by calling seal routine
|
||
False - No confidentiality service (via
|
||
seal) available. seal will provide
|
||
message encapsulation, data-origin
|
||
|
||
|
||
|
||
Wray [Page 19]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
authentication and integrity
|
||
services only.
|
||
GSS_C_INTEG_FLAG
|
||
True - Integrity service may be invoked by
|
||
calling either gss_sign or gss_seal
|
||
routines.
|
||
False - Per-message integrity service
|
||
unavailable.
|
||
|
||
time_rec integer, modify, optional
|
||
number of seconds for which the context
|
||
will remain valid. If the implementation does
|
||
not support credential expiration, the value
|
||
GSS_C_INDEFINITE will be returned. Specify
|
||
NULL if not required.
|
||
|
||
minor_status integer, modify
|
||
Mechanism specific status code.
|
||
|
||
Function value:
|
||
|
||
GSS status code:
|
||
|
||
GSS_S_COMPLETE Successful completion
|
||
|
||
GSS_S_CONTINUE_NEEDED Indicates that a token from the peer
|
||
application is required to complete thecontext, and
|
||
that gss_init_sec_context must be called again with
|
||
that token.
|
||
|
||
GSS_S_DEFECTIVE_TOKEN Indicates that consistency checks performed on
|
||
the input_token failed
|
||
|
||
GSS_S_DEFECTIVE_CREDENTIAL Indicates that consistency checks
|
||
performed on the credential failed.
|
||
|
||
GSS_S_NO_CRED The supplied credentials were not valid for context
|
||
initiation, or the credential handle did not
|
||
reference any credentials.
|
||
|
||
GSS_S_CREDENTIALS_EXPIRED The referenced credentials have expired
|
||
|
||
GSS_S_BAD_BINDINGS The input_token contains different channel
|
||
bindings to those specified via the
|
||
input_chan_bindings parameter
|
||
|
||
GSS_S_BAD_SIG The input_token contains an invalid signature, or a
|
||
signature that could not be verified
|
||
|
||
|
||
|
||
Wray [Page 20]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
GSS_S_OLD_TOKEN The input_token was too old. This is a fatal error
|
||
during context establishment
|
||
|
||
GSS_S_DUPLICATE_TOKEN The input_token is valid, but is a duplicate of
|
||
a token already processed. This is a fatal error
|
||
during context establishment.
|
||
|
||
GSS_S_NO_CONTEXT Indicates that the supplied context handle did not
|
||
refer to a valid context
|
||
|
||
GSS_S_BAD_NAMETYPE The provided target_name parameter contained an
|
||
invalid or unsupported type of name
|
||
|
||
GSS_S_BAD_NAME The provided target_name parameter was ill-formed.
|
||
|
||
GSS_S_FAILURE Failure. See minor_status for more information
|
||
|
||
3.4. gss_accept_sec_context
|
||
|
||
OM_uint32 gss_accept_sec_context (
|
||
OM_uint32 * minor_status,
|
||
gss_ctx_id_t * context_handle,
|
||
gss_cred_id_t verifier_cred_handle,
|
||
gss_buffer_t input_token_buffer
|
||
gss_channel_bindings_t
|
||
input_chan_bindings,
|
||
gss_name_t * src_name,
|
||
gss_OID * mech_type,
|
||
gss_buffer_t output_token,
|
||
int * ret_flags,
|
||
OM_uint32 * time_rec,
|
||
gss_cred_id_t * delegated_cred_handle)
|
||
|
||
Purpose:
|
||
|
||
Allows a remotely initiated security context between the application
|
||
and a remote peer to be established. The routine may return a
|
||
output_token which should be transferred to the peer application,
|
||
where the peer application will present it to gss_init_sec_context.
|
||
If no token need be sent, gss_accept_sec_context will indicate this
|
||
by setting the length field of the output_token argument to zero. To
|
||
complete the context establishment, one or more reply tokens may be
|
||
required from the peer application; if so, gss_accept_sec_context
|
||
will return a status flag of GSS_S_CONTINUE_NEEDED, in which case it
|
||
should be called again when the reply token is received from the peer
|
||
application, passing the token to gss_accept_sec_context via the
|
||
input_token parameters.
|
||
|
||
|
||
|
||
|
||
Wray [Page 21]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
The values returned via the src_name, ret_flags, time_rec, and
|
||
delegated_cred_handle parameters are not defined unless the routine
|
||
returns GSS_S_COMPLETE.
|
||
|
||
Parameters:
|
||
|
||
context_handle gss_ctx_id_t, read/modify
|
||
context handle for new context. Supply
|
||
GSS_C_NO_CONTEXT for first call; use value
|
||
returned in subsequent calls.
|
||
|
||
verifier_cred_handle gss_cred_id_t, read, optional
|
||
Credential handle claimed by context
|
||
acceptor.
|
||
Specify GSS_C_NO_CREDENTIAL to use default
|
||
credentials. If GSS_C_NO_CREDENTIAL is
|
||
specified, but the caller has no default
|
||
credentials established, an
|
||
implementation-defined default credential
|
||
may be used.
|
||
|
||
input_token_buffer buffer, opaque, read
|
||
token obtained from remote application
|
||
|
||
input_chan_bindings channel bindings, read
|
||
Application-specified bindings. Allows
|
||
application to securely bind channel
|
||
identification information to the security
|
||
context.
|
||
|
||
src_name gss_name_t, modify, optional
|
||
Authenticated name of context initiator.
|
||
After use, this name should be deallocated by
|
||
passing it to gss_release_name. If not required,
|
||
specify NULL.
|
||
|
||
mech_type Object ID, modify
|
||
Security mechanism used. The returned
|
||
OID value will be a pointer into static
|
||
storage, and should be treated as read-only
|
||
by the caller.
|
||
|
||
output_token buffer, opaque, modify
|
||
Token to be passed to peer application. If the
|
||
length field of the returned token buffer is 0,
|
||
then no token need be passed to the peer
|
||
application.
|
||
|
||
|
||
|
||
|
||
Wray [Page 22]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
ret_flags bit-mask, modify
|
||
Contains six independent flags, each of
|
||
which indicates that the context supports a
|
||
specific service option. Symbolic names are
|
||
provided for each flag, and the symbolic names
|
||
corresponding to the required flags
|
||
should be logically-ANDed with the ret_flags
|
||
value to test whether a given option is
|
||
supported by the context. The flags are:
|
||
GSS_C_DELEG_FLAG
|
||
True - Delegated credentials are available
|
||
via the delegated_cred_handle
|
||
parameter
|
||
False - No credentials were delegated
|
||
GSS_C_MUTUAL_FLAG
|
||
True - Remote peer asked for mutual
|
||
authentication
|
||
False - Remote peer did not ask for mutual
|
||
authentication
|
||
GSS_C_REPLAY_FLAG
|
||
True - replay of signed or sealed messages
|
||
will be detected
|
||
False - replayed messages will not be
|
||
detected
|
||
GSS_C_SEQUENCE_FLAG
|
||
True - out-of-sequence signed or sealed
|
||
messages will be detected
|
||
False - out-of-sequence messages will not
|
||
be detected
|
||
GSS_C_CONF_FLAG
|
||
True - Confidentiality service may be
|
||
invoked by calling seal routine
|
||
False - No confidentiality service (via
|
||
seal) available. seal will
|
||
provide message encapsulation,
|
||
data-origin authentication and
|
||
integrity services only.
|
||
GSS_C_INTEG_FLAG
|
||
True - Integrity service may be invoked
|
||
by calling either gss_sign or
|
||
gss_seal routines.
|
||
False - Per-message integrity service
|
||
unavailable.
|
||
|
||
time_rec integer, modify, optional
|
||
number of seconds for which the context
|
||
will remain valid. Specify NULL if not required.
|
||
|
||
|
||
|
||
|
||
Wray [Page 23]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
delegated_cred_handle
|
||
gss_cred_id_t, modify
|
||
credential handle for credentials received from
|
||
context initiator. Only valid if deleg_flag in
|
||
ret_flags is true.
|
||
|
||
minor_status integer, modify
|
||
Mechanism specific status code.
|
||
|
||
Function value:
|
||
|
||
GSS status code:
|
||
|
||
GSS_S_COMPLETE Successful completion
|
||
|
||
GSS_S_CONTINUE_NEEDED Indicates that a token from the peer
|
||
application is required to complete the context,
|
||
and that gss_accept_sec_context must be called
|
||
again with that token.
|
||
|
||
GSS_S_DEFECTIVE_TOKEN Indicates that consistency checks
|
||
performed on the input_token failed.
|
||
|
||
GSS_S_DEFECTIVE_CREDENTIAL Indicates that consistency checks
|
||
performed on the credential failed.
|
||
|
||
GSS_S_NO_CRED The supplied credentials were not valid for
|
||
context acceptance, or the credential handle
|
||
did not reference any credentials.
|
||
|
||
GSS_S_CREDENTIALS_EXPIRED The referenced credentials have
|
||
expired.
|
||
|
||
GSS_S_BAD_BINDINGS The input_token contains different channel
|
||
bindings to those specified via the
|
||
input_chan_bindings parameter.
|
||
|
||
GSS_S_NO_CONTEXT Indicates that the supplied context handle did
|
||
not refer to a valid context.
|
||
|
||
GSS_S_BAD_SIG The input_token contains an invalid signature.
|
||
|
||
GSS_S_OLD_TOKEN The input_token was too old. This is a fatal
|
||
error during context establishment.
|
||
|
||
GSS_S_DUPLICATE_TOKEN The input_token is valid, but is a
|
||
duplicate of a token already processed. This
|
||
is a fatal error during context establishment.
|
||
|
||
|
||
|
||
Wray [Page 24]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
GSS_S_FAILURE Failure. See minor_status for more information.
|
||
|
||
3.5. gss_process_context_token
|
||
|
||
OM_uint32 gss_process_context_token (
|
||
OM_uint32 * minor_status,
|
||
gss_ctx_id_t context_handle,
|
||
gss_buffer_t token_buffer)
|
||
|
||
Purpose:
|
||
|
||
Provides a way to pass a token to the security service. Usually,
|
||
tokens are associated either with context establishment (when they
|
||
would be passed to gss_init_sec_context or gss_accept_sec_context) or
|
||
with per-message security service (when they would be passed to
|
||
gss_verify or gss_unseal). Occasionally, tokens may be received at
|
||
other times, and gss_process_context_token allows such tokens to be
|
||
passed to the underlying security service for processing. At
|
||
present, such additional tokens may only be generated by
|
||
gss_delete_sec_context. GSSAPI implementation may use this service
|
||
to implement deletion of the security context.
|
||
|
||
Parameters:
|
||
|
||
context_handle gss_ctx_id_t, read
|
||
context handle of context on which token is to
|
||
be processed
|
||
|
||
token_buffer buffer, opaque, read
|
||
pointer to first byte of token to process
|
||
|
||
minor_status integer, modify
|
||
Implementation specific status code.
|
||
|
||
Function value:
|
||
|
||
GSS status code:
|
||
|
||
GSS_S_COMPLETE Successful completion
|
||
|
||
GSS_S_DEFECTIVE_TOKEN Indicates that consistency checks
|
||
performed on the token failed
|
||
|
||
GSS_S_FAILURE Failure. See minor_status for more information
|
||
|
||
GSS_S_NO_CONTEXT The context_handle did not refer to a valid
|
||
context
|
||
|
||
|
||
|
||
|
||
Wray [Page 25]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
3.6. gss_delete_sec_context
|
||
|
||
OM_uint32 gss_delete_sec_context (
|
||
OM_uint32 * minor_status,
|
||
gss_ctx_id_t * context_handle,
|
||
gss_buffer_t output_token)
|
||
|
||
Purpose:
|
||
|
||
Delete a security context. gss_delete_sec_context will delete the
|
||
local data structures associated with the specified security context,
|
||
and generate an output_token, which when passed to the peer
|
||
gss_process_context_token will instruct it to do likewise. No
|
||
further security services may be obtained using the context specified
|
||
by context_handle.
|
||
|
||
Parameters:
|
||
|
||
minor_status integer, modify
|
||
Mechanism specific status code.
|
||
|
||
context_handle gss_ctx_id_t, modify
|
||
context handle identifying context to delete.
|
||
|
||
output_token buffer, opaque, modify
|
||
token to be sent to remote application to
|
||
instruct it to also delete the context
|
||
|
||
Function value:
|
||
|
||
GSS status code:
|
||
|
||
GSS_S_COMPLETE Successful completion
|
||
|
||
GSS_S_FAILURE Failure, see minor_status for more information
|
||
|
||
GSS_S_NO_CONTEXT No valid context was supplied
|
||
|
||
3.7. gss_context_time
|
||
|
||
OM_uint32 gss_context_time (
|
||
OM_uint32 * minor_status,
|
||
gss_ctx_id_t context_handle,
|
||
OM_uint32 * time_rec)
|
||
Purpose:
|
||
|
||
Determines the number of seconds for which the specified context will
|
||
remain valid.
|
||
|
||
|
||
|
||
Wray [Page 26]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
Parameters:
|
||
|
||
minor_status integer, modify
|
||
Implementation specific status code.
|
||
|
||
context_handle gss_ctx_id_t, read
|
||
Identifies the context to be interrogated.
|
||
|
||
time_rec integer, modify
|
||
Number of seconds that the context will remain
|
||
valid. If the context has already expired,
|
||
zero will be returned.
|
||
Function value:
|
||
|
||
GSS status code:
|
||
|
||
GSS_S_COMPLETE Successful completion
|
||
|
||
GSS_S_CONTEXT_EXPIRED The context has already expired
|
||
|
||
GSS_S_CREDENTIALS_EXPIRED The context is recognized, but
|
||
associated credentials have expired
|
||
|
||
GSS_S_NO_CONTEXT The context_handle parameter did not identify a
|
||
valid context
|
||
|
||
3.8. gss_sign
|
||
|
||
OM_uint32 gss_sign (
|
||
OM_uint32 * minor_status,
|
||
gss_ctx_id_t context_handle,
|
||
int qop_req,
|
||
gss_buffer_t message_buffer,
|
||
gss_buffer_t msg_token)
|
||
Purpose:
|
||
|
||
Generates a cryptographic signature for the supplied message, and
|
||
places the signature in a token for transfer to the peer application.
|
||
The qop_req parameter allows a choice between several cryptographic
|
||
algorithms, if supported by the chosen mechanism.
|
||
|
||
Parameters:
|
||
|
||
minor_status integer, modify
|
||
Implementation specific status code.
|
||
|
||
context_handle gss_ctx_id_t, read
|
||
identifies the context on which the message
|
||
|
||
|
||
|
||
Wray [Page 27]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
will be sent
|
||
|
||
qop_req integer, read, optional
|
||
Specifies requested quality of protection.
|
||
Callers are encouraged, on portability grounds,
|
||
to accept the default quality of protection
|
||
offered by the chosen mechanism, which may be
|
||
requested by specifying GSS_C_QOP_DEFAULT for
|
||
this parameter. If an unsupported protection
|
||
strength is requested, gss_sign will return a
|
||
major_status of GSS_S_FAILURE.
|
||
|
||
message_buffer buffer, opaque, read
|
||
message to be signed
|
||
|
||
msg_token buffer, opaque, modify
|
||
buffer to receive token
|
||
|
||
Function value:
|
||
|
||
GSS status code:
|
||
|
||
GSS_S_COMPLETE Successful completion
|
||
|
||
GSS_S_CONTEXT_EXPIRED The context has already expired
|
||
|
||
GSS_S_CREDENTIALS_EXPIRED The context is recognized, but
|
||
associated credentials have expired
|
||
|
||
GSS_S_NO_CONTEXT The context_handle parameter did not identify a
|
||
valid context
|
||
|
||
GSS_S_FAILURE Failure. See minor_status for more information.
|
||
|
||
3.9. gss_verify
|
||
|
||
OM_uint32 gss_verify (
|
||
OM_uint32 * minor_status,
|
||
gss_ctx_id_t context_handle,
|
||
gss_buffer_t message_buffer,
|
||
gss_buffer_t token_buffer,
|
||
int * qop_state)
|
||
Purpose:
|
||
|
||
Verifies that a cryptographic signature, contained in the token
|
||
parameter, fits the supplied message. The qop_state parameter allows
|
||
a message recipient to determine the strength of protection that was
|
||
applied to the message.
|
||
|
||
|
||
|
||
Wray [Page 28]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
Parameters:
|
||
|
||
minor_status integer, modify
|
||
Mechanism specific status code.
|
||
|
||
context_handle gss_ctx_id_t, read
|
||
identifies the context on which the message
|
||
arrived
|
||
|
||
message_buffer buffer, opaque, read
|
||
message to be verified
|
||
|
||
token_buffer buffer, opaque, read
|
||
token associated with message
|
||
|
||
qop_state integer, modify
|
||
quality of protection gained from signature
|
||
|
||
Function value:
|
||
|
||
GSS status code:
|
||
|
||
GSS_S_COMPLETE Successful completion
|
||
|
||
GSS_S_DEFECTIVE_TOKEN The token failed consistency checks
|
||
|
||
GSS_S_BAD_SIG The signature was incorrect
|
||
|
||
GSS_S_DUPLICATE_TOKEN The token was valid, and contained a correct
|
||
signature for the message, but it had already
|
||
been processed
|
||
|
||
GSS_S_OLD_TOKEN The token was valid, and contained a correct
|
||
signature for the message, but it is too old
|
||
|
||
GSS_S_UNSEQ_TOKEN The token was valid, and contained a correct
|
||
signature for the message, but has been
|
||
verified out of sequence; an earlier token has
|
||
been signed or sealed by the remote
|
||
application, but not yet been processed
|
||
locally.
|
||
|
||
GSS_S_CONTEXT_EXPIRED The context has already expired
|
||
|
||
GSS_S_CREDENTIALS_EXPIRED The context is recognized, but
|
||
associated credentials have expired
|
||
|
||
|
||
|
||
|
||
|
||
Wray [Page 29]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
GSS_S_NO_CONTEXT The context_handle parameter did not identify a
|
||
valid context
|
||
|
||
GSS_S_FAILURE Failure. See minor_status for more information.
|
||
|
||
3.10. gss_seal
|
||
|
||
OM_uint32 gss_seal (
|
||
OM_uint32 * minor_status,
|
||
gss_ctx_id_t context_handle,
|
||
int conf_req_flag,
|
||
int qop_req
|
||
gss_buffer_t input_message_buffer,
|
||
int * conf_state,
|
||
gss_buffer_t output_message_buffer)
|
||
|
||
Purpose:
|
||
|
||
Cryptographically signs and optionally encrypts the specified
|
||
input_message. The output_message contains both the signature and
|
||
the message. The qop_req parameter allows a choice between several
|
||
cryptographic algorithms, if supported by the chosen mechanism.
|
||
|
||
Parameters:
|
||
|
||
minor_status integer, modify
|
||
Mechanism specific status code.
|
||
|
||
context_handle gss_ctx_id_t, read
|
||
identifies the context on which the message
|
||
will be sent
|
||
|
||
conf_req_flag boolean, read
|
||
True - Both confidentiality and integrity
|
||
services are requested
|
||
False - Only integrity service is requested
|
||
|
||
qop_req integer, read, optional
|
||
Specifies required quality of protection. A
|
||
mechanism-specific default may be requested by
|
||
setting qop_req to GSS_C_QOP_DEFAULT. If an
|
||
unsupported protection strength is requested,
|
||
gss_seal will return a major_status of
|
||
GSS_S_FAILURE.
|
||
|
||
input_message_buffer buffer, opaque, read
|
||
message to be sealed
|
||
|
||
|
||
|
||
|
||
Wray [Page 30]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
conf_state boolean, modify
|
||
True - Confidentiality, data origin
|
||
authentication and integrity services
|
||
have been applied
|
||
False - Integrity and data origin services only
|
||
has been applied.
|
||
|
||
output_message_buffer buffer, opaque, modify
|
||
buffer to receive sealed message
|
||
|
||
Function value:
|
||
|
||
GSS status code:
|
||
|
||
GSS_S_COMPLETE Successful completion
|
||
|
||
GSS_S_CONTEXT_EXPIRED The context has already expired
|
||
|
||
GSS_S_CREDENTIALS_EXPIRED The context is recognized, but
|
||
associated credentials have expired
|
||
|
||
GSS_S_NO_CONTEXT The context_handle parameter did not identify a
|
||
valid context
|
||
|
||
GSS_S_FAILURE Failure. See minor_status for more information.
|
||
|
||
3.11. gss_unseal
|
||
|
||
OM_uint32 gss_unseal (
|
||
OM_uint32 * minor_status,
|
||
gss_ctx_id_t context_handle,
|
||
gss_buffer_t input_message_buffer,
|
||
gss_buffer_t output_message_buffer,
|
||
int * conf_state,
|
||
int * qop_state)
|
||
|
||
Purpose:
|
||
|
||
Converts a previously sealed message back to a usable form, verifying
|
||
the embedded signature. The conf_state parameter indicates whether
|
||
the message was encrypted; the qop_state parameter indicates the
|
||
strength of protection that was used to provide the confidentiality
|
||
and integrity services.
|
||
|
||
Parameters:
|
||
|
||
minor_status integer, modify
|
||
Mechanism specific status code.
|
||
|
||
|
||
|
||
Wray [Page 31]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
context_handle gss_ctx_id_t, read
|
||
identifies the context on which the message
|
||
arrived
|
||
|
||
input_message_buffer buffer, opaque, read
|
||
sealed message
|
||
|
||
output_message_buffer buffer, opaque, modify
|
||
buffer to receive unsealed message
|
||
|
||
conf_state boolean, modify
|
||
True - Confidentiality and integrity protection
|
||
were used
|
||
False - Inteegrity service only was used
|
||
|
||
qop_state integer, modify
|
||
quality of protection gained from signature
|
||
|
||
Function value:
|
||
|
||
GSS status code:
|
||
|
||
GSS_S_COMPLETE Successful completion
|
||
|
||
GSS_S_DEFECTIVE_TOKEN The token failed consistency checks
|
||
|
||
GSS_S_BAD_SIG The signature was incorrect
|
||
|
||
GSS_S_DUPLICATE_TOKEN The token was valid, and contained a
|
||
correct signature for the message, but it had
|
||
already been processed
|
||
|
||
GSS_S_OLD_TOKEN The token was valid, and contained a correct
|
||
signature for the message, but it is too old
|
||
|
||
GSS_S_UNSEQ_TOKEN The token was valid, and contained a correct
|
||
signature for the message, but has been
|
||
verified out of sequence; an earlier token has
|
||
been signed or sealed by the remote
|
||
application, but not yet been processed
|
||
locally.
|
||
|
||
GSS_S_CONTEXT_EXPIRED The context has already expired
|
||
|
||
GSS_S_CREDENTIALS_EXPIRED The context is recognized, but
|
||
associated credentials have expired
|
||
|
||
|
||
|
||
|
||
|
||
Wray [Page 32]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
GSS_S_NO_CONTEXT The context_handle parameter did not identify a
|
||
valid context
|
||
|
||
GSS_S_FAILURE Failure. See minor_status for more information.
|
||
|
||
3.12. gss_display_status
|
||
|
||
OM_uint32 gss_display_status (
|
||
OM_uint32 * minor_status,
|
||
int status_value,
|
||
int status_type,
|
||
gss_OID mech_type,
|
||
int * message_context,
|
||
gss_buffer_t status_string)
|
||
|
||
Purpose:
|
||
|
||
Allows an application to obtain a textual representation of a GSSAPI
|
||
status code, for display to the user or for logging purposes. Since
|
||
some status values may indicate multiple errors, applications may
|
||
need to call gss_display_status multiple times, each call generating
|
||
a single text string. The message_context parameter is used to
|
||
indicate which error message should be extracted from a given
|
||
status_value; message_context should be initialized to 0, and
|
||
gss_display_status will return a non-zero value if there are further
|
||
messages to extract.
|
||
|
||
Parameters:
|
||
|
||
minor_status integer, modify
|
||
Mechanism specific status code.
|
||
|
||
status_value integer, read
|
||
Status value to be converted
|
||
|
||
status_type integer, read
|
||
GSS_C_GSS_CODE - status_value is a GSS status
|
||
code
|
||
GSS_C_MECH_CODE - status_value is a mechanism
|
||
status code
|
||
|
||
mech_type Object ID, read, optional
|
||
Underlying mechanism (used to interpret a
|
||
minor status value) Supply GSS_C_NULL_OID to
|
||
obtain the system default.
|
||
|
||
message_context integer, read/modify
|
||
Should be initialized to zero by caller
|
||
|
||
|
||
|
||
Wray [Page 33]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
on first call. If further messages are
|
||
contained in the status_value parameter,
|
||
message_context will be non-zero on return,
|
||
and this value should be passed back to
|
||
subsequent calls, along with the same
|
||
status_value, status_type and mech_type
|
||
parameters.
|
||
|
||
status_string buffer, character string, modify
|
||
textual interpretation of the status_value
|
||
|
||
Function value:
|
||
|
||
GSS status code:
|
||
|
||
GSS_S_COMPLETE Successful completion
|
||
|
||
GSS_S_BAD_MECH Indicates that translation in accordance with
|
||
an unsupported mechanism type was requested
|
||
|
||
GSS_S_BAD_STATUS The status value was not recognized, or the
|
||
status type was neither GSS_C_GSS_CODE nor
|
||
GSS_C_MECH_CODE.
|
||
|
||
|
||
3.13. gss_indicate_mechs
|
||
|
||
OM_uint32 gss_indicate_mechs (
|
||
OM_uint32 * minor_status,
|
||
gss_OID_set * mech_set)
|
||
|
||
Purpose:
|
||
|
||
Allows an application to determine which underlying security
|
||
mechanisms are available.
|
||
|
||
Parameters:
|
||
|
||
minor_status integer, modify
|
||
Mechanism specific status code.
|
||
|
||
mech_set set of Object IDs, modify
|
||
set of implementation-supported mechanisms.
|
||
The returned gss_OID_set value will be a
|
||
pointer into static storage, and should be
|
||
treated as read-only by the caller.
|
||
|
||
|
||
|
||
|
||
|
||
Wray [Page 34]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
Function value:
|
||
|
||
GSS status code:
|
||
|
||
GSS_S_COMPLETE Successful completion
|
||
|
||
3.14. gss_compare_name
|
||
|
||
OM_uint32 gss_compare_name (
|
||
OM_uint32 * minor_status,
|
||
gss_name_t name1,
|
||
gss_name_t name2,
|
||
int * name_equal)
|
||
|
||
Purpose:
|
||
|
||
Allows an application to compare two internal-form names to determine
|
||
whether they refer to the same entity.
|
||
|
||
Parameters:
|
||
|
||
minor_status integer, modify
|
||
Mechanism specific status code.
|
||
|
||
name1 gss_name_t, read
|
||
internal-form name
|
||
|
||
name2 gss_name_t, read
|
||
internal-form name
|
||
|
||
name_equal boolean, modify
|
||
True - names refer to same entity
|
||
False - names refer to different entities
|
||
(strictly, the names are not known to
|
||
refer to the same identity).
|
||
Function value:
|
||
|
||
GSS status code:
|
||
|
||
GSS_S_COMPLETE Successful completion
|
||
|
||
GSS_S_BAD_NAMETYPE The type contained within either name1 or
|
||
name2 was unrecognized, or the names were of
|
||
incomparable types.
|
||
|
||
GSS_S_BAD_NAME One or both of name1 or name2 was ill-formed
|
||
|
||
|
||
|
||
|
||
|
||
Wray [Page 35]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
3.15. gss_display_name
|
||
|
||
OM_uint32 gss_display_name (
|
||
OM_uint32 * minor_status,
|
||
gss_name_t input_name,
|
||
gss_buffer_t output_name_buffer,
|
||
gss_OID * output_name_type)
|
||
|
||
Purpose:
|
||
|
||
Allows an application to obtain a textual representation of an opaque
|
||
internal-form name for display purposes. The syntax of a printable
|
||
name is defined by the GSSAPI implementation.
|
||
|
||
Parameters:
|
||
|
||
minor_status integer, modify
|
||
Mechanism specific status code.
|
||
|
||
input_name gss_name_t, read
|
||
name to be displayed
|
||
|
||
output_name_buffer buffer, character-string, modify
|
||
buffer to receive textual name string
|
||
|
||
output_name_type Object ID, modify
|
||
The type of the returned name. The returned
|
||
gss_OID will be a pointer into static storage,
|
||
and should be treated as read-only by the caller
|
||
|
||
Function value:
|
||
|
||
GSS status code:
|
||
|
||
GSS_S_COMPLETE Successful completion
|
||
|
||
GSS_S_BAD_NAMETYPE The type of input_name was not recognized
|
||
|
||
GSS_S_BAD_NAME input_name was ill-formed
|
||
|
||
3.16. gss_import_name
|
||
|
||
OM_uint32 gss_import_name (
|
||
OM_uint32 * minor_status,
|
||
gss_buffer_t input_name_buffer,
|
||
gss_OID input_name_type,
|
||
gss_name_t * output_name)
|
||
|
||
|
||
|
||
|
||
Wray [Page 36]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
Purpose:
|
||
|
||
Convert a printable name to internal form.
|
||
|
||
Parameters:
|
||
|
||
minor_status integer, modify
|
||
Mechanism specific status code
|
||
|
||
input_name_buffer buffer, character-string, read
|
||
buffer containing printable name to convert
|
||
|
||
input_name_type Object ID, read, optional
|
||
Object Id specifying type of printable
|
||
name. Applications may specify either
|
||
GSS_C_NULL_OID to use a local system-specific
|
||
printable syntax, or an OID registered by the
|
||
GSSAPI implementation to name a particular
|
||
namespace.
|
||
|
||
output_name gss_name_t, modify
|
||
returned name in internal form
|
||
|
||
Function value:
|
||
|
||
GSS status code
|
||
|
||
GSS_S_COMPLETE Successful completion
|
||
|
||
GSS_S_BAD_NAMETYPE The input_name_type was unrecognized
|
||
|
||
GSS_S_BAD_NAME The input_name parameter could not be
|
||
interpreted as a name of the specified type
|
||
|
||
3.17. gss_release_name
|
||
|
||
OM_uint32 gss_release_name (
|
||
OM_uint32 * minor_status,
|
||
gss_name_t * name)
|
||
|
||
Purpose:
|
||
|
||
Free GSSAPI-allocated storage associated with an internal form name.
|
||
|
||
Parameters:
|
||
|
||
minor_status integer, modify
|
||
Mechanism specific status code
|
||
|
||
|
||
|
||
Wray [Page 37]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
name gss_name_t, modify
|
||
The name to be deleted
|
||
|
||
Function value:
|
||
|
||
GSS status code
|
||
|
||
GSS_S_COMPLETE Successful completion
|
||
|
||
GSS_S_BAD_NAME The name parameter did not contain a valid name
|
||
|
||
3.18. gss_release_buffer
|
||
|
||
OM_uint32 gss_release_buffer (
|
||
OM_uint32 * minor_status,
|
||
gss_buffer_t buffer)
|
||
|
||
Purpose:
|
||
|
||
Free storage associated with a buffer format name. The storage must
|
||
have been allocated by a GSSAPI routine. In addition to freeing the
|
||
associated storage, the routine will zero the length field in the
|
||
buffer parameter.
|
||
|
||
Parameters:
|
||
|
||
minor_status integer, modify
|
||
Mechanism specific status code
|
||
|
||
buffer buffer, modify
|
||
The storage associated with the buffer will be
|
||
deleted. The gss_buffer_desc object will not
|
||
be freed, but its length field will be zeroed.
|
||
|
||
Function value:
|
||
|
||
GSS status code
|
||
|
||
GSS_S_COMPLETE Successful completion
|
||
|
||
3.19. gss_release_oid_set
|
||
|
||
OM_uint32 gss_release_oid_set (
|
||
OM_uint32 * minor_status,
|
||
gss_OID_set * set)
|
||
|
||
Purpose:
|
||
|
||
|
||
|
||
|
||
Wray [Page 38]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
Free storage associated with a gss_OID_set object. The storage must
|
||
have been allocated by a GSSAPI routine.
|
||
|
||
Parameters:
|
||
|
||
minor_status integer, modify
|
||
Mechanism specific status code
|
||
|
||
set Set of Object IDs, modify
|
||
The storage associated with the gss_OID_set
|
||
will be deleted.
|
||
|
||
Function value:
|
||
|
||
GSS status code
|
||
|
||
GSS_S_COMPLETE Successful completion
|
||
|
||
3.20. gss_inquire_cred
|
||
|
||
OM_uint32 gss_inquire_cred (
|
||
OM_uint32 * minor_status,
|
||
gss_cred_id_t cred_handle,
|
||
gss_name_t * name,
|
||
OM_uint32 * lifetime,
|
||
int * cred_usage,
|
||
gss_OID_set * mechanisms )
|
||
|
||
Purpose:
|
||
|
||
Obtains information about a credential. The caller must already have
|
||
obtained a handle that refers to the credential.
|
||
|
||
Parameters:
|
||
|
||
minor_status integer, modify
|
||
Mechanism specific status code
|
||
|
||
cred_handle gss_cred_id_t, read
|
||
A handle that refers to the target credential.
|
||
Specify GSS_C_NO_CREDENTIAL to inquire about
|
||
the default credential.
|
||
|
||
name gss_name_t, modify
|
||
The name whose identity the credential asserts.
|
||
Specify NULL if not required.
|
||
|
||
lifetime Integer, modify
|
||
|
||
|
||
|
||
Wray [Page 39]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
The number of seconds for which the credential
|
||
will remain valid. If the credential has
|
||
expired, this parameter will be set to zero.
|
||
If the implementation does not support
|
||
credential expiration, the value
|
||
GSS_C_INDEFINITE will be returned. Specify
|
||
NULL if not required.
|
||
|
||
cred_usage Integer, modify
|
||
How the credential may be used. One of the
|
||
following:
|
||
GSS_C_INITIATE
|
||
GSS_C_ACCEPT
|
||
GSS_C_BOTH
|
||
Specify NULL if not required.
|
||
|
||
mechanisms gss_OID_set, modify
|
||
Set of mechanisms supported by the credential.
|
||
Specify NULL if not required.
|
||
|
||
Function value:
|
||
|
||
GSS status code
|
||
|
||
GSS_S_COMPLETE Successful completion
|
||
|
||
GSS_S_NO_CRED The referenced credentials could not be
|
||
accessed.
|
||
|
||
GSS_S_DEFECTIVE_CREDENTIAL The referenced credentials were
|
||
invalid.
|
||
|
||
GSS_S_CREDENTIALS_EXPIRED The referenced credentials have expired.
|
||
If the lifetime parameter was not passed as
|
||
NULL, it will be set to 0.
|
||
|
||
|
||
#ifndef GSSAPI_H_
|
||
#define GSSAPI_H_
|
||
|
||
/*
|
||
* First, define the platform-dependent types.
|
||
*/
|
||
typedef <platform-specific> OM_uint32;
|
||
typedef <platform-specific> gss_ctx_id_t;
|
||
typedef <platform-specific> gss_cred_id_t;
|
||
typedef <platform-specific> gss_name_t;
|
||
|
||
|
||
|
||
|
||
Wray [Page 40]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
/*
|
||
* Note that a platform supporting the xom.h X/Open header file
|
||
* may make use of that header for the definitions of OM_uint32
|
||
* and the structure to which gss_OID_desc equates.
|
||
*/
|
||
|
||
typedef struct gss_OID_desc_struct {
|
||
OM_uint32 length;
|
||
void *elements;
|
||
} gss_OID_desc, *gss_OID;
|
||
|
||
typedef struct gss_OID_set_desc_struct {
|
||
int count;
|
||
gss_OID elements;
|
||
} gss_OID_set_desc, *gss_OID_set;
|
||
|
||
typedef struct gss_buffer_desc_struct {
|
||
size_t length;
|
||
void *value;
|
||
} gss_buffer_desc, *gss_buffer_t;
|
||
|
||
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;
|
||
|
||
|
||
/*
|
||
* Six independent flags each of which indicates that a context
|
||
* supports a specific service option.
|
||
*/
|
||
#define GSS_C_DELEG_FLAG 1
|
||
#define GSS_C_MUTUAL_FLAG 2
|
||
#define GSS_C_REPLAY_FLAG 4
|
||
#define GSS_C_SEQUENCE_FLAG 8
|
||
#define GSS_C_CONF_FLAG 16
|
||
#define GSS_C_INTEG_FLAG 32
|
||
|
||
|
||
/*
|
||
* Credential usage options
|
||
*/
|
||
#define GSS_C_BOTH 0
|
||
#define GSS_C_INITIATE 1
|
||
#define GSS_C_ACCEPT 2
|
||
|
||
|
||
|
||
Wray [Page 41]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
/*
|
||
* Status code types for gss_display_status
|
||
*/
|
||
#define GSS_C_GSS_CODE 1
|
||
#define GSS_C_MECH_CODE 2
|
||
|
||
/*
|
||
* The constant definitions for channel-bindings address families
|
||
*/
|
||
#define GSS_C_AF_UNSPEC 0;
|
||
#define GSS_C_AF_LOCAL 1;
|
||
#define GSS_C_AF_INET 2;
|
||
#define GSS_C_AF_IMPLINK 3;
|
||
#define GSS_C_AF_PUP 4;
|
||
#define GSS_C_AF_CHAOS 5;
|
||
#define GSS_C_AF_NS 6;
|
||
#define GSS_C_AF_NBS 7;
|
||
#define GSS_C_AF_ECMA 8;
|
||
#define GSS_C_AF_DATAKIT 9;
|
||
#define GSS_C_AF_CCITT 10;
|
||
#define GSS_C_AF_SNA 11;
|
||
#define GSS_C_AF_DECnet 12;
|
||
#define GSS_C_AF_DLI 13;
|
||
#define GSS_C_AF_LAT 14;
|
||
#define GSS_C_AF_HYLINK 15;
|
||
#define GSS_C_AF_APPLETALK 16;
|
||
#define GSS_C_AF_BSC 17;
|
||
#define GSS_C_AF_DSS 18;
|
||
#define GSS_C_AF_OSI 19;
|
||
#define GSS_C_AF_X25 21;
|
||
|
||
#define GSS_C_AF_NULLADDR 255;
|
||
|
||
#define GSS_C_NO_BUFFER ((gss_buffer_t) 0)
|
||
#define GSS_C_NULL_OID ((gss_OID) 0)
|
||
#define GSS_C_NULL_OID_SET ((gss_OID_set) 0)
|
||
#define GSS_C_NO_CONTEXT ((gss_ctx_id_t) 0)
|
||
#define GSS_C_NO_CREDENTIAL ((gss_cred_id_t) 0)
|
||
#define GSS_C_NO_CHANNEL_BINDINGS ((gss_channel_bindings_t) 0)
|
||
#define GSS_C_EMPTY_BUFFER {0, NULL}
|
||
|
||
/*
|
||
* Define the default Quality of Protection for per-message
|
||
* services. Note that an implementation that offers multiple
|
||
* levels of QOP may either reserve a value (for example zero,
|
||
* as assumed here) to mean "default protection", or alternatively
|
||
* may simply equate GSS_C_QOP_DEFAULT to a specific explicit QOP
|
||
* value.
|
||
|
||
|
||
|
||
Wray [Page 42]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
*/
|
||
#define GSS_C_QOP_DEFAULT 0
|
||
|
||
/*
|
||
* Expiration time of 2^32-1 seconds means infinite lifetime for a
|
||
* credential or security context
|
||
*/
|
||
#define GSS_C_INDEFINITE 0xfffffffful
|
||
|
||
|
||
/* Major status codes */
|
||
|
||
#define GSS_S_COMPLETE 0
|
||
|
||
/*
|
||
* Some "helper" definitions to make the status code macros obvious.
|
||
*/
|
||
#define GSS_C_CALLING_ERROR_OFFSET 24
|
||
#define GSS_C_ROUTINE_ERROR_OFFSET 16
|
||
#define GSS_C_SUPPLEMENTARY_OFFSET 0
|
||
#define GSS_C_CALLING_ERROR_MASK 0377ul
|
||
#define GSS_C_ROUTINE_ERROR_MASK 0377ul
|
||
#define GSS_C_SUPPLEMENTARY_MASK 0177777ul
|
||
|
||
/*
|
||
* The macros that test status codes for error conditions
|
||
*/
|
||
#define GSS_CALLING_ERROR(x) \
|
||
(x & (GSS_C_CALLING_ERROR_MASK << GSS_C_CALLING_ERROR_OFFSET))
|
||
#define GSS_ROUTINE_ERROR(x) \
|
||
(x & (GSS_C_ROUTINE_ERROR_MASK << GSS_C_ROUTINE_ERROR_OFFSET))
|
||
#define GSS_SUPPLEMENTARY_INFO(x) \
|
||
(x & (GSS_C_SUPPLEMENTARY_MASK << GSS_C_SUPPLEMENTARY_OFFSET))
|
||
#define GSS_ERROR(x) \
|
||
((GSS_CALLING_ERROR(x) != 0) || (GSS_ROUTINE_ERROR(x) != 0))
|
||
|
||
|
||
/*
|
||
* Now the actual status code definitions
|
||
*/
|
||
|
||
/*
|
||
* Calling errors:
|
||
*/
|
||
#define GSS_S_CALL_INACCESSIBLE_READ \
|
||
(1ul << GSS_C_CALLING_ERROR_OFFSET)
|
||
#define GSS_S_CALL_INACCESSIBLE_WRITE \
|
||
(2ul << GSS_C_CALLING_ERROR_OFFSET)
|
||
|
||
|
||
|
||
Wray [Page 43]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
#define GSS_S_CALL_BAD_STRUCTURE \
|
||
(3ul << GSS_C_CALLING_ERROR_OFFSET)
|
||
|
||
/*
|
||
* Routine errors:
|
||
*/
|
||
#define GSS_S_BAD_MECH (1ul << GSS_C_ROUTINE_ERROR_OFFSET)
|
||
#define GSS_S_BAD_NAME (2ul << GSS_C_ROUTINE_ERROR_OFFSET)
|
||
#define GSS_S_BAD_NAMETYPE (3ul << GSS_C_ROUTINE_ERROR_OFFSET)
|
||
#define GSS_S_BAD_BINDINGS (4ul << GSS_C_ROUTINE_ERROR_OFFSET)
|
||
#define GSS_S_BAD_STATUS (5ul << GSS_C_ROUTINE_ERROR_OFFSET)
|
||
#define GSS_S_BAD_SIG (6ul << GSS_C_ROUTINE_ERROR_OFFSET)
|
||
#define GSS_S_NO_CRED (7ul << GSS_C_ROUTINE_ERROR_OFFSET)
|
||
#define GSS_S_NO_CONTEXT (8ul << GSS_C_ROUTINE_ERROR_OFFSET)
|
||
#define GSS_S_DEFECTIVE_TOKEN (9ul << GSS_C_ROUTINE_ERROR_OFFSET)
|
||
#define GSS_S_DEFECTIVE_CREDENTIAL (10ul << GSS_C_ROUTINE_ERROR_OFFSET)
|
||
#define GSS_S_CREDENTIALS_EXPIRED (11ul << GSS_C_ROUTINE_ERROR_OFFSET)
|
||
#define GSS_S_CONTEXT_EXPIRED (12ul << GSS_C_ROUTINE_ERROR_OFFSET)
|
||
#define GSS_S_FAILURE (13ul << GSS_C_ROUTINE_ERROR_OFFSET)
|
||
|
||
/*
|
||
* Supplementary info bits:
|
||
*/
|
||
#define GSS_S_CONTINUE_NEEDED (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 0))
|
||
#define GSS_S_DUPLICATE_TOKEN (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 1))
|
||
#define GSS_S_OLD_TOKEN (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 2))
|
||
#define GSS_S_UNSEQ_TOKEN (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 3))
|
||
|
||
|
||
/*
|
||
* Finally, function prototypes for the GSSAPI routines.
|
||
*/
|
||
|
||
OM_uint32 gss_acquire_cred
|
||
(OM_uint32*, /* minor_status */
|
||
gss_name_t, /* desired_name */
|
||
OM_uint32, /* time_req */
|
||
gss_OID_set, /* desired_mechs */
|
||
int, /* cred_usage */
|
||
gss_cred_id_t*, /* output_cred_handle */
|
||
gss_OID_set*, /* actual_mechs */
|
||
OM_uint32* /* time_rec */
|
||
);
|
||
|
||
OM_uint32 gss_release_cred,
|
||
(OM_uint32*, /* minor_status */
|
||
gss_cred_id_t* /* cred_handle */
|
||
);
|
||
|
||
|
||
|
||
Wray [Page 44]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
OM_uint32 gss_init_sec_context
|
||
(OM_uint32*, /* minor_status */
|
||
gss_cred_id_t, /* claimant_cred_handle */
|
||
gss_ctx_id_t*, /* context_handle */
|
||
gss_name_t, /* target_name */
|
||
gss_OID, /* mech_type */
|
||
int, /* req_flags */
|
||
OM_uint32, /* time_req */
|
||
gss_channel_bindings_t,
|
||
/* input_chan_bindings */
|
||
gss_buffer_t, /* input_token */
|
||
gss_OID*, /* actual_mech_type */
|
||
gss_buffer_t, /* output_token */
|
||
int*, /* ret_flags */
|
||
OM_uint32* /* time_rec */
|
||
);
|
||
|
||
OM_uint32 gss_accept_sec_context
|
||
(OM_uint32*, /* minor_status */
|
||
gss_ctx_id_t*, /* context_handle */
|
||
gss_cred_id_t, /* verifier_cred_handle */
|
||
gss_buffer_t, /* input_token_buffer */
|
||
gss_channel_bindings_t,
|
||
/* input_chan_bindings */
|
||
gss_name_t*, /* src_name */
|
||
gss_OID*, /* mech_type */
|
||
gss_buffer_t, /* output_token */
|
||
int*, /* ret_flags */
|
||
OM_uint32*, /* time_rec */
|
||
gss_cred_id_t* /* delegated_cred_handle */
|
||
);
|
||
|
||
OM_uint32 gss_process_context_token
|
||
(OM_uint32*, /* minor_status */
|
||
gss_ctx_id_t, /* context_handle */
|
||
gss_buffer_t /* token_buffer */
|
||
);
|
||
|
||
OM_uint32 gss_delete_sec_context
|
||
(OM_uint32*, /* minor_status */
|
||
gss_ctx_id_t*, /* context_handle */
|
||
gss_buffer_t /* output_token */
|
||
);
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Wray [Page 45]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
OM_uint32 gss_context_time
|
||
(OM_uint32*, /* minor_status */
|
||
gss_ctx_id_t, /* context_handle */
|
||
OM_uint32* /* time_rec */
|
||
);
|
||
|
||
OM_uint32 gss_sign
|
||
(OM_uint32*, /* minor_status */
|
||
gss_ctx_id_t, /* context_handle */
|
||
int, /* qop_req */
|
||
gss_buffer_t, /* message_buffer */
|
||
gss_buffer_t /* message_token */
|
||
);
|
||
|
||
OM_uitn32 gss_verify
|
||
(OM_uint32*, /* minor_status */
|
||
gss_ctx_id_t, /* context_handle */
|
||
gss_buffer_t, /* message_buffer */
|
||
gss_buffer_t, /* token_buffer */
|
||
int* /* qop_state */
|
||
);
|
||
|
||
OM_uint32 gss_seal
|
||
(OM_uint32*, /* minor_status */
|
||
gss_ctx_id_t, /* context_handle */
|
||
int, /* conf_req_flag */
|
||
int, /* qop_req */
|
||
gss_buffer_t, /* input_message_buffer */
|
||
int*, /* conf_state */
|
||
gss_buffer_t /* output_message_buffer */
|
||
);
|
||
|
||
OM_uint32 gss_unseal
|
||
(OM_uint32*, /* minor_status */
|
||
gss_ctx_id_t, /* context_handle */
|
||
gss_buffer_t, /* input_message_buffer */
|
||
gss_buffer_t, /* output_message_buffer */
|
||
int*, /* conf_state */
|
||
int* /* qop_state */
|
||
);
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Wray [Page 46]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
OM_uint32 gss_display_status
|
||
(OM_uint32*, /* minor_status */
|
||
OM_uint32, /* status_value */
|
||
int, /* status_type */
|
||
gss_OID, /* mech_type */
|
||
int*, /* message_context */
|
||
gss_buffer_t /* status_string */
|
||
);
|
||
|
||
OM_uint32 gss_indicate_mechs
|
||
(OM_uint32*, /* minor_status */
|
||
gss_OID_set* /* mech_set */
|
||
);
|
||
|
||
OM_uint32 gss_compare_name
|
||
(OM_uint32*, /* minor_status */
|
||
gss_name_t, /* name1 */
|
||
gss_name_t, /* name2 */
|
||
int* /* name_equal */
|
||
);
|
||
|
||
OM_uint32 gss_display_name,
|
||
(OM_uint32*, /* minor_status */
|
||
gss_name_t, /* input_name */
|
||
gss_buffer_t, /* output_name_buffer */
|
||
gss_OID* /* output_name_type */
|
||
);
|
||
|
||
OM_uint32 gss_import_name
|
||
(OM_uint32*, /* minor_status */
|
||
gss_buffer_t, /* input_name_buffer */
|
||
gss_OID, /* input_name_type */
|
||
gss_name_t* /* output_name */
|
||
);
|
||
|
||
OM_uint32 gss_release_name
|
||
(OM_uint32*, /* minor_status */
|
||
gss_name_t* /* input_name */
|
||
);
|
||
|
||
OM_uint32 gss_release_buffer
|
||
(OM_uint32*, /* minor_status */
|
||
gss_buffer_t /* buffer */
|
||
);
|
||
|
||
OM_uint32 gss_release_oid_set
|
||
(OM_uint32*, /* minor_status */
|
||
gss_OID_set* /* set */
|
||
|
||
|
||
|
||
Wray [Page 47]
|
||
|
||
RFC 1509 GSSAPI - Overview and C bindings September 1993
|
||
|
||
|
||
);
|
||
|
||
OM_uint32 gss_inquire_cred
|
||
(OM_uint32 *, /* minor_status */
|
||
gss_cred_id_t, /* cred_handle */
|
||
gss_name_t *, /* name */
|
||
OM_uint32 *, /* lifetime */
|
||
int *, /* cred_usage */
|
||
gss_OID_set * /* mechanisms */
|
||
);
|
||
|
||
|
||
|
||
#endif /* GSSAPI_H_ */
|
||
|
||
References
|
||
|
||
[1] Linn, J., "Generic Security Service Application Program
|
||
Interface", RFC 1508, Geer Zolot Associate, September 1993.
|
||
|
||
[2] "OSI Object Management API Specification, Version 2.0 t", X.400
|
||
API Association & X/Open Company Limited, August 24, 1990.
|
||
Specification of datatypes and routines for manipulating
|
||
information objects.
|
||
|
||
Security Considerations
|
||
|
||
Security issues are discussed throughout this memo.
|
||
|
||
Author's Address
|
||
|
||
John Wray
|
||
Digital Equipment Corporation
|
||
550 King Street, LKG2-2/AA6
|
||
Littleton, MA 01460
|
||
USA
|
||
|
||
Phone: +1-508-486-5210
|
||
EMail: Wray@tuxedo.enet.dec.com
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Wray [Page 48]
|
||
|