Date: Sat, 13 Oct 2018 17:52:28 +0000 (UTC) From: "Danilo G. Baio" <dbaio@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r482002 - in head/security/pecl-ssh2: . files Message-ID: <201810131752.w9DHqSAS014404@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dbaio Date: Sat Oct 13 17:52:28 2018 New Revision: 482002 URL: https://svnweb.freebsd.org/changeset/ports/482002 Log: security/pecl-ssh2: Fix build with PHP 7.3 Obtained from: upstream Added: head/security/pecl-ssh2/files/ head/security/pecl-ssh2/files/patch-PHP-73-compatibility (contents, props changed) Modified: head/security/pecl-ssh2/Makefile Modified: head/security/pecl-ssh2/Makefile ============================================================================== --- head/security/pecl-ssh2/Makefile Sat Oct 13 17:51:22 2018 (r482001) +++ head/security/pecl-ssh2/Makefile Sat Oct 13 17:52:28 2018 (r482002) @@ -14,7 +14,7 @@ LICENSE_FILE= ${WRKSRC}/LICENSE LIB_DEPENDS= libssh2.so:security/libssh2 USES= php:pecl -IGNORE_WITH_PHP= 56 73 +IGNORE_WITH_PHP= 56 CPPFLAGS+= -I${LOCALBASE}/include LDFLAGS+= -L${LOCALBASE}/lib ${EXTRA_LIBS} Added: head/security/pecl-ssh2/files/patch-PHP-73-compatibility ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/security/pecl-ssh2/files/patch-PHP-73-compatibility Sat Oct 13 17:52:28 2018 (r482002) @@ -0,0 +1,303 @@ +http://git.php.net/?p=pecl/networking/ssh2.git;a=patch;h=a8835aab2c15e794fce13bd927295719e384ad2d +From a8835aab2c15e794fce13bd927295719e384ad2d Mon Sep 17 00:00:00 2001 +From: Remi Collet <remi@php.net> +Date: Thu, 28 Jun 2018 07:10:35 +0200 +Subject: [PATCH] fix php_url fields usage for PHP 7.3 + +--- + php_ssh2.h | 8 ++++++++ + ssh2_fopen_wrappers.c | 55 ++++++++++++++++++++++++++++++++------------------- + ssh2_sftp.c | 20 +++++++++---------- + 3 files changed, 53 insertions(+), 30 deletions(-) + +diff --git a/php_ssh2.h b/php_ssh2.h +index 734b795..d010ff9 100644 +--- php_ssh2.h ++++ php_ssh2.h +@@ -166,6 +166,14 @@ extern php_stream_wrapper php_ssh2_sftp_wrapper; + extern int le_ssh2_session; + extern int le_ssh2_sftp; + ++#if PHP_VERSION_ID < 70300 ++#define SSH2_URL_STR(a) (a) ++#define SSH2_URL_LEN(a) strlen(a) ++#else ++#define SSH2_URL_STR(a) ZSTR_VAL(a) ++#define SSH2_URL_LEN(a) ZSTR_LEN(a) ++#endif ++ + #endif /* PHP_SSH2_H */ + + /* +diff --git a/ssh2_fopen_wrappers.c b/ssh2_fopen_wrappers.c +index 2f96ca4..f2f3475 100644 +--- ssh2_fopen_wrappers.c ++++ ssh2_fopen_wrappers.c +@@ -215,7 +215,7 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + php_url *resource; + zval *methods = NULL, *callbacks = NULL, zsession, *tmpzval; + zend_long resource_id; +- char *h, *s, *username = NULL, *password = NULL, *pubkey_file = NULL, *privkey_file = NULL; ++ char *h, *username = NULL, *password = NULL, *pubkey_file = NULL, *privkey_file = NULL; + int username_len = 0, password_len = 0; + + h = strstr(path, "Resource id #"); +@@ -233,13 +233,13 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + return NULL; + } + +- if (strncmp(resource->scheme, "ssh2.", sizeof("ssh2.") - 1)) { ++ if (strncmp(SSH2_URL_STR(resource->scheme), "ssh2.", sizeof("ssh2.") - 1)) { + /* Not an ssh wrapper */ + php_url_free(resource); + return NULL; + } + +- if (strcmp(resource->scheme + sizeof("ssh2.") - 1, type)) { ++ if (strcmp(SSH2_URL_STR(resource->scheme) + sizeof("ssh2.") - 1, type)) { + /* Wrong ssh2. wrapper type */ + php_url_free(resource); + return NULL; +@@ -253,13 +253,27 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + Find resource->path in the path string, then copy the entire string from the original path. + This includes ?query#fragment in the path string + */ ++// TODO copy seems uneeded ++#if PHP_VERSION_ID < 70300 ++ { ++ char * s; ++ + s = resource->path; + resource->path = estrdup(strstr(path, resource->path)); + efree(s); ++ } ++#else ++ { ++ zend_string *tmp; ++ ++ tmp = resource->path; ++ resource->path = zend_string_init(ZSTR_VAL(resource->path), ZSTR_LEN(resource->path), 0); ++ zend_string_release(tmp); ++ } ++#endif + + /* Look for a resource ID to reuse a session */ +- s = resource->host; +- if (is_numeric_string(s, strlen(s), &resource_id, NULL, 0) == IS_LONG) { ++ if (is_numeric_string(SSH2_URL_STR(resource->host), SSH2_URL_LEN(resource->host), &resource_id, NULL, 0) == IS_LONG) { + php_ssh2_sftp_data *sftp_data; + zval *zresource; + +@@ -309,7 +323,7 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + } + + /* Fallback on finding it in the context */ +- if (resource->host[0] == 0 && context && psftp && ++ if (SSH2_URL_STR(resource->host)[0] == 0 && context && psftp && + (tmpzval = php_stream_context_get_option(context, "ssh2", "sftp")) != NULL && + Z_TYPE_P(tmpzval) == IS_RESOURCE) { + php_ssh2_sftp_data *sftp_data; +@@ -323,7 +337,7 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + return resource; + } + } +- if (resource->host[0] == 0 && context && ++ if (SSH2_URL_STR(resource->host)[0] == 0 && context && + (tmpzval = php_stream_context_get_option(context, "ssh2", "session")) != NULL && + Z_TYPE_P(tmpzval) == IS_RESOURCE) { + session = (LIBSSH2_SESSION *)zend_fetch_resource(Z_RES_P(tmpzval), PHP_SSH2_SESSION_RES_NAME, le_ssh2_session); +@@ -399,19 +413,19 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + } + + if (resource->user) { +- int len = strlen(resource->user); ++ int len = SSH2_URL_LEN(resource->user); + + if (len) { +- username = resource->user; ++ username = SSH2_URL_STR(resource->user); + username_len = len; + } + } + + if (resource->pass) { +- int len = strlen(resource->pass); ++ int len = SSH2_URL_LEN(resource->pass); + + if (len) { +- password = resource->pass; ++ password = SSH2_URL_STR(resource->pass); + password_len = len; + } + } +@@ -422,7 +436,7 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre + return NULL; + } + +- session = php_ssh2_session_connect(resource->host, resource->port, methods, callbacks); ++ session = php_ssh2_session_connect(SSH2_URL_STR(resource->host), resource->port, methods, callbacks); + if (!session) { + /* Unable to connect! */ + php_url_free(resource); +@@ -482,6 +496,7 @@ session_authed: + *psftp = sftp; + } + ++ //TODO may be undefined + *presource_id = Z_LVAL(zsession); + *psession = session; + +@@ -527,7 +542,7 @@ static php_stream *php_ssh2_shell_open(LIBSSH2_SESSION *session, int resource_id + zval_copy_ctor(©val); + convert_to_string(©val); + if (libssh2_channel_setenv_ex(channel, key->val, key->len, Z_STRVAL(copyval), Z_STRLEN(copyval))) { +- php_error_docref(NULL, E_WARNING, "Failed setting %s=%s on remote end", key, Z_STRVAL(copyval)); ++ php_error_docref(NULL, E_WARNING, "Failed setting %s=%s on remote end", ZSTR_VAL(key), Z_STRVAL(copyval)); + } + zval_dtor(©val); + } +@@ -631,7 +646,7 @@ static php_stream *php_ssh2_fopen_wrapper_shell(php_stream_wrapper *wrapper, con + zval_ptr_dtor(©val); + } + +- s = resource->path ? resource->path : NULL; ++ s = resource->path ? SSH2_URL_STR(resource->path) : NULL; + + if (s && s[0] == '/') { + /* Terminal type encoded into URL overrides context terminal type */ +@@ -766,7 +781,7 @@ static php_stream *php_ssh2_exec_command(LIBSSH2_SESSION *session, int resource_ + zval_copy_ctor(©val); + convert_to_string(©val); + if (libssh2_channel_setenv_ex(channel, key->val, key->len, Z_STRVAL(copyval), Z_STRLEN(copyval))) { +- php_error_docref(NULL, E_WARNING, "Failed setting %s=%s on remote end", key, Z_STRVAL(copyval)); ++ php_error_docref(NULL, E_WARNING, "Failed setting %s=%s on remote end", ZSTR_VAL(key), Z_STRVAL(copyval)); + } + zval_dtor(©val); + } +@@ -878,7 +893,7 @@ static php_stream *php_ssh2_fopen_wrapper_exec(php_stream_wrapper *wrapper, cons + zval_ptr_dtor(copyval); + } + +- stream = php_ssh2_exec_command(session, resource_id, resource->path + 1, terminal, terminal_len, environment, width, height, type); ++ stream = php_ssh2_exec_command(session, resource_id, SSH2_URL_STR(resource->path) + 1, terminal, terminal_len, environment, width, height, type); + if (!stream) { + // TODO Sean-Der + //zend_list_delete(resource_id); +@@ -1021,7 +1036,7 @@ static php_stream *php_ssh2_fopen_wrapper_scp(php_stream_wrapper *wrapper, const + return NULL; + } + +- stream = php_ssh2_scp_xfer(session, resource_id, resource->path); ++ stream = php_ssh2_scp_xfer(session, resource_id, SSH2_URL_STR(resource->path)); + if (!stream) { + //TODO Sean-Der + //zend_list_delete(resource_id); +@@ -1147,7 +1162,7 @@ PHP_FUNCTION(ssh2_scp_send) + char *error_msg = NULL; + + last_error = libssh2_session_last_error(session, &error_msg, NULL, 0); +- php_error_docref(NULL, E_WARNING, "Failure creating remote file: %s", error_msg); ++ php_error_docref(NULL, E_WARNING, "Failure creating remote file: %s (%d)", error_msg, last_error); + php_stream_close(local_file); + RETURN_FALSE; + } +@@ -1262,10 +1277,10 @@ static php_stream *php_ssh2_fopen_wrapper_tunnel(php_stream_wrapper *wrapper, co + return NULL; + } + +- if (resource->path && resource->path[0] == '/') { ++ if (resource->path && SSH2_URL_STR(resource->path)[0] == '/') { + char *colon; + +- host = resource->path + 1; ++ host = SSH2_URL_STR(resource->path) + 1; + if (*host == '[') { + /* IPv6 Encapsulated Format */ + host++; +diff --git a/ssh2_sftp.c b/ssh2_sftp.c +index 13f89f0..6332be8 100644 +--- ssh2_sftp.c ++++ ssh2_sftp.c +@@ -238,7 +238,7 @@ static php_stream *php_ssh2_sftp_stream_opener(php_stream_wrapper *wrapper, cons + + flags = php_ssh2_parse_fopen_modes((char *)mode); + +- handle = libssh2_sftp_open(sftp, resource->path, flags, perms); ++ handle = libssh2_sftp_open(sftp, SSH2_URL_STR(resource->path), flags, perms); + if (!handle) { + php_error_docref(NULL, E_WARNING, "Unable to open %s on remote host", filename); + php_url_free(resource); +@@ -341,7 +341,7 @@ static php_stream *php_ssh2_sftp_dirstream_opener(php_stream_wrapper *wrapper, c + return NULL; + } + +- handle = libssh2_sftp_opendir(sftp, resource->path); ++ handle = libssh2_sftp_opendir(sftp, SSH2_URL_STR(resource->path)); + if (!handle) { + php_error_docref(NULL, E_WARNING, "Unable to open %s on remote host", filename); + php_url_free(resource); +@@ -386,7 +386,7 @@ static int php_ssh2_sftp_urlstat(php_stream_wrapper *wrapper, const char *url, i + return -1; + } + +- if (libssh2_sftp_stat_ex(sftp, resource->path, strlen(resource->path), ++ if (libssh2_sftp_stat_ex(sftp, SSH2_URL_STR(resource->path), SSH2_URL_LEN(resource->path), + (flags & PHP_STREAM_URL_STAT_LINK) ? LIBSSH2_SFTP_LSTAT : LIBSSH2_SFTP_STAT, &attrs)) { + php_url_free(resource); + //zend_list_delete(sftp_rsrcid); +@@ -420,7 +420,7 @@ static int php_ssh2_sftp_unlink(php_stream_wrapper *wrapper, const char *url, in + return 0; + } + +- result = libssh2_sftp_unlink(sftp, resource->path); ++ result = libssh2_sftp_unlink(sftp, SSH2_URL_STR(resource->path)); + php_url_free(resource); + + //zend_list_delete(sftp_rsrcid); +@@ -462,7 +462,7 @@ static int php_ssh2_sftp_rename(php_stream_wrapper *wrapper, const char *url_fro + return 0; + } + +- result = libssh2_sftp_rename(sftp, resource->path, resource_to->path); ++ result = libssh2_sftp_rename(sftp, SSH2_URL_STR(resource->path), SSH2_URL_STR(resource_to->path)); + php_url_free(resource); + php_url_free(resource_to); + +@@ -493,13 +493,13 @@ static int php_ssh2_sftp_mkdir(php_stream_wrapper *wrapper, const char *url, int + + if (options & PHP_STREAM_MKDIR_RECURSIVE) { + /* Just attempt to make every directory, some will fail, but we only care about the last success/failure */ +- char *p = resource->path; ++ char *p = SSH2_URL_STR(resource->path); + while ((p = strchr(p + 1, '/'))) { +- libssh2_sftp_mkdir_ex(sftp, resource->path, p - resource->path, mode); ++ libssh2_sftp_mkdir_ex(sftp, SSH2_URL_STR(resource->path), p - SSH2_URL_STR(resource->path), mode); + } + } + +- result = libssh2_sftp_mkdir(sftp, resource->path, mode); ++ result = libssh2_sftp_mkdir(sftp, SSH2_URL_STR(resource->path), mode); + php_url_free(resource); + + //zend_list_delete(sftp_rsrcid); +@@ -527,7 +527,7 @@ static int php_ssh2_sftp_rmdir(php_stream_wrapper *wrapper, const char *url, int + return 0; + } + +- result = libssh2_sftp_rmdir(sftp, resource->path); ++ result = libssh2_sftp_rmdir(sftp, SSH2_URL_STR(resource->path)); + php_url_free(resource); + + //zend_list_delete(sftp_rsrcid); +@@ -836,7 +836,7 @@ PHP_FUNCTION(ssh2_sftp_readlink) + } + + if ((targ_len = libssh2_sftp_symlink_ex(data->sftp, link->val, link->len, targ, 8192, LIBSSH2_SFTP_READLINK)) < 0) { +- php_error_docref(NULL, E_WARNING, "Unable to read link '%s'", link); ++ php_error_docref(NULL, E_WARNING, "Unable to read link '%s'", ZSTR_VAL(link)); + RETURN_FALSE; + } + +-- +2.1.4 +
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201810131752.w9DHqSAS014404>