From: Michael Chase-S. <mc...@us...> - 2011-09-06 23:35:59
|
Update of /cvsroot/sblim/sfcb In directory vz-cvs-3.sog:/tmp/cvs-serv13676 Modified Files: ChangeLog NEWS httpAdapter.c Log Message: 3400114 sfcb fails to start with ipv6 disabled Index: NEWS =================================================================== RCS file: /cvsroot/sblim/sfcb/NEWS,v retrieving revision 1.606 retrieving revision 1.607 diff -u -d -r1.606 -r1.607 --- NEWS 26 Aug 2011 02:02:18 -0000 1.606 +++ NEWS 6 Sep 2011 23:35:56 -0000 1.607 @@ -6,6 +6,7 @@ - 3386391 HOST_NAME_MAX undefined - 3393324 sfcb process abort in IndCIMXMLHandlerInvokeMethod - 3398337 Namespaces of filter and handler for IndSub not checked +- 3400114 sfcb fails to start with ipv6 disabled Changes in 1.3.12 ================= Index: httpAdapter.c =================================================================== RCS file: /cvsroot/sblim/sfcb/httpAdapter.c,v retrieving revision 1.90 retrieving revision 1.91 diff -u -d -r1.90 -r1.91 --- httpAdapter.c 21 Jun 2011 16:14:13 -0000 1.90 +++ httpAdapter.c 6 Sep 2011 23:35:56 -0000 1.91 @@ -148,6 +148,10 @@ #define USE_INET6 #endif +#ifdef USE_INET6 +static int fallback_ipv4; +#endif + void initHttpProcCtl(int p) { httpProcSemKey=ftok(SFCB_BINARY,'H'); @@ -1256,6 +1260,7 @@ if (fd < 0) { mlogf(M_INFO, M_SHOW, "--- Using IPv4 address\n"); fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); + fallback_ipv4 = 1; } #else fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); @@ -1264,53 +1269,74 @@ return fd; } -static int -bindToPort(int sock, int port, void *ssin, socklen_t * sin_len) -{ #ifdef USE_INET6 +static struct sockaddr * +prepSockAddr6(int port, void *ssin, socklen_t * sin_len) +{ struct sockaddr_in6 *sin = ssin; -#else - struct sockaddr_in *sin = ssin; -#endif *sin_len = sizeof(*sin); - memset(sin, 0, *sin_len); - if (sock >= 0) { - if (getControlBool("httpLocalOnly", &httpLocalOnly)) - httpLocalOnly = 0; + sin->sin6_family = AF_INET6; + if (httpLocalOnly) + sin->sin6_addr = in6addr_loopback; + else + sin->sin6_addr = in6addr_any; + sin->sin6_port = htons(port); -#ifdef USE_INET6 - sin->sin6_family = AF_INET6; - if (httpLocalOnly) - sin->sin6_addr = in6addr_loopback; - else - sin->sin6_addr = in6addr_any; - sin->sin6_port = htons(port); -#else - sin->sin_family = AF_INET; - if (httpLocalOnly) { - const char *loopback_int = "127.0.0.1"; - inet_aton(loopback_int, &(sin->sin_addr)); - } else - sin->sin_addr.s_addr = INADDR_ANY; - sin->sin_port = htons(port); + return (struct sockaddr *) sin; +} #endif - if (bind(sock, (struct sockaddr *) sin, *sin_len) || listen(sock, 10)) { - mlogf(M_ERROR, M_SHOW, "--- Cannot listen on port %ld (%s)\n", port, - strerror(errno)); - sleep(1); - return 1; - } - return 0; +static struct sockaddr * +prepSockAddr4(int port, void *ssin, socklen_t * sin_len) +{ + struct sockaddr_in *sin = ssin; + + *sin_len = sizeof(*sin); + memset(sin, 0, *sin_len); + + sin->sin_family = AF_INET; + if (httpLocalOnly) { + const char *loopback_int = "127.0.0.1"; + inet_aton(loopback_int, &(sin->sin_addr)); + } else + sin->sin_addr.s_addr = INADDR_ANY; + sin->sin_port = htons(port); + + return (struct sockaddr *) sin; +} + + +static int +bindToPort(int sock, int port, void *ssin, socklen_t * sin_len) +{ + struct sockaddr *sin; + + if (sock < 0) + return 1; + if (getControlBool("httpLocalOnly", &httpLocalOnly)) + httpLocalOnly = 0; + +#ifdef USE_INET6 + if (!fallback_ipv4) + sin = prepSockAddr6(port, ssin, sin_len); + else +#endif + sin = prepSockAddr4(port, ssin, sin_len); + + if (bind(sock, sin, *sin_len) || listen(sock, 10)) { + mlogf(M_ERROR, M_SHOW, "--- Cannot listen on port %ld (%s)\n", port, + strerror(errno)); + sleep(1); + return 1; } - return 1; + return 0; } #ifdef HAVE_UDS Index: ChangeLog =================================================================== RCS file: /cvsroot/sblim/sfcb/ChangeLog,v retrieving revision 1.682 retrieving revision 1.683 diff -u -d -r1.682 -r1.683 --- ChangeLog 26 Aug 2011 02:02:18 -0000 1.682 +++ ChangeLog 6 Sep 2011 23:35:56 -0000 1.683 @@ -1,3 +1,9 @@ +2011-09-06 Michael Chase-Salerno <br...@li...> + + * httpAdapter.c: + [ 3400114 ] sfcb fails to start with ipv6 disabled + Patch from kkaempf + 2011-08-25 Chris Buccella <buc...@li...> * interopProvider.c: |