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,
gss_buffer_set_t *data_set)
{
struct _gss_mechanism_cred *cred =
(struct _gss_mechanism_cred *) cred_handle;
OM_uint32 major_status;
struct _gss_cred *cred = (struct _gss_cred *) cred_handle;
OM_uint32 status = GSS_S_COMPLETE;
struct _gss_mechanism_cred *mc;
gssapi_mech_interface m;
gss_buffer_set_t set = GSS_C_NO_BUFFER_SET;
*minor_status = 0;
if (cred == NULL)
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)
return GSS_S_BAD_MECH;
m = mc->gmc_mech;
if (m == NULL)
return GSS_S_BAD_MECH;
if (m->gm_inquire_cred_by_oid != NULL)
major_status = m->gm_inquire_cred_by_oid(minor_status,
cred->gmc_cred, desired_object, data_set);
else
major_status = GSS_S_BAD_MECH;
if (m->gm_inquire_cred_by_oid == NULL)
continue;
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_buffer_t value)
{
struct _gss_mechanism_cred *cred =
(struct _gss_mechanism_cred *) cred_handle;
OM_uint32 major_status;
struct _gss_cred *cred = (struct _gss_cred *) cred_handle;
OM_uint32 major_status = GSS_S_COMPLETE;
struct _gss_mechanism_cred *mc;
gssapi_mech_interface m;
int one_ok = 0;
*minor_status = 0;
if (cred == NULL)
return GSS_S_NO_CRED;
m = cred->gmc_mech;
SLIST_FOREACH(mc, &cred->gc_mc, gmc_link) {
if (m == NULL)
return GSS_S_BAD_MECH;
m = mc->gmc_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,
&cred->gmc_cred, object, value);
else
major_status = GSS_S_BAD_MECH;
&mc->gmc_cred, object, value);
if (major_status == GSS_S_BAD_MECH)
one_ok = 1;
}
if (one_ok) {
*minor_status = 0;
return GSS_S_COMPLETE;
}
return major_status;
}