From ac6fa4cadc2bded960319a8da7be4194b50580c5 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Thu, 7 Feb 2019 10:45:53 -0500 Subject: [PATCH] lib/krb5: prepare to make common plugins public Rename common_plugin_ftable to krb5_plugin_common_ftable. Create lib/krb5/common_plugin.h to include the structure and typedef. The common_plugin.h header is now included by ccache_plugin.h along with a prototype for the required ccache_ops_plugin_load() function. Change-Id: I2b27d6d0f5cf0544482c3f01784fef945e12e8d8 --- lib/krb5/ccache_plugin.h | 7 +++++ lib/krb5/common_plugin.h | 58 ++++++++++++++++++++++++++++++++++++++++ lib/krb5/plugin.c | 20 +++++--------- 3 files changed, 71 insertions(+), 14 deletions(-) create mode 100644 lib/krb5/common_plugin.h diff --git a/lib/krb5/ccache_plugin.h b/lib/krb5/ccache_plugin.h index f6871d65d..4539fc9a1 100644 --- a/lib/krb5/ccache_plugin.h +++ b/lib/krb5/ccache_plugin.h @@ -33,7 +33,14 @@ #define HEIMDAL_KRB5_CCACHE_PLUGIN_H 1 #include +#include #define KRB5_PLUGIN_CCACHE "ccache_ops" +krb5_error_code KRB5_CALLCONV +ccache_ops_plugin_load(krb5_context context, + krb5_get_instance_func_t *func, + size_t *n_ftables, + const krb5_plugin_common_ftable *const **ftables); + #endif /* HEIMDAL_KRB5_CCACHE_PLUGIN_H */ diff --git a/lib/krb5/common_plugin.h b/lib/krb5/common_plugin.h new file mode 100644 index 000000000..812c4a155 --- /dev/null +++ b/lib/krb5/common_plugin.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2006 - 2007 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. + * + * Portions Copyright (c) 2018 AuriStor, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef HEIMDAL_KRB5_COMMON_PLUGIN_H +#define HEIMDAL_KRB5_COMMON_PLUGIN_H + +/* + * All plugin function tables extend the following structure. + */ +typedef struct krb5_plugin_common_ftable_desc { + int version; + krb5_error_code (KRB5_LIB_CALL *init)(krb5_context, void **); + void (KRB5_LIB_CALL *fini)(void *); +} krb5_plugin_common_ftable; + +/* + * All plugins must export a function named "_plugin_load" with + * a signature of: + * + * krb5_error_code KRB5_CALLCONV + * _plugin_load(krb5_context context, + * krb5_get_instance_func_t *func, + * size_t *n_ftables, + * const krb5_plugin_common_ftable *const **ftables); + */ +#endif /* HEIMDAL_KRB5_COMMON_PLUGIN_H */ diff --git a/lib/krb5/plugin.c b/lib/krb5/plugin.c index b30685333..f87d4ba07 100644 --- a/lib/krb5/plugin.c +++ b/lib/krb5/plugin.c @@ -34,6 +34,7 @@ */ #include "krb5_locl.h" +#include "common_plugin.h" /* * Definitions: @@ -149,17 +150,8 @@ copy_internal_dso(const char *name) return dso; } -/* - * All plugin function tables extend the following structure. - */ -typedef struct common_plugin_ftable_desc { - int version; - krb5_error_code (KRB5_LIB_CALL *init)(krb5_context, void **); - void (KRB5_LIB_CALL *fini)(void *); -} common_plugin_ftable; - struct krb5_plugin { - common_plugin_ftable *ftable; + krb5_plugin_common_ftable *ftable; void *ctx; }; @@ -490,7 +482,7 @@ add_dso_plugin_struct(krb5_context context, const char *name) { krb5_error_code ret; - common_plugin_ftable *cpm; + krb5_plugin_common_ftable *cpm; struct krb5_plugin *pl; heim_array_t plugins; @@ -526,7 +518,7 @@ typedef krb5_error_code (KRB5_CALLCONV *krb5_plugin_load_t)(krb5_context context, krb5_get_instance_func_t *func, size_t *n_ftables, - const common_plugin_ftable *const **ftables); + const krb5_plugin_common_ftable *const **ftables); static krb5_boolean validate_plugin_deps(krb5_context context, @@ -583,7 +575,7 @@ add_dso_plugins_load_fn(krb5_context context, size_t i; krb5_get_instance_func_t get_instance; size_t n_ftables; - const common_plugin_ftable *const *ftables; + const krb5_plugin_common_ftable *const *ftables; if (asprintf(&sym, "%s_plugin_load", caller->name) == -1) return NULL; @@ -609,7 +601,7 @@ add_dso_plugins_load_fn(krb5_context context, plugins = heim_array_create(); for (i = 0; i < n_ftables; i++) { - const common_plugin_ftable *const cpm = ftables[i]; + const krb5_plugin_common_ftable *const cpm = ftables[i]; struct krb5_plugin *pl; pl = heim_alloc(sizeof(*pl), "krb5-plugin", plugin_free);