Представление некоторых объектов интерфейса безопасности в среде языка C

Представление средствами языка 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