PreviousNext

gss_accept_sec_context(3sec)

Establishes a security context between the application and a context acceptor

Synopsis

#include <dce/gssapi.h>

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 *
actual_mech_type,
gss_buffer_t
output_token,
int *
ret_flags,
OM_uint32 *
time_rec
gss_cred_id_t *
delegated_cred_handle)

Parameters

Input

verifier_cred_handle
Specifies the credential handle (the identity) claimed by the context acceptor. This is optional information. The credential must be either an ACCEPT type credential or a BOTH type credential. If you do not specify a credential handle and specify instead GSS_C_NO_CREDENTIAL, the application can accept a context under any registered identity. Use the gssdce_register_acceptor_identity( ) routine to register an identity before specifying GSS_C_NO_CREDENTIAL.

input_token_buffer
Specifies the token received from the context acceptor.

input_chan_bindings
Specifies bindings supplied by the context initiator.

Allows the context initiator to bind the channel identification information securely to the security context.

Input/Output

context_handle
Specifies a context handle for a new context. The first time the context initiator uses the routine, specify GSS_C_NO_CONTEXT to set up a specific context. In subsequent calls, use the value returned by this parameter.

Output

src_name
Returns the authenticated name of the context initiator. This information is optional. If the authenticated name is not required, specify NULL.

To deallocate the authenticated name, pass it to the gss_release_name( ) routine.

actual_mech_type
Returns the security mechanism with which the context was established. The security mechanism will be one of the following:

· GSSDCE_C_OID_DCE_KRBV5_DES, for DCE Security

· GSSDCE_C_OID_KRBV5_DES, for Kerberos Version 5

output_token
Returns a token to pass to the context acceptor. If no token is to be passed to the context acceptor, the routine sets the length field of the returned token buffer to 0 (zero).

ret_flags
Returns a bitmask containing six independent flags, each of which requests that the context support a service option. The following symbolic names are provided to correspond to each flag. The symbolic names should be logically ANDed with the value of ret_flags to test whether the context supports the service option.

GSS_C_DELEG_FLAG
The TRUE/FALSE values for GSS_C_DELEG_FLAG are:

TRUE Delegated credentials are available from the delegated_cred_handle parameter.
FALSE No credentials were delegated.

GSS_C_MUTUAL_FLAG

The TRUE/FALSE values for GSS_C_MUTUAL_FLAG are:

TRUE The context acceptor requested mutual authentication.
FALSE The context acceptor did not request mutual authentication.

GSS_C_REPLAY_FLAG
The TRUE/FALSE values for GSS_C_REPLAY_FLAG are:

TRUE Replayed signed or sealed messages will be detected.
FALSE Replayed messages will not be detected.

GSS_C_SEQUENCE_FLAG

The TRUE/FALSE values for GSS_C_SEQUENCE_FLAG are:

TRUE Out-of-sequence signed or sealed messages will be detected.
FALSE Out-of-sequence signed or sealed messages will not be detected.

GSS_C_CONF_FLAG
The TRUE/FALSE values for GSS_C_CONF_FLAG are:

TRUE Confidentiality services are available by calling the gss_seal( ) routine.
FALSE Confidentiality services are not available. However, the application can call the gss_seal( ) routine to provide message encapsulation, data-origin authentication, and integrity services.

GSS_C_INTEG_FLAG
The TRUE/FALSE values for GSS_C_INTEG_FLAG are:

TRUE Integrity services can be invoked by calling either the gss_sign( ) or gss_seal( ) routine.
FALSE Integrity services for individual messages are not available.
time_rec
Returns the number of seconds for which the context remains valid. This is optional information. If the time is not required, specify NULL.

delegated_cred_handle
Returns the credential handle for credentials received from the context initiator. The credential handle is valid only if delegated credentials are available. If the ret_flags parameter is true, the flag GSS_C_DELEG_FLAG is set, indicating that delegated credentials are available.

minor_status
Returns a status code from the security mechanism.

Description
The gss_accept_sec_context( ) routine is the second step in establishing a security context between the context initiator and a context acceptor. In the first step, the context initiator calls the gss_init_sec_context( ) routine. The gss_init_sec_context( ) routine generates a token for the security context and passes it to the context initiator. The context initiator sends the token to the context acceptor.

In the second step, the context acceptor accepts the call from the context initiator and calls the gss_accept_sec_context( ) routine. The gss_accept_sec_context( ) routine expects a value for the input_token parameter. The value for the input_token parameter is generated by the gss_init_sec_context( ) routine and passed by the initiator to the acceptor.

The gss_accept_sec_context( ) routine can also return a value for the output_token parameter. The context acceptor presents the token to the gss_init_sec_context( ) routine. If the acceptor does not need to send a token to the initiator, gss_accept_sec_context( ) sets the length field of the output_token parameter to 0 (zero).

To complete establishing the context, the context initiator can require one or more reply tokens from the context acceptor. If the application requires reply tokens, the gss_accept_sec_context( ) routine returns a status value containing GSS_S_CONTINUE_NEEDED. The application calls the routine again when the reply token is received from the context acceptor. The application passes the token to the gss_accept_sec_context( ) routine via the output_token parameters.

The gss_accept_sec_context( ) routine must find a key to decrypt the token. The token contains the unencrypted principal name of the context acceptor. The acceptor's principal name identifies the key that the context initiator used to encrypt the rest of the token. The gss_accept_sec_context( ) routine matches the principal name with the key in the following way:

· If you specify a credential, the credential and the name in the token must match. The acceptor's principal name (contained in the token) has been registered by a call to the gssdec_register_acceptor_identity( ) routine. The gss_accept_sec_context( ) routine looks in the registered key table.

· If you specify GSS_C_NO_CRED and the principal name in the token is registered, the gss_accept_sec_context( ) routine, using either the rpc_server_register_auth_info( ) routine or the gssdce_register_acceptor_identity( ) routine, looks in the table specified when you registered the token name.

· If you specify GSS_C_NO_CRED and the principal name in the token is not registered, the gss_accept_sec_context( ) routine fails and returns the status GSS_S_FAILURE because the Generic Security Service Application Programming Interface (GSSAPI) does not know where to find the key.

The following table summarizes how the gss_accept_sec_context( ) routine determines the key for the credential:


You specify...
Is the principal's name registered?
Then the routine... _
A credential Yes Looks in the key table specified in gssdce_register_acceptor_identity( ) or the default key table.
GSS_C_NO_CRED Yes Looks in the key table specified in gssdce_register_acceptor_identity( ).
No Fails because the principal is not registered. It returns the status code GSS_S_FAILURE.
The values returned using the src_name, ret_flags, time_rec, and delegated_cred_handle parameters are not defined unless the routine returns the status GSS_S_COMPLETE.

Status Codes
The following describes a partial list of codes (messages) that might be returned. Refer to the OSF DCE Problem Determination Guide for complete descriptions of all messages. The following status codes can be returned:

GSS_S_COMPLETE The routine was completed successfully.
GSS_S_BAD_BINDINGS The input_token parameter contains different channel bindings from those specified with the input_chan_bindings parameter.
GSS_S_BAD_SIG The input_token parameter contains an invalid signature.
GSS_S_CONTINUE_NEEDED To complete the context, the gss_accept_sec_context( ) routine must be called again with a token required from the context acceptor.
GSS_S_CREDENTIALS_EXPIRED The referenced credentials have expired.
GSS_S_DEFECTIVE_CREDENTIAL Consistency checks performed on the credential failed.
GSS_S_DEFECTIVE_TOKEN Consistency checks performed on the input_token parameter failed.
GSS_S_DUPLICATE_TOKEN The input_token parameter was already processed. This is a fatal error that occurs during context establishment.
GSS_S_FAILURE The routine failed. See the minor_status parameter return value for more information.
GSS_S_NO_CONTEXT The supplied context handle did not refer to a valid context.
GSS_S_NO_CRED Indicates either the supplied credentials were not valid for context acceptance or the credential handle did not reference any credentials.
GSS_S_OLD_TOKEN The input_token parameter was too old. This is a fatal error that occurs during context establishment.
Related Information
Functions:

gss_acquire_cred(3sec)

gss_delete_sec_context(3sec)

gss_init_sec_context(3sec)

gssdce_register_acceptor_identity(3sec)