svcadm(8)을 검색하려면 섹션에서 8 을 선택하고, 맨 페이지 이름에 svcadm을 입력하고 검색을 누른다.
gss_init_sec_context(3gss)
Generic Security Services API Library Functions
gss_init_sec_context(3gss)
NAME
gss_init_sec_context - initiate a GSS-API security context with a peer
application
SYNOPSIS
cc [ flag... ] file... -lgss [ library... ]
#include <gssapi/gssapi.h>
OM_uint32 gss_init_sec_context(OM_uint32 *minor_status,
const gss_cred_id_t initiator_cred_handle,
gss_ctx_id_t *context_handle, const gss_name_t *target_name,
const gss_OID mech_type, OM_uint32 req_flags,
OM_uint32 time_req, const gss_channel_bindings_t input_chan_bindings,
const gss_buffer_t input_token, gss_OID *actual_mech_type,
gss_buffer_t output_token, OM_uint32 *ret_flags,
OM_uint32 *time_rec);
PARAMETERS
The parameter descriptions for gss_init_sec_context() follow:
minor_status
A mechanism specific status code.
initiator_cred_handle
The handle for the credentials claimed. Supply GSS_C_NO_CREDENTIAL
to act as a default initiator principal. If no default initiator is
defined, the function returns GSS_S_NO_CRED.
context_handle
The context handle for a new context. Supply the value
GSS_C_NO_CONTEXT for the first call, and use the value returned in
any continuation calls. The resources associated with context_han‐
dle must be released by the application after use by a call to
gss_delete_sec_context(3GSS).
target_name
The name of the context acceptor.
mech_type
The object ID of the desired mechanism. To obtain a specific
default, supply the value GSS_C_NO_OID.
req_flags
Contains independent flags, each of which will request that the
context support a specific service option. A symbolic name is pro‐
vided for each flag. Logically-OR the symbolic name to the corre‐
sponding required flag to form the bit-mask value. req_flags may
contain one of the following values:
GSS_C_DELEG_FLAG
If true, delegate credentials to a remote peer. Do not delegate
the credentials if the value is false.
GSS_C_MUTUAL_FLAG
If true, request that the peer authenticate itself. If false,
authenticate to the remote peer only.
GSS_C_REPLAY_FLAG
If true, enable replay detection for messages protected with
gss_wrap(3GSS) or gss_get_mic(3GSS). Do not attempt to detect
replayed messages if false.
GSS_C_SEQUENCE_FLAG
If true, enable detection of out-of-sequence protected mes‐
sages. Do not attempt to detect out-of-sequence messages if
false.
GSS_C_CONF_FLAG
If true, request that confidential service be made available by
means of gss_wrap(3GSS). If false, no per-message confidential
service is required.
GSS_C_INTEG_FLAG
If true, request that integrity service be made available by
means of gss_wrap(3GSS) or gss_get_mic(3GSS). If false, no per-
message integrity service is required.
GSS_C_ANON_FLAG
If true, do not reveal the initiator's identify to the accep‐
tor. If false, authenticate normally.
time_req
The number of seconds for which the context will remain valid. Sup‐
ply a zero value to time_req to request a default validity period.
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.
input_token
Token received from the peer application. On the initial call, sup‐
ply GSS_C_NO_BUFFER or a pointer to a buffer containing the value
GSS_C_EMPTY_BUFFER.
actual_mech_type
The actual mechanism used. The OID returned by means of this param‐
eter will be pointer to static storage that should be treated as
read-only. The application should not attempt to free it. To obtain
a specific default, supply the value GSS_C_NO_OID. Specify NULL if
the parameter is not required.
output_token
The token to send to the peer application. If the length field of
the returned buffer is zero, no token need be sent to the peer
application. After use storage associated with this buffer must be
freed by the application by a call to gss_release_buffer(3GSS).
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, credentials were delegated to the remote peer. If
false, no credentials were delegated.
GSS_C_MUTUAL_FLAG
If true, the remote peer authenticated itself. If false, the
remote peer did not authenticate itself.
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, confidential service may be invoked by calling the
gss_wrap() routine. If false, no confidentiality service is
available by means of gss_wrap(3GSS). 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_wrap(3GSS) or gss_get_mic(3GSS) routine. If false, per-mes‐
sage integrity service is not available.
GSS_C_ANON_FLAG
If true, the initiator's identity has not been revealed; it
will not be revealed if any emitted token is passed to the
acceptor. If false, the initiator has been or will be authenti‐
cated 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_con‐
text(3GSS). If false, the security context cannot be trans‐
ferred.
time_rec
The number of seconds for which the context will remain valid.
Specify NULL if the parameter is not required.
DESCRIPTION
The gss_init_sec_context() function initiates the establishment of a
security context between the application and a remote peer. Initially,
the input_token parameter should be specified either as GSS_C_NO_BUF‐
FER, or as a pointer to a gss_buffer_desc object with a length field
that contains a zero value. The routine may return a output_token,
which should be transferred to the peer application, which will present
it to gss_accept_sec_context(3GSS). 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 context establish‐
ment, one or more reply tokens may be required from the peer applica‐
tion; if so, gss_init_sec_context() will return a status code that con‐
tains the supplementary information bit GSS_S_CONTINUE_NEEDED. In this
case, make another call to gss_init_sec_context() when the reply token
is received from the peer application and pass the reply token to
gss_init_sec_context() by means of the input_token parameter.
Construct portable applications to use the token length and return sta‐
tus to determine whether to send or wait for a token.
Whenever the routine 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. Unless the accompanying ret_flags parameter con‐
tains the bit GSS_C_PROT_READY_FLAG, which indicates that
per-message services may be applied in advance of a success‐
ful completion status, the value returned by means of the
actual_mech_type parameter is undefined until the routine
returns a major status value of GSS_S_COMPLETE.
o 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 the
ret_flags parameter contain values that will be valid if
context establishment succeeds. For example, if the applica‐
tion requests a service such as delegation or anonymous
authentication by means of the req_flags argument, and the
service is unavailable from the underlying mechanism,
gss_init_sec_context() generates a token that will not pro‐
vide the service, and it indicate by means of the ret_flags
argument that the service will not be supported. The appli‐
cation may choose to abort context establishment by calling
gss_delete_sec_context(3GSS) if it cannot continue without
the service, or if the service was merely desired but not
mandatory, it may transmit the token and continue context
establishment.
o 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_init_sec_context() returns, whether or not the context
is fully established.
o The GSS-API sets the GSS_C_PROT_READY_FLAG in the final
ret_flags returned to a caller, for example, when accompa‐
nied by a GSS_S_COMPLETE status code. However, applications
should not rely on this behavior, as the flag was not
defined in Version 1 of the GSS-API. Instead, applications
should determine what per-message services are available
after a successful context establishment according to the
GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values.
o All other bits within the ret_flags argument are set to
zero.
If the initial call of gss_init_sec_context() fails, the GSS-API does
not create a context object; it leaves the value of the context_handle
parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of
failure on a subsequent call, the GSS-API leaves the security context
untouched for the application to delete using gss_delete_sec_con‐
text(3GSS).
During context establishment, the informational status bits
GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and
GSS-API mechanisms should always return them in association with a sta‐
tus code of GSS_S_FAILURE. This pairing requirement was not part of
Version 1 of the GSS-API specification, so applications that wish to
run on Version 1 implementations must special-case these codes.
ERRORS
gss_init_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 con‐
text, and gss_init_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 are not valid for context acceptance, or
the credential handle does 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_BAD_SIG
The input_token contains an invalid MIC or a MIC that cannot be
verified.
GSS_S_OLD_TOKEN
The input_token is too old. This is a fatal error while establish‐
ing context.
GSS_S_DUPLICATE_TOKEN
The input_token is valid, but it is a duplicate of a token already
processed. This is a fatal error while establishing context.
GSS_S_NO_CONTEXT
The supplied context handle does not refer to a valid context.
GSS_S_BAD_NAMETYPE
The provided target_name parameter contains an invalid or unsup‐
ported name type.
GSS_S_BAD_NAME
The supplied target_name parameter is ill-formed.
GSS_S_BAD_MECH
The token received specifies 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_init_sec_context() Within a Loop
A typical portable caller should always invoke gss_init_sec_context()
within a loop:
int context_established = 0;
gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT;
...
input_token->length = 0;
while (!context_established) {
maj_stat = gss_init_sec_context(&min_stat,
cred_hdl,
&context_hdl,
target_name,
desired_mech,
desired_services,
desired_time,
input_bindings,
input_token,
&actual_mech,
output_token,
&actual_services,
&actual_time);
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;
};
if (maj_stat & GSS_S_CONTINUE_NEEDED) {
receive_token_from_peer(input_token);
} else {
context_established = 1;
};
};
ATTRIBUTES
See attributes(7) for descriptions of the following attributes:
tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE
TYPEATTRIBUTE VALUE _ MT-LevelSafe
ATTRIBUTES
See attributes(7) for descriptions of the following attributes:
box; cbp-1 | cbp-1 l | l . ATTRIBUTE TYPE ATTRIBUTE VALUE = Availabil‐
ity security/kerberos-5 = Stability Pass-through committed
SEE ALSO
gss_delete_sec_context(3GSS), gss_export_sec_context(3GSS),
gss_get_mic(3GSS), gss_wrap(3GSS), attributes(7)
NOTES
Source code for open source software components in Oracle Solaris can
be found at https://www.oracle.com/downloads/opensource/solaris-source-
code-downloads.html.
This software was built from source available at
https://github.com/oracle/solaris-userland. The original community
source was downloaded from http://web.mit.edu/ker‐
beros/dist/krb5/1.18/krb5-1.18.4.tar.gz.
Further information about this software can be found on the open source
community website at http://web.mit.edu/kerberos/.
Solaris 11.4 6 Nov 2009
gss_init_sec_context(3gss)