diff --git a/WHATS_NEW_DM b/WHATS_NEW_DM index 1103380de..27d8972d4 100644 --- a/WHATS_NEW_DM +++ b/WHATS_NEW_DM @@ -1,5 +1,7 @@ Version 1.02.71 - ==================================== + Add DM_DEFAULT_NAME_MANGLING_MODE env. variable to override configured value. + Add dm_lib_init to automatically initialise device-mapper library on load. Replace any '\' char with '\\' in table specification on input. Add mangle command to dmsetup to provide renaming to correct mangled form. Add 'mangled_name' and 'unmangled_name' fields to dmsetup info -c -o. diff --git a/libdm/libdevmapper.h b/libdm/libdevmapper.h index e9f84ea4f..fe6c42eed 100644 --- a/libdm/libdevmapper.h +++ b/libdm/libdevmapper.h @@ -365,6 +365,12 @@ int dm_device_has_holders(uint32_t major, uint32_t minor); */ int dm_device_has_mounted_fs(uint32_t major, uint32_t minor); + +/* + * Initialise library + */ +void dm_lib_init(void) __attribute__((constructor)); + /* * Release library resources */ diff --git a/libdm/libdm-common.c b/libdm/libdm-common.c index b5ebcfd83..54a893a64 100644 --- a/libdm/libdm-common.c +++ b/libdm/libdm-common.c @@ -43,6 +43,8 @@ # include #endif +#define DM_DEFAULT_NAME_MANGLING_MODE_ENV_VAR_NAME "DM_DEFAULT_NAME_MANGLING_MODE" + #define DEV_DIR "/dev/" #ifdef UDEV_SYNC_SUPPORT @@ -66,7 +68,7 @@ static char _default_uuid_prefix[DM_MAX_UUID_PREFIX_LEN + 1] = "LVM-"; static int _verbose = 0; static int _suspended_dev_counter = 0; -static int _name_mangling_mode = DEFAULT_DM_NAME_MANGLING; +static int _name_mangling_mode = -1; #ifdef HAVE_SELINUX_LABEL_H static struct selabel_handle *_selabel_handle = NULL; @@ -79,6 +81,22 @@ static int _sync_with_udev = 1; static int _udev_checking = 1; #endif +void dm_lib_init(void) +{ + const char *env; + + env = getenv(DM_DEFAULT_NAME_MANGLING_MODE_ENV_VAR_NAME); + if (env && *env) { + if (!strcasecmp(env, "none")) + _name_mangling_mode = DM_STRING_MANGLING_NONE; + else if (!strcasecmp(env, "auto")) + _name_mangling_mode = DM_STRING_MANGLING_AUTO; + else if (!strcasecmp(env, "hex")) + _name_mangling_mode = DM_STRING_MANGLING_HEX; + } else + _name_mangling_mode = DEFAULT_DM_NAME_MANGLING; +} + /* * Library users can provide their own logging * function. diff --git a/libdm/libdm-common.h b/libdm/libdm-common.h index 77d0b1f48..ce9b434ff 100644 --- a/libdm/libdm-common.h +++ b/libdm/libdm-common.h @@ -18,6 +18,8 @@ #include "libdevmapper.h" +#define DM_DEFAULT_NAME_MANGLING_MODE_ENV_VAR_NAME "DM_DEFAULT_NAME_MANGLING_MODE" + #define DEV_NAME(dmt) (dmt->mangled_dev_name ? : dmt->dev_name) int mangle_name(const char *str, size_t len, char *buf,