123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746 |
- From 073067ba96ac99ed5696d27f13ca6c8124986e74 Mon Sep 17 00:00:00 2001
- From: Jan-E <github@ehrhardt.nl>
- Date: Thu, 28 Jun 2018 08:43:48 +0200
- Subject: [PATCH] @dstogov Fixed PHP7 port. Restored commented reference
- counting.
- Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
- [Retrieved from:
- https://github.com/php/pecl-networking-ssh2/commit/073067ba96ac99ed5696d27f13ca6c8124986e74]
- ---
- php_ssh2.h | 14 ++---
- ssh2.c | 26 ++++-----
- ssh2_fopen_wrappers.c | 129 ++++++++++++++++++------------------------
- ssh2_sftp.c | 59 +++++++++----------
- 4 files changed, 102 insertions(+), 126 deletions(-)
- diff --git a/php_ssh2.h b/php_ssh2.h
- index d010ff9..2bbaa26 100644
- --- a/php_ssh2.h
- +++ b/php_ssh2.h
- @@ -73,14 +73,14 @@ typedef struct _php_ssh2_sftp_data {
- LIBSSH2_SESSION *session;
- LIBSSH2_SFTP *sftp;
-
- - int session_rsrcid;
- + zend_resource *session_rsrc;
- } php_ssh2_sftp_data;
-
- typedef struct _php_ssh2_listener_data {
- LIBSSH2_SESSION *session;
- LIBSSH2_LISTENER *listener;
-
- - int session_rsrcid;
- + zend_resource *session_rsrc;
- } php_ssh2_listener_data;
-
- #include "libssh2_publickey.h"
- @@ -89,7 +89,7 @@ typedef struct _php_ssh2_pkey_subsys_data {
- LIBSSH2_SESSION *session;
- LIBSSH2_PUBLICKEY *pkey;
-
- - int session_rsrcid;
- + zend_resource *session_rsrc;
- } php_ssh2_pkey_subsys_data;
-
- #define SSH2_FETCH_NONAUTHENTICATED_SESSION(session, zsession) \
- @@ -118,8 +118,8 @@ typedef struct _php_ssh2_channel_data {
- char is_blocking;
- long timeout;
-
- - /* Resource ID */
- - int session_rsrcid;
- + /* Resource */
- + zend_resource *session_rsrc;
-
- /* Allow one stream to be closed while the other is kept open */
- unsigned char *refcount;
- @@ -151,8 +151,8 @@ PHP_FUNCTION(ssh2_sftp_realpath);
- LIBSSH2_SESSION *php_ssh2_session_connect(char *host, int port, zval *methods, zval *callbacks);
- void php_ssh2_sftp_dtor(zend_resource *rsrc);
- php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stream_context *context,
- - LIBSSH2_SESSION **psession, int *presource_id,
- - LIBSSH2_SFTP **psftp, int *psftp_rsrcid);
- + LIBSSH2_SESSION **psession, zend_resource **presource,
- + LIBSSH2_SFTP **psftp, zend_resource **psftp_rsrc);
-
- extern php_stream_ops php_ssh2_channel_stream_ops;
-
- diff --git a/ssh2.c b/ssh2.c
- index e73867e..849766b 100644
- --- a/ssh2.c
- +++ b/ssh2.c
- @@ -772,9 +772,8 @@ PHP_FUNCTION(ssh2_forward_listen)
-
- data = emalloc(sizeof(php_ssh2_listener_data));
- data->session = session;
- - data->session_rsrcid = Z_LVAL_P(zsession);
- - //TODO Sean-Der
- - //zend_list_addref(data->session_rsrcid);
- + data->session_rsrc = Z_RES_P(zsession);
- + Z_ADDREF_P(zsession);
- data->listener = listener;
-
- RETURN_RES(zend_register_resource(data, le_ssh2_listener));
- @@ -810,7 +809,7 @@ PHP_FUNCTION(ssh2_forward_accept)
- channel_data->channel = channel;
- channel_data->streamid = 0;
- channel_data->is_blocking = 0;
- - channel_data->session_rsrcid = data->session_rsrcid;
- + channel_data->session_rsrc = data->session_rsrc;
- channel_data->refcount = NULL;
-
- stream = php_stream_alloc(&php_ssh2_channel_stream_ops, channel_data, 0, "r+");
- @@ -820,8 +819,12 @@ PHP_FUNCTION(ssh2_forward_accept)
- libssh2_channel_free(channel);
- RETURN_FALSE;
- }
- - //TODO Sean-Der
- - //zend_list_addref(channel_data->session_rsrcid);
- +
- +#if PHP_VERSION_ID < 70300
- + GC_REFCOUNT(channel_data->session_rsrc)++;
- +#else
- + GC_ADDREF(channel_data->session_rsrc);
- +#endif
-
- php_stream_to_zval(stream, return_value);
- }
- @@ -975,9 +978,8 @@ PHP_FUNCTION(ssh2_publickey_init)
-
- data = emalloc(sizeof(php_ssh2_pkey_subsys_data));
- data->session = session;
- - data->session_rsrcid = Z_RES_P(zsession)->handle;
- - //TODO Sean-Der
- - //zend_list_addref(data->session_rsrcid);
- + data->session_rsrc = Z_RES_P(zsession);
- + Z_ADDREF_P(zsession);
- data->pkey = pkey;
-
- RETURN_RES(zend_register_resource(data, le_ssh2_pkey_subsys));
- @@ -1280,8 +1282,7 @@ static void php_ssh2_listener_dtor(zend_resource *rsrc)
- LIBSSH2_LISTENER *listener = data->listener;
-
- libssh2_channel_forward_cancel(listener);
- - // TODO Sean-Der
- - //zend_list_delete(data->session_rsrcid);
- + zend_list_delete(data->session_rsrc);
- efree(data);
- }
-
- @@ -1291,8 +1292,7 @@ static void php_ssh2_pkey_subsys_dtor(zend_resource *rsrc)
- LIBSSH2_PUBLICKEY *pkey = data->pkey;
-
- libssh2_publickey_shutdown(pkey);
- - // TODO Sean-Der
- - //zend_list_delete(data->session_rsrcid);
- + zend_list_delete(data->session_rsrc);
- efree(data);
- }
-
- diff --git a/ssh2_fopen_wrappers.c b/ssh2_fopen_wrappers.c
- index f2f3475..c4eb9dc 100644
- --- a/ssh2_fopen_wrappers.c
- +++ b/ssh2_fopen_wrappers.c
- @@ -47,11 +47,9 @@ static size_t php_ssh2_channel_stream_write(php_stream *stream, const char *buf,
- php_ssh2_channel_data *abstract = (php_ssh2_channel_data*)stream->abstract;
- size_t writestate;
- LIBSSH2_SESSION *session;
- - zval *zresource;
-
- libssh2_channel_set_blocking(abstract->channel, abstract->is_blocking);
- - zresource = php_ssh2_zval_from_resource_handle(abstract->session_rsrcid);
- - session = (LIBSSH2_SESSION *)zend_fetch_resource(Z_RES_P(zresource), PHP_SSH2_SESSION_RES_NAME, le_ssh2_session);
- + session = (LIBSSH2_SESSION *)zend_fetch_resource(abstract->session_rsrc, PHP_SSH2_SESSION_RES_NAME, le_ssh2_session);
-
-
-
- @@ -90,12 +88,10 @@ static size_t php_ssh2_channel_stream_read(php_stream *stream, char *buf, size_t
- php_ssh2_channel_data *abstract = (php_ssh2_channel_data*)stream->abstract;
- ssize_t readstate;
- LIBSSH2_SESSION *session;
- - zval *zresource;
-
- stream->eof = libssh2_channel_eof(abstract->channel);
- libssh2_channel_set_blocking(abstract->channel, abstract->is_blocking);
- - zresource = php_ssh2_zval_from_resource_handle(abstract->session_rsrcid);
- - session = (LIBSSH2_SESSION *)zend_fetch_resource(Z_RES_P(zresource), PHP_SSH2_SESSION_RES_NAME, le_ssh2_session);
- + session = (LIBSSH2_SESSION *)zend_fetch_resource(abstract->session_rsrc, PHP_SSH2_SESSION_RES_NAME, le_ssh2_session);
-
- #ifdef PHP_SSH2_SESSION_TIMEOUT
- if (abstract->is_blocking) {
- @@ -137,8 +133,7 @@ static int php_ssh2_channel_stream_close(php_stream *stream, int close_handle)
- }
- libssh2_channel_eof(abstract->channel);
- libssh2_channel_free(abstract->channel);
- - //TODO Sean-Der
- - //zend_list_delete(abstract->session_rsrcid);
- + zend_list_delete(abstract->session_rsrc);
- }
- efree(abstract);
-
- @@ -207,8 +202,8 @@ php_stream_ops php_ssh2_channel_stream_ops = {
- * Parse an ssh2.*:// path
- */
- php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stream_context *context,
- - LIBSSH2_SESSION **psession, int *presource_id,
- - LIBSSH2_SFTP **psftp, int *psftp_rsrcid)
- + LIBSSH2_SESSION **psession, zend_resource **presource,
- + LIBSSH2_SFTP **psftp, zend_resource **psftp_rsrc)
- {
- php_ssh2_sftp_data *sftp_data = NULL;
- LIBSSH2_SESSION *session;
- @@ -283,11 +278,10 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre
- sftp_data = (php_ssh2_sftp_data *)zend_fetch_resource(Z_RES_P(zresource), PHP_SSH2_SFTP_RES_NAME, le_ssh2_sftp);
- if (sftp_data) {
- /* Want the sftp layer */
- - //TODO Sean-Der
- - //zend_list_addref(resource_id);
- - *psftp_rsrcid = resource_id;
- + Z_ADDREF_P(zresource);
- + *psftp_rsrc = Z_RES_P(zresource);
- *psftp = sftp_data->sftp;
- - *presource_id = sftp_data->session_rsrcid;
- + *presource = sftp_data->session_rsrc;
- *psession = sftp_data->session;
- return resource;
- }
- @@ -305,18 +299,16 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre
- sftp_data = emalloc(sizeof(php_ssh2_sftp_data));
- sftp_data->sftp = sftp;
- sftp_data->session = session;
- - sftp_data->session_rsrcid = resource_id;
- - //TODO Sean-Der
- - //zend_list_addref(resource_id);
- - *psftp_rsrcid = zend_register_resource(sftp_data, le_ssh2_sftp)->handle;
- + sftp_data->session_rsrc = Z_RES_P(zresource);
- + Z_ADDREF_P(zresource);
- + *psftp_rsrc = zend_register_resource(sftp_data, le_ssh2_sftp);
- *psftp = sftp;
- - *presource_id = resource_id;
- + *presource = Z_RES_P(zresource);
- *psession = session;
- return resource;
- }
- - //TODO Sean-Der
- - //zend_list_addref(resource_id);
- - *presource_id = resource_id;
- + Z_ADDREF_P(zresource);
- + *presource = Z_RES_P(zresource);
- *psession = session;
- return resource;
- }
- @@ -330,9 +322,9 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre
- sftp_data = (php_ssh2_sftp_data *)zend_fetch_resource(Z_RES_P(tmpzval), PHP_SSH2_SFTP_RES_NAME, le_ssh2_sftp);
- if (sftp_data) {
- Z_ADDREF_P(tmpzval);
- - *psftp_rsrcid = Z_LVAL_P(tmpzval);
- + *psftp_rsrc = Z_RES_P(tmpzval);
- *psftp = sftp_data->sftp;
- - *presource_id = sftp_data->session_rsrcid;
- + *presource = sftp_data->session_rsrc;
- *psession = sftp_data->session;
- return resource;
- }
- @@ -354,17 +346,17 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre
- sftp_data = emalloc(sizeof(php_ssh2_sftp_data));
- sftp_data->sftp = sftp;
- sftp_data->session = session;
- - sftp_data->session_rsrcid = Z_LVAL_P(tmpzval);
- + sftp_data->session_rsrc = Z_RES_P(tmpzval);
- Z_ADDREF_P(tmpzval);
- - *psftp_rsrcid = zend_register_resource(sftp_data, le_ssh2_sftp)->handle;
- + *psftp_rsrc = zend_register_resource(sftp_data, le_ssh2_sftp);
- *psftp = sftp;
- - *presource_id = Z_RES_P(tmpzval)->handle;
- + *presource = Z_RES_P(tmpzval);
- *psession = session;
- return resource;
- }
- Z_ADDREF_P(tmpzval);
- *psession = session;
- - *presource_id = Z_LVAL_P(tmpzval);
- + *presource = Z_RES_P(tmpzval);
- return resource;
- }
- }
- @@ -465,8 +457,7 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre
-
- /* Auth failure */
- php_url_free(resource);
- - //TODO Sean-Der
- - //zend_list_delete(Z_LVAL(zsession));
- + zend_list_delete(Z_RES(zsession));
- return NULL;
-
- session_authed:
- @@ -480,24 +471,22 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre
- sftp = libssh2_sftp_init(session);
- if (!sftp) {
- php_url_free(resource);
- - //TODO Sean-Der
- - //zend_list_delete(Z_LVAL(zsession));
- + zend_list_delete(Z_RES(zsession));
- return NULL;
- }
-
- sftp_data = emalloc(sizeof(php_ssh2_sftp_data));
- sftp_data->session = session;
- sftp_data->sftp = sftp;
- - sftp_data->session_rsrcid = Z_LVAL(zsession);
- + sftp_data->session_rsrc = Z_RES(zsession);
-
- //TODO Sean-Der
- //ZEND_REGISTER_RESOURCE(sftp_data, le_ssh2_sftp);
- - *psftp_rsrcid = Z_LVAL(zsftp);
- + *psftp_rsrc = Z_RES(zsftp);
- *psftp = sftp;
- }
-
- - //TODO may be undefined
- - *presource_id = Z_LVAL(zsession);
- + *presource = Z_RES(zsession);
- *psession = session;
-
- return resource;
- @@ -511,7 +500,7 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre
- /* {{{ php_ssh2_shell_open
- * Make a stream from a session
- */
- -static php_stream *php_ssh2_shell_open(LIBSSH2_SESSION *session, int resource_id, char *term, int term_len, zval *environment, long width, long height, long type)
- +static php_stream *php_ssh2_shell_open(LIBSSH2_SESSION *session, zend_resource *resource, char *term, int term_len, zval *environment, long width, long height, long type)
- {
- LIBSSH2_CHANNEL *channel;
- php_ssh2_channel_data *channel_data;
- @@ -578,7 +567,7 @@ static php_stream *php_ssh2_shell_open(LIBSSH2_SESSION *session, int resource_id
- channel_data->streamid = 0;
- channel_data->is_blocking = 0;
- channel_data->timeout = 0;
- - channel_data->session_rsrcid = resource_id;
- + channel_data->session_rsrc = resource;
- channel_data->refcount = NULL;
-
- stream = php_stream_alloc(&php_ssh2_channel_stream_ops, channel_data, 0, "r+");
- @@ -599,11 +588,12 @@ static php_stream *php_ssh2_fopen_wrapper_shell(php_stream_wrapper *wrapper, con
- zend_long width = PHP_SSH2_DEFAULT_TERM_WIDTH;
- zend_long height = PHP_SSH2_DEFAULT_TERM_HEIGHT;
- zend_long type = PHP_SSH2_DEFAULT_TERM_UNIT;
- - int resource_id = 0, terminal_len = sizeof(PHP_SSH2_DEFAULT_TERMINAL) - 1;
- + zend_resource *rsrc = NULL;
- + int terminal_len = sizeof(PHP_SSH2_DEFAULT_TERMINAL) - 1;
- php_url *resource;
- char *s;
-
- - resource = php_ssh2_fopen_wraper_parse_path(path, "shell", context, &session, &resource_id, NULL, NULL);
- + resource = php_ssh2_fopen_wraper_parse_path(path, "shell", context, &session, &rsrc, NULL, NULL);
- if (!resource || !session) {
- return NULL;
- }
- @@ -677,10 +667,9 @@ static php_stream *php_ssh2_fopen_wrapper_shell(php_stream_wrapper *wrapper, con
- /* TODO: Accept resolution and environment vars as URL style parameters
- * ssh2.shell://hostorresource/terminal/99x99c?envvar=envval&envvar=envval....
- */
- - stream = php_ssh2_shell_open(session, resource_id, terminal, terminal_len, environment, width, height, type);
- + stream = php_ssh2_shell_open(session, rsrc, terminal, terminal_len, environment, width, height, type);
- if (!stream) {
- - //TODO Sean-Der
- - //zend_list_delete(resource_id);
- + zend_list_delete(rsrc);
- }
- php_url_free(resource);
-
- @@ -730,7 +719,7 @@ PHP_FUNCTION(ssh2_shell)
-
- SSH2_FETCH_AUTHENTICATED_SESSION(session, zsession);
-
- - stream = php_ssh2_shell_open(session, Z_RES_P(zsession)->handle, term, term_len, environment, width, height, type);
- + stream = php_ssh2_shell_open(session, Z_RES_P(zsession), term, term_len, environment, width, height, type);
- if (!stream) {
- RETURN_FALSE;
- }
- @@ -749,7 +738,7 @@ PHP_FUNCTION(ssh2_shell)
- /* {{{ php_ssh2_exec_command
- * Make a stream from a session
- */
- -static php_stream *php_ssh2_exec_command(LIBSSH2_SESSION *session, int resource_id, char *command, char *term, int term_len, zval *environment, long width, long height, long type)
- +static php_stream *php_ssh2_exec_command(LIBSSH2_SESSION *session, zend_resource *rsrc, char *command, char *term, int term_len, zval *environment, long width, long height, long type)
- {
- LIBSSH2_CHANNEL *channel;
- php_ssh2_channel_data *channel_data;
- @@ -819,7 +808,7 @@ static php_stream *php_ssh2_exec_command(LIBSSH2_SESSION *session, int resource_
- channel_data->streamid = 0;
- channel_data->is_blocking = 0;
- channel_data->timeout = 0;
- - channel_data->session_rsrcid = resource_id;
- + channel_data->session_rsrc = rsrc;
- channel_data->refcount = NULL;
-
- stream = php_stream_alloc(&php_ssh2_channel_stream_ops, channel_data, 0, "r+");
- @@ -836,7 +825,7 @@ static php_stream *php_ssh2_fopen_wrapper_exec(php_stream_wrapper *wrapper, cons
- LIBSSH2_SESSION *session = NULL;
- php_stream *stream;
- zval *tmpzval, *environment = NULL;
- - int resource_id = 0;
- + zend_resource *rsrc = NULL;
- php_url *resource;
- char *terminal = NULL;
- int terminal_len = 0;
- @@ -844,14 +833,13 @@ static php_stream *php_ssh2_fopen_wrapper_exec(php_stream_wrapper *wrapper, cons
- long height = PHP_SSH2_DEFAULT_TERM_HEIGHT;
- long type = PHP_SSH2_DEFAULT_TERM_UNIT;
-
- - resource = php_ssh2_fopen_wraper_parse_path(path, "exec", context, &session, &resource_id, NULL, NULL);
- + resource = php_ssh2_fopen_wraper_parse_path(path, "exec", context, &session, &rsrc, NULL, NULL);
- if (!resource || !session) {
- return NULL;
- }
- if (!resource->path) {
- php_url_free(resource);
- - //TODO Sean-Der
- - //zend_list_delete(resource_id);
- + zend_list_delete(rsrc);
- return NULL;
- }
-
- @@ -893,10 +881,9 @@ 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, SSH2_URL_STR(resource->path) + 1, terminal, terminal_len, environment, width, height, type);
- + stream = php_ssh2_exec_command(session, rsrc, SSH2_URL_STR(resource->path) + 1, terminal, terminal_len, environment, width, height, type);
- if (!stream) {
- - // TODO Sean-Der
- - //zend_list_delete(resource_id);
- + zend_list_delete(rsrc);
- }
- php_url_free(resource);
-
- @@ -963,7 +950,7 @@ PHP_FUNCTION(ssh2_exec)
-
- SSH2_FETCH_AUTHENTICATED_SESSION(session, zsession);
-
- - stream = php_ssh2_exec_command(session, Z_RES_P(zsession)->handle, command, term, term_len, environment, width, height, type);
- + stream = php_ssh2_exec_command(session, Z_RES_P(zsession), command, term, term_len, environment, width, height, type);
- if (!stream) {
- RETURN_FALSE;
- }
- @@ -982,7 +969,7 @@ PHP_FUNCTION(ssh2_exec)
- /* {{{ php_ssh2_scp_xfer
- * Make a stream from a session
- */
- -static php_stream *php_ssh2_scp_xfer(LIBSSH2_SESSION *session, int resource_id, char *filename)
- +static php_stream *php_ssh2_scp_xfer(LIBSSH2_SESSION *session, zend_resource *rsrc, char *filename)
- {
- LIBSSH2_CHANNEL *channel;
- php_ssh2_channel_data *channel_data;
- @@ -1002,7 +989,7 @@ static php_stream *php_ssh2_scp_xfer(LIBSSH2_SESSION *session, int resource_id,
- channel_data->streamid = 0;
- channel_data->is_blocking = 0;
- channel_data->timeout = 0;
- - channel_data->session_rsrcid = resource_id;
- + channel_data->session_rsrc = rsrc;
- channel_data->refcount = NULL;
-
- stream = php_stream_alloc(&php_ssh2_channel_stream_ops, channel_data, 0, "r");
- @@ -1018,28 +1005,26 @@ static php_stream *php_ssh2_fopen_wrapper_scp(php_stream_wrapper *wrapper, const
- {
- LIBSSH2_SESSION *session = NULL;
- php_stream *stream;
- - int resource_id = 0;
- + zend_resource *rsrc = NULL;
- php_url *resource;
-
- if (strchr(mode, '+') || strchr(mode, 'a') || strchr(mode, 'w')) {
- return NULL;
- }
-
- - resource = php_ssh2_fopen_wraper_parse_path(path, "scp", context, &session, &resource_id, NULL, NULL);
- + resource = php_ssh2_fopen_wraper_parse_path(path, "scp", context, &session, &rsrc, NULL, NULL);
- if (!resource || !session) {
- return NULL;
- }
- if (!resource->path) {
- php_url_free(resource);
- - //TODO Sean-Der
- - //zend_list_delete(resource_id);
- + zend_list_delete(rsrc);
- return NULL;
- }
-
- - stream = php_ssh2_scp_xfer(session, resource_id, SSH2_URL_STR(resource->path));
- + stream = php_ssh2_scp_xfer(session, rsrc, SSH2_URL_STR(resource->path));
- if (!stream) {
- - //TODO Sean-Der
- - //zend_list_delete(resource_id);
- + zend_list_delete(rsrc);
- }
- php_url_free(resource);
-
- @@ -1231,7 +1216,7 @@ PHP_FUNCTION(ssh2_scp_send)
- /* {{{ php_ssh2_direct_tcpip
- * Make a stream from a session
- */
- -static php_stream *php_ssh2_direct_tcpip(LIBSSH2_SESSION *session, int resource_id, char *host, int port)
- +static php_stream *php_ssh2_direct_tcpip(LIBSSH2_SESSION *session, zend_resource *rsrc, char *host, int port)
- {
- LIBSSH2_CHANNEL *channel;
- php_ssh2_channel_data *channel_data;
- @@ -1251,7 +1236,7 @@ static php_stream *php_ssh2_direct_tcpip(LIBSSH2_SESSION *session, int resource_
- channel_data->streamid = 0;
- channel_data->is_blocking = 0;
- channel_data->timeout = 0;
- - channel_data->session_rsrcid = resource_id;
- + channel_data->session_rsrc = rsrc;
- channel_data->refcount = NULL;
-
- stream = php_stream_alloc(&php_ssh2_channel_stream_ops, channel_data, 0, "r+");
- @@ -1270,9 +1255,9 @@ static php_stream *php_ssh2_fopen_wrapper_tunnel(php_stream_wrapper *wrapper, co
- php_url *resource;
- char *host = NULL;
- int port = 0;
- - int resource_id = 0;
- + zend_resource *rsrc;
-
- - resource = php_ssh2_fopen_wraper_parse_path(path, "tunnel", context, &session, &resource_id, NULL, NULL);
- + resource = php_ssh2_fopen_wraper_parse_path(path, "tunnel", context, &session, &rsrc, NULL, NULL);
- if (!resource || !session) {
- return NULL;
- }
- @@ -1303,15 +1288,13 @@ static php_stream *php_ssh2_fopen_wrapper_tunnel(php_stream_wrapper *wrapper, co
- if ((port <= 0) || (port > 65535) || !host || (strlen(host) == 0)) {
- /* Invalid connection criteria */
- php_url_free(resource);
- - //TODO Sean-Der
- - //zend_list_delete(resource_id);
- + zend_list_delete(rsrc);
- return NULL;
- }
-
- - stream = php_ssh2_direct_tcpip(session, resource_id, host, port);
- + stream = php_ssh2_direct_tcpip(session, rsrc, host, port);
- if (!stream) {
- - // TODO Sean-Der
- - //zend_list_delete(resource_id);
- + zend_list_delete(rsrc);
- }
- php_url_free(resource);
-
- @@ -1352,7 +1335,7 @@ PHP_FUNCTION(ssh2_tunnel)
-
- SSH2_FETCH_AUTHENTICATED_SESSION(session, zsession);
-
- - stream = php_ssh2_direct_tcpip(session, Z_RES_P(zsession)->handle, host, port);
- + stream = php_ssh2_direct_tcpip(session, Z_RES_P(zsession), host, port);
- if (!stream) {
- RETURN_FALSE;
- }
- diff --git a/ssh2_sftp.c b/ssh2_sftp.c
- index 6332be8..256fc70 100644
- --- a/ssh2_sftp.c
- +++ b/ssh2_sftp.c
- @@ -40,8 +40,7 @@ void php_ssh2_sftp_dtor(zend_resource *rsrc)
-
- libssh2_sftp_shutdown(data->sftp);
-
- - // TODO Sean-Der
- - //zend_list_delete(data->session_rsrcid);
- + zend_list_delete(data->session_rsrc);
-
- efree(data);
- }
- @@ -50,7 +49,7 @@ void php_ssh2_sftp_dtor(zend_resource *rsrc)
- * SFTP File Ops *
- ***************** */
-
- -inline unsigned long php_ssh2_parse_fopen_modes(char *openmode) {
- +unsigned long php_ssh2_parse_fopen_modes(char *openmode) {
- unsigned long flags = 0;
-
- if (strchr(openmode, 'a')) {
- @@ -101,7 +100,7 @@ inline int php_ssh2_sftp_attr2ssb(php_stream_statbuf *ssb, LIBSSH2_SFTP_ATTRIBUT
- typedef struct _php_ssh2_sftp_handle_data {
- LIBSSH2_SFTP_HANDLE *handle;
-
- - long sftp_rsrcid;
- + zend_resource *sftp_rsrc;
- } php_ssh2_sftp_handle_data;
-
- /* {{{ php_ssh2_sftp_stream_write
- @@ -139,8 +138,7 @@ static int php_ssh2_sftp_stream_close(php_stream *stream, int close_handle)
- php_ssh2_sftp_handle_data *data = (php_ssh2_sftp_handle_data*)stream->abstract;
-
- libssh2_sftp_close(data->handle);
- - //TODO Sean-Der
- - //zend_list_delete(data->sftp_rsrcid);
- + zend_list_delete(data->sftp_rsrc);
- efree(data);
-
- return 0;
- @@ -226,12 +224,12 @@ static php_stream *php_ssh2_sftp_stream_opener(php_stream_wrapper *wrapper, cons
- LIBSSH2_SFTP *sftp = NULL;
- LIBSSH2_SFTP_HANDLE *handle;
- php_stream *stream;
- - int resource_id = 0, sftp_rsrcid = 0;
- + zend_resource *rsrc = NULL, *sftp_rsrc = NULL;
- php_url *resource;
- unsigned long flags;
- long perms = 0644;
-
- - resource = php_ssh2_fopen_wraper_parse_path(filename, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid);
- + resource = php_ssh2_fopen_wraper_parse_path(filename, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc);
- if (!resource || !session || !sftp) {
- return NULL;
- }
- @@ -242,20 +240,18 @@ static php_stream *php_ssh2_sftp_stream_opener(php_stream_wrapper *wrapper, cons
- if (!handle) {
- php_error_docref(NULL, E_WARNING, "Unable to open %s on remote host", filename);
- php_url_free(resource);
- - //TODO Sean-Der
- - //zend_list_delete(sftp_rsrcid);
- + zend_list_delete(sftp_rsrc);
- return NULL;
- }
-
- data = emalloc(sizeof(php_ssh2_sftp_handle_data));
- data->handle = handle;
- - data->sftp_rsrcid = sftp_rsrcid;
- + data->sftp_rsrc = sftp_rsrc;
-
- stream = php_stream_alloc(&php_ssh2_sftp_stream_ops, data, 0, mode);
- if (!stream) {
- libssh2_sftp_close(handle);
- - // TODO Sean-Der
- - //zend_list_delete(sftp_rsrcid);
- + zend_list_delete(sftp_rsrc);
- efree(data);
- }
- php_url_free(resource);
- @@ -303,8 +299,7 @@ static int php_ssh2_sftp_dirstream_close(php_stream *stream, int close_handle)
- php_ssh2_sftp_handle_data *data = (php_ssh2_sftp_handle_data*)stream->abstract;
-
- libssh2_sftp_close(data->handle);
- - //TODO Sean_der
- - //zend_list_delete(data->sftp_rsrcid);
- + zend_list_delete(data->sftp_rsrc);
- efree(data);
-
- return 0;
- @@ -333,10 +328,10 @@ static php_stream *php_ssh2_sftp_dirstream_opener(php_stream_wrapper *wrapper, c
- LIBSSH2_SFTP *sftp = NULL;
- LIBSSH2_SFTP_HANDLE *handle;
- php_stream *stream;
- - int resource_id = 0, sftp_rsrcid = 0;
- + zend_resource *rsrc = NULL, *sftp_rsrc = NULL;
- php_url *resource;
-
- - resource = php_ssh2_fopen_wraper_parse_path(filename, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid);
- + resource = php_ssh2_fopen_wraper_parse_path(filename, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc);
- if (!resource || !session || !sftp) {
- return NULL;
- }
- @@ -345,20 +340,18 @@ static php_stream *php_ssh2_sftp_dirstream_opener(php_stream_wrapper *wrapper, c
- if (!handle) {
- php_error_docref(NULL, E_WARNING, "Unable to open %s on remote host", filename);
- php_url_free(resource);
- - //TODO Sean-Der
- - //zend_list_delete(sftp_rsrcid);
- + zend_list_delete(sftp_rsrc);
- return NULL;
- }
-
- data = emalloc(sizeof(php_ssh2_sftp_handle_data));
- data->handle = handle;
- - data->sftp_rsrcid = sftp_rsrcid;
- + data->sftp_rsrc = sftp_rsrc;
-
- stream = php_stream_alloc(&php_ssh2_sftp_dirstream_ops, data, 0, mode);
- if (!stream) {
- libssh2_sftp_close(handle);
- - //TODO Sean-Der
- - //zend_list_delete(sftp_rsrcid);
- + zend_list_delete(sftp_rsrc);
- efree(data);
- }
- php_url_free(resource);
- @@ -378,10 +371,10 @@ static int php_ssh2_sftp_urlstat(php_stream_wrapper *wrapper, const char *url, i
- LIBSSH2_SFTP_ATTRIBUTES attrs;
- LIBSSH2_SESSION *session = NULL;
- LIBSSH2_SFTP *sftp = NULL;
- - int resource_id = 0, sftp_rsrcid = 0;
- + zend_resource *rsrc = NULL, *sftp_rsrc = NULL;
- php_url *resource;
-
- - resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid);
- + resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc);
- if (!resource || !session || !sftp || !resource->path) {
- return -1;
- }
- @@ -408,11 +401,11 @@ static int php_ssh2_sftp_unlink(php_stream_wrapper *wrapper, const char *url, in
- {
- LIBSSH2_SESSION *session = NULL;
- LIBSSH2_SFTP *sftp = NULL;
- - int resource_id = 0, sftp_rsrcid = 0;
- + zend_resource *rsrc = NULL, *sftp_rsrc = NULL;
- php_url *resource;
- int result;
-
- - resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid);
- + resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc);
- if (!resource || !session || !sftp || !resource->path) {
- if (resource) {
- php_url_free(resource);
- @@ -436,7 +429,7 @@ static int php_ssh2_sftp_rename(php_stream_wrapper *wrapper, const char *url_fro
- {
- LIBSSH2_SESSION *session = NULL;
- LIBSSH2_SFTP *sftp = NULL;
- - int resource_id = 0, sftp_rsrcid = 0;
- + zend_resource *rsrc = NULL, *sftp_rsrc = NULL;
- php_url *resource, *resource_to;
- int result;
-
- @@ -453,7 +446,7 @@ static int php_ssh2_sftp_rename(php_stream_wrapper *wrapper, const char *url_fro
- return 0;
- }
-
- - resource = php_ssh2_fopen_wraper_parse_path(url_from, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid);
- + resource = php_ssh2_fopen_wraper_parse_path(url_from, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc);
- if (!resource || !session || !sftp || !resource->path) {
- if (resource) {
- php_url_free(resource);
- @@ -479,11 +472,11 @@ static int php_ssh2_sftp_mkdir(php_stream_wrapper *wrapper, const char *url, int
- {
- LIBSSH2_SESSION *session = NULL;
- LIBSSH2_SFTP *sftp = NULL;
- - int resource_id = 0, sftp_rsrcid = 0;
- + zend_resource *rsrc = NULL, *sftp_rsrc = NULL;
- php_url *resource;
- int result;
-
- - resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid);
- + resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc);
- if (!resource || !session || !sftp || !resource->path) {
- if (resource) {
- php_url_free(resource);
- @@ -515,11 +508,11 @@ static int php_ssh2_sftp_rmdir(php_stream_wrapper *wrapper, const char *url, int
- {
- LIBSSH2_SESSION *session = NULL;
- LIBSSH2_SFTP *sftp = NULL;
- - int resource_id = 0, sftp_rsrcid = 0;
- + zend_resource *rsrc = NULL, *sftp_rsrc = NULL;
- php_url *resource;
- int result;
-
- - resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid);
- + resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc);
- if (!resource || !session || !sftp || !resource->path) {
- if (resource) {
- php_url_free(resource);
- @@ -591,7 +584,7 @@ PHP_FUNCTION(ssh2_sftp)
- data = emalloc(sizeof(php_ssh2_sftp_data));
- data->session = session;
- data->sftp = sftp;
- - data->session_rsrcid = Z_RES_P(zsession)->handle;
- + data->session_rsrc = Z_RES_P(zsession);
- Z_ADDREF_P(zsession);
-
- RETURN_RES(zend_register_resource(data, le_ssh2_sftp));
|