(_gss_find_mn): Return an error code for caller.

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@21473 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2007-07-10 16:29:53 +00:00
parent ccb7332e0b
commit 10bcbfc468

View File

@@ -29,13 +29,16 @@
#include "mech_locl.h" #include "mech_locl.h"
RCSID("$Id$"); RCSID("$Id$");
struct _gss_mechanism_name * OM_uint32
_gss_find_mn(struct _gss_name *name, gss_OID mech) _gss_find_mn(OM_uint32 *minor_status, struct _gss_name *name, gss_OID mech,
struct _gss_mechanism_name **output_mn)
{ {
OM_uint32 major_status, minor_status; OM_uint32 major_status;
gssapi_mech_interface m; gssapi_mech_interface m;
struct _gss_mechanism_name *mn; struct _gss_mechanism_name *mn;
*output_mn = NULL;
SLIST_FOREACH(mn, &name->gn_mn, gmn_link) { SLIST_FOREACH(mn, &name->gn_mn, gmn_link) {
if (gss_oid_equal(mech, mn->gmn_mech_oid)) if (gss_oid_equal(mech, mn->gmn_mech_oid))
break; break;
@@ -47,34 +50,36 @@ _gss_find_mn(struct _gss_name *name, gss_OID mech)
* MN but it is from a different mech), give up now. * MN but it is from a different mech), give up now.
*/ */
if (!name->gn_value.value) if (!name->gn_value.value)
return (0); return GSS_S_BAD_NAME;
m = __gss_get_mechanism(mech); m = __gss_get_mechanism(mech);
if (!m) if (!m)
return (0); return (GSS_S_BAD_MECH);
mn = malloc(sizeof(struct _gss_mechanism_name)); mn = malloc(sizeof(struct _gss_mechanism_name));
if (!mn) if (!mn)
return (0); return GSS_S_FAILURE;
major_status = m->gm_import_name(&minor_status, major_status = m->gm_import_name(minor_status,
&name->gn_value, &name->gn_value,
(name->gn_type.elements (name->gn_type.elements
? &name->gn_type : GSS_C_NO_OID), ? &name->gn_type : GSS_C_NO_OID),
&mn->gmn_name); &mn->gmn_name);
if (major_status != GSS_S_COMPLETE) { if (major_status != GSS_S_COMPLETE) {
_gss_mg_error(m, major_status, minor_status); _gss_mg_error(m, major_status, *minor_status);
free(mn); free(mn);
return (0); return major_status;
} }
mn->gmn_mech = m; mn->gmn_mech = m;
mn->gmn_mech_oid = &m->gm_mech_oid; mn->gmn_mech_oid = &m->gm_mech_oid;
SLIST_INSERT_HEAD(&name->gn_mn, mn, gmn_link); SLIST_INSERT_HEAD(&name->gn_mn, mn, gmn_link);
} }
return (mn); *output_mn = mn;
return 0;
} }
/* /*
* Make a name from an MN. * Make a name from an MN.
*/ */