Представление средствами языка C объектов, фигурирующих в обобщенном интерфейсе безопасности GSS-API, по большей части довольно очевидно (или не может быть стандартизовано, так как зависит от специфики механизма безопасности).
Прежде всего, вводится тип OM_uint32, соответствующий 32-битным беззнаковым целым значениям. Большинство структурных значений представляется с помощью указателя на дескриптор).
Листинг 1
typedef struct gss_buffer_desc_struct { size_t length; void *value; } gss_buffer_desc, *gss_buffer_t; |
Тип gss_buffer_t используется при задании составных аргументов — имен, дескрипторов, токенов, сообщений и т.п.
Идентификаторы объектов представляются следующим образом:
Листинг 2
typedef struct gss_OID_desc_struct { OM_uint32 length; void *elements; } gss_OID_desc, *gss_OID; |
Указатели elements ссылаются на начало представления идентификаторов, то есть на последовательности байт, устроенных в соответствии с базовыми правилами ASN.1.
Наборы объектных идентификаторов представлены на Рис. 2 .
Рисунок 2. Наборы объектных идентификаторов
Листинг 3
typedef struct gss_OID_set_desc_struct { int count; gss_OID elements; } gss_OID_set_desc, *gss_OID_set; |
Вводятся и некоторые другие типы, уточняющие представление структурированных значений.
Описание функции GSS_ Init_sec_context на языке C показано на Рис. 3 .
Рисунок 3. Описание функции GSS_ Init_sec_context
Листинг 4
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 targ_name, gss_OID mech_type, int req_flags, OM_uint32 time_req, gss_channel_bindings_t chan_bindings, gss_buffer_t input_token, gss_OID *actual_mech_type, gss_buffer_t output_token, int *ret_flags, OM_uint32 *time_rec ); |
Отметим, что параметр context_handle является здесь одновременно входным и выходным, а основной код завершения возвращается как результат функции.
На Рис. 4 приведено определение еще нескольких величин.
Рисунок 4. Дополнительные определения
Листинг 5
#define GSS_C_DELEG_FLAG 1 #define GSS_C_MUTUAL_FLAG 2 . . . #define GSS_C_CONF_FLAG 16 . . . #define GSS_C_QOP_DEFUALT 0 #define GSS_C_INDEFINITE 0xfffffffful #define GSS_S_COMPLETE 0 . . . |
Разумеется, есть еще много аспектов, оговоренных в документе [3] , например, кто и когда отводит память под объекты и под дескрипторы, и каким образом эту память можно освобождать. Мы, однако, не будем на этом останавливаться.
![]() |
![]() |
![]() |
Ограничения интерфейса безопасности | Содержание | Заключение |
Copyright ╘ 1993-2000, Jet Infosystems |