GSS_ACCEPT_SEC_CONTEXT(3GSS) Generic Security Services API Library Functions
NAME
       gss_accept_sec_context - accept a security context initiated by a
       peer application
SYNOPSIS
       cc [ 
flag... ] 
file... 
-lgss [ 
library... ]
       #include <gssapi/gssapi.h>       
OM_uint32 gss_accept_sec_context(
OM_uint32 *minor_status,            
gss_ctx_id_t *context_handle,            
const gss_cred_id_t acceptor_cred_handle,            
const gss_buffer_t input_token,            
const gss_channel_bindings_t input_chan_bindings,            
const gss_name_t * src_name, 
gss_OID * mech_type,            
gss_buffer_t output_token, 
OM_uint32 *ret_flags,            
OM_uint32 * time_rec, 
gss_cred_id_t *delegated_cred_handle);
PARAMETERS
       The parameter descriptions for 
gss_accept_sec_context() follow:       
minor_status           The status code returned by the underlying mechanism.       
context_handle           The context handle to return to the initiator. This should be set
           to 
GSS_C_NO_CONTEXT before the loop begins.       
acceptor_cred_handle           The handle for the credentials acquired by the acceptor,
           typically through 
gss_acquire_cred(). It may be initialized to           
GSS_C_NO_CREDENTIAL to indicate a default credential to use. If
           no default credential is defined, the function returns           
GSS_C_NO_CRED.       
input_token_buffer           Token received from the context initiative.       
input_chan_bindings           Optional application-specified bindings. Allows application to
           securely bind channel identification information to the security
           context. Set to 
GSS_C_NO_CHANNEL_BINDINGS if you do not want to
           use channel bindings.       
src_name           The authenticated name of the context initiator. After use, this
           name should be deallocated by passing it to 
gss_release_name().
           See 
gss_release_name(3GSS). If not required, specify 
NULL.       
mech_type           The security mechanism used. Set to 
NULL if it does not matter
           which mechanism is used.       
output_token           The token to send to the acceptor. Initialize it to           
GSS_C_NO_BUFFER before the function is called (or its length
           field set to zero). If the length is zero, no token need be sent.       
ret_flags           Contains various independent flags, each of which indicates that
           the context supports a specific service option. If not needed,
           specify 
NULL. Test the returned bit-mask 
ret_flags value against
           its symbolic name to determine if the given option is supported
           by the context. 
ret_flags may contain one of the following
           values:           
GSS_C_DELEG_FLAG               If true, delegated credentials are available by means of the               
delegated_cred_handle parameter. If false, no credentials
               were delegated.           
GSS_C_MUTUAL_FLAG               If true, a remote peer asked for mutual authentication. If
               false, no remote peer asked for mutual authentication.           
GSS_C_REPLAY_FLAG               If true, replay of protected messages will be detected. If
               false, replayed messages will not be detected.           
GSS_C_SEQUENCE_FLAG               If true, out of sequence protected messages will be detected.
               If false, they will not be detected.           
GSS_C_CONF_FLAG               If true, confidentiality service may be invoked by calling
               the 
gss_wrap() routine. If false, no confidentiality service
               is available by means of 
gss_wrap(). 
gss_wrap() will provide
               message encapsulation, data-origin authentication and
               integrity services only.           
GSS_C_INTEG_FLAG               If true, integrity service may be invoked by calling either
               the 
gss_get_mic(3GSS) or the 
gss_wrap(3GSS) routine. If
               false, per-message integrity service is not available.           
GSS_C_ANON_FLAG               If true, the initiator does not wish to be authenticated. The               
src_name parameter, if requested, contains an anonymous
               internal name. If false, the initiator has been authenticated
               normally.           
GSS_C_PROT_READY_FLAG               If true, the protection services specified by the states of               
GSS_C_CONF_FLAG and 
GSS_C_INTEG_FLAG are available if the
               accompanying major status return value is either               
GSS_S_COMPLETE or 
GSS_S_CONTINUE_NEEDED. If false, the
               protection services are available only if the accompanying
               major status return value is 
GSS_S_COMPLETE.           
GSS_C_TRANS_FLAG               If true, the resultant security context may be transferred to
               other processes by means of a call to               
gss_export_sec_context(3GSS). If false, the security context
               cannot be transferred.       
time_rec           The number of sections for which the context will remain value
           Specify 
NULL if not required.       
delegated_cred_handle           The credential value for credentials received from the context's
           initiator. It is valid only if the initiator has requested that
           the acceptor act as a proxy: that is, if the 
ret_flag argument
           resolves to 
GSS_C_DELEG_FLAG.
DESCRIPTION
       The 
gss_accept_sec_context() function allows a remotely initiated
       security context between the application and a remote peer to be
       established.  The routine may return an 
output_token, which should be
       transferred to the peer application, where the peer application will
       present it to 
gss_init_sec_context(). See 
gss_init_sec_context(3GSS).
       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() by means
       of the 
input_token parameters.
       Portable applications should be constructed to use the token length
       and return status to determine whether to send or to wait for a
       token.
       Whenever 
gss_accept_sec_context() returns a major status that
       includes the value 
GSS_S_CONTINUE_NEEDED, the context is not fully
       established, and the following restrictions apply to the output
       parameters:
           o      The value returned by means of the 
time_rec parameter is
                  undefined.
           o      Unless the accompanying 
ret_flags parameter contains the
                  bit 
GSS_C_PROT_READY_FLAG, which indicates that per-
                  message services may be applied in advance of a successful
                  completion status, the value returned by the 
mech_type                  parameter may be undefined until 
gss_accept_sec_context()                  returns a major status value of 
GSS_S_COMPLETE.
       The values of the 
GSS_C_DELEG_FLAG, 
GSS_C_MUTUAL_FLAG,       
GSS_C_REPLAY_FLAG, 
GSS_C_SEQUENCE_FLAG, 
GSS_C_CONF_FLAG,       
GSS_C_INTEG_FLAG and 
GSS_C_ANON_FLAG bits returned by means of the       
ret_flags parameter are values that would be valid if context
       establishment were to succeed.
       The values of the 
GSS_C_PROT_READY_FLAG and 
GSS_C_TRANS_FLAG bits
       within 
ret_flags indicate the actual state at the time       
gss_accept_sec_context() returns, whether or not the context is fully
       established. However, applications should not rely on this behavior,
       as 
GSS_C_PROT_READY_FLAG was not defined in Version 1 of the 
GSS-API.
       Instead, applications should be prepared to use per-message services
       after a successful context establishment, based upon the       
GSS_C_INTEG_FLAG and 
GSS_C_CONF_FLAG values.
       All other bits within the 
ret_flags argument are set to zero.
       While 
gss_accept_sec_context() returns 
GSS_S_CONTINUE_NEEDED, the
       values returned by means of the 
ret_flags argument indicate the
       services available from the established context. If the initial call
       of 
gss_accept_sec_context() fails, no context object is created, and
       the value of the 
context_handle parameter is set to 
GSS_C_NO_CONTEXT.
       In the event of a failure on a subsequent call, the security context
       and the 
context_handle parameter are left untouched for the
       application to delete using 
gss_delete_sec_context(3GSS). During
       context establishment, the informational status bits 
GSS_S_OLD_TOKEN       and 
GSS_S_DUPLICATE_TOKEN indicate fatal errors; 
GSS-API mechanisms
       always return them in association with a  routine error of       
GSS_S_FAILURE. This pairing requirement did not exist in version 1 of
       the 
GSS-API specification, so applications that wish to run over
       version 1 implementations must special-case these codes.
ERRORS
       gss_accept_sec_context() may return the following status codes:       
GSS_S_COMPLETE                                     Successful completion.       
GSS_S_CONTINUE_NEEDED                                     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                                     Consistency checks performed on the                                     
input_token failed.       
GSS_S_DEFECTIVE_CREDENTIAL                                     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 than those specified
                                     by means of the 
input_chan_bindings                                     parameter.       
GSS_S_NO_CONTEXT                                     The supplied context handle did not
                                     refer to a valid context.       
GSS_S_BAD_SIG                                     The 
input_token contains an invalid                                     
MIC.       
GSS_S_OLD_TOKEN                                     The 
input_token was too old. This is a
                                     fatal error while establishing context.       
GSS_S_DUPLICATE_TOKEN                                     The 
input_token is valid, but it is
                                     duplicate of a token already processed.
                                     This is a fatal error while
                                     establishing context.       
GSS_S_BAD_MECH                                     The token received specified a
                                     mechanism that is not supported by the
                                     implementation or the provided
                                     credential.       
GSS_S_FAILURE                                     The underlying mechanism detected an
                                     error for which no specific 
GSS status
                                     code is defined. The mechanism-specific
                                     status code reported by means of the                                     
minor_status parameter details the
                                     error condition.
EXAMPLES
       Example 1: Invoking gss_accept_sec_context() Within a Loop
       A typical portable caller should always invoke       
gss_accept_sec_context() within a loop:
         gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT;
         do {
            receive_token_from_peer(input_token);
            maj_stat = gss_accept_sec_context(&min_stat,
                                              &context_hdl,
                                              cred_hdl,
                                              input_token,
                                              input_bindings,
                                              &client_name,
                                              &mech_type,
                                              output_token,
                                              &ret_flags,
                                              &time_rec,
                                              &deleg_cred);
            if (GSS_ERROR(maj_stat)) {
               report_error(maj_stat, min_stat);
            };
            if (output_token->length != 0) {
               send_token_to_peer(output_token);
               gss_release_buffer(&min_stat, output_token);
            };
            if (GSS_ERROR(maj_stat)) {
               if (context_hdl != GSS_C_NO_CONTEXT)
                  gss_delete_sec_context(&min_stat,
                                         &context_hdl,
                                         GSS_C_NO_BUFFER);
               break;
            };
         } while (maj_stat & GSS_S_CONTINUE_NEEDED);
         /* Check client_name authorization */
         ...
         (void) gss_release_name(&min_stat, &client_name);
         /* Use and/or store delegated credential */
         ...
         (void) gss_release_cred(&min_stat, &deleg_cred);
ATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +---------------+-----------------+
       |ATTRIBUTE TYPE | ATTRIBUTE VALUE |
       +---------------+-----------------+
       |MT-Level       | Safe            |
       +---------------+-----------------+
SEE ALSO
       gss_delete_sec_context(3GSS), 
gss_export_sec_context(3GSS),       
gss_get_mic(3GSS), 
gss_init_sec_context(3GSS),       
gss_release_cred(3GSS), 
gss_release_name(3GSS), 
gss_store_cred(3GSS),       
gss_wrap(3GSS), 
attributes(7)       Solaris Security for Developers Guide                                May 22, 2006    GSS_ACCEPT_SEC_CONTEXT(3GSS)