sesser Sun Sep 8 15:35:43 2002 EDT
Modified files:
/php4/ext/standard ftp_fopen_wrapper.c
Log:
ftp(s) fopen() wrapper does no longer ignore the ip returned by PASV.
Index: php4/ext/standard/ftp_fopen_wrapper.c
diff -u php4/ext/standard/ftp_fopen_wrapper.c:1.29
php4/ext/standard/ftp_fopen_wrapper.c:1.30
--- php4/ext/standard/ftp_fopen_wrapper.c:1.29 Sun Sep 8 15:11:07 2002
+++ php4/ext/standard/ftp_fopen_wrapper.c Sun Sep 8 15:35:42 2002
@@ -17,7 +17,7 @@
| Hartmut Holzgraefe <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: ftp_fopen_wrapper.c,v 1.29 2002/09/08 19:11:07 sesser Exp $ */
+/* $Id: ftp_fopen_wrapper.c,v 1.30 2002/09/08 19:35:42 sesser Exp $ */
#include "php.h"
#include "php_globals.h"
@@ -137,11 +137,12 @@
php_stream *stream=NULL, *datastream=NULL;
php_url *resource=NULL;
char tmp_line[512];
+ char ip[sizeof("123.123.123.123")];
unsigned short portno;
char *scratch;
int result;
int i, use_ssl, use_ssl_on_data=0;
- char *tpath, *ttpath;
+ char *tpath, *ttpath, *hoststart=NULL;
size_t file_size = 0;
if (strchr(mode, 'a') || strchr(mode, '+')) {
@@ -331,13 +332,20 @@
for (tpath += 4; *tpath && !isdigit((int) *tpath); tpath++);
if (!*tpath)
goto errexit;
- /* skip over the host ip, we just assume it's the same */
+ /* skip over the host ip, to get the port */
+ hoststart = tpath;
for (i = 0; i < 4; i++) {
for (; isdigit((int) *tpath); tpath++);
if (*tpath != ',')
goto errexit;
+ *tpath='.';
tpath++;
}
+ tpath[-1] = '\0';
+ memcpy(ip, hoststart, sizeof(ip));
+ ip[sizeof(ip)-1] = '\0';
+ hoststart = ip;
+
/* pull out the MSB of the port */
portno = (unsigned short) strtol(tpath, &ttpath, 10) * 256;
if (ttpath == NULL) {
@@ -392,7 +400,10 @@
}
/* open the data channel */
- datastream = php_stream_sock_open_host(resource->host, portno, SOCK_STREAM, 0,
0);
+ if (hoststart == NULL) {
+ hoststart = resource->host;
+ }
+ datastream = php_stream_sock_open_host(hoststart, portno, SOCK_STREAM, 0, 0);
if (datastream == NULL)
goto errexit;
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php