Skip site navigation (1)Skip section navigation (2)
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(&copyval);
+ 					convert_to_string(&copyval);
+ 					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(&copyval);
+ 				}
+@@ -631,7 +646,7 @@ static php_stream *php_ssh2_fopen_wrapper_shell(php_stream_wrapper *wrapper, con
+ 		zval_ptr_dtor(&copyval);
+ 	}
+ 
+-	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(&copyval);
+ 					convert_to_string(&copyval);
+ 					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(&copyval);
+ 				}
+@@ -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>