Make work.

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@17726 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2006-06-28 16:20:41 +00:00
parent e6b82dd964
commit ace187d740
2 changed files with 49 additions and 23 deletions

View File

@@ -39,27 +39,44 @@ gss_inquire_cred_by_oid (OM_uint32 *minor_status,
const gss_OID desired_object, const gss_OID desired_object,
gss_buffer_set_t *data_set) gss_buffer_set_t *data_set)
{ {
struct _gss_mechanism_cred *cred = struct _gss_cred *cred = (struct _gss_cred *) cred_handle;
(struct _gss_mechanism_cred *) cred_handle; OM_uint32 status = GSS_S_COMPLETE;
OM_uint32 major_status; struct _gss_mechanism_cred *mc;
gssapi_mech_interface m; gssapi_mech_interface m;
gss_buffer_set_t set = GSS_C_NO_BUFFER_SET;
*minor_status = 0; *minor_status = 0;
if (cred == NULL) if (cred == NULL)
return GSS_S_NO_CRED; return GSS_S_NO_CRED;
m = cred->gmc_mech; SLIST_FOREACH(mc, &cred->gc_mc, gmc_link) {
gss_buffer_set_t rset = GSS_C_NO_BUFFER_SET;
int i;
if (m == NULL) m = mc->gmc_mech;
return GSS_S_BAD_MECH; if (m == NULL)
return GSS_S_BAD_MECH;
if (m->gm_inquire_cred_by_oid != NULL) if (m->gm_inquire_cred_by_oid == NULL)
major_status = m->gm_inquire_cred_by_oid(minor_status, continue;
cred->gmc_cred, desired_object, data_set);
else
major_status = GSS_S_BAD_MECH;
return major_status; status = m->gm_inquire_cred_by_oid(minor_status,
mc->gmc_cred, desired_object, &rset);
if (status != GSS_S_COMPLETE)
continue;
for (i = 0; i < rset->count; i++) {
status = gss_add_buffer_set_member(minor_status,
&rset->elements[i], &set);
if (status != GSS_S_COMPLETE)
break;
}
gss_release_buffer_set(minor_status, &rset);
}
if (set == GSS_C_NO_BUFFER_SET)
status = GSS_S_FAILURE;
*data_set = set;
return status;
} }

View File

@@ -39,27 +39,36 @@ gss_set_cred_option (OM_uint32 *minor_status,
const gss_OID object, const gss_OID object,
const gss_buffer_t value) const gss_buffer_t value)
{ {
struct _gss_mechanism_cred *cred = struct _gss_cred *cred = (struct _gss_cred *) cred_handle;
(struct _gss_mechanism_cred *) cred_handle; OM_uint32 major_status = GSS_S_COMPLETE;
OM_uint32 major_status; struct _gss_mechanism_cred *mc;
gssapi_mech_interface m; gssapi_mech_interface m;
int one_ok = 0;
*minor_status = 0; *minor_status = 0;
if (cred == NULL) if (cred == NULL)
return GSS_S_NO_CRED; return GSS_S_NO_CRED;
m = cred->gmc_mech; SLIST_FOREACH(mc, &cred->gc_mc, gmc_link) {
if (m == NULL) m = mc->gmc_mech;
return GSS_S_BAD_MECH;
if (m == NULL)
return GSS_S_BAD_MECH;
if (m->gm_set_cred_option == NULL)
continue;
if (m->gm_set_cred_option != NULL)
major_status = m->gm_set_cred_option(minor_status, major_status = m->gm_set_cred_option(minor_status,
&cred->gmc_cred, object, value); &mc->gmc_cred, object, value);
else if (major_status == GSS_S_BAD_MECH)
major_status = GSS_S_BAD_MECH; one_ok = 1;
}
if (one_ok) {
*minor_status = 0;
return GSS_S_COMPLETE;
}
return major_status; return major_status;
} }