Add SPI for dynamically loading mechanism object information

This commit is contained in:
Luke Howard
2011-01-09 22:16:18 +11:00
parent 45cd381f53
commit 4304e719a6
2 changed files with 25 additions and 4 deletions

View File

@@ -252,6 +252,8 @@ _gss_load_mech(void)
rk_cloexec_file(fp);
while (fgets(buf, sizeof(buf), fp)) {
_gss_mo_init *mi;
if (*buf == '#')
continue;
p = buf;
@@ -360,10 +362,18 @@ _gss_load_mech(void)
OPTSPISYM(acquire_cred_with_password);
OPTSYM(add_cred_with_password);
/* API-as-SPI compatibility */
COMPATSYM(inquire_saslname_for_mech);
COMPATSYM(inquire_mech_for_saslname);
COMPATSYM(inquire_attrs_for_mech);
mi = dlsym(so, "gss_mo_init");
if (mi != NULL) {
major_status = mi(&minor_status, &mech_oid,
&m->gm_mech.gm_mo, &m->gm_mech.gm_mo_num);
if (GSS_ERROR(major_status))
goto bad;
} else {
/* API-as-SPI compatibility */
COMPATSYM(inquire_saslname_for_mech);
COMPATSYM(inquire_mech_for_saslname);
COMPATSYM(inquire_attrs_for_mech);
}
/* pick up the oid sets of names */

View File

@@ -40,4 +40,15 @@ HEIM_SLIST_HEAD(_gss_mech_switch_list, _gss_mech_switch);
extern struct _gss_mech_switch_list _gss_mechs;
extern gss_OID_set _gss_mech_oids;
/*
* Initialization function for MO SPI, so they may dynamically return a
* set of mechanism objects at load time.
*/
typedef OM_uint32 GSSAPI_CALLCONV _gss_mo_init (
OM_uint32 *minor,
gss_OID oid,
gss_mo_desc **mo,
size_t *mo_num
);
void _gss_load_mech(void);