我在使用gss_export_name导出名称时遇到了问题,我认为一旦导出名称,我应该能够打印它,但我正在打开一个空白的、文字导出的名称:、导出的名称长度: 47。
这是我的密码
OM_uint32 major_status;
gss_cred_usage_t usage;
OM_uint32 lifetime;
gss_name_t inquired_name;
major_status = gss_inquire_cred(&minor_status, GSS_C_NO_CREDENTIAL, &inquired_name,
&lifetime, &usage, &oid_set);
gss_buffer_desc exported_name_buffer;
major_status = gss_export_name(&minor_status, inquired_name, &exported_name_buffer);
printf("EXPORTED NAME: %s, EXPORTED NAME LENGTH: %d\n",
exported_name_buffer.value, exported_name_buffer.length);为了清晰起见,我决定不包括检查,但我也要注意确保major_status总是== GSS_S_COMPLETE欣赏任何想法。
发布于 2013-12-17 20:52:32
不幸的是,gss_export_name的缓冲区输出是ASN.1数据结构,而不是可读的字符串。RFC 2743第3.2节。您需要跳过该结构的头,然后以依赖于机制的方式解析名称。一些GSS开发人员强烈建议这样做。例如,Openssh的gss补丁用于解析Kerberos名称。这是理论上正确的方法。然而,在实践中,使用gss_display_name和处理该调用的输出在实践中会产生更多的可移植结果,尽管它在多机制应用程序中可能会产生奇怪的结果。对于如何在GSS社区中处理这一问题,您将得到重要的争论。每个人都会同意,您应该使用gss_display_name来生成用于调试和日志的输出。问题是,如果要在访问控制列表上搜索名称,应该做什么。如果您可以直接使用gss_export_name的输出并进行二进制比较,那么就这样做。但是,如果需要与人输入的输入进行比较,我认为使用gss_display_name的输出更好,而其他人则认为解析gss_export_name输出更好。
https://stackoverflow.com/questions/20579702
复制相似问题