From 1279709f92125ae23ea77c71adeebcbf5ae697f4 Mon Sep 17 00:00:00 2001 From: Gris Ge Date: Fri, 18 May 2018 16:38:03 +0800 Subject: [PATCH] Upgrade to 1.6.2 Signed-off-by: Gris Ge --- .gitignore | 1 + 0001-Fix-GCC-8-compile-warnings.patch | 271 ------------------ ...rash-when-plugin-named-as-_lsmplugin.patch | 207 ------------- libstoragemgmt.spec | 80 +++--- sources | 2 +- 5 files changed, 44 insertions(+), 517 deletions(-) delete mode 100644 0001-Fix-GCC-8-compile-warnings.patch delete mode 100644 0002-lsmd-Fix-crash-when-plugin-named-as-_lsmplugin.patch diff --git a/.gitignore b/.gitignore index 044f37d..9ddeef9 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ /libstoragemgmt-1.5.0.tar.gz /libstoragemgmt-1.6.0.tar.gz /libstoragemgmt-1.6.1.tar.gz +/libstoragemgmt-1.6.2.tar.gz diff --git a/0001-Fix-GCC-8-compile-warnings.patch b/0001-Fix-GCC-8-compile-warnings.patch deleted file mode 100644 index 4f6d700..0000000 --- a/0001-Fix-GCC-8-compile-warnings.patch +++ /dev/null @@ -1,271 +0,0 @@ -From edbd5fed3cb5f4f48dcc7ee97f601d2ea3537911 Mon Sep 17 00:00:00 2001 -From: Gris Ge -Date: Fri, 23 Mar 2018 20:38:55 +0800 -Subject: [PATCH 1/3] Fix GCC 8 compile warnings. - - * Fix '-Werror=format-truncation' warning by increase the buffer size. - * Fix '-Werror=cast-function-type' warning by disable it for Python c - extension, reason: - https://stackoverflow.com/questions/10264080/python-c-extension-why-are-methods-that-use-keyword-arguments-cast-to-pycfunct - -Signed-off-by: Gris Ge ---- - c_binding/libsg.c | 45 ++++++++++++++++++++++++--------------------- - c_binding/utils.h | 2 +- - plugin/simc/db.c | 2 +- - plugin/simc/nfs_ops.c | 2 +- - plugin/simc/san_ops.c | 2 +- - plugin/simc/utils.h | 6 +++--- - python_binding/Makefile.am | 3 ++- - 7 files changed, 33 insertions(+), 29 deletions(-) - -diff --git a/c_binding/libsg.c b/c_binding/libsg.c -index 75ee39d3..46893695 100644 ---- a/c_binding/libsg.c -+++ b/c_binding/libsg.c -@@ -367,8 +367,9 @@ static int _sg_io_open(char *err_msg, const char *disk_path, int *fd, - * The 'sense_key' is the output pointer. - * Return 0 if sense_key is _T10_SPC_SENSE_KEY_NO_SENSE or - * _T10_SPC_SENSE_KEY_RECOVERED_ERROR, return -1 otherwise. -+ * sense_err_msg should be char[_LSM_ERR_MSG_LEN / 2] - */ --static int _check_sense_data(char *err_msg, uint8_t *sense_data, -+static int _check_sense_data(char *sense_err_msg, uint8_t *sense_data, - uint8_t *sense_key); - - static int _extract_ata_sense_data(char *err_msg, uint8_t *sense_data, -@@ -485,14 +486,14 @@ int _sg_io_vpd(char *err_msg, int fd, uint8_t page_code, uint8_t *data) - int rc_vpd_00 = 0; - char strerr_buff[_LSM_ERR_MSG_LEN]; - uint8_t sense_key = _T10_SPC_SENSE_KEY_NO_SENSE; -- char sense_err_msg[_LSM_ERR_MSG_LEN]; -+ char sense_err_msg[_LSM_ERR_MSG_LEN / 2]; - ssize_t data_len = 0; - - assert(err_msg != NULL); - assert(fd >= 0); - assert(data != NULL); - -- memset(sense_err_msg, 0, _LSM_ERR_MSG_LEN); -+ memset(sense_err_msg, 0, sizeof(sense_err_msg)); - - switch(page_code) { - case _SG_T10_SPC_VPD_ATA_INFO: -@@ -812,7 +813,7 @@ static int _sg_io_open(char *err_msg, const char *disk_path, int *fd, int oflag) - return rc; - } - --static int _check_sense_data(char *err_msg, uint8_t *sense_data, -+static int _check_sense_data(char *sense_err_msg, uint8_t *sense_data, - uint8_t *sense_key) - { - int rc = -1; -@@ -856,8 +857,9 @@ static int _check_sense_data(char *err_msg, uint8_t *sense_data, - rc = 0; - goto out; - default: -- _lsm_err_msg_set(err_msg, "Got unknown sense data response code %02x", -- sense_hdr->response_code); -+ snprintf(sense_err_msg, _LSM_ERR_MSG_LEN / 2, -+ "Got unknown sense data response code %02x", -+ sense_hdr->response_code); - goto out; - } - /* TODO(Gris Ge): Handle ADDITIONAL SENSE CODE field and ADDITIONAL SENSE -@@ -879,11 +881,12 @@ static int _check_sense_data(char *err_msg, uint8_t *sense_data, - /* As sense_key is 4 bytes and we covered all 16 values in - * _T10_SPC_SENSE_KEY_STR, there will be no out of index error. - */ -- _lsm_err_msg_set(err_msg, "Got SCSI sense data, key %s(0x%02x), " -- "ADDITIONAL SENSE CODE 0x%02x, ADDITIONAL SENSE CODE " -- "QUALIFIER 0x%02x, all sense data in hex: %s", -- _T10_SPC_SENSE_KEY_STR[*sense_key], *sense_key, -- asc, ascq, sense_data_str); -+ snprintf(sense_err_msg, _LSM_ERR_MSG_LEN / 2 , -+ "Got SCSI sense data, key %s(0x%02x), " -+ "ADDITIONAL SENSE CODE 0x%02x, ADDITIONAL SENSE CODE " -+ "QUALIFIER 0x%02x, all sense data in hex: %s", -+ _T10_SPC_SENSE_KEY_STR[*sense_key], *sense_key, -+ asc, ascq, sense_data_str); - } - - out: -@@ -921,13 +924,13 @@ int _sg_io_recv_diag(char *err_msg, int fd, uint8_t page_code, uint8_t *data) - char strerr_buff[_LSM_ERR_MSG_LEN]; - uint8_t sense_data[_T10_SPC_SENSE_DATA_MAX_LENGTH]; - uint8_t sense_key = _T10_SPC_SENSE_KEY_NO_SENSE; -- char sense_err_msg[_LSM_ERR_MSG_LEN]; -+ char sense_err_msg[_LSM_ERR_MSG_LEN / 2]; - - assert(err_msg != NULL); - assert(fd >= 0); - assert(data != NULL); - -- memset(sense_err_msg, 0, _LSM_ERR_MSG_LEN); -+ memset(sense_err_msg, 0, sizeof(sense_err_msg)); - - /* SPC-5 rev 07, Table 219 - RECEIVE DIAGNOSTIC RESULTS command */ - cdb[0] = RECEIVE_DIAGNOSTIC; /* OPERATION CODE */ -@@ -975,14 +978,14 @@ int _sg_io_send_diag(char *err_msg, int fd, uint8_t *data, uint16_t data_len) - char strerr_buff[_LSM_ERR_MSG_LEN]; - uint8_t sense_data[_T10_SPC_SENSE_DATA_MAX_LENGTH]; - uint8_t sense_key = _T10_SPC_SENSE_KEY_NO_SENSE; -- char sense_err_msg[_LSM_ERR_MSG_LEN]; -+ char sense_err_msg[_LSM_ERR_MSG_LEN / 2]; - - assert(err_msg != NULL); - assert(fd >= 0); - assert(data != NULL); - assert(data_len > 0); - -- memset(sense_err_msg, 0, _LSM_ERR_MSG_LEN); -+ memset(sense_err_msg, 0, sizeof(sense_err_msg)); - - /* SPC-5 rev 07, Table 219 - RECEIVE DIAGNOSTIC RESULTS command */ - cdb[0] = SEND_DIAGNOSTIC; /* OPERATION CODE */ -@@ -1078,7 +1081,7 @@ int _sg_io_mode_sense(char *err_msg, int fd, uint8_t page_code, - int ioctl_errno = 0; - char strerr_buff[_LSM_ERR_MSG_LEN]; - uint8_t sense_key = _T10_SPC_SENSE_KEY_NO_SENSE; -- char sense_err_msg[_LSM_ERR_MSG_LEN]; -+ char sense_err_msg[_LSM_ERR_MSG_LEN / 2]; - struct _sg_t10_mode_para_hdr *mode_hdr = NULL; - uint16_t block_dp_len = 0; - uint16_t mode_data_len = 0; -@@ -1087,7 +1090,7 @@ int _sg_io_mode_sense(char *err_msg, int fd, uint8_t page_code, - assert(fd >= 0); - assert(data != NULL); - -- memset(sense_err_msg, 0, _LSM_ERR_MSG_LEN); -+ memset(sense_err_msg, 0, sizeof(sense_err_msg)); - memset(data, 0, _SG_T10_SPC_MODE_SENSE_MAX_LEN); - - /* SPC-5 Table 171 - MODE SENSE(10) command */ -@@ -1257,7 +1260,7 @@ static int _sg_log_sense(char *err_msg, int fd, uint8_t page_code, - int ioctl_errno = 0; - char strerr_buff[_LSM_ERR_MSG_LEN]; - uint8_t sense_key = _T10_SPC_SENSE_KEY_NO_SENSE; -- char sense_err_msg[_LSM_ERR_MSG_LEN]; -+ char sense_err_msg[_LSM_ERR_MSG_LEN / 2]; - struct _sg_t10_log_para_hdr *log_hdr = NULL; - uint16_t log_data_len = 0; - -@@ -1265,7 +1268,7 @@ static int _sg_log_sense(char *err_msg, int fd, uint8_t page_code, - assert(fd >= 0); - assert(data != NULL); - -- memset(sense_err_msg, 0, _LSM_ERR_MSG_LEN); -+ memset(sense_err_msg, 0, sizeof(sense_err_msg)); - memset(cdb, 0, _T10_SPC_LOG_SENSE_CMD_LEN); - - cdb[0] = LOG_SENSE; -@@ -1320,14 +1323,14 @@ int _sg_request_sense(char *err_msg, int fd, uint8_t *returned_sense_data) - uint8_t sense_data[_T10_SPC_SENSE_DATA_MAX_LENGTH]; - int ioctl_errno = 0; - uint8_t sense_key = _T10_SPC_SENSE_KEY_NO_SENSE; -- char sense_err_msg[_LSM_ERR_MSG_LEN]; -+ char sense_err_msg[_LSM_ERR_MSG_LEN / 2]; - char strerr_buff[_LSM_ERR_MSG_LEN]; - - assert(err_msg != NULL); - assert(fd >= 0); - assert(returned_sense_data != NULL); - -- memset(sense_err_msg, 0, _LSM_ERR_MSG_LEN); -+ memset(sense_err_msg, 0, sizeof(sense_err_msg)); - memset(cdb, 0, _T10_SPC_REQUEST_SENSE_CMD_LEN); - - cdb[0] = REQUEST_SENSE; -diff --git a/c_binding/utils.h b/c_binding/utils.h -index 15d0c970..f63b6e3d 100644 ---- a/c_binding/utils.h -+++ b/c_binding/utils.h -@@ -23,7 +23,7 @@ - #include - #include - --#define _LSM_ERR_MSG_LEN 1024 -+#define _LSM_ERR_MSG_LEN 4096 - - #define _good(rc, rc_val, out) \ - do { \ -diff --git a/plugin/simc/db.c b/plugin/simc/db.c -index 7b3613e6..aad9f308 100644 ---- a/plugin/simc/db.c -+++ b/plugin/simc/db.c -@@ -768,7 +768,7 @@ void _db_sql_trans_rollback(sqlite3 *db) - int _db_data_add(char *err_msg, sqlite3 *db, const char *table_name, ...) - { - int rc = LSM_ERR_OK; -- char sql_cmd[_BUFF_SIZE]; -+ char sql_cmd[_BUFF_SIZE * 4]; - char keys_str[_BUFF_SIZE]; - char values_str[_BUFF_SIZE]; - const char *key_str = NULL; -diff --git a/plugin/simc/nfs_ops.c b/plugin/simc/nfs_ops.c -index 4d7235dc..b8bcde59 100644 ---- a/plugin/simc/nfs_ops.c -+++ b/plugin/simc/nfs_ops.c -@@ -159,7 +159,7 @@ int nfs_export_fs(lsm_plugin_ptr c, const char *fs_id, const char *export_path, - uint64_t sim_fs_id = 0; - uint64_t sim_exp_id = 0; - char tmp_export_path[_BUFF_SIZE]; -- char vpd83[_BUFF_SIZE]; -+ char vpd83[_VPD_83_LEN]; - - _UNUSED(flags); - _lsm_err_msg_clear(err_msg); -diff --git a/plugin/simc/san_ops.c b/plugin/simc/san_ops.c -index 57161adf..2c9fbde6 100644 ---- a/plugin/simc/san_ops.c -+++ b/plugin/simc/san_ops.c -@@ -1111,7 +1111,7 @@ int volume_unmask(lsm_plugin_ptr c, lsm_access_group *group, lsm_volume *volume, - char err_msg[_LSM_ERR_MSG_LEN]; - char condition[_BUFF_SIZE]; - struct _vector *vec = NULL; -- char sql_cmd_check_mask[_BUFF_SIZE]; -+ char sql_cmd_check_mask[_BUFF_SIZE * 4]; - - _UNUSED(flags); - _lsm_err_msg_clear(err_msg); -diff --git a/plugin/simc/utils.h b/plugin/simc/utils.h -index 6914e594..90bb54a2 100644 ---- a/plugin/simc/utils.h -+++ b/plugin/simc/utils.h -@@ -36,7 +36,7 @@ struct _simc_private_data { - - #define _UNUSED(x) (void)(x) - #define _MD5_HASH_STR_LEN MD5_DIGEST_LENGTH * 2 + 1 --#define _LSM_ERR_MSG_LEN 1024 -+#define _LSM_ERR_MSG_LEN 4096 - - #define _VPD_83_LEN 17 - /* ^ 6h IEEE Registered ID which it 16 bits hex string. */ -@@ -63,8 +63,8 @@ struct _simc_private_data { - #define _snprintf_buff(err_msg, rc, out, buff, format, ...) \ - do { \ - if (buff != NULL) \ -- snprintf(buff, _BUFF_SIZE, format, ##__VA_ARGS__); \ -- if (strlen(buff) == _BUFF_SIZE - 1 ) { \ -+ snprintf(buff, sizeof(buff)/sizeof(char), format, ##__VA_ARGS__); \ -+ if (strlen(buff) == sizeof(buff)/sizeof(char) - 1 ) { \ - rc = LSM_ERR_PLUGIN_BUG; \ - _lsm_err_msg_set(err_msg, "Buff too small"); \ - goto out; \ -diff --git a/python_binding/Makefile.am b/python_binding/Makefile.am -index 56a4710f..cacb6a0b 100644 ---- a/python_binding/Makefile.am -+++ b/python_binding/Makefile.am -@@ -21,7 +21,8 @@ endif - - pyexec_LTLIBRARIES = lsm/_clib.la - pyexecdir = $(pythondir)/lsm --lsm__clib_la_CFLAGS = $(PYTHON_CFLAGS) -I$(top_srcdir)/c_binding/include -+lsm__clib_la_CFLAGS = $(PYTHON_CFLAGS) -I$(top_srcdir)/c_binding/include \ -+ -Wno-cast-function-type - lsm__clib_la_SOURCES = lsm/_clib.c - lsm__clib_la_LDFLAGS = $(PYTHON_LIBS) \ - -module -avoid-version -export-symbols-regex \ --- -2.16.2 - diff --git a/0002-lsmd-Fix-crash-when-plugin-named-as-_lsmplugin.patch b/0002-lsmd-Fix-crash-when-plugin-named-as-_lsmplugin.patch deleted file mode 100644 index 5391007..0000000 --- a/0002-lsmd-Fix-crash-when-plugin-named-as-_lsmplugin.patch +++ /dev/null @@ -1,207 +0,0 @@ -From 8bbfe53b464c652a0bdeb8b9790e787276d1a2d6 Mon Sep 17 00:00:00 2001 -From: Gris Ge -Date: Thu, 22 Mar 2018 22:56:37 +0800 -Subject: [PATCH 2/3] lsmd: Fix crash when plugin named as _lsmplugin. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Issue: - When plugin search folder has a file named as `_lsmplugin`, the lsmd - will crash with error: - Error on binding socket /tmp/lsm/ipc//: Address already in use - -Root cause: - setup_socket() does not check the file name length. - -Fix: - * Remove all the string checking from `setup_socket()` and - `chk_pconf_root_pri()`. - * Perform the checks at `process_plugin()`. - -Misc: - This also fix the gcc 8 compile warning: - ‘strncpy’ specified bound depends on the length of the source argument. - -Signed-off-by: Gris Ge ---- - daemon/lsm_daemon.c | 124 ++++++++++++++++++++++++++-------------------------- - 1 file changed, 61 insertions(+), 63 deletions(-) - -diff --git a/daemon/lsm_daemon.c b/daemon/lsm_daemon.c -index cbd40b49..dc4df3b7 100644 ---- a/daemon/lsm_daemon.c -+++ b/daemon/lsm_daemon.c -@@ -54,11 +54,6 @@ - #define LSM_CONF_ALLOW_ROOT_OPT_NAME "allow-plugin-root-privilege" - #define LSM_CONF_REQUIRE_ROOT_OPT_NAME "require-root-privilege" - --#define min(a,b) \ -- ({ __typeof__ (a) _a = (a); \ -- __typeof__ (b) _b = (b); \ -- _a < _b ? _a : _b; }) -- - #define max(a,b) \ - ({ __typeof__ (a) _a = (a); \ - __typeof__ (b) _b = (b); \ -@@ -343,23 +338,13 @@ void clean_sockets(void) - - - /** -- * Given a fully qualified path and name to a plug-in, create the IPC socket. -- * @param full_name Full name and path for plug-in -+ * Given a socket file name, create the IPC socket. -+ * @param name socket file name for plug-in - * @return listening socket descriptor for IPC - */ --int setup_socket(char *full_name) -+int setup_socket(char *name) - { - int err = 0; -- char name[128]; -- -- /* Strip off _lsmplugin from the file name, not sure -- * why I chose to do this */ -- memset(name, 0, sizeof(name)); -- -- char *base_nm = basename(full_name); -- strncpy(name, base_nm, -- min((size_t) abs(strlen(base_nm) - strlen(plugin_extension)), -- (sizeof(name) - 1))); - - char *socket_file = path_form(socket_dir, name); - delete_socket(NULL, socket_file); -@@ -467,26 +452,21 @@ void parse_conf_bool(const char *conf_path, const char *key_name, int *value) - /** - * Load plugin config for root privilege setting. - * If config not found, return 0 for no root privilege required. -- * @param plugin_path Full path of plugin -+ * @param plugin_name plugin name. - * @return 1 for require root privilege, 0 or not. - */ - --int chk_pconf_root_pri(char *plugin_path) -+int chk_pconf_root_pri(char *plugin_name) - { - int require_root = 0; -- char *base_name = basename(plugin_path); -- ssize_t plugin_name_len = strlen(base_name) - strlen(plugin_extension); -- if (plugin_name_len <= 0) { -- log_and_exit("Got invalid plugin full path %s\n", plugin_path); -- } -- ssize_t conf_file_name_len = plugin_name_len + -- strlen(plugin_conf_extension) + 1; -+ size_t plugin_name_len = strlen(plugin_name); -+ size_t conf_ext_len = strlen(plugin_conf_extension); -+ ssize_t conf_file_name_len = plugin_name_len + conf_ext_len + 1; - char *plugin_conf_filename = (char *) malloc(conf_file_name_len); -+ - if (plugin_conf_filename) { -- strncpy(plugin_conf_filename, base_name, plugin_name_len); -- strncpy(plugin_conf_filename + plugin_name_len, -- plugin_conf_extension, strlen(plugin_conf_extension)); -- plugin_conf_filename[conf_file_name_len - 1] = '\0'; -+ snprintf(plugin_conf_filename, conf_file_name_len, "%s%s", plugin_name, -+ plugin_conf_extension); - - char *plugin_conf_dir_path = path_form(conf_dir, - LSM_PLUGIN_CONF_DIR_NAME); -@@ -498,7 +478,7 @@ int chk_pconf_root_pri(char *plugin_path) - - if (require_root == 1 && allow_root_plugin == 0) { - warn("Plugin %s require root privilege while %s disable globally\n", -- base_name, LSMD_CONF_FILE); -+ plugin_name, LSMD_CONF_FILE); - } - free(plugin_conf_dir_path); - free(plugin_conf_filename); -@@ -518,37 +498,55 @@ int chk_pconf_root_pri(char *plugin_path) - */ - int process_plugin(void *p, char *full_name) - { -- if (full_name) { -- size_t ext_len = strlen(plugin_extension); -- size_t full_len = strlen(full_name); -- -- if (full_len > ext_len) { -- if (strncmp -- (full_name + full_len - ext_len, plugin_extension, -- ext_len) == 0) { -- struct plugin *item = calloc(1, sizeof(struct plugin)); -- if (item) { -- item->file_path = strdup(full_name); -- item->fd = setup_socket(full_name); -- item->require_root = chk_pconf_root_pri(full_name); -- has_root_plugin |= item->require_root; -- -- if (item->file_path && item->fd >= 0) { -- LIST_INSERT_HEAD((struct plugin_list *) p, item, -- pointers); -- info("Plugin %s added\n", full_name); -- } else { -- /* The only real way to get here is failed strdup as -- setup_socket will exit on error. */ -- free(item); -- item = NULL; -- log_and_exit("strdup failed %s\n", full_name); -- } -- } else { -- log_and_exit("Memory allocation failure!\n"); -- } -- } -- } -+ char * base_nm = NULL; -+ size_t base_nm_len = 0; -+ size_t no_ext_len = 0; -+ char plugin_name[128]; -+ size_t ext_len = strlen(plugin_extension); -+ size_t plugin_name_max_len = sizeof(plugin_name)/sizeof(char); -+ -+ if (full_name == NULL) -+ return 0; -+ -+ base_nm = basename(full_name); -+ base_nm_len = strlen(base_nm); -+ -+ if (base_nm_len <= ext_len) -+ return 0; -+ -+ if (strncmp(base_nm + base_nm_len - ext_len, plugin_extension, ext_len)) -+ return 0; -+ -+ struct plugin *item = calloc(1, sizeof(struct plugin)); -+ if (item == NULL) { -+ log_and_exit("Memory allocation failure!\n"); -+ return 0; // no use, just trick covscan; -+ } -+ -+ /* Strip off _lsmplugin from the file name, not sure -+ * why I chose to do this */ -+ memset(plugin_name, 0, plugin_name_max_len); -+ strncpy(plugin_name, base_nm, plugin_name_max_len - 1); -+ no_ext_len = base_nm_len - ext_len; -+ // Already check, no_ext_len is bigger than 0 here. -+ if (no_ext_len < plugin_name_max_len - 1) -+ plugin_name[no_ext_len] = '\0'; -+ -+ item->file_path = strdup(full_name); -+ item->fd = setup_socket(plugin_name); -+ item->require_root = chk_pconf_root_pri(plugin_name); -+ has_root_plugin |= item->require_root; -+ -+ if (item->file_path && item->fd >= 0) { -+ LIST_INSERT_HEAD((struct plugin_list *) p, item, -+ pointers); -+ info("Plugin %s added\n", full_name); -+ } else { -+ /* The only real way to get here is failed strdup as -+ setup_socket will exit on error. */ -+ free(item); -+ item = NULL; -+ log_and_exit("strdup failed %s\n", full_name); - } - return 0; - } --- -2.16.2 - diff --git a/libstoragemgmt.spec b/libstoragemgmt.spec index c70efd1..f86a03e 100644 --- a/libstoragemgmt.spec +++ b/libstoragemgmt.spec @@ -1,16 +1,20 @@ %bcond_with test -%global py3_build_dir %{_builddir}/%{name}-%{version}-%{release}-python3 +%global py2_build_dir %{_builddir}/%{name}-%{version}-%{release}-python2 + +%if 0%{?rhel} > 7 || 0%{?fedora} > 28 +%bcond_with python2 +%else +%bcond_without python2 +%endif Name: libstoragemgmt -Version: 1.6.1 -Release: 7%{?dist} +Version: 1.6.2 +Release: 1%{?dist} Summary: Storage array management library Group: System Environment/Libraries License: LGPLv2+ URL: https://github.com/libstorage/libstoragemgmt Source0: https://github.com/libstorage/libstoragemgmt/releases/download/%{version}/%{name}-%{version}.tar.gz -Patch0: 0001-Fix-GCC-8-compile-warnings.patch -Patch1: 0002-lsmd-Fix-crash-when-plugin-named-as-_lsmplugin.patch Requires: python3-%{name} BuildRequires: autoconf automake libtool yajl-devel libxml2-devel check-devel perl-interpreter BuildRequires: openssl-devel @@ -19,8 +23,10 @@ BuildRequires: systemd BuildRequires: bash-completion BuildRequires: libconfig-devel BuildRequires: systemd-devel +%if %{with python2} BuildRequires: python2-six BuildRequires: python2-devel +%endif BuildRequires: procps BuildRequires: sqlite-devel BuildRequires: python3-six @@ -33,7 +39,6 @@ Requires(postun): systemd BuildRequires: chrpath BuildRequires: valgrind -BuildRequires: python2-pyudev %description The libStorageMgmt library will provide a vendor agnostic open source storage @@ -51,6 +56,8 @@ Requires: %{name}%{?_isa} = %{version}-%{release} The %{name}-devel package contains libraries and header files for developing applications that use %{name}. + +%if %{with python2} %package -n python2-%{name} Summary: Python2 client libraries and plug-in support for %{name} Group: System Environment/Libraries @@ -79,6 +86,7 @@ Obsoletes: %{name}-python-clibs < %{version}-%{release} %description -n python2-%{name}-clibs This package contains python2 client C extension libraries. +%endif %package -n python3-%{name} Summary: Python 3 client libraries and plug-in support for %{name} @@ -104,7 +112,6 @@ This package contains python 3 client C extension libraries. %package smis-plugin Summary: Files for SMI-S generic array support for %{name} Group: System Environment/Libraries -BuildRequires: pywbem BuildRequires: python3-pywbem Requires: python3-pywbem BuildArch: noarch @@ -183,8 +190,6 @@ MegaRAID storage management via storcli. Summary: Files for HP SmartArray support for %{name} Group: System Environment/Libraries Requires: python3-%{name} = %{version} -Requires: python3-pyudev -BuildRequires: python3-pyudev Requires(post): python3-%{name} = %{version} Requires(postun): python3-%{name} = %{version} BuildArch: noarch @@ -245,48 +250,37 @@ without caring which real plugin(s) should be used. %build ./autogen.sh -# Copy the whole directory to Python3 build -rm -fr %{py3_build_dir} -cp -a . %{py3_build_dir} -%configure --disable-static +%if %{with python2} +# Copy the whole directory to Python2 build +rm -fr %{py2_build_dir} +cp -a . %{py2_build_dir} +%endif -pushd %{py3_build_dir} %configure --with-python3 --disable-static -popd +V=1 make %{?_smp_mflags} -V=1 make %{?_smp_mflags} -pushd %{py3_build_dir} +%if %{with python2} +pushd %{py2_build_dir} +%configure --disable-static V=1 make %{?_smp_mflags} popd +%endif %install rm -rf %{buildroot} + +%if %{with python2} +pushd %{py2_build_dir} make install DESTDIR=%{buildroot} - -# If python3 enabled, all plugins and CLI tools will be use python3 as -# 'Fedora Packaging Guidelines for Python' suggested. -# https://fedoraproject.org/wiki/Packaging:Python#Executables_in_.2Fusr.2Fbin -# Quote: -# If the executables provide the same functionality independent of whether -# they are run on top of Python 2 or Python 3, then only the Python 3 version -# of the executable should be packaged. - rm -rf %{buildroot}/%{python_sitelib}/lsm/plugin rm -rf %{buildroot}/%{_bindir}/lsmcli -pushd %{py3_build_dir} -make install DESTDIR=%{buildroot} popd +%endif + +make install DESTDIR=%{buildroot} + find %{buildroot} -name '*.la' -exec rm -f {} ';' -install -d -m755 %{buildroot}/%{_unitdir} -install -m644 packaging/daemon/%{name}.service \ - %{buildroot}/%{_unitdir}/%{name}.service - -#tempfiles.d configuration for /run -mkdir -p %{buildroot}/%{_tmpfilesdir} -install -m 0644 packaging/daemon/lsm-tmpfiles.conf \ - %{buildroot}/%{_tmpfilesdir}/%{name}.conf - #Files for udev handling mkdir -p %{buildroot}/%{_udevrulesdir} install -m 644 tools/udev/90-scsi-ua.rules \ @@ -302,7 +296,8 @@ then exit 1 fi -pushd %{py3_build_dir} +%if %{with python2} +pushd %{py2_build_dir} if ! make check then cat test-suite.log || true @@ -310,6 +305,7 @@ then fi popd %endif +%endif %pre getent group libstoragemgmt >/dev/null || groupadd -r libstoragemgmt @@ -473,6 +469,7 @@ fi %{_mandir}/man3/lsm_* %{_mandir}/man3/libstoragemgmt* +%if %{with python2} %files -n python2-%{name} %defattr(-,root,root,-) #Python library files @@ -496,6 +493,7 @@ fi # Compiled C files for python library %files -n python2-%{name}-clibs %{python_sitelib}/lsm/_clib.* +%endif %files -n python3-%{name} %dir %{python3_sitelib}/lsm @@ -525,6 +523,9 @@ fi %{python3_sitelib}/lsm/lsmcli/data_display.* %{python3_sitelib}/lsm/lsmcli/cmdline.* %{_bindir}/sim_lsmplugin +%dir %{_bindir}/lsm.d +%{_bindir}/lsm.d/find_unused_lun.py +%{_bindir}/lsm.d/local_sanity_check.py %{_sysconfdir}/lsm/pluginconf.d/sim.conf %{_mandir}/man1/sim_lsmplugin.1* @@ -648,6 +649,9 @@ fi %{_mandir}/man1/local_lsmplugin.1* %changelog +* Fri May 18 2018 Gris Ge - 1.6.2-1 +- Upgrade to 1.6.2. + * Fri Mar 23 2018 Gris Ge - 1.6.1-7 - Fix incorect memset size. diff --git a/sources b/sources index 3537498..620de18 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (libstoragemgmt-1.6.1.tar.gz) = 9296e01b9f46feab004e3243af800d5123589ec4262d5be1cb220375977fe60a0e943d6ad8f2575796c7718d99bbf2d2a320ac4bfad666b27fecdc224ef00939 +SHA512 (libstoragemgmt-1.6.2.tar.gz) = 5ac20bf7c6e9ceb14634b8bebce0c3bb0655d6e7536859103938a269369a451e3e3234f0f4c91460ae273b3171d549842d9219edc8ec8dd83ef91d124cc95b73