cvs: php4 /ext/ftp ftp.c /main network.c php_network.h
| From: | Stig Venaas | Date: | Sun, 10 Feb 2002 12:35:29 +0000 |
| Subject: | cvs: php4 /ext/ftp ftp.c /main network.c php_network.h | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-9333@lists.php.net to get a copy of this message | ||
venaas Sun Feb 10 07:35:29 2002 EDT
Modified files:
/php4/ext/ftp ftp.c
/php4/main network.c php_network.h
Log:
Added php_sockaddr_size() in network.c (and the header file). This is used
in ftp.c to make sure connect() and bind() is called with size argument
which is exactly the size of the relevant sockaddr_xx structure
Index: php4/ext/ftp/ftp.c
diff -u php4/ext/ftp/ftp.c:1.42 php4/ext/ftp/ftp.c:1.43
--- php4/ext/ftp/ftp.c:1.42 Sun Jan 6 18:10:54 2002
+++ php4/ext/ftp/ftp.c Sun Feb 10 07:35:29 2002
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: ftp.c,v 1.42 2002/01/06 23:10:54 venaas Exp $ */
+/* $Id: ftp.c,v 1.43 2002/02/10 12:35:29 venaas Exp $ */
#include "php.h"
@@ -117,7 +117,7 @@
return NULL;
}
- ftp->fd = php_hostconnect(host, port ? port : 21, SOCK_STREAM, (int) timeout_sec);
+ ftp->fd = php_hostconnect(host, (unsigned short) (port ? port : 21), SOCK_STREAM, (int)
timeout_sec);
if (ftp->fd == -1) {
goto bail;
}
@@ -1050,14 +1050,14 @@
goto bail;
}
- size = sizeof(php_sockaddr_storage);
-
/* passive connection handler */
if (ftp->pasv) {
/* clear the ready status */
ftp->pasv = 1;
/* connect */
+ /* Win 95/98 seems not to like size > sizeof(sockaddr_in) */
+ size = php_sockaddr_size(&ftp->pasvaddr);
tv.tv_sec = ftp->timeout_sec;
tv.tv_usec = 0;
if (php_connect_nonb(fd, (struct sockaddr*) &ftp->pasvaddr, size, &tv) == -1) {
@@ -1075,6 +1075,7 @@
/* bind to a local address */
php_any_addr(sa->sa_family, &addr, 0);
+ size = php_sockaddr_size(&addr);
if (bind(fd, (struct sockaddr*) &addr, size) == -1) {
perror("bind");
Index: php4/main/network.c
diff -u php4/main/network.c:1.27 php4/main/network.c:1.28
--- php4/main/network.c:1.27 Mon Jan 21 02:54:56 2002
+++ php4/main/network.c Sun Feb 10 07:35:29 2002
@@ -15,7 +15,7 @@
| Authors: Stig Venaas <venaas@uninett.no> |
+----------------------------------------------------------------------+
*/
-/* $Id: network.c,v 1.27 2002/01/21 07:54:56 derick Exp $ */
+/* $Id: network.c,v 1.28 2002/02/10 12:35:29 venaas Exp $ */
#include "php.h"
@@ -382,6 +382,28 @@
sin->sin_addr.s_addr = INADDR_ANY;
break;
}
+ }
+}
+/* }}} */
+
+/* {{{ php_sockaddr_size
+ * Returns the size of struct sockaddr_xx for the family
+ */
+int php_sockaddr_size(php_sockaddr_storage *addr)
+{
+ switch (((struct sockaddr *)addr)->sa_family) {
+ case AF_INET:
+ return sizeof(struct sockaddr_in);
+#ifdef AF_INET6
+ case AF_INET6:
+ return sizeof(struct sockaddr_in6);
+#endif
+#ifdef AF_UNIX
+ case AF_UNIX:
+ return sizeof(struct sockaddr_un);
+#endif
+ default:
+ return 0;
}
}
/* }}} */
Index: php4/main/php_network.h
diff -u php4/main/php_network.h:1.10 php4/main/php_network.h:1.11
--- php4/main/php_network.h:1.10 Sun Jan 6 17:45:43 2002
+++ php4/main/php_network.h Sun Feb 10 07:35:29 2002
@@ -15,7 +15,7 @@
| Authors: Stig Venaas <venaas@uninett.no> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_network.h,v 1.10 2002/01/06 22:45:43 venaas Exp $ */
+/* $Id: php_network.h,v 1.11 2002/02/10 12:35:29 venaas Exp $ */
#ifndef _PHP_NETWORK_H
#define _PHP_NETWORK_H
@@ -54,6 +54,7 @@
int php_hostconnect(const char *host, unsigned short port, int socktype, int timeout);
PHPAPI int php_connect_nonb(int sockfd, const struct sockaddr *addr, socklen_t addrlen, struct
timeval *timeout);
void php_any_addr(int family, php_sockaddr_storage *addr, unsigned short port);
+int php_sockaddr_size(php_sockaddr_storage *addr);
#endif /* _PHP_NETWORK_H */