Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:55366 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 44080 invoked from network); 11 Sep 2011 20:00:28 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 11 Sep 2011 20:00:28 -0000 Authentication-Results: pb1.pair.com smtp.mail=abrender@elitehosts.com; spf=permerror; sender-id=unknown Authentication-Results: pb1.pair.com header.from=abrender@elitehosts.com; sender-id=unknown Received-SPF: error (pb1.pair.com: domain elitehosts.com from 209.67.29.110 cause and error) X-PHP-List-Original-Sender: abrender@elitehosts.com X-Host-Fingerprint: 209.67.29.110 webmail.elitehosts.com Received: from [209.67.29.110] ([209.67.29.110:52485] helo=ezri.elitehosts.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 1C/68-45650-E431D6E4 for ; Sun, 11 Sep 2011 16:00:26 -0400 Received: from al.secure.elitehosts.com ([209.67.23.117] helo=[192.168.40.6]) by ezri.elitehosts.com with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.72) (envelope-from ) id 1R2qC7-0003Z1-BX for internals@lists.php.net; Sun, 11 Sep 2011 15:59:59 -0400 Message-ID: <4E6D1340.6010408@elitehosts.com> Date: Sun, 11 Sep 2011 16:00:00 -0400 Organization: Elite Hosts User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.21) Gecko/20110831 Thunderbird/3.1.13 MIME-Version: 1.0 To: internals@lists.php.net References: <4E6B9466.6060608@elitehosts.com> In-Reply-To: Content-Type: multipart/mixed; boundary="------------000602030309040302050709" Subject: Re: [PHP-DEV] [PATCH]#55651 From: abrender@elitehosts.com (Avi Brender) --------------000602030309040302050709 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi, I've updated the patch - please see attached. Avi Brender Elite Hosts, Inc www.elitehosts.com ------------------------------------------------ WARNING !!! This email message is for the sole use of the intended recipient(s) and may contain confidential and privileged information. Any unauthorized review; use, disclosure or distribution is prohibited, and could result in criminal prosecution. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message. This message is private and is considered a confidential exchange - public disclosure of this electronic message or its contents are prohibited. On 09/11/2011 10:53 AM, Pierre Joye wrote: > hi, > > A simple test if it is IS_BOOL or IS_LONG should be enough, both types > use the the long value (convert_to_boolean_ex is slow and duplicate > the zval while it is not necessary). Then test > 0 instead of simply > assigning the value. > > On Sun, Sep 11, 2011 at 5:59 AM, Laruence wrote: >> Hi: >> after a quick look, I have one suggestion, >> if the (Z_TYPE_P(z_value) != IS_BOOL), you should call >> convert_to_boolean_ex to convert it to a boolean >> otherwise, people can not use a interge 1 as a true flag. >> >> thanks >> >> 2011/9/11 Avi Brender : >>> Hi, >>> >>> I've submitted bug #55651 along with a patch to implement a fix (also >>> attached) for the passive FTP mode issue. I was hoping that someone could >>> review the bug report and consider the patch for inclusion in future PHP >>> releases. >>> >>> Thanks so much! >>> >>> Avi Brender >>> Elite Hosts, Inc >>> www.elitehosts.com >>> >>> -- >>> PHP Internals - PHP Runtime Development Mailing List >>> To unsubscribe, visit: http://www.php.net/unsub.php >>> >> >> >> >> -- >> Laruence Xinchen Hui >> http://www.laruence.com/ >> >> -- >> PHP Internals - PHP Runtime Development Mailing List >> To unsubscribe, visit: http://www.php.net/unsub.php >> >> > > > --------------000602030309040302050709 Content-Type: text/x-patch; name="ftp_usepasvaddress.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="ftp_usepasvaddress.patch" diff -NaurbB ext/ftp.orig/ftp.c ext/ftp/ftp.c --- ext/ftp.orig/ftp.c 2010-12-31 21:19:59.000000000 -0500 +++ ext/ftp/ftp.c 2011-09-09 03:51:08.000000000 -0400 @@ -712,10 +712,11 @@ memset(&ftp->pasvaddr, 0, n); sa = (struct sockaddr *) &ftp->pasvaddr; -#if HAVE_IPV6 if (getpeername(ftp->fd, sa, &n) < 0) { return 0; } + +#if HAVE_IPV6 if (sa->sa_family == AF_INET6) { struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa; char *endptr, delimiter; @@ -768,8 +769,9 @@ ipbox.c[n] = (unsigned char) b[n]; } sin = (struct sockaddr_in *) sa; - sin->sin_family = AF_INET; + if (ftp->usepasvaddress) { sin->sin_addr = ipbox.ia[0]; + } sin->sin_port = ipbox.s[2]; ftp->pasv = 2; diff -NaurbB ext/ftp.orig/ftp.h ext/ftp/ftp.h --- ext/ftp.orig/ftp.h 2010-12-31 21:19:59.000000000 -0500 +++ ext/ftp/ftp.h 2011-09-09 03:52:38.000000000 -0400 @@ -31,6 +31,7 @@ #define FTP_DEFAULT_TIMEOUT 90 #define FTP_DEFAULT_AUTOSEEK 1 +#define FTP_DEFAULT_USEPASVADDRESS 1 #define PHP_FTP_FAILED 0 #define PHP_FTP_FINISHED 1 #define PHP_FTP_MOREDATA 2 @@ -71,6 +72,7 @@ php_sockaddr_storage pasvaddr; /* passive mode address */ long timeout_sec; /* User configureable timeout (seconds) */ int autoseek; /* User configureable autoseek flag */ + int usepasvaddress; /* Use the address returned by the pasv command */ int nb; /* "nonblocking" transfer in progress */ databuf_t *data; /* Data connection for "nonblocking" transfers */ diff -NaurbB ext/ftp.orig/php_ftp.c ext/ftp/php_ftp.c --- ext/ftp.orig/php_ftp.c 2010-12-31 21:19:59.000000000 -0500 +++ ext/ftp/php_ftp.c 2011-09-11 15:55:13.000000000 -0400 @@ -315,6 +315,7 @@ REGISTER_LONG_CONSTANT("FTP_AUTORESUME", PHP_FTP_AUTORESUME, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("FTP_TIMEOUT_SEC", PHP_FTP_OPT_TIMEOUT_SEC, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("FTP_AUTOSEEK", PHP_FTP_OPT_AUTOSEEK, CONST_PERSISTENT | CONST_CS); + REGISTER_LONG_CONSTANT("FTP_USEPASVADDRESS", PHP_FTP_OPT_USEPASVADDRESS, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("FTP_FAILED", PHP_FTP_FAILED, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("FTP_FINISHED", PHP_FTP_FINISHED, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("FTP_MOREDATA", PHP_FTP_MOREDATA, CONST_PERSISTENT | CONST_CS); @@ -363,6 +364,7 @@ /* autoseek for resuming */ ftp->autoseek = FTP_DEFAULT_AUTOSEEK; + ftp->usepasvaddress = FTP_DEFAULT_USEPASVADDRESS; #if HAVE_OPENSSL_EXT /* disable ssl */ ftp->use_ssl = 0; @@ -399,6 +401,7 @@ /* autoseek for resuming */ ftp->autoseek = FTP_DEFAULT_AUTOSEEK; + ftp->usepasvaddress = FTP_DEFAULT_USEPASVADDRESS; /* enable ssl */ ftp->use_ssl = 1; @@ -1395,6 +1398,19 @@ ftp->autoseek = Z_LVAL_P(z_value); RETURN_TRUE; break; + case PHP_FTP_OPT_USEPASVADDRESS: + if (Z_TYPE_P(z_value) != IS_BOOL && Z_TYPE_P(z_value) != IS_LONG) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Option USEPASVADDRESS expects value of type boolean or long, %s given", + zend_zval_type_name(z_value)); + RETURN_FALSE; + } + if (Z_LVAL_P(z_value) > 0) { + ftp->usepasvaddress = 1; + } else { + ftp->usepasvaddress = 0; + } + RETURN_TRUE; + break; default: php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown option '%ld'", option); RETURN_FALSE; @@ -1424,6 +1440,9 @@ case PHP_FTP_OPT_AUTOSEEK: RETURN_BOOL(ftp->autoseek); break; + case PHP_FTP_OPT_USEPASVADDRESS: + RETURN_BOOL(ftp->usepasvaddress); + break; default: php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown option '%ld'", option); RETURN_FALSE; diff -NaurbB ext/ftp.orig/php_ftp.h ext/ftp/php_ftp.h --- ext/ftp.orig/php_ftp.h 2010-12-31 21:19:59.000000000 -0500 +++ ext/ftp/php_ftp.h 2011-09-09 02:59:44.000000000 -0400 @@ -29,6 +29,7 @@ #define PHP_FTP_OPT_TIMEOUT_SEC 0 #define PHP_FTP_OPT_AUTOSEEK 1 +#define PHP_FTP_OPT_USEPASVADDRESS 2 #define PHP_FTP_AUTORESUME -1 PHP_MINIT_FUNCTION(ftp); --------------000602030309040302050709--