current loadcfg.c,1.151,1.152

Fabian Keil <[email protected]> Sun, 08 May 2016 10:46:57 +0000
Newsgroups gmane.comp.web.privoxy.cvs
Message-ID <[email protected]>
Update of /cvsroot/ijbswa/current
In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv20535

Modified Files:
	loadcfg.c 
Log Message:
Turn invalid max-client-connections values into fatal errors

Use FD_SETSIZE/2 as upper limit because Privoxy needs two
sockets to serve client connections that need forwarding.

Ignore the fact that the first three file descriptors
are usually set to /dev/null, one is used for logging
and yet another file descriptor is required to load
config files.

Make an exception for _WIN32 as its select() is documented
to handle file descriptors above FD_SETSIZE just fine.


Index: loadcfg.c
===================================================================
RCS file: /cvsroot/ijbswa/current/loadcfg.c,v
retrieving revision 1.151
retrieving revision 1.152
diff -C2 -d -r1.151 -r1.152
*** loadcfg.c	3 May 2016 13:21:42 -0000	1.151
--- loadcfg.c	8 May 2016 10:46:55 -0000	1.152
***************
*** 1377,1385 ****
           {
              int max_client_connections = parse_numeric_value(cmd, arg);
!             if (0 <= max_client_connections)
              {
!                /* XXX: log error */
!                config->max_client_connections = max_client_connections;
              }
              break;
           }
--- 1377,1416 ----
           {
              int max_client_connections = parse_numeric_value(cmd, arg);
! 
! #ifndef _WIN32
!             /*
!              * Reject values below 1 for obvious reasons and values above
!              * FD_SETSIZE/2 because Privoxy needs two sockets to serve
!              * client connections that need forwarding.
!              *
!              * We ignore the fact that the first three file descriptors
!              * are usually set to /dev/null, one is used for logging
!              * and yet another file descriptor is required to load
!              * config files.
!              */
!             if ((max_client_connections < 1) || (FD_SETSIZE/2 < max_client_connections))
              {
!                log_error(LOG_LEVEL_FATAL, "max-client-connections value %d"
!                   " is invalid. Value needs to be above 1 and below %d"
!                   " (FD_SETSIZE/2).", max_client_connections, FD_SETSIZE/2);
              }
+ #else
+             /*
+              * The Windows libc uses FD_SETSIZE for an array used
+              * by select(), but has no problems with file descriptors
+              * above the limit as long as no more than FD_SETSIZE are
+              * passed to select().
+              * https://msdn.microsoft.com/en-us/library/windows/desktop/ms739169%28v=vs.85%29.aspx
+              *
+              * XXX: Do OS/2, Amiga etc. belong here as well?
+              */
+             if (max_client_connections < 1)
+             {
+                log_error(LOG_LEVEL_FATAL, "max-client-connections value"
+                   " has to be a number above 1. %d is invalid.",
+                   max_client_connections);
+             }
+ #endif
+             config->max_client_connections = max_client_connections;
              break;
           }


------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z