|
|
@ -65,11 +65,18 @@ static int issetugid() { |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(HAVE_IPV6) && defined(HAVE_INET_PTON) |
|
|
|
# define USE_IPV6 |
|
|
|
#endif |
|
|
|
|
|
|
|
static int bind_socket(const char *addr, unsigned short port, const char *unixsocket, uid_t uid, gid_t gid, int mode) { |
|
|
|
int fcgi_fd, socket_type, val; |
|
|
|
|
|
|
|
struct sockaddr_un fcgi_addr_un; |
|
|
|
struct sockaddr_in fcgi_addr_in; |
|
|
|
#ifdef USE_IPV6 |
|
|
|
struct sockaddr_in6 fcgi_addr_in6; |
|
|
|
#endif |
|
|
|
struct sockaddr *fcgi_addr; |
|
|
|
|
|
|
|
socklen_t servlen; |
|
|
@ -118,16 +125,40 @@ static int bind_socket(const char *addr, unsigned short port, const char *unixso |
|
|
|
} else { |
|
|
|
memset(&fcgi_addr_in, 0, sizeof(fcgi_addr_in)); |
|
|
|
fcgi_addr_in.sin_family = AF_INET; |
|
|
|
if (addr != NULL) { |
|
|
|
fcgi_addr_in.sin_addr.s_addr = inet_addr(addr); |
|
|
|
} else { |
|
|
|
fcgi_addr_in.sin_addr.s_addr = htonl(INADDR_ANY); |
|
|
|
} |
|
|
|
fcgi_addr_in.sin_port = htons(port); |
|
|
|
servlen = sizeof(fcgi_addr_in); |
|
|
|
|
|
|
|
servlen = sizeof(fcgi_addr_in); |
|
|
|
socket_type = AF_INET; |
|
|
|
fcgi_addr = (struct sockaddr *) &fcgi_addr_in; |
|
|
|
|
|
|
|
#ifdef USE_IPV6 |
|
|
|
memset(&fcgi_addr_in6, 0, sizeof(fcgi_addr_in6)); |
|
|
|
fcgi_addr_in6.sin6_family = AF_INET6; |
|
|
|
fcgi_addr_in6.sin6_port = fcgi_addr_in.sin_port; |
|
|
|
#endif |
|
|
|
|
|
|
|
if (addr == NULL) { |
|
|
|
fcgi_addr_in.sin_addr.s_addr = htonl(INADDR_ANY); |
|
|
|
#ifdef HAVE_INET_PTON |
|
|
|
} else if (1 == inet_pton(AF_INET, addr, &fcgi_addr_in.sin_addr)) { |
|
|
|
/* nothing to do */ |
|
|
|
#ifdef HAVE_IPV6 |
|
|
|
} else if (1 == inet_pton(AF_INET6, addr, &fcgi_addr_in6.sin6_addr)) { |
|
|
|
servlen = sizeof(fcgi_addr_in6); |
|
|
|
socket_type = AF_INET6; |
|
|
|
fcgi_addr = (struct sockaddr *) &fcgi_addr_in6; |
|
|
|
#endif |
|
|
|
} else { |
|
|
|
fprintf(stderr, "spawn-fcgi: '%s' is not a valid IP address\n", addr); |
|
|
|
return -1; |
|
|
|
#else |
|
|
|
} else { |
|
|
|
if ((in_addr_t)(-1) == (fcgi_addr_in.sin_addr.s_addr = inet_addr(addr))) { |
|
|
|
fprintf(stderr, "spawn-fcgi: '%s' is not a valid IPv4 address\n", addr); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
#endif |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -379,7 +410,7 @@ static void show_help () { |
|
|
|
"Options:\n" \ |
|
|
|
" -f <path> filename of the fcgi-application (ignored if <fcgiapp> is given)\n" \ |
|
|
|
" -d <directory> chdir to directory before spawning\n" \ |
|
|
|
" -a <address> bind to IP address\n" \ |
|
|
|
" -a <address> bind to IPv4/IPv6 address (defaults to 0.0.0.0)\n" \ |
|
|
|
" -p <port> bind to TCP-port\n" \ |
|
|
|
" -s <path> bind to Unix domain socket\n" \ |
|
|
|
" -M <mode> change Unix domain socket mode\n" \ |
|
|
|