GSSAPI: gss_export_name возвращает пробел
У меня проблема с экспортом имени с использованием gss_export_name, хотя я думаю, что после того, как имя экспортировано, я смогу просто напечатать его, но у меня появляется пустое значение Literaly EXPORTED NAME:, EXPORTED NAME LENGTH: 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 ценить любые идеи
1 ответ
К сожалению, выходной буфер gss_export_name представляет собой структуру данных ASN.1, а не читаемую человеком строку. Se раздел 3.2 RFC 2743. Вам нужно будет пропустить заголовок этой структуры, а затем проанализировать имя в зависимости от механизма. Некоторые разработчики GSS-API настоятельно рекомендуют делать это. Например, патчи gss-api для Openssh делают это для анализа имен Kerberos. Это теоретически правильный подход. Однако на практике использование gss_display_name и обработка выходных данных этого вызова на практике дают более переносимые результаты, даже если это может привести к странным результатам в приложении с несколькими механизмами. Вы получите весомые аргументы о том, как справиться с этим в сообществе GSS-API. Все согласятся, что вы должны использовать gss_display_name для создания выходных данных для отладки и журналов. Вопрос в том, что вы должны сделать, если вы хотите, чтобы имя для поиска в списке контроля доступа. Если вы можете напрямую использовать вывод gss_export_name и делать двоичные сравнения, сделайте это. Однако, если вам нужно сравнить данные, введенные человеком, я бы поспорил, что лучше использовать вывод gss_display_name, тогда как другие будут утверждать, что анализ вывода gss_export_name лучше.