components/isc-dhcp/patches/004-Manage_41845.patch
author Mike Sullivan <Mike.Sullivan@Oracle.COM>
Thu, 13 Oct 2016 17:44:49 -0700
changeset 7105 60994030253b
parent 6093 89cd363fa5c9
permissions -rw-r--r--
24616528 sqlite-3 fails to build with studio 12.5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6093
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
     1
This patch adds a method to manage the resource limit which was
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
     2
introduced by the fix for ISC-Bugs #41845. This patch was developed
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
     3
in-house. ISC did not express any interest in incorporating this patch
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
     4
into their code since they consider the limit to be a mitigating
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
     5
solution.
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
     6
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
     7
--- old/includes/omapip/omapip.h	Tue May 24 17:01:08 2016
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
     8
+++ new/includes/omapip/omapip.h	Tue May 24 17:01:08 2016
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
     9
@@ -468,6 +468,9 @@
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    10
 
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    11
 extern omapi_object_type_t *omapi_object_types;
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    12
 
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    13
+#if defined (sun)
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    14
+void omapi_set_max_fd_value (void);
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    15
+#endif
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    16
 void omapi_type_relinquish (void);
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    17
 isc_result_t omapi_init (void);
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    18
 isc_result_t omapi_object_type_register (omapi_object_type_t **,
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    19
--- old/omapip/listener.c	Tue May 24 17:01:08 2016
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    20
+++ new/omapip/listener.c	Tue May 24 17:01:08 2016
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    21
@@ -41,6 +41,10 @@
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    22
 trace_type_t *trace_listener_accept;
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    23
 #endif
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    24
 
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    25
+#if defined (sun)
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    26
+static int conn_limit = MAX_FD_VALUE; /* max number of open sockets allowed */
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    27
+#endif
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    28
+
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    29
 OMAPI_OBJECT_ALLOC (omapi_listener,
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    30
 		    omapi_listener_object_t, omapi_type_listener)
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    31
 
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    32
@@ -210,6 +214,35 @@
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    33
 	return l -> socket;
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    34
 }
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    35
 
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    36
+#if defined (sun)
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    37
+/* If OMAPI_CONN_LIMIT environment variable is set, obtain value. */
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    38
+const char *fname = "omapi_set_max_fd_value";
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    39
+void omapi_set_max_fd_value (void)
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    40
+{
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    41
+	const char *env;
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    42
+	char *end = NULL;
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    43
+	int envval = conn_limit;
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    44
+
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    45
+	env = getenv("OMAPI_CONN_LIMIT");
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    46
+	if (env != NULL) {
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    47
+		errno = 0;
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    48
+		envval = (int)strtol(env, &end, 10);
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    49
+		if (errno != 0 || env == end || *end != '\0' || envval < 0) {
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    50
+			(void) log_error("%s: \"%s\" is not a valid connection "
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    51
+					"limit value\n", fname, env);
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    52
+			errno = 0;
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    53
+		} else {
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    54
+			conn_limit = envval;
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    55
+		}
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    56
+	}
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    57
+	(void) log_debug("%s: conn_limit = %d%s\n", fname, conn_limit,
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    58
+			(conn_limit == MAX_FD_VALUE) ? " (default)" :
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    59
+			(conn_limit == 0) ? " (unlimited)" : "");
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    60
+
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    61
+	return;
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    62
+}
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    63
+#endif
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    64
+
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    65
 /* Reader callback for a listener object.   Accept an incoming connection. */
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    66
 isc_result_t omapi_accept (omapi_object_t *h)
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    67
 {
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    68
@@ -234,7 +267,13 @@
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    69
 		return ISC_R_UNEXPECTED;
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    70
 	}
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    71
 
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    72
+#if !defined (sun)
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    73
 	if ((MAX_FD_VALUE != 0) && (socket > MAX_FD_VALUE)) {
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    74
+#else
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    75
+	if ((conn_limit != 0) && (socket > conn_limit)) {
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    76
+		(void) log_debug("omapi_accept: No more available "
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    77
+		    "sockets - closing latest.\n");
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    78
+#endif
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    79
 		close(socket);
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    80
 		return (ISC_R_NORESOURCES);
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    81
 	}
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    82
--- old/server/dhcpd.c	Tue May 24 17:01:08 2016
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    83
+++ new/server/dhcpd.c	Tue May 24 17:01:08 2016
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    84
@@ -363,6 +363,10 @@
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    85
 		path_dhcpd_conf = s;
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    86
 	}
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    87
 
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    88
+#if defined (sun)
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    89
+	omapi_set_max_fd_value ();
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    90
+#endif
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    91
+
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    92
 #ifdef DHCPv6
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    93
         if (local_family == AF_INET6) {
89cd363fa5c9 22879627 problem in SERVICE/DHCP-SERVER
Ben Chang <Benjamin.Chang@Oracle.COM>
parents:
diff changeset
    94
                 /* DHCPv6: override DHCPv4 lease and pid filenames */