cvs: php4 /ext/ftp ftp.c /main network.c php_network.h

From: 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 */

« previous php.cvs (#9333) next »