Make _krb5_plugin_run_f() use krb5_plugin_register()ed plugins too
This commit is contained in:
		| @@ -599,16 +599,14 @@ _krb5_plugin_run_f(krb5_context context, | |||||||
|     heim_string_t m = heim_string_create(module); |     heim_string_t m = heim_string_create(module); | ||||||
|     heim_dict_t dict; |     heim_dict_t dict; | ||||||
|     struct iter_ctx s; |     struct iter_ctx s; | ||||||
|  |     struct krb5_plugin *registered_plugins = NULL; | ||||||
|  |     struct krb5_plugin *p; | ||||||
|  |  | ||||||
|  |     /* Get registered plugins */ | ||||||
|  |     (void) _krb5_plugin_find(context, SYMBOL, name, ®istered_plugins); | ||||||
|  |  | ||||||
|     HEIMDAL_MUTEX_lock(&plugin_mutex); |     HEIMDAL_MUTEX_lock(&plugin_mutex); | ||||||
|  |  | ||||||
|     dict = heim_dict_get_value(modules, m); |  | ||||||
|     heim_release(m); |  | ||||||
|     if (dict == NULL) { |  | ||||||
| 	HEIMDAL_MUTEX_unlock(&plugin_mutex); |  | ||||||
| 	return KRB5_PLUGIN_NO_HANDLE; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     s.context = context; |     s.context = context; | ||||||
|     s.name = name; |     s.name = name; | ||||||
|     s.n = heim_string_create(name); |     s.n = heim_string_create(name); | ||||||
| @@ -616,13 +614,29 @@ _krb5_plugin_run_f(krb5_context context, | |||||||
|     s.result = heim_array_create(); |     s.result = heim_array_create(); | ||||||
|     s.func = func; |     s.func = func; | ||||||
|     s.userctx = userctx; |     s.userctx = userctx; | ||||||
|  |  | ||||||
|     heim_dict_iterate_f(dict, search_modules, &s); |  | ||||||
|  |  | ||||||
|     HEIMDAL_MUTEX_unlock(&plugin_mutex); |  | ||||||
|  |  | ||||||
|     s.ret = KRB5_PLUGIN_NO_HANDLE; |     s.ret = KRB5_PLUGIN_NO_HANDLE; | ||||||
|  |  | ||||||
|  |     /* Get loaded plugins */ | ||||||
|  |     dict = heim_dict_get_value(modules, m); | ||||||
|  |     heim_release(m); | ||||||
|  |  | ||||||
|  |     /* Add loaded plugins to s.result array */ | ||||||
|  |     if (dict) | ||||||
|  | 	heim_dict_iterate_f(dict, search_modules, &s); | ||||||
|  |  | ||||||
|  |     /* We don't need to hold plugin_mutex during plugin invocation */ | ||||||
|  |     HEIMDAL_MUTEX_unlock(&plugin_mutex); | ||||||
|  |  | ||||||
|  |     /* Invoke registered plugins */ | ||||||
|  |     for (p = registered_plugins; p; p = p->next) { | ||||||
|  | 	if (s.ret != KRB5_PLUGIN_NO_HANDLE) | ||||||
|  | 	    break; | ||||||
|  | 	s.ret = s.func(s.context, p->symbol, NULL, s.userctx); | ||||||
|  |     } | ||||||
|  |     _krb5_plugin_free(registered_plugins); | ||||||
|  |  | ||||||
|  |     /* Invoke loaded plugins */ | ||||||
|  |     if (s.ret != KRB5_PLUGIN_NO_HANDLE) | ||||||
| 	heim_array_iterate_f(s.result, &s, eval_results); | 	heim_array_iterate_f(s.result, &s, eval_results); | ||||||
|  |  | ||||||
|     heim_release(s.result); |     heim_release(s.result); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Nicolas Williams
					Nicolas Williams