diff --git a/.gitignore b/.gitignore index 577b9de..416be03 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ clog /smbclient-1.0.5.tgz /smbclient-1.0.6.tgz /smbclient-1.1.0.tgz +/smbclient-1.1.1.tgz diff --git a/php-smbclient.spec b/php-smbclient.spec index 0bd71f2..1eda554 100644 --- a/php-smbclient.spec +++ b/php-smbclient.spec @@ -20,7 +20,7 @@ %bcond_with tests Name: php-smbclient -Version: 1.1.0 +Version: 1.1.1 Release: 1%{?dist} Summary: PHP wrapper for libsmbclient @@ -31,8 +31,6 @@ Source0: https://pecl.php.net/get/%{pecl_name}-%{version}%{?prever}.tgz Source2: %{pecl_name}-phpunit.xml %endif -Patch0: %{pecl_name}-bug98.patch - BuildRequires: make BuildRequires: gcc BuildRequires: php-devel @@ -73,8 +71,6 @@ sed -e 's/role="test"/role="src"/' \ -i package.xml cd NTS -%patch -P0 -p1 -b .pr100 - # Check extension version ver=$(sed -n '/define PHP_SMBCLIENT_VERSION/{s/.* "//;s/".*$//;p}' php_smbclient.h) if test "$ver" != "%{version}%{?prever}"; then @@ -167,6 +163,10 @@ cp %{SOURCE2} phpunit.xml %changelog +* Wed Apr 19 2023 Remi Collet - 1.1.1-1 +- update to 1.1.1 +- drop patch merged upstream + * Tue Apr 4 2023 Remi Collet - 1.1.0-1 - update to 1.1.0 - drop patch merged upstream diff --git a/smbclient-bug98.patch b/smbclient-bug98.patch deleted file mode 100644 index 6457608..0000000 --- a/smbclient-bug98.patch +++ /dev/null @@ -1,185 +0,0 @@ -From 1f32b0da5fd8ea567bb408babea4cc090f5587ed Mon Sep 17 00:00:00 2001 -From: Remi Collet -Date: Mon, 3 Apr 2023 11:38:01 +0200 -Subject: [PATCH 1/3] workaround for regression in libsmbclient 4.16.9/4.17.5 - ---- - smbclient.c | 58 ++++++++++++++++++++++++++++++++++------------------- - 1 file changed, 37 insertions(+), 21 deletions(-) - -diff --git a/smbclient.c b/smbclient.c -index 52b2bf1..64bb7d5 100644 ---- a/smbclient.c -+++ b/smbclient.c -@@ -1502,6 +1502,11 @@ PHP_FUNCTION(smbclient_listxattr) - RETURN_FALSE; - } - -+ -+/* loop from 4K to 16M */ -+#define DEFAULT_BUFFER_SIZE (4 << 10) -+#define MAXIMUM_BUFFER_SIZE (32 << 20) -+ - PHP_FUNCTION(smbclient_getxattr) - { - char *url, *name; -@@ -1511,11 +1516,7 @@ PHP_FUNCTION(smbclient_getxattr) - zval *zstate; - smbc_getxattr_fn smbc_getxattr; - php_smbclient_state *state; --#if PHP_MAJOR_VERSION >= 7 -- zend_string *svalues = NULL; --#else - char *values = NULL; --#endif - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &zstate, &url, &url_len, &name, &name_len) == FAILURE) { - return; -@@ -1533,30 +1534,40 @@ PHP_FUNCTION(smbclient_getxattr) - } - - if (xattr_size == 0) { -- RETURN_EMPTY_STRING(); -+ /* since version 4.16.9 and 4.17.5 this means success :( -+ * so there is no way to compute the buffer size -+ * see https://bugzilla.samba.org/show_bug.cgi?id=14808 -+ */ -+ xattr_size = DEFAULT_BUFFER_SIZE; -+ do { -+ if (values) { -+ efree(values); -+ xattr_size *= 2; -+ } -+ values = emalloc(xattr_size + 1); -+ retsize = smbc_getxattr(state->ctx, url, name, values, xattr_size + 1); -+ } while (retsize < 0 && xattr_size < MAXIMUM_BUFFER_SIZE); -+ } else { -+ values = emalloc(xattr_size + 1); -+ retsize = smbc_getxattr(state->ctx, url, name, values, xattr_size + 1); - } - --#if PHP_MAJOR_VERSION >= 7 -- svalues = zend_string_alloc(xattr_size, 0); -- retsize = smbc_getxattr(state->ctx, url, name, ZSTR_VAL(svalues), xattr_size + 1); -- if (retsize > xattr_size) { /* time-of-check, time-of-use error */ -- retsize = xattr_size; -- } else if (retsize < 0) { -- zend_string_release(svalues); -- goto fail; -- } -- RETURN_STR(svalues); --#else -- values = emalloc(xattr_size + 1); -- retsize = smbc_getxattr(state->ctx, url, name, values, xattr_size + 1); -- if (retsize > xattr_size) { /* time-of-check, time-of-use error */ -+ if (retsize == 0) { /* success, since 4.16.9 and 4.17.5 */ -+ retsize = strlen(values); -+ } else if (retsize > xattr_size) { /* time-of-check, time-of-use error */ - retsize = xattr_size; - } else if (retsize < 0) { - efree(values); - goto fail; - } -- RETURN_STRINGL(values, retsize, 0); -+ /* realloc the string to its real size */ -+#if PHP_MAJOR_VERSION >= 7 -+ RETVAL_STRINGL(values, retsize); -+#else -+ RETVAL_STRINGL(values, retsize, 1); - #endif -+ efree(values); -+ return; - - fail: - hide_password(url, url_len); -@@ -1565,7 +1576,12 @@ PHP_FUNCTION(smbclient_getxattr) - case ENOMEM: php_error(E_WARNING, "Couldn't get xattr for %s: out of memory", url); break; - case EPERM: php_error(E_WARNING, "Couldn't get xattr for %s: permission denied", url); break; - case ENOTSUP: php_error(E_WARNING, "Couldn't get xattr for %s: file system does not support extended attributes", url); break; -- default: php_error(E_WARNING, "Couldn't get xattr for %s: unknown error (%d)", url, errno); break; -+ default: -+ if (xattr_size == MAXIMUM_BUFFER_SIZE) { -+ php_error(E_WARNING, "Couldn't get xattr for %s: internal buffer is too small", url); break; -+ } else { -+ php_error(E_WARNING, "Couldn't get xattr for %s: unknown error (%d)", url, errno); break; -+ } - } - RETURN_FALSE; - } - -From 78b519144521c22f917696500be77fb46d236813 Mon Sep 17 00:00:00 2001 -From: Remi Collet -Date: Mon, 3 Apr 2023 15:56:01 +0200 -Subject: [PATCH 2/3] loop from 16K to 256M faster - ---- - smbclient.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/smbclient.c b/smbclient.c -index 64bb7d5..8186724 100644 ---- a/smbclient.c -+++ b/smbclient.c -@@ -1503,9 +1503,9 @@ PHP_FUNCTION(smbclient_listxattr) - } - - --/* loop from 4K to 16M */ --#define DEFAULT_BUFFER_SIZE (4 << 10) --#define MAXIMUM_BUFFER_SIZE (32 << 20) -+/* loop from 16K to 256M */ -+#define DEFAULT_BUFFER_SIZE (16 << 10) -+#define MAXIMUM_BUFFER_SIZE (256 << 20) - - PHP_FUNCTION(smbclient_getxattr) - { -@@ -1542,7 +1542,7 @@ PHP_FUNCTION(smbclient_getxattr) - do { - if (values) { - efree(values); -- xattr_size *= 2; -+ xattr_size *= 4; - } - values = emalloc(xattr_size + 1); - retsize = smbc_getxattr(state->ctx, url, name, values, xattr_size + 1); - -From a7b076a05b16047a09b5194782505c68d98208b7 Mon Sep 17 00:00:00 2001 -From: Remi Collet -Date: Mon, 3 Apr 2023 16:00:16 +0200 -Subject: [PATCH 3/3] test that smbclient_getxattr returns not empty string - ---- - tests/GetxattrTest.php | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/tests/GetxattrTest.php b/tests/GetxattrTest.php -index 539a0d0..266f353 100644 ---- a/tests/GetxattrTest.php -+++ b/tests/GetxattrTest.php -@@ -8,7 +8,7 @@ public function - $state = smbclient_state_new(); - smbclient_state_init($state, null, SMB_USER, SMB_PASS); - $attr = smbclient_getxattr($state, 'smb://'.SMB_HOST.'/'.SMB_SHARE.'/testdir/testfile.txt', 'system.*'); -- $this->assertTrue(is_string($attr)); -+ $this->assertTrue(is_string($attr) && strlen($attr)); - } - - public function -@@ -17,7 +17,7 @@ public function - $state = smbclient_state_new(); - smbclient_state_init($state, null, SMB_USER, SMB_PASS); - $attr = smbclient_getxattr($state, 'smb://'.SMB_HOST.'/'.SMB_SHARE.'/testdir', 'system.*'); -- $this->assertTrue(is_string($attr)); -+ $this->assertTrue(is_string($attr) && strlen($attr)); - } - - public function -@@ -26,7 +26,7 @@ public function - $state = smbclient_state_new(); - smbclient_state_init($state, null, SMB_USER, SMB_PASS); - $attr = smbclient_getxattr($state, 'smb://'.SMB_HOST.'/'.SMB_SHARE, 'system.*'); -- $this->assertTrue(is_string($attr)); -+ $this->assertTrue(is_string($attr) && strlen($attr)); - } - - /** diff --git a/sources b/sources index 83a580f..186b551 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (smbclient-1.1.0.tgz) = b1ca1c28c4c3671de2edb00d864f5ee62236a9bfc7f49d9e9aa17120ea1b57b710b0eb00b9f0a59f87f6354015b563e0ca4b02e03ef0809ed9ade6580f1313b7 +SHA512 (smbclient-1.1.1.tgz) = 17df088cacb80c378dec38fd6c6b8e83e1f6d8787e96e5eccac72792f8125cadda205568466fccd21900d1854bdaf3f042992d44e1c5ef458ade61aeec483513