由于 GSS-API 处理的是内部格式的数据,因此在将字符串传递到 GSS-API 函数之前必须将其转换为 GSS-API 格式。 GSS-API 可处理具有 gss_buffer_desc 结构的字符串:
typedef struct gss_buffer_desc_struct { size_t length; void *value; } gss_buffer_desc *gss_buffer_t;
gss_buffer_t 是指向此类结构的指针。 在将字符串传递到使用它们的函数之前,必须先将其放到 gss_buffer_desc 结构中。 在以下示例中,通用的 GSS-API 函数在发送消息之前会先向此消息应用保护机制。
char *message_string; gss_buffer_desc input_msg_buffer; input_msg_buffer.value = message_string; input_msg_buffer.length = strlen(input_msg_buffer.value) + 1; gss_generic_function(arg1, &input_msg_buffer, arg2...); gss_release_buffer(input_msg_buffer);
请注意,完成对 input_msg_buffer 的操作之后,必须通过 gss_release_buffer() 解除对 input_msg_buffer 的分配。
gss_buffer_desc 对象不只是用于字符串。 例如,令牌可以作为 gss_buffer_desc 对象进行处理。有关更多信息,请参见GSS-API 令牌。