Need to import spnego name before we can use it as a gss_name_t.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20364 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -97,6 +97,8 @@ OM_uint32 _gss_spnego_acquire_cred
|
|||||||
OM_uint32 * time_rec
|
OM_uint32 * time_rec
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
const spnego_name dname = (const spnego_name)desired_name;
|
||||||
|
gss_name_t name = GSS_C_NO_NAME;
|
||||||
OM_uint32 ret, tmp;
|
OM_uint32 ret, tmp;
|
||||||
gss_OID_set_desc actual_desired_mechs;
|
gss_OID_set_desc actual_desired_mechs;
|
||||||
gss_OID_set mechs;
|
gss_OID_set mechs;
|
||||||
@@ -106,9 +108,18 @@ OM_uint32 _gss_spnego_acquire_cred
|
|||||||
|
|
||||||
*output_cred_handle = GSS_C_NO_CREDENTIAL;
|
*output_cred_handle = GSS_C_NO_CREDENTIAL;
|
||||||
|
|
||||||
ret = gss_indicate_mechs(minor_status, &mechs);
|
if (dname) {
|
||||||
if (ret != GSS_S_COMPLETE)
|
ret = gss_import_name(minor_status, &dname->value, &dname->type, &name);
|
||||||
|
if (ret) {
|
||||||
return ret;
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = gss_indicate_mechs(minor_status, &mechs);
|
||||||
|
if (ret != GSS_S_COMPLETE) {
|
||||||
|
gss_release_name(minor_status, &name);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* Remove ourselves from this list */
|
/* Remove ourselves from this list */
|
||||||
actual_desired_mechs.count = mechs->count;
|
actual_desired_mechs.count = mechs->count;
|
||||||
@@ -135,7 +146,7 @@ OM_uint32 _gss_spnego_acquire_cred
|
|||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
cred = (gssspnego_cred)cred_handle;
|
cred = (gssspnego_cred)cred_handle;
|
||||||
ret = gss_acquire_cred(minor_status, desired_name,
|
ret = gss_acquire_cred(minor_status, name,
|
||||||
time_req, &actual_desired_mechs,
|
time_req, &actual_desired_mechs,
|
||||||
cred_usage,
|
cred_usage,
|
||||||
&cred->negotiated_cred_id,
|
&cred->negotiated_cred_id,
|
||||||
@@ -146,6 +157,7 @@ OM_uint32 _gss_spnego_acquire_cred
|
|||||||
*output_cred_handle = cred_handle;
|
*output_cred_handle = cred_handle;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
gss_release_name(minor_status, &name);
|
||||||
gss_release_oid_set(&tmp, &mechs);
|
gss_release_oid_set(&tmp, &mechs);
|
||||||
if (actual_desired_mechs.elements != NULL) {
|
if (actual_desired_mechs.elements != NULL) {
|
||||||
free(actual_desired_mechs.elements);
|
free(actual_desired_mechs.elements);
|
||||||
|
Reference in New Issue
Block a user