From 9fbc6d14418f4d817cc6f3f4aa8c4288753f7d39 Mon Sep 17 00:00:00 2001 From: Steve Lawrence Date: Fri, 13 Jun 2014 13:20:26 -0400 Subject: [PATCH] libsemanage: add back original module enable/disable functions for ABI compatability This uses symbolic versioning to maintain ABI compatability with the old versions of semanage_module_get_enabled. Also to maintain ABI, the functions semanage_module_{enable,disable} are added back and modified to call the new semanage_module_set_enabled function. Removed in commits: - Revert "Last attempt at upstreaming semodule_disable patch." - Revert "fixes to commit 847d27b8385ce77ac71df8aa58a2d298b33d1ea4" - Revert "libsemanage: change module disabled from rename to symlink" - Revert "libsemanage: Cleanup/fix enable/disable/remove module." Signed-off-by: Steve Lawrence --- libsemanage/src/libsemanage.map | 3 ++ libsemanage/src/module_internal.h | 1 - libsemanage/src/modules.c | 66 ++++++++++++++++++++++++++++++- 3 files changed, 67 insertions(+), 3 deletions(-) diff --git a/libsemanage/src/libsemanage.map b/libsemanage/src/libsemanage.map index 1b863e91..e8757236 100644 --- a/libsemanage/src/libsemanage.map +++ b/libsemanage/src/libsemanage.map @@ -6,10 +6,13 @@ LIBSEMANAGE_1.0 { semanage_module_install; semanage_module_install_file; semanage_module_upgrade; semanage_module_upgrade_file; semanage_module_install_base; semanage_module_install_base_file; + semanage_module_enable; + semanage_module_disable; semanage_module_remove; semanage_module_list; semanage_module_info_datum_destroy; semanage_module_list_nth; semanage_module_get_name; semanage_module_get_version; semanage_select_store; + semanage_module_get_enabled; semanage_reload_policy; semanage_set_reload; semanage_set_rebuild; semanage_user_*; semanage_bool_*; semanage_seuser_*; semanage_iface_*; semanage_port_*; semanage_context_*; diff --git a/libsemanage/src/module_internal.h b/libsemanage/src/module_internal.h index f7edcbae..8a127880 100644 --- a/libsemanage/src/module_internal.h +++ b/libsemanage/src/module_internal.h @@ -26,6 +26,5 @@ hidden_proto(semanage_module_get_name) hidden_proto(semanage_module_key_get_name) hidden_proto(semanage_module_key_set_priority) hidden_proto(semanage_module_key_set_name) - hidden_proto(semanage_module_get_enabled) hidden_proto(semanage_module_set_enabled) #endif diff --git a/libsemanage/src/modules.c b/libsemanage/src/modules.c index 0aed6e5f..daa52a6e 100644 --- a/libsemanage/src/modules.c +++ b/libsemanage/src/modules.c @@ -41,6 +41,9 @@ #include "modules.h" #include "debug.h" +asm(".symver semanage_module_get_enabled_1_1,semanage_module_get_enabled@@LIBSEMANAGE_1.1"); +asm(".symver semanage_module_get_enabled_1_0,semanage_module_get_enabled@LIBSEMANAGE_1.0"); + int semanage_module_install(semanage_handle_t * sh, char *module_data, size_t data_len) { @@ -855,7 +858,7 @@ int semanage_module_key_set_priority(semanage_handle_t *sh, hidden_def(semanage_module_key_set_priority) -int semanage_module_get_enabled(semanage_handle_t *sh, +int semanage_module_get_enabled_1_1(semanage_handle_t *sh, const semanage_module_key_t *modkey, int *enabled) { @@ -875,7 +878,10 @@ int semanage_module_get_enabled(semanage_handle_t *sh, return sh->funcs->get_enabled(sh, modkey, enabled); } -hidden_def(semanage_module_get_enabled) +int semanage_module_get_enabled_1_0(semanage_module_info_t *modinfo) +{ + return modinfo->enabled; +} int semanage_module_set_enabled(semanage_handle_t *sh, const semanage_module_key_t *modkey, @@ -903,6 +909,62 @@ int semanage_module_set_enabled(semanage_handle_t *sh, hidden_def(semanage_module_set_enabled) +/* This function exists only for ABI compatability. It has been deprecated and + * should not be used. Instead, use semanage_module_set_enabled() */ +int semanage_module_enable(semanage_handle_t *sh, char *module_name) +{ + int rc = -1; + semanage_module_key_t *modkey = NULL; + + rc = semanage_module_key_create(sh, &modkey); + if (rc != 0) + goto exit; + + rc = semanage_module_key_set_name(sh, modkey, module_name); + if (rc != 0) + goto exit; + + rc = semanage_module_set_enabled(sh, modkey, 1); + if (rc != 0) + goto exit; + + rc = 0; + +exit: + semanage_module_key_destroy(sh, modkey); + free(modkey); + + return rc; +} + +/* This function exists only for ABI compatability. It has been deprecated and + * should not be used. Instead, use semanage_module_set_enabled() */ +int semanage_module_disable(semanage_handle_t *sh, char *module_name) +{ + int rc = -1; + semanage_module_key_t *modkey = NULL; + + rc = semanage_module_key_create(sh, &modkey); + if (rc != 0) + goto exit; + + rc = semanage_module_key_set_name(sh, modkey, module_name); + if (rc != 0) + goto exit; + + rc = semanage_module_set_enabled(sh, modkey, 0); + if (rc != 0) + goto exit; + + rc = 0; + +exit: + semanage_module_key_destroy(sh, modkey); + free(modkey); + + return rc; +} + /* Converts a string to a priority * * returns -1 if str is not a valid priority.