gss: NTLM nsi_probe returns a krb5, not gss error

The nsi_probe() error code was treated as a GSS error code, rather than a krb5
error. Return a GSS error code, setting the krb5 error in minor_status.
This commit is contained in:
Luke Howard
2019-12-27 20:31:45 +11:00
parent fd572363a5
commit bf14eb29df

View File

@@ -57,20 +57,23 @@ _gss_ntlm_acquire_cred_from(OM_uint32 *min_stat,
*time_rec = GSS_C_INDEFINITE; *time_rec = GSS_C_INDEFINITE;
if (cred_usage == GSS_C_BOTH || cred_usage == GSS_C_ACCEPT) { if (cred_usage == GSS_C_BOTH || cred_usage == GSS_C_ACCEPT) {
int ret;
maj_stat = _gss_ntlm_allocate_ctx(min_stat, &ctx); maj_stat = _gss_ntlm_allocate_ctx(min_stat, &ctx);
if (maj_stat != GSS_S_COMPLETE) if (maj_stat != GSS_S_COMPLETE)
return maj_stat; return maj_stat;
domain = name != NULL ? name->domain : NULL; domain = name != NULL ? name->domain : NULL;
maj_stat = (*ctx->server->nsi_probe)(min_stat, ctx->ictx, domain); ret = (*ctx->server->nsi_probe)(min_stat, ctx->ictx, domain);
{ {
gss_ctx_id_t context = (gss_ctx_id_t)ctx; gss_ctx_id_t context = (gss_ctx_id_t)ctx;
OM_uint32 junk; OM_uint32 junk;
_gss_ntlm_delete_sec_context(&junk, &context, NULL); _gss_ntlm_delete_sec_context(&junk, &context, NULL);
} }
if (maj_stat) if (ret) {
return maj_stat; *min_stat = ret;
return GSS_S_NO_CRED;
}
} }
if (cred_usage == GSS_C_BOTH || cred_usage == GSS_C_INITIATE) { if (cred_usage == GSS_C_BOTH || cred_usage == GSS_C_INITIATE) {
ntlm_cred cred; ntlm_cred cred;