(_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:
@@ -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.
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user