allow registration of krb5_plugins though the gss-api layer
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@23698 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -68,6 +68,7 @@ extern GSSAPI_LIB_VARIABLE gss_OID GSS_KRB5_SET_DEFAULT_REALM_X;
|
|||||||
extern GSSAPI_LIB_VARIABLE gss_OID GSS_KRB5_CCACHE_NAME_X;
|
extern GSSAPI_LIB_VARIABLE gss_OID GSS_KRB5_CCACHE_NAME_X;
|
||||||
extern GSSAPI_LIB_VARIABLE gss_OID GSS_KRB5_SET_TIME_OFFSET_X;
|
extern GSSAPI_LIB_VARIABLE gss_OID GSS_KRB5_SET_TIME_OFFSET_X;
|
||||||
extern GSSAPI_LIB_VARIABLE gss_OID GSS_KRB5_GET_TIME_OFFSET_X;
|
extern GSSAPI_LIB_VARIABLE gss_OID GSS_KRB5_GET_TIME_OFFSET_X;
|
||||||
|
extern GSSAPI_LIB_VARIABLE gss_OID GSS_KRB5_PLUGIN_REGISTER_X;
|
||||||
/* Extensions inquire context */
|
/* Extensions inquire context */
|
||||||
extern GSSAPI_LIB_VARIABLE gss_OID GSS_KRB5_GET_TKT_FLAGS_X;
|
extern GSSAPI_LIB_VARIABLE gss_OID GSS_KRB5_GET_TKT_FLAGS_X;
|
||||||
extern GSSAPI_LIB_VARIABLE gss_OID GSS_KRB5_EXTRACT_AUTHZ_DATA_FROM_SEC_CONTEXT_X;
|
extern GSSAPI_LIB_VARIABLE gss_OID GSS_KRB5_EXTRACT_AUTHZ_DATA_FROM_SEC_CONTEXT_X;
|
||||||
@@ -165,6 +166,16 @@ gsskrb5_set_time_offset(int);
|
|||||||
OM_uint32 GSSAPI_LIB_FUNCTION
|
OM_uint32 GSSAPI_LIB_FUNCTION
|
||||||
gsskrb5_get_time_offset(int *);
|
gsskrb5_get_time_offset(int *);
|
||||||
|
|
||||||
|
struct gsskrb5_krb5_plugin {
|
||||||
|
enum krb5_plugin_type type;
|
||||||
|
char *name;
|
||||||
|
void *symbol;
|
||||||
|
};
|
||||||
|
|
||||||
|
OM_uint32 GSSAPI_LIB_FUNCTION
|
||||||
|
gsskrb5_plugin_register(struct gsskrb5_krb5_plugin *);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Lucid - NFSv4 interface to GSS-API KRB5 to expose key material to
|
* Lucid - NFSv4 interface to GSS-API KRB5 to expose key material to
|
||||||
* do GSS content token handling in-kernel.
|
* do GSS content token handling in-kernel.
|
||||||
|
@@ -410,6 +410,13 @@ static gss_OID_desc gss_krb5_get_time_offset_x_desc =
|
|||||||
gss_OID GSSAPI_LIB_VARIABLE GSS_KRB5_GET_TIME_OFFSET_X =
|
gss_OID GSSAPI_LIB_VARIABLE GSS_KRB5_GET_TIME_OFFSET_X =
|
||||||
&gss_krb5_get_time_offset_x_desc;
|
&gss_krb5_get_time_offset_x_desc;
|
||||||
|
|
||||||
|
/* 1.2.752.43.13.19 */
|
||||||
|
static gss_OID_desc gss_krb5_plugin_register_x_desc =
|
||||||
|
{6, rk_UNCONST("\x2a\x85\x70\x2b\x0d\x13")};
|
||||||
|
|
||||||
|
gss_OID GSSAPI_LIB_VARIABLE GSS_KRB5_PLUGIN_REGISTER_KDC_X =
|
||||||
|
&gss_krb5_plugin_register_x_desc;
|
||||||
|
|
||||||
/* 1.2.752.43.14.1 */
|
/* 1.2.752.43.14.1 */
|
||||||
static gss_OID_desc gss_sasl_digest_md5_mechanism_desc =
|
static gss_OID_desc gss_sasl_digest_md5_mechanism_desc =
|
||||||
{6, rk_UNCONST("\x2a\x85\x70\x2b\x0e\x01") };
|
{6, rk_UNCONST("\x2a\x85\x70\x2b\x0e\x01") };
|
||||||
|
@@ -242,6 +242,18 @@ _gsskrb5_set_sec_context_option
|
|||||||
if (maj_stat != GSS_S_COMPLETE)
|
if (maj_stat != GSS_S_COMPLETE)
|
||||||
return maj_stat;
|
return maj_stat;
|
||||||
|
|
||||||
|
*minor_status = 0;
|
||||||
|
return GSS_S_COMPLETE;
|
||||||
|
} else if (gss_oid_equal(desired_object, GSS_KRB5_PLUGIN_REGISTER_X)) {
|
||||||
|
struct gsskrb5_krb5_plugin c;
|
||||||
|
|
||||||
|
if (value->length != sizeof(c)) {
|
||||||
|
*minor_status = EINVAL;
|
||||||
|
return GSS_S_FAILURE;
|
||||||
|
}
|
||||||
|
memcpy(&c, value->value, sizeof(c));
|
||||||
|
krb5_plugin_register(context, c.type, c.name, c.symbol);
|
||||||
|
|
||||||
*minor_status = 0;
|
*minor_status = 0;
|
||||||
return GSS_S_COMPLETE;
|
return GSS_S_COMPLETE;
|
||||||
}
|
}
|
||||||
|
@@ -920,3 +920,24 @@ gsskrb5_get_time_offset(int *offset)
|
|||||||
|
|
||||||
return (GSS_S_UNAVAILABLE);
|
return (GSS_S_UNAVAILABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OM_uint32 GSSAPI_LIB_FUNCTION
|
||||||
|
gsskrb5_plugin_register(struct gsskrb5_krb5_plugin *c);
|
||||||
|
{
|
||||||
|
struct _gss_mech_switch *m;
|
||||||
|
gss_buffer_desc buffer;
|
||||||
|
OM_uint32 junk;
|
||||||
|
|
||||||
|
_gss_load_mech();
|
||||||
|
|
||||||
|
buffer.value = c;
|
||||||
|
buffer.length = sizeof(*c);
|
||||||
|
|
||||||
|
SLIST_FOREACH(m, &_gss_mechs, gm_link) {
|
||||||
|
if (m->gm_mech.gm_set_sec_context_option == NULL)
|
||||||
|
continue;
|
||||||
|
m->gm_mech.gm_set_sec_context_option(&junk, NULL,
|
||||||
|
GSS_KRB5_PLUGIN_REGISTER_X, &buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (GSS_S_COMPLETE);
|
||||||
|
Reference in New Issue
Block a user