From 35f9001e124f7193ff5c06541d003951e8c50fb2 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Aug 01 2017 03:32:12 +0000 Subject: import libstoragemgmt-1.4.0-3.el7 --- diff --git a/.gitignore b/.gitignore index 1cdb9a7..46c0832 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/libstoragemgmt-1.3.4.tar.gz +SOURCES/libstoragemgmt-1.4.0.tar.gz diff --git a/.libstoragemgmt.metadata b/.libstoragemgmt.metadata index 99443bf..296e8d1 100644 --- a/.libstoragemgmt.metadata +++ b/.libstoragemgmt.metadata @@ -1 +1 @@ -19efb8f05cc2607849fbfa43030dd2fc0c3fa176 SOURCES/libstoragemgmt-1.3.4.tar.gz +1a8f2d863e23efd6d88f81bb78a72d63ee925a9d SOURCES/libstoragemgmt-1.4.0.tar.gz diff --git a/SOURCES/0001-udev-Fix-gcc-warning-on-non-x86-platform.patch b/SOURCES/0001-udev-Fix-gcc-warning-on-non-x86-platform.patch new file mode 100644 index 0000000..5c4717a --- /dev/null +++ b/SOURCES/0001-udev-Fix-gcc-warning-on-non-x86-platform.patch @@ -0,0 +1,45 @@ +From 2a2d9a8200f987b42966ab4e96b7769b8f9a159f Mon Sep 17 00:00:00 2001 +From: Gris Ge +Date: Wed, 22 Feb 2017 16:18:20 +0800 +Subject: [PATCH] udev: Fix gcc warning on non-x86 platform. + +Issue: + Got failure on s390x: + + scan-scsi-target.c:90:2: error: comparison is always true due to limited + range of data type [-Werror=type-limits] + +Root cause: + The error is on these lines: + + char c; + ... + while ((c = getopt_long(argc, argv, "rh", longopts, NULL)) != -1) { + + On non-x86 platform, char is unsigned. Which makes the (c != -1) + always true. + +Fix: + Take return of getopt_long() as int. + +Signed-off-by: Gris Ge +--- + tools/udev/scan-scsi-target.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tools/udev/scan-scsi-target.c b/tools/udev/scan-scsi-target.c +index bb83c65..00126b9 100644 +--- a/tools/udev/scan-scsi-target.c ++++ b/tools/udev/scan-scsi-target.c +@@ -54,7 +54,7 @@ static void __attribute__ ((__noreturn__)) invalid(char **argv, char *devpath) + + int main(int argc, char **argv) + { +- char c; ++ int c; + char *devpath; + + char *sysfs_path; +-- +1.8.3.1 + diff --git a/SOURCES/0002-C-library-Bug-fix-for-incorrect-use-of-sizeof.patch b/SOURCES/0002-C-library-Bug-fix-for-incorrect-use-of-sizeof.patch new file mode 100644 index 0000000..a88614f --- /dev/null +++ b/SOURCES/0002-C-library-Bug-fix-for-incorrect-use-of-sizeof.patch @@ -0,0 +1,31 @@ +From c446179b11608a25989dea1209fe3341fe17b76d Mon Sep 17 00:00:00 2001 +From: Gris Ge +Date: Thu, 23 Feb 2017 21:41:46 +0800 +Subject: [PATCH] C library: Bug fix for incorrect use of sizeof. + + * Should use strlen() instead of sizeof() for calculate string length. + +Signed-off-by: Gris Ge +--- + c_binding/libses.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/c_binding/libses.c b/c_binding/libses.c +index a5ebb2d..3c1e8d9 100644 +--- a/c_binding/libses.c ++++ b/c_binding/libses.c +@@ -341,9 +341,9 @@ static int _ses_sg_paths_get(char *err_msg, char ***sg_paths, + (strncmp(sg_name, "sg", strlen("sg")) != 0)) + continue; + sysfs_sg_type_path = (char *) +- malloc(sizeof(char) * (sizeof(_SYSFS_SG_ROOT_PATH) + ++ malloc(sizeof(char) * (strlen(_SYSFS_SG_ROOT_PATH) + + strlen("/") + +- sizeof(sg_name) + ++ strlen(sg_name) + + strlen("/device/type") + + 1 /* trailing \0 */)); + _alloc_null_check(err_msg, sysfs_sg_type_path, rc, out); +-- +1.8.3.1 + diff --git a/SOURCES/0003-ONTAP-plugin-SSL-fix.patch b/SOURCES/0003-ONTAP-plugin-SSL-fix.patch new file mode 100644 index 0000000..754409a --- /dev/null +++ b/SOURCES/0003-ONTAP-plugin-SSL-fix.patch @@ -0,0 +1,228 @@ +From f6122f1bbfa6e79f3e014a4ba65ffef7e1c113c1 Mon Sep 17 00:00:00 2001 +From: Gris Ge +Date: Thu, 30 Mar 2017 21:03:26 +0800 +Subject: [PATCH] ONTAP plugin: SSL fix. + +Issue: + lsmcli -u "ontap+ssl://root@na3170b.lab.bos.redhat.com" ls + NETWORK_ERROR(142): +--- + doc/man/ontap_lsmplugin.1.in | 11 +++++++++-- + plugin/ontap/na.py | 44 +++++++++++++++++++++++++++++++++----------- + plugin/ontap/ontap.py | 21 +++++++++++---------- + 3 files changed, 53 insertions(+), 23 deletions(-) + +diff --git a/doc/man/ontap_lsmplugin.1.in b/doc/man/ontap_lsmplugin.1.in +index ef0cd12..3d6cc70 100644 +--- a/doc/man/ontap_lsmplugin.1.in ++++ b/doc/man/ontap_lsmplugin.1.in +@@ -12,9 +12,10 @@ This plugin requires NetApp ONTAP storage array to enable these options: + \fBoptions httpd.enable on\fR + \fBoptions httpd.admin.enable on\fR + +-This options is required for HTTPS connection: ++These options are required for HTTPS connection: + + \fBoptions httpd.admin.ssl.enable on\fR ++ \fBoptions tls.enable on\fR + + .SH URI + To use this plugin, users should set their URI to this format: +@@ -40,7 +41,13 @@ The \fBontap_filer_ip\fR is the NetApp ONTAP filer IP address or DNS name. + .TP + \fBURI parameters\fR + +-No additional URI parameters are supported by this plugin. ++This URI parameter is supported by this plugin: ++ ++.RS 7 ++.TP ++\fBssl_verify=yes\fR ++By default, SSL connection does not verify hostname and certification. ++If this URI parameter is defined, all SSL verifications will be performed. + + .SH Supported Hardware + NetApp ONTAP 8.x is supported. +diff --git a/plugin/ontap/na.py b/plugin/ontap/na.py +index a16e884..26c0ff6 100644 +--- a/plugin/ontap/na.py ++++ b/plugin/ontap/na.py +@@ -20,10 +20,9 @@ + from xml.etree import ElementTree + import time + from binascii import hexlify +-from ssl import SSLError ++import ssl + from lsm.external.xmltodict import convert_xml_to_dict +-from lsm import (ErrorNumber) +- ++from lsm import (LsmError, ErrorNumber) + + if six.PY3: + long = int +@@ -33,6 +32,7 @@ + urlopen, + HTTPPasswordMgrWithDefaultRealm, + HTTPBasicAuthHandler, ++ HTTPSHandler, + build_opener, + install_opener) + from urllib.error import (URLError, HTTPError) +@@ -42,6 +42,7 @@ + urlopen, + HTTPPasswordMgrWithDefaultRealm, + HTTPBasicAuthHandler, ++ HTTPSHandler, + build_opener, + install_opener, + URLError, +@@ -79,13 +80,13 @@ def param_value(val): + + + def netapp_filer(host, username, password, timeout, command, parameters=None, +- ssl=False): ++ use_ssl=False, ssl_verify=False): + """ + Issue a command to the NetApp filer. +- Note: Change to default ssl on before we ship a release version. ++ Note: Change to default use_ssl on before we ship a release version. + """ + proto = 'http' +- if ssl: ++ if use_ssl: + proto = 'https' + + url = "%s://%s/servlets/netapp.servlets.admin.XMLrequest_filer" % \ +@@ -98,7 +99,15 @@ def netapp_filer(host, username, password, timeout, command, parameters=None, + password_manager.add_password(None, url, username, password) + auth_manager = HTTPBasicAuthHandler(password_manager) + +- opener = build_opener(auth_manager) ++ if use_ssl: ++ ssl._DEFAULT_CIPHERS += ':RC4-SHA' ++ ssl_ctx = ssl.create_default_context() ++ if ssl_verify == False: ++ ssl_ctx.check_hostname = False ++ ssl_ctx.verify_mode = ssl.CERT_NONE ++ opener = build_opener(HTTPSHandler(context=ssl_ctx), auth_manager) ++ else: ++ opener = build_opener(auth_manager) + install_opener(opener) + + # build the command and the arguments for it +@@ -127,13 +136,23 @@ def netapp_filer(host, username, password, timeout, command, parameters=None, + except HTTPError: + raise + except URLError as ue: ++ err_msg = str(ue) + if isinstance(ue.reason, socket.timeout): + raise FilerError(Filer.ETIMEOUT, "Connection timeout") ++ elif "UNSUPPORTED_PROTOCOL" in err_msg or \ ++ "EOF occurred in violation of protocol" in err_msg : ++ raise LsmError(ErrorNumber.NO_SUPPORT, ++ "ONTAP SSL version is not supported, " ++ "please enable TLS on ONTAP filer, " ++ "check 'man 1 ontap_lsmplugin'") ++ elif "CERTIFICATE_VERIFY_FAILED" in err_msg: ++ raise LsmError(ErrorNumber.NETWORK_CONNREFUSED, ++ "SSL certification verification failed") + else: + raise + except socket.timeout: + raise FilerError(Filer.ETIMEOUT, "Connection timeout") +- except SSLError as sse: ++ except ssl.SSLError as sse: + # The ssl library doesn't give a good way to find specific reason. + # We are doing a string contains which is not ideal, but other than + # throwing a generic error in this case there isn't much we can do +@@ -262,7 +281,8 @@ class Filer(object): + def _invoke(self, command, parameters=None): + + rc = netapp_filer(self.host, self.username, self.password, +- self.timeout, command, parameters, self.ssl) ++ self.timeout, command, parameters, self.use_ssl, ++ self.ssl_verify) + + t = rc['netapp']['results']['attrib'] + +@@ -271,12 +291,14 @@ def _invoke(self, command, parameters=None): + + return rc['netapp']['results'] + +- def __init__(self, host, username, password, timeout, ssl=True): ++ def __init__(self, host, username, password, timeout, use_ssl=True, ++ ssl_verify=False): + self.host = host + self.username = username + self.password = password + self.timeout = timeout +- self.ssl = ssl ++ self.use_ssl = use_ssl ++ self.ssl_verify = ssl_verify + + def system_info(self): + rc = self._invoke('system-get-info') +diff --git a/plugin/ontap/ontap.py b/plugin/ontap/ontap.py +index 7fd5dc3..186a57a 100644 +--- a/plugin/ontap/ontap.py ++++ b/plugin/ontap/ontap.py +@@ -22,15 +22,10 @@ + AccessGroup, System, Capabilities, Disk, Pool, + IStorageAreaNetwork, INfs, LsmError, ErrorNumber, JobStatus, + md5, VERSION, common_urllib2_error_handler, +- search_property, TargetPort, int_div) ++ search_property, TargetPort, int_div, uri_parse) + + import lsm.plugin.ontap.na as na + +-try: +- from urllib.parse import urlparse +-except ImportError: +- from urlparse import urlparse +- + # Maps na to lsm, this is expected to expand over time. + e_map = { + na.Filer.ENOSPC: ErrorNumber.NOT_ENOUGH_SPACE, +@@ -135,13 +130,19 @@ def __init__(self): + @handle_ontap_errors + def plugin_register(self, uri, password, timeout, flags=0): + ssl = False +- u = urlparse(uri) ++ u = uri_parse(uri) + +- if u.scheme.lower() == 'ontap+ssl': ++ if u['scheme'].lower() == 'ontap+ssl': + ssl = True ++ if 'parameters' in u and 'ssl_verify' in u['parameters'] and \ ++ u['parameters']['ssl_verify'] == 'yes': ++ ssl_verify = True ++ else: ++ ssl_verify = False + +- self.f = na.Filer(u.hostname, u.username, password, +- int_div(timeout, Ontap.TMO_CONV), ssl) ++ self.f = na.Filer(u['host'], u['username'], password, ++ int_div(timeout, Ontap.TMO_CONV), ssl, ++ ssl_verify) + # Smoke test + i = self.f.system_info() + # TODO Get real filer status +-- +2.12.1 + diff --git a/SPECS/libstoragemgmt.spec b/SPECS/libstoragemgmt.spec index d67e81b..8a792dc 100644 --- a/SPECS/libstoragemgmt.spec +++ b/SPECS/libstoragemgmt.spec @@ -3,13 +3,16 @@ %endif Name: libstoragemgmt -Version: 1.3.4 -Release: 1%{?dist} +Version: 1.4.0 +Release: 3%{?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-udev-Fix-gcc-warning-on-non-x86-platform.patch +Patch1: 0002-C-library-Bug-fix-for-incorrect-use-of-sizeof.patch +Patch2: 0003-ONTAP-plugin-SSL-fix.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Requires: %{name}-python BuildRequires: autoconf automake libtool yajl-devel libxml2-devel check-devel perl @@ -23,6 +26,8 @@ BuildRequires: systemd-devel BuildRequires: python-devel BuildRequires: procps BuildRequires: chrpath +BuildRequires: python-six +BuildRequires: sqlite-devel %if 0%{?skip_mem_check} == 0 BuildRequires: valgrind %endif @@ -158,6 +163,9 @@ uevents generated by the kernel. %prep %setup -q +%patch0 -p1 -b non_x86_fix +%patch1 -p1 -b bug_fix_strlen +%patch2 -p1 -b ontap_ssl #Make sure you always have a build section, even when you don't #need it, see: https://bugzilla.redhat.com/show_bug.cgi?id=192422 @@ -370,6 +378,8 @@ fi %{python_sitelib}/lsm/plugin/smispy/smis_disk.* %{python_sitelib}/lsm/plugin/smispy/smis_vol.* %{python_sitelib}/lsm/plugin/smispy/smis_ag.* +%{python_sitelib}/lsm/plugin/smispy/WBEM.* +%{python_sitelib}/lsm/plugin/smispy/lmiwbem_wrap.* %{_bindir}/smispy_lsmplugin %{_mandir}/man1/smispy_lsmplugin.1* @@ -424,6 +434,31 @@ fi %{_mandir}/man1/hpsa_lsmplugin.1* %changelog +* Thu Mar 30 2017 Gris Ge 1.4.0-3 +- Fix ONTAP SSL connection. # RHBZ 1437130 + +* Thu Feb 23 2017 Gris Ge 1.4.0-2 +- Include a patch for incorrect use of sizeof in C library. + +* Tue Feb 21 2017 Gris Ge 1.4.0-1 +- Add Python3 support. +- New sub rpm package python3-libstoragemgmt. +- Add support of lmiwbem. +- Allow plugin test to be run concurrently. +- Bug fixes: + * Fix megaraid plugin for dell PERC. + * Fix local disk rotation speed query on NVMe disk. + * Fix lsmcli incorrect try-expect on local disk query. + * Fix all the gcc compile warnings. + * Fix the obsolete usage of AC_OUTPUT in configure.ac. +- Library adds: + * Query serial of local disk: + lsm_local_disk_serial_num_get()/lsm.LocalDisk.serial_num_get() + * Query LED status of local disk: + lsm_local_disk_led_status_get()/lsm.LocalDisk.led_status_get() + * Query link speed of local disk: + lsm_local_disk_link_speed_get()/lsm.LocalDisk.link_speed_get() + * Wed Aug 03 2016 Gris Ge 1.3.4-1 - Upgrade to 1.3.4