diff --git a/lib/gssapi/mech/gss_accept_sec_context.c b/lib/gssapi/mech/gss_accept_sec_context.c index 83394bb24..5112b954a 100644 --- a/lib/gssapi/mech/gss_accept_sec_context.c +++ b/lib/gssapi/mech/gss_accept_sec_context.c @@ -265,12 +265,14 @@ gss_accept_sec_context(OM_uint32 *minor_status, *delegated_cred_handle = GSS_C_NO_CREDENTIAL; _mg_buffer_zero(output_token); + _gss_mg_log(10, "gss-asc: enter ctx=%p", ctx); if (!*context_handle) { ctx = calloc(1, sizeof(*ctx)); if (!ctx) { *minor_status = ENOMEM; return (GSS_S_DEFECTIVE_TOKEN); } + _gss_mg_log(10, "gss-asc: allocated ctx=%p", ctx); *context_handle = (gss_ctx_id_t)ctx; ctx->gc_initial = 1; } @@ -318,6 +320,9 @@ gss_accept_sec_context(OM_uint32 *minor_status, &mech_ret_flags, time_rec, &delegated_mc); + _gss_mg_log(10, "gss-asc: ctx=%p tried \"%s\", " + "returned %u", ctx, m->gm_name, + major_status); if (major_status == GSS_S_DEFECTIVE_TOKEN) { /* * Try to retain and output one error token for @@ -360,6 +365,9 @@ gss_accept_sec_context(OM_uint32 *minor_status, &mech_ret_flags, time_rec, &delegated_mc); + _gss_mg_log(10, "gss-asc: ctx=%p tried \"%s\", " + "returned %u", ctx, m->gm_name, + major_status); if (major_status == GSS_S_DEFECTIVE_TOKEN) { if (output_token->length && defective_token_error.length == 0) { @@ -510,7 +518,8 @@ got_one: } } - _gss_mg_log(10, "gss-asc: return %d/%d", (int)major_status, (int)*minor_status); + _gss_mg_log(10, "gss-asc: ctx=%p return %d/%d", ctx, + (int)major_status, (int)*minor_status); if (ret_flags) *ret_flags = mech_ret_flags; diff --git a/lib/gssapi/mech/gss_display_name.c b/lib/gssapi/mech/gss_display_name.c index ac4ec257d..66b3ff623 100644 --- a/lib/gssapi/mech/gss_display_name.c +++ b/lib/gssapi/mech/gss_display_name.c @@ -38,6 +38,7 @@ gss_display_name(OM_uint32 *minor_status, struct _gss_name *name = rk_UNCONST(input_name); struct _gss_mechanism_name *mn; + _gss_mg_log(10, "gdn: enter gss_display_name: %p", input_name); _mg_buffer_zero(output_name_buffer); if (output_name_type) *output_name_type = GSS_C_NO_OID; @@ -68,6 +69,8 @@ gss_display_name(OM_uint32 *minor_status, return (GSS_S_COMPLETE); } else { HEIM_TAILQ_FOREACH(mn, &name->gn_mn, gmn_link) { + _gss_mg_log(10, "gdn: trying mech \"%s\"", + mn->gmn_mech->gm_name); major_status = mn->gmn_mech->gm_display_name( minor_status, mn->gmn_name, output_name_buffer, diff --git a/lib/gssapi/mech/gss_import_name.c b/lib/gssapi/mech/gss_import_name.c index 54930bf46..51d687eb4 100644 --- a/lib/gssapi/mech/gss_import_name.c +++ b/lib/gssapi/mech/gss_import_name.c @@ -28,6 +28,8 @@ #include "mech_locl.h" +#include + static OM_uint32 _gss_import_export_name(OM_uint32 *minor_status, const gss_buffer_t input_name_buffer, @@ -44,6 +46,8 @@ _gss_import_export_name(OM_uint32 *minor_status, gss_name_t new_canonical_name; int composite = 0; + _gss_mg_log(10, "gin: importing exported name"); + *minor_status = 0; *output_name = 0; @@ -169,6 +173,32 @@ _gss_import_export_name(OM_uint32 *minor_status, return (GSS_S_COMPLETE); } +static void +log_import_name(gss_buffer_t input_name_buffer) +{ + char *name; + size_t len; + + if (!_gss_mg_log_level(10)) + return; + + if (input_name_buffer->length > (SIZE_MAX - 1) / 4) { + _gss_mg_log(10, "gin: importing name (%zu bytes)", + input_name_buffer->length); + return; + } + + len = input_name_buffer->length * 4 + 1; + name = malloc(len); + if (name == NULL) + return; + + strsvisx(name, input_name_buffer->value, input_name_buffer->length, + VIS_CSTYLE | VIS_TAB | VIS_NL, "\""); + _gss_mg_log(10, "gin: importing name \"%s\"", name); + free(name); +} + /** * Convert a GGS-API name from contiguous string to internal form. * @@ -230,6 +260,7 @@ gss_import_name(OM_uint32 *minor_status, name_type, output_name); } + log_import_name(input_name_buffer); *minor_status = 0; name = _gss_create_name(NULL, NULL); @@ -262,6 +293,9 @@ gss_import_name(OM_uint32 *minor_status, HEIM_TAILQ_FOREACH(m, &_gss_mechs, gm_link) { int present = 0; + _gss_mg_log(10, "gin: attempting mech \"%s\"", + m->gm_mech.gm_name); + if ((m->gm_mech.gm_flags & GM_USE_MG_NAME)) continue; diff --git a/lib/gssapi/mech/gss_mech_switch.c b/lib/gssapi/mech/gss_mech_switch.c index 84c138bdb..64d5f6848 100644 --- a/lib/gssapi/mech/gss_mech_switch.c +++ b/lib/gssapi/mech/gss_mech_switch.c @@ -167,7 +167,8 @@ do { \ m->gm_mech.gm_ ## name = (_gss_##name##_t *)dlsym(so, "gss_" #name); \ if (!m->gm_mech.gm_ ## name || \ m->gm_mech.gm_ ##name == gss_ ## name) { \ - _gss_mg_log(1, "can't find symbol gss_" #name); \ + _gss_mg_log(1, "can't find symbol gss_" #name \ + " in %s", lib); \ goto bad; \ } \ } while (0) @@ -334,9 +335,11 @@ _gss_load_mech(void) /* * Check for duplicates, already loaded mechs. */ + _gss_mg_log(10, "loading \"%s\"", name); found = 0; HEIM_TAILQ_FOREACH(m, &_gss_mechs, gm_link) { if (gss_oid_equal(&m->gm_mech.gm_mech_oid, mech_oid)) { + _gss_mg_log(10, "duplicate mech, not loading"); found = 1; break; }