681 lines
35 KiB
C
681 lines
35 KiB
C
/**
|
|
* FreeRDP: A Remote Desktop Protocol Implementation
|
|
* Generic Security Service Application Program Interface (GSSAPI)
|
|
*
|
|
* Copyright 2015 ANSSI, Author Thomas Calderon
|
|
* Copyright 2015 Marc-Andre Moreau <marcandre.moreau@gmail.com>
|
|
* Copyright 2017 Dorian Ducournau <dorian.ducournau@gmail.com>
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef FREERDP_SSPI_GSS_PRIVATE_H
|
|
#define FREERDP_SSPI_GSS_PRIVATE_H
|
|
|
|
#include <winpr/crt.h>
|
|
#include <winpr/sspi.h>
|
|
|
|
/**
|
|
* The following are ABI-compatible, non-conflicting GSSAPI definitions
|
|
*
|
|
* http://tools.ietf.org/html/rfc2743
|
|
* http://tools.ietf.org/html/rfc2744
|
|
*/
|
|
|
|
#define SSPI_GSSAPI
|
|
#define SSPI_GSSOID
|
|
|
|
struct sspi_gss_name_struct;
|
|
typedef struct sspi_gss_name_struct* sspi_gss_name_t;
|
|
|
|
struct sspi_gss_cred_id_struct;
|
|
typedef struct sspi_gss_cred_id_struct* sspi_gss_cred_id_t;
|
|
|
|
struct sspi_gss_ctx_id_struct;
|
|
typedef struct sspi_gss_ctx_id_struct* sspi_gss_ctx_id_t;
|
|
|
|
typedef struct sspi_gss_OID_desc_struct
|
|
{
|
|
UINT32 length;
|
|
void* elements;
|
|
} sspi_gss_OID_desc, *sspi_gss_OID;
|
|
|
|
typedef struct sspi_gss_OID_set_desc_struct
|
|
{
|
|
size_t count;
|
|
sspi_gss_OID elements;
|
|
} sspi_gss_OID_set_desc, *sspi_gss_OID_set;
|
|
|
|
typedef struct sspi_gss_buffer_desc_struct
|
|
{
|
|
size_t length;
|
|
void* value;
|
|
} sspi_gss_buffer_desc, *sspi_gss_buffer_t;
|
|
|
|
typedef struct sspi_gss_channel_bindings_struct
|
|
{
|
|
UINT32 initiator_addrtype;
|
|
sspi_gss_buffer_desc initiator_address;
|
|
UINT32 acceptor_addrtype;
|
|
sspi_gss_buffer_desc acceptor_address;
|
|
sspi_gss_buffer_desc application_data;
|
|
} * sspi_gss_channel_bindings_t;
|
|
|
|
typedef UINT32 sspi_gss_qop_t;
|
|
typedef int sspi_gss_cred_usage_t;
|
|
|
|
#define SSPI_GSS_C_DELEG_FLAG 1
|
|
#define SSPI_GSS_C_MUTUAL_FLAG 2
|
|
#define SSPI_GSS_C_REPLAY_FLAG 4
|
|
#define SSPI_GSS_C_SEQUENCE_FLAG 8
|
|
#define SSPI_GSS_C_CONF_FLAG 16
|
|
#define SSPI_GSS_C_INTEG_FLAG 32
|
|
#define SSPI_GSS_C_ANON_FLAG 64
|
|
#define SSPI_GSS_C_PROT_READY_FLAG 128
|
|
#define SSPI_GSS_C_TRANS_FLAG 256
|
|
#define SSPI_GSS_C_DELEG_POLICY_FLAG 32768
|
|
|
|
#define SSPI_GSS_C_BOTH 0
|
|
#define SSPI_GSS_C_INITIATE 1
|
|
#define SSPI_GSS_C_ACCEPT 2
|
|
|
|
#define SSPI_GSS_C_GSS_CODE 1
|
|
#define SSPI_GSS_C_MECH_CODE 2
|
|
|
|
#define SSPI_GSS_C_AF_UNSPEC 0
|
|
#define SSPI_GSS_C_AF_LOCAL 1
|
|
#define SSPI_GSS_C_AF_INET 2
|
|
#define SSPI_GSS_C_AF_IMPLINK 3
|
|
#define SSPI_GSS_C_AF_PUP 4
|
|
#define SSPI_GSS_C_AF_CHAOS 5
|
|
#define SSPI_GSS_C_AF_NS 6
|
|
#define SSPI_GSS_C_AF_NBS 7
|
|
#define SSPI_GSS_C_AF_ECMA 8
|
|
#define SSPI_GSS_C_AF_DATAKIT 9
|
|
#define SSPI_GSS_C_AF_CCITT 10
|
|
#define SSPI_GSS_C_AF_SNA 11
|
|
#define SSPI_GSS_C_AF_DECnet 12
|
|
#define SSPI_GSS_C_AF_DLI 13
|
|
#define SSPI_GSS_C_AF_LAT 14
|
|
#define SSPI_GSS_C_AF_HYLINK 15
|
|
#define SSPI_GSS_C_AF_APPLETALK 16
|
|
#define SSPI_GSS_C_AF_BSC 17
|
|
#define SSPI_GSS_C_AF_DSS 18
|
|
#define SSPI_GSS_C_AF_OSI 19
|
|
#define SSPI_GSS_C_AF_NETBIOS 20
|
|
#define SSPI_GSS_C_AF_X25 21
|
|
#define SSPI_GSS_C_AF_NULLADDR 255
|
|
|
|
#define SSPI_GSS_C_NO_NAME ((sspi_gss_name_t)0)
|
|
#define SSPI_GSS_C_NO_BUFFER ((sspi_gss_buffer_t)0)
|
|
#define SSPI_GSS_C_NO_OID ((sspi_gss_OID)0)
|
|
#define SSPI_GSS_C_NO_OID_SET ((sspi_gss_OID_set)0)
|
|
#define SSPI_GSS_C_NO_CONTEXT ((sspi_gss_ctx_id_t)0)
|
|
#define SSPI_GSS_C_NO_CREDENTIAL ((sspi_gss_cred_id_t)0)
|
|
#define SSPI_GSS_C_NO_CHANNEL_BINDINGS ((sspi_gss_channel_bindings_t)0)
|
|
#define SSPI_GSS_C_EMPTY_BUFFER \
|
|
{ \
|
|
0, NULL \
|
|
}
|
|
|
|
#define SSPI_GSS_C_NULL_OID SSPI_GSS_C_NO_OID
|
|
#define SSPI_GSS_C_NULL_OID_SET SSPI_GSS_C_NO_OID_SET
|
|
|
|
#define SSPI_GSS_C_QOP_DEFAULT 0
|
|
|
|
#define SSPI_GSS_C_INDEFINITE ((UINT32)0xFFFFFFFF)
|
|
|
|
#define SSPI_GSS_S_COMPLETE 0
|
|
|
|
#define SSPI_GSS_C_CALLING_ERROR_OFFSET 24
|
|
#define SSPI_GSS_C_ROUTINE_ERROR_OFFSET 16
|
|
#define SSPI_GSS_C_SUPPLEMENTARY_OFFSET 0
|
|
#define SSPI_GSS_C_CALLING_ERROR_MASK ((UINT32)0377)
|
|
#define SSPI_GSS_C_ROUTINE_ERROR_MASK ((UINT32)0377)
|
|
#define SSPI_GSS_C_SUPPLEMENTARY_MASK ((UINT32)0177777)
|
|
|
|
#define SSPI_GSS_CALLING_ERROR(_x) \
|
|
((_x) & (SSPI_GSS_C_CALLING_ERROR_MASK << SSPI_GSS_C_CALLING_ERROR_OFFSET))
|
|
#define SSPI_GSS_ROUTINE_ERROR(_x) \
|
|
((_x) & (SSPI_GSS_C_ROUTINE_ERROR_MASK << SSPI_GSS_C_ROUTINE_ERROR_OFFSET))
|
|
#define SSPI_GSS_SUPPLEMENTARY_INFO(_x) \
|
|
((_x) & (SSPI_GSS_C_SUPPLEMENTARY_MASK << SSPI_GSS_C_SUPPLEMENTARY_OFFSET))
|
|
#define SSPI_GSS_ERROR(_x) \
|
|
((_x) & ((SSPI_GSS_C_CALLING_ERROR_MASK << SSPI_GSS_C_CALLING_ERROR_OFFSET) | \
|
|
(SSPI_GSS_C_ROUTINE_ERROR_MASK << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)))
|
|
|
|
#define SSPI_GSS_S_CALL_INACCESSIBLE_READ (((UINT32)1) << SSPI_GSS_C_CALLING_ERROR_OFFSET)
|
|
#define SSPI_GSS_S_CALL_INACCESSIBLE_WRITE (((UINT32)2) << SSPI_GSS_C_CALLING_ERROR_OFFSET)
|
|
#define SSPI_GSS_S_CALL_BAD_STRUCTURE (((UINT32)3) << SSPI_GSS_C_CALLING_ERROR_OFFSET)
|
|
|
|
#define SSPI_GSS_S_BAD_MECH (((UINT32)1) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
|
|
#define SSPI_GSS_S_BAD_NAME (((UINT32)2) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
|
|
#define SSPI_GSS_S_BAD_NAMETYPE (((UINT32)3) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
|
|
#define SSPI_GSS_S_BAD_BINDINGS (((UINT32)4) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
|
|
#define SSPI_GSS_S_BAD_STATUS (((UINT32)5) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
|
|
#define SSPI_GSS_S_BAD_SIG (((UINT32)6) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
|
|
#define SSPI_GSS_S_NO_CRED (((UINT32)7) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
|
|
#define SSPI_GSS_S_NO_CONTEXT (((UINT32)8) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
|
|
#define SSPI_GSS_S_DEFECTIVE_TOKEN (((UINT32)9) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
|
|
#define SSPI_GSS_S_DEFECTIVE_CREDENTIAL (((UINT32)10) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
|
|
#define SSPI_GSS_S_CREDENTIALS_EXPIRED (((UINT32)11) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
|
|
#define SSPI_GSS_S_CONTEXT_EXPIRED (((UINT32)12) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
|
|
#define SSPI_GSS_S_FAILURE (((UINT32)13) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
|
|
#define SSPI_GSS_S_BAD_QOP (((UINT32)14) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
|
|
#define SSPI_GSS_S_UNAUTHORIZED (((UINT32)15) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
|
|
#define SSPI_GSS_S_UNAVAILABLE (((UINT32)16) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
|
|
#define SSPI_GSS_S_DUPLICATE_ELEMENT (((UINT32)17) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
|
|
#define SSPI_GSS_S_NAME_NOT_MN (((UINT32)18) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
|
|
#define SSPI_GSS_S_BAD_MECH_ATTR (((UINT32)19) << SSPI_GSS_C_ROUTINE_ERROR_OFFSET)
|
|
|
|
#define SSPI_GSS_S_CONTINUE_NEEDED (1 << (SSPI_GSS_C_SUPPLEMENTARY_OFFSET + 0))
|
|
#define SSPI_GSS_S_DUPLICATE_TOKEN (1 << (SSPI_GSS_C_SUPPLEMENTARY_OFFSET + 1))
|
|
#define SSPI_GSS_S_OLD_TOKEN (1 << (SSPI_GSS_C_SUPPLEMENTARY_OFFSET + 2))
|
|
#define SSPI_GSS_S_UNSEQ_TOKEN (1 << (SSPI_GSS_C_SUPPLEMENTARY_OFFSET + 3))
|
|
#define SSPI_GSS_S_GAP_TOKEN (1 << (SSPI_GSS_C_SUPPLEMENTARY_OFFSET + 4))
|
|
|
|
#define SSPI_GSS_C_PRF_KEY_FULL 0
|
|
#define SSPI_GSS_C_PRF_KEY_PARTIAL 1
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
SSPI_GSSOID extern sspi_gss_OID SSPI_GSS_C_NT_USER_NAME;
|
|
SSPI_GSSOID extern sspi_gss_OID SSPI_GSS_C_NT_MACHINE_UID_NAME;
|
|
SSPI_GSSOID extern sspi_gss_OID SSPI_GSS_C_NT_STRING_UID_NAME;
|
|
SSPI_GSSOID extern sspi_gss_OID SSPI_GSS_C_NT_HOSTBASED_SERVICE_X;
|
|
SSPI_GSSOID extern sspi_gss_OID SSPI_GSS_C_NT_HOSTBASED_SERVICE;
|
|
SSPI_GSSOID extern sspi_gss_OID SSPI_GSS_C_NT_ANONYMOUS;
|
|
SSPI_GSSOID extern sspi_gss_OID SSPI_GSS_C_NT_EXPORT_NAME;
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_acquire_cred(UINT32* minor_status, sspi_gss_name_t desired_name,
|
|
UINT32 time_req, sspi_gss_OID_set desired_mechs,
|
|
sspi_gss_cred_usage_t cred_usage,
|
|
sspi_gss_cred_id_t* output_cred_handle,
|
|
sspi_gss_OID_set* actual_mechs, UINT32* time_rec);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_acquire_cred)(
|
|
UINT32* minor_status, sspi_gss_name_t desired_name, UINT32 time_req,
|
|
sspi_gss_OID_set desired_mechs, sspi_gss_cred_usage_t cred_usage,
|
|
sspi_gss_cred_id_t* output_cred_handle, sspi_gss_OID_set* actual_mechs, UINT32* time_rec);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_release_cred(UINT32* minor_status, sspi_gss_cred_id_t* cred_handle);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_release_cred)(UINT32* minor_status,
|
|
sspi_gss_cred_id_t* cred_handle);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_init_sec_context(
|
|
UINT32* minor_status, sspi_gss_cred_id_t claimant_cred_handle,
|
|
sspi_gss_ctx_id_t* context_handle, sspi_gss_name_t target_name, sspi_gss_OID mech_type,
|
|
UINT32 req_flags, UINT32 time_req, sspi_gss_channel_bindings_t input_chan_bindings,
|
|
sspi_gss_buffer_t input_token, sspi_gss_OID* actual_mech_type,
|
|
sspi_gss_buffer_t output_token, UINT32* ret_flags, UINT32* time_rec);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_init_sec_context)(
|
|
UINT32* minor_status, sspi_gss_cred_id_t claimant_cred_handle,
|
|
sspi_gss_ctx_id_t* context_handle, sspi_gss_name_t target_name, sspi_gss_OID mech_type,
|
|
UINT32 req_flags, UINT32 time_req, sspi_gss_channel_bindings_t input_chan_bindings,
|
|
sspi_gss_buffer_t input_token, sspi_gss_OID* actual_mech_type,
|
|
sspi_gss_buffer_t output_token, UINT32* ret_flags, UINT32* time_rec);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_accept_sec_context(
|
|
UINT32* minor_status, sspi_gss_ctx_id_t* context_handle,
|
|
sspi_gss_cred_id_t acceptor_cred_handle, sspi_gss_buffer_t input_token_buffer,
|
|
sspi_gss_channel_bindings_t input_chan_bindings, sspi_gss_name_t* src_name,
|
|
sspi_gss_OID* mech_type, sspi_gss_buffer_t output_token, UINT32* ret_flags,
|
|
UINT32* time_rec, sspi_gss_cred_id_t* delegated_cred_handle);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_accept_sec_context)(
|
|
UINT32* minor_status, sspi_gss_ctx_id_t* context_handle,
|
|
sspi_gss_cred_id_t acceptor_cred_handle, sspi_gss_buffer_t input_token_buffer,
|
|
sspi_gss_channel_bindings_t input_chan_bindings, sspi_gss_name_t* src_name,
|
|
sspi_gss_OID* mech_type, sspi_gss_buffer_t output_token, UINT32* ret_flags,
|
|
UINT32* time_rec, sspi_gss_cred_id_t* delegated_cred_handle);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_process_context_token(UINT32* minor_status,
|
|
sspi_gss_ctx_id_t context_handle,
|
|
sspi_gss_buffer_t token_buffer);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_process_context_token)(UINT32* minor_status,
|
|
sspi_gss_ctx_id_t context_handle,
|
|
sspi_gss_buffer_t token_buffer);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_delete_sec_context(UINT32* minor_status,
|
|
sspi_gss_ctx_id_t* context_handle,
|
|
sspi_gss_buffer_t output_token);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_delete_sec_context)(UINT32* minor_status,
|
|
sspi_gss_ctx_id_t* context_handle,
|
|
sspi_gss_buffer_t output_token);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_context_time(UINT32* minor_status, sspi_gss_ctx_id_t context_handle,
|
|
UINT32* time_rec);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_context_time)(UINT32* minor_status,
|
|
sspi_gss_ctx_id_t context_handle,
|
|
UINT32* time_rec);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_get_mic(UINT32* minor_status, sspi_gss_ctx_id_t context_handle,
|
|
sspi_gss_qop_t qop_req, sspi_gss_buffer_t message_buffer,
|
|
sspi_gss_buffer_t message_token);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_get_mic)(UINT32* minor_status,
|
|
sspi_gss_ctx_id_t context_handle,
|
|
sspi_gss_qop_t qop_req,
|
|
sspi_gss_buffer_t message_buffer,
|
|
sspi_gss_buffer_t message_token);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_verify_mic(UINT32* minor_status, sspi_gss_ctx_id_t context_handle,
|
|
sspi_gss_buffer_t message_buffer,
|
|
sspi_gss_buffer_t message_token,
|
|
sspi_gss_qop_t* qop_state);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_verify_mic)(UINT32* minor_status,
|
|
sspi_gss_ctx_id_t context_handle,
|
|
sspi_gss_buffer_t message_buffer,
|
|
sspi_gss_buffer_t message_token,
|
|
sspi_gss_qop_t* qop_state);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_wrap(UINT32* minor_status, sspi_gss_ctx_id_t context_handle,
|
|
int conf_req_flag, sspi_gss_qop_t qop_req,
|
|
sspi_gss_buffer_t input_message_buffer, int* conf_state,
|
|
sspi_gss_buffer_t output_message_buffer);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_wrap)(UINT32* minor_status,
|
|
sspi_gss_ctx_id_t context_handle,
|
|
int conf_req_flag, sspi_gss_qop_t qop_req,
|
|
sspi_gss_buffer_t input_message_buffer,
|
|
int* conf_state,
|
|
sspi_gss_buffer_t output_message_buffer);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_unwrap(UINT32* minor_status, const sspi_gss_ctx_id_t context_handle,
|
|
const sspi_gss_buffer_t input_message_buffer,
|
|
sspi_gss_buffer_t output_message_buffer, int* conf_state,
|
|
sspi_gss_qop_t* qop_state);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_unwrap)(UINT32* minor_status,
|
|
sspi_gss_ctx_id_t context_handle,
|
|
sspi_gss_buffer_t input_message_buffer,
|
|
sspi_gss_buffer_t output_message_buffer,
|
|
int* conf_state, sspi_gss_qop_t* qop_state);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_display_status(UINT32* minor_status, UINT32 status_value,
|
|
int status_type, sspi_gss_OID mech_type,
|
|
UINT32* message_context,
|
|
sspi_gss_buffer_t status_string);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_display_status)(UINT32* minor_status,
|
|
UINT32 status_value, int status_type,
|
|
sspi_gss_OID mech_type,
|
|
UINT32* message_context,
|
|
sspi_gss_buffer_t status_string);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_indicate_mechs(UINT32* minor_status, sspi_gss_OID_set* mech_set);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_indicate_mechs)(UINT32* minor_status,
|
|
sspi_gss_OID_set* mech_set);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_compare_name(UINT32* minor_status, sspi_gss_name_t name1,
|
|
sspi_gss_name_t name2, int* name_equal);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_compare_name)(UINT32* minor_status,
|
|
sspi_gss_name_t name1,
|
|
sspi_gss_name_t name2, int* name_equal);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_display_name(UINT32* minor_status, sspi_gss_name_t input_name,
|
|
sspi_gss_buffer_t output_name_buffer,
|
|
sspi_gss_OID* output_name_type);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_display_name)(UINT32* minor_status,
|
|
sspi_gss_name_t input_name,
|
|
sspi_gss_buffer_t output_name_buffer,
|
|
sspi_gss_OID* output_name_type);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_import_name(UINT32* minor_status,
|
|
sspi_gss_buffer_t input_name_buffer,
|
|
sspi_gss_OID input_name_type,
|
|
sspi_gss_name_t* output_name);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_import_name)(UINT32* minor_status,
|
|
sspi_gss_buffer_t input_name_buffer,
|
|
sspi_gss_OID input_name_type,
|
|
sspi_gss_name_t* output_name);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_release_name(UINT32* minor_status, sspi_gss_name_t* input_name);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_release_name)(UINT32* minor_status,
|
|
sspi_gss_name_t* input_name);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_release_buffer(UINT32* minor_status, sspi_gss_buffer_t buffer);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_release_buffer)(UINT32* minor_status,
|
|
sspi_gss_buffer_t buffer);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_release_oid_set(UINT32* minor_status, sspi_gss_OID_set* set);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_release_oid_set)(UINT32* minor_status,
|
|
sspi_gss_OID_set* set);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_inquire_cred(UINT32* minor_status, sspi_gss_cred_id_t cred_handle,
|
|
sspi_gss_name_t* name, UINT32* lifetime,
|
|
sspi_gss_cred_usage_t* cred_usage,
|
|
sspi_gss_OID_set* mechanisms);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_inquire_cred)(UINT32* minor_status,
|
|
sspi_gss_cred_id_t cred_handle,
|
|
sspi_gss_name_t* name, UINT32* lifetime,
|
|
sspi_gss_cred_usage_t* cred_usage,
|
|
sspi_gss_OID_set* mechanisms);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_inquire_context(UINT32* minor_status,
|
|
sspi_gss_ctx_id_t context_handle,
|
|
sspi_gss_name_t* src_name,
|
|
sspi_gss_name_t* targ_name, UINT32* lifetime_rec,
|
|
sspi_gss_OID* mech_type, UINT32* ctx_flags,
|
|
int* locally_initiated, int* open);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_inquire_context)(
|
|
UINT32* minor_status, sspi_gss_ctx_id_t context_handle, sspi_gss_name_t* src_name,
|
|
sspi_gss_name_t* targ_name, UINT32* lifetime_rec, sspi_gss_OID* mech_type,
|
|
UINT32* ctx_flags, int* locally_initiated, int* open);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_wrap_size_limit(UINT32* minor_status,
|
|
sspi_gss_ctx_id_t context_handle, int conf_req_flag,
|
|
sspi_gss_qop_t qop_req, UINT32 req_output_size,
|
|
UINT32* max_input_size);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_wrap_size_limit)(
|
|
UINT32* minor_status, sspi_gss_ctx_id_t context_handle, int conf_req_flag,
|
|
sspi_gss_qop_t qop_req, UINT32 req_output_size, UINT32* max_input_size);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_import_name_object(UINT32* minor_status, void* input_name,
|
|
sspi_gss_OID input_name_type,
|
|
sspi_gss_name_t* output_name);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_import_name_object)(UINT32* minor_status,
|
|
void* input_name,
|
|
sspi_gss_OID input_name_type,
|
|
sspi_gss_name_t* output_name);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_export_name_object(UINT32* minor_status, sspi_gss_name_t input_name,
|
|
sspi_gss_OID desired_name_type,
|
|
void** output_name);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_export_name_object)(UINT32* minor_status,
|
|
sspi_gss_name_t input_name,
|
|
sspi_gss_OID desired_name_type,
|
|
void** output_name);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_add_cred(UINT32* minor_status, sspi_gss_cred_id_t input_cred_handle,
|
|
sspi_gss_name_t desired_name, sspi_gss_OID desired_mech,
|
|
sspi_gss_cred_usage_t cred_usage,
|
|
UINT32 initiator_time_req, UINT32 acceptor_time_req,
|
|
sspi_gss_cred_id_t* output_cred_handle,
|
|
sspi_gss_OID_set* actual_mechs, UINT32* initiator_time_rec,
|
|
UINT32* acceptor_time_rec);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_add_cred)(
|
|
UINT32* minor_status, sspi_gss_cred_id_t input_cred_handle, sspi_gss_name_t desired_name,
|
|
sspi_gss_OID desired_mech, sspi_gss_cred_usage_t cred_usage, UINT32 initiator_time_req,
|
|
UINT32 acceptor_time_req, sspi_gss_cred_id_t* output_cred_handle,
|
|
sspi_gss_OID_set* actual_mechs, UINT32* initiator_time_rec, UINT32* acceptor_time_rec);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_inquire_cred_by_mech(UINT32* minor_status,
|
|
sspi_gss_cred_id_t cred_handle,
|
|
sspi_gss_OID mech_type, sspi_gss_name_t* name,
|
|
UINT32* initiator_lifetime,
|
|
UINT32* acceptor_lifetime,
|
|
sspi_gss_cred_usage_t* cred_usage);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_inquire_cred_by_mech)(
|
|
UINT32* minor_status, sspi_gss_cred_id_t cred_handle, sspi_gss_OID mech_type,
|
|
sspi_gss_name_t* name, UINT32* initiator_lifetime, UINT32* acceptor_lifetime,
|
|
sspi_gss_cred_usage_t* cred_usage);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_export_sec_context(UINT32* minor_status,
|
|
sspi_gss_ctx_id_t* context_handle,
|
|
sspi_gss_buffer_t interprocess_token);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_export_sec_context)(
|
|
UINT32* minor_status, sspi_gss_ctx_id_t* context_handle,
|
|
sspi_gss_buffer_t interprocess_token);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_import_sec_context(UINT32* minor_status,
|
|
sspi_gss_buffer_t interprocess_token,
|
|
sspi_gss_ctx_id_t* context_handle);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_import_sec_context)(
|
|
UINT32* minor_status, sspi_gss_buffer_t interprocess_token,
|
|
sspi_gss_ctx_id_t* context_handle);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_release_oid(UINT32* minor_status, sspi_gss_OID* oid);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_release_oid)(UINT32* minor_status, sspi_gss_OID* oid);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_create_empty_oid_set(UINT32* minor_status,
|
|
sspi_gss_OID_set* oid_set);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_create_empty_oid_set)(UINT32* minor_status,
|
|
sspi_gss_OID_set* oid_set);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_add_oid_set_member(UINT32* minor_status, sspi_gss_OID member_oid,
|
|
sspi_gss_OID_set* oid_set);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_add_oid_set_member)(UINT32* minor_status,
|
|
sspi_gss_OID member_oid,
|
|
sspi_gss_OID_set* oid_set);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_test_oid_set_member(UINT32* minor_status, sspi_gss_OID member,
|
|
sspi_gss_OID_set set, int* present);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_test_oid_set_member)(UINT32* minor_status,
|
|
sspi_gss_OID member,
|
|
sspi_gss_OID_set set,
|
|
int* present);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_str_to_oid(UINT32* minor_status, sspi_gss_buffer_t oid_str,
|
|
sspi_gss_OID* oid);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_str_to_oid)(UINT32* minor_status,
|
|
sspi_gss_buffer_t oid_str,
|
|
sspi_gss_OID* oid);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_oid_to_str(UINT32* minor_status, sspi_gss_OID oid,
|
|
sspi_gss_buffer_t oid_str);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_oid_to_str)(UINT32* minor_status, sspi_gss_OID oid,
|
|
sspi_gss_buffer_t oid_str);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_inquire_names_for_mech(UINT32* minor_status, sspi_gss_OID mechanism,
|
|
sspi_gss_OID_set* name_types);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_inquire_names_for_mech)(UINT32* minor_status,
|
|
sspi_gss_OID mechanism,
|
|
sspi_gss_OID_set* name_types);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_inquire_mechs_for_name(UINT32* minor_status,
|
|
const sspi_gss_name_t input_name,
|
|
sspi_gss_OID_set* mech_types);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_inquire_mechs_for_name)(
|
|
UINT32* minor_status, const sspi_gss_name_t input_name, sspi_gss_OID_set* mech_types);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_sign(UINT32* minor_status, sspi_gss_ctx_id_t context_handle,
|
|
int qop_req, sspi_gss_buffer_t message_buffer,
|
|
sspi_gss_buffer_t message_token);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_sign)(UINT32* minor_status,
|
|
sspi_gss_ctx_id_t context_handle, int qop_req,
|
|
sspi_gss_buffer_t message_buffer,
|
|
sspi_gss_buffer_t message_token);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_verify(UINT32* minor_status, sspi_gss_ctx_id_t context_handle,
|
|
sspi_gss_buffer_t message_buffer,
|
|
sspi_gss_buffer_t token_buffer, int* qop_state);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_verify)(UINT32* minor_status,
|
|
sspi_gss_ctx_id_t context_handle,
|
|
sspi_gss_buffer_t message_buffer,
|
|
sspi_gss_buffer_t token_buffer, int* qop_state);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_seal(UINT32* minor_status, sspi_gss_ctx_id_t context_handle,
|
|
int conf_req_flag, int qop_req,
|
|
sspi_gss_buffer_t input_message_buffer, int* conf_state,
|
|
sspi_gss_buffer_t output_message_buffer);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_seal)(UINT32* minor_status,
|
|
sspi_gss_ctx_id_t context_handle,
|
|
int conf_req_flag, int qop_req,
|
|
sspi_gss_buffer_t input_message_buffer,
|
|
int* conf_state,
|
|
sspi_gss_buffer_t output_message_buffer);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_unseal(UINT32* minor_status, sspi_gss_ctx_id_t context_handle,
|
|
sspi_gss_buffer_t input_message_buffer,
|
|
sspi_gss_buffer_t output_message_buffer, int* conf_state,
|
|
int* qop_state);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_unseal)(UINT32* minor_status,
|
|
sspi_gss_ctx_id_t context_handle,
|
|
sspi_gss_buffer_t input_message_buffer,
|
|
sspi_gss_buffer_t output_message_buffer,
|
|
int* conf_state, int* qop_state);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_export_name(UINT32* minor_status, const sspi_gss_name_t input_name,
|
|
sspi_gss_buffer_t exported_name);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_export_name)(UINT32* minor_status,
|
|
const sspi_gss_name_t input_name,
|
|
sspi_gss_buffer_t exported_name);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_duplicate_name(UINT32* minor_status,
|
|
const sspi_gss_name_t input_name,
|
|
sspi_gss_name_t* dest_name);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_duplicate_name)(UINT32* minor_status,
|
|
const sspi_gss_name_t input_name,
|
|
sspi_gss_name_t* dest_name);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_canonicalize_name(UINT32* minor_status,
|
|
const sspi_gss_name_t input_name,
|
|
const sspi_gss_OID mech_type,
|
|
sspi_gss_name_t* output_name);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_canonicalize_name)(UINT32* minor_status,
|
|
const sspi_gss_name_t input_name,
|
|
const sspi_gss_OID mech_type,
|
|
sspi_gss_name_t* output_name);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_pseudo_random(UINT32* minor_status, sspi_gss_ctx_id_t context,
|
|
int prf_key, const sspi_gss_buffer_t prf_in,
|
|
SSIZE_T desired_output_len,
|
|
sspi_gss_buffer_t prf_out);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_pseudo_random)(UINT32* minor_status,
|
|
sspi_gss_ctx_id_t context, int prf_key,
|
|
const sspi_gss_buffer_t prf_in,
|
|
SSIZE_T desired_output_len,
|
|
sspi_gss_buffer_t prf_out);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_store_cred(UINT32* minor_status,
|
|
const sspi_gss_cred_id_t input_cred_handle,
|
|
sspi_gss_cred_usage_t input_usage,
|
|
const sspi_gss_OID desired_mech, UINT32 overwrite_cred,
|
|
UINT32 default_cred, sspi_gss_OID_set* elements_stored,
|
|
sspi_gss_cred_usage_t* cred_usage_stored);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_store_cred)(UINT32* minor_status,
|
|
const sspi_gss_cred_id_t input_cred_handle,
|
|
sspi_gss_cred_usage_t input_usage,
|
|
const sspi_gss_OID desired_mech,
|
|
UINT32 overwrite_cred, UINT32 default_cred,
|
|
sspi_gss_OID_set* elements_stored,
|
|
sspi_gss_cred_usage_t* cred_usage_stored);
|
|
|
|
UINT32 SSPI_GSSAPI sspi_gss_set_neg_mechs(UINT32* minor_status, sspi_gss_cred_id_t cred_handle,
|
|
const sspi_gss_OID_set mech_set);
|
|
|
|
typedef UINT32(SSPI_GSSAPI* fn_sspi_gss_set_neg_mechs)(UINT32* minor_status,
|
|
sspi_gss_cred_id_t cred_handle,
|
|
const sspi_gss_OID_set mech_set);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
struct _GSSAPI_FUNCTION_TABLE
|
|
{
|
|
fn_sspi_gss_acquire_cred gss_acquire_cred;
|
|
fn_sspi_gss_release_cred gss_release_cred;
|
|
fn_sspi_gss_init_sec_context gss_init_sec_context;
|
|
fn_sspi_gss_accept_sec_context gss_accept_sec_context;
|
|
fn_sspi_gss_process_context_token gss_process_context_token;
|
|
fn_sspi_gss_delete_sec_context gss_delete_sec_context;
|
|
fn_sspi_gss_context_time gss_context_time;
|
|
fn_sspi_gss_get_mic gss_get_mic;
|
|
fn_sspi_gss_verify_mic gss_verify_mic;
|
|
fn_sspi_gss_wrap gss_wrap;
|
|
fn_sspi_gss_unwrap gss_unwrap;
|
|
fn_sspi_gss_display_status gss_display_status;
|
|
fn_sspi_gss_indicate_mechs gss_indicate_mechs;
|
|
fn_sspi_gss_compare_name gss_compare_name;
|
|
fn_sspi_gss_display_name gss_display_name;
|
|
fn_sspi_gss_import_name gss_import_name;
|
|
fn_sspi_gss_release_name gss_release_name;
|
|
fn_sspi_gss_release_buffer gss_release_buffer;
|
|
fn_sspi_gss_release_oid_set gss_release_oid_set;
|
|
fn_sspi_gss_inquire_cred gss_inquire_cred;
|
|
fn_sspi_gss_inquire_context gss_inquire_context;
|
|
fn_sspi_gss_wrap_size_limit gss_wrap_size_limit;
|
|
fn_sspi_gss_import_name_object gss_import_name_object;
|
|
fn_sspi_gss_export_name_object gss_export_name_object;
|
|
fn_sspi_gss_add_cred gss_add_cred;
|
|
fn_sspi_gss_inquire_cred_by_mech gss_inquire_cred_by_mech;
|
|
fn_sspi_gss_export_sec_context gss_export_sec_context;
|
|
fn_sspi_gss_import_sec_context gss_import_sec_context;
|
|
fn_sspi_gss_release_oid gss_release_oid;
|
|
fn_sspi_gss_create_empty_oid_set gss_create_empty_oid_set;
|
|
fn_sspi_gss_add_oid_set_member gss_add_oid_set_member;
|
|
fn_sspi_gss_test_oid_set_member gss_test_oid_set_member;
|
|
fn_sspi_gss_str_to_oid gss_str_to_oid;
|
|
fn_sspi_gss_oid_to_str gss_oid_to_str;
|
|
fn_sspi_gss_inquire_names_for_mech gss_inquire_names_for_mech;
|
|
fn_sspi_gss_inquire_mechs_for_name gss_inquire_mechs_for_name;
|
|
fn_sspi_gss_sign gss_sign;
|
|
fn_sspi_gss_verify gss_verify;
|
|
fn_sspi_gss_seal gss_seal;
|
|
fn_sspi_gss_unseal gss_unseal;
|
|
fn_sspi_gss_export_name gss_export_name;
|
|
fn_sspi_gss_duplicate_name gss_duplicate_name;
|
|
fn_sspi_gss_canonicalize_name gss_canonicalize_name;
|
|
fn_sspi_gss_pseudo_random gss_pseudo_random;
|
|
fn_sspi_gss_store_cred gss_store_cred;
|
|
fn_sspi_gss_set_neg_mechs gss_set_neg_mechs;
|
|
};
|
|
typedef struct _GSSAPI_FUNCTION_TABLE GSSAPI_FUNCTION_TABLE;
|
|
|
|
GSSAPI_FUNCTION_TABLE* SEC_ENTRY gssApi_InitSecurityInterface(void);
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* FREERDP_SSPI_GSS_PRIVATE_H */
|