for (i = 0; i < context->n_modules; i++) {
struct _krb5_authdata_context_module *module = &context->modules[i];
- if ((module->flags & flags) &&
- module->client_req_init != NULL &&
- strlen(module->name) == name->length &&
- memcmp(module->name, name->data, name->length) == 0) {
- ret = module;
- break;
- }
+ if ((module->flags & flags) == 0)
+ continue;
+
+ /* internalize request context for the first instance only */
+ if (module->client_req_init == NULL)
+ continue;
+
+ /* check for name match */
+ if (strlen(module->name) != name->length ||
+ memcmp(module->name, name->data, name->length) != 0)
+ continue;
+
+ ret = module;
+ break;
}
return ret;
const char *module_name,
void **ptr)
{
- int i;
- krb5_error_code code = ENOENT;
+ krb5_error_code code;
+ krb5_data name;
+ struct _krb5_authdata_context_module *module;
*ptr = NULL;
- for (i = 0; i < context->n_modules; i++) {
- struct _krb5_authdata_context_module *module = &context->modules[i];
-
- if (strcmp(module_name, module->name) != 0)
- continue;
+ name.length = strlen(module_name);
+ name.data = (char *)module_name;
- if (module->ftable->export_internal == NULL)
- continue;
+ module = k5_ad_find_module(kcontext, context, AD_USAGE_MASK, &name);
+ if (module == NULL)
+ return ENOENT;
- code = (*module->ftable->export_internal)(kcontext,
- context,
- module->plugin_context,
- *(module->request_context_pp),
- restrict_authenticated,
- ptr);
+ if (module->ftable->export_internal == NULL)
+ return ENOENT;
- break;
- }
+ code = (*module->ftable->export_internal)(kcontext,
+ context,
+ module->plugin_context,
+ *(module->request_context_pp),
+ restrict_authenticated,
+ ptr);
return code;
}
const char *module_name,
void *ptr)
{
- int i;
- krb5_error_code code = ENOENT;
+ krb5_data name;
+ struct _krb5_authdata_context_module *module;
- for (i = 0; i < context->n_modules; i++) {
- struct _krb5_authdata_context_module *module = &context->modules[i];
-
- if (strcmp(module_name, module->name) != 0)
- continue;
+ name.length = strlen(module_name);
+ name.data = (char *)module_name;
- if (module->ftable->free_internal == NULL)
- continue;
+ module = k5_ad_find_module(kcontext, context, AD_USAGE_MASK, &name);
+ if (module == NULL)
+ return ENOENT;
- (*module->ftable->free_internal)(kcontext,
- context,
- module->plugin_context,
- *(module->request_context_pp),
- ptr);
+ if (module->ftable->free_internal == NULL)
+ return ENOENT;
- break;
- }
+ (*module->ftable->free_internal)(kcontext,
+ context,
+ module->plugin_context,
+ *(module->request_context_pp),
+ ptr);
- return code;
+ return 0;
}
static krb5_error_code