diff options
author | Hiroki Sato <hrs@FreeBSD.org> | 2018-04-04 04:21:19 +0000 |
---|---|---|
committer | Hiroki Sato <hrs@FreeBSD.org> | 2018-04-04 04:21:19 +0000 |
commit | d684f11da759490a8d98d7b790796106285f4084 (patch) | |
tree | 27b7356df710fdf1440fe2c23154b8121e99f2ab /lib/gssapi/mech/gss_store_cred.c | |
parent | f52d4664e3f68828c06f85bfc1afa271e3e04713 (diff) |
Import Heimdal 7.5.0.vendor/heimdal/7.5.0
Notes
Notes:
svn path=/vendor-crypto/heimdal/dist/; revision=331978
svn path=/vendor-crypto/heimdal/7.5.0/; revision=331979; tag=vendor/heimdal/7.5.0
Diffstat (limited to 'lib/gssapi/mech/gss_store_cred.c')
-rw-r--r-- | lib/gssapi/mech/gss_store_cred.c | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/lib/gssapi/mech/gss_store_cred.c b/lib/gssapi/mech/gss_store_cred.c index 4d2bfdec8b1a..a92611570eb6 100644 --- a/lib/gssapi/mech/gss_store_cred.c +++ b/lib/gssapi/mech/gss_store_cred.c @@ -45,7 +45,9 @@ gss_store_cred(OM_uint32 *minor_status, { struct _gss_cred *cred = (struct _gss_cred *) input_cred_handle; struct _gss_mechanism_cred *mc; - OM_uint32 maj, junk; + OM_uint32 maj = GSS_S_FAILURE; + OM_uint32 junk; + size_t successes = 0; if (minor_status == NULL) return GSS_S_FAILURE; @@ -69,26 +71,30 @@ gss_store_cred(OM_uint32 *minor_status, if (m == NULL || m->gm_store_cred == NULL) continue; - if (desired_mech) { - maj = gss_oid_equal(&m->gm_mech_oid, desired_mech); - if (maj != 0) - continue; - } + if (desired_mech != GSS_C_NO_OID && + !gss_oid_equal(&m->gm_mech_oid, desired_mech)) + continue; maj = (m->gm_store_cred)(minor_status, mc->gmc_cred, cred_usage, desired_mech, overwrite_cred, default_cred, NULL, cred_usage_stored); - if (maj != GSS_S_COMPLETE) { - gss_release_oid_set(&junk, elements_stored); - return maj; - } + if (maj == GSS_S_COMPLETE) { + if (elements_stored) + gss_add_oid_set_member(&junk, desired_mech, elements_stored); + successes++; + } else if (desired_mech != GSS_C_NO_OID) { + gss_release_oid_set(&junk, elements_stored); + return maj; + } - if (elements_stored) { - gss_add_oid_set_member(&junk, - &m->gm_mech_oid, - elements_stored); - } + } + if (successes == 0) { + if (maj != GSS_S_COMPLETE) + return maj; /* last failure */ + return GSS_S_FAILURE; } + + *minor_status = 0; return GSS_S_COMPLETE; } |