Cameron Norman has proposed merging lp:~cameronnemo/upstart/ipv6 into 
lp:upstart.

Requested reviews:
  Upstart Reviewers (upstart-reviewers)
Related bugs:
  Bug #942955 in upstart : "upstart-socket-bridge doesn't support ipv6 sockets"
  https://bugs.launchpad.net/upstart/+bug/942955

For more details, see:
https://code.launchpad.net/~cameronnemo/upstart/ipv6/+merge/204599

Adds the inet6 option for the socket event parameter PROTO and the 
corresponding man page examples.
-- 
https://code.launchpad.net/~cameronnemo/upstart/ipv6/+merge/204599
Your team Upstart Reviewers is requested to review the proposed merge of 
lp:~cameronnemo/upstart/ipv6 into lp:upstart.
=== modified file 'ChangeLog'
--- ChangeLog	2014-01-22 11:16:20 +0000
+++ ChangeLog	2014-02-04 04:06:56 +0000
@@ -1,3 +1,4 @@
+<<<<<<< TREE
 2014-01-22  James Hunt  <[email protected]>
 
 	* init/main.c: logger_kmsg(): Use open(2) rather than fopen(3) to avoid
@@ -27,6 +28,15 @@
 	  - TestSystemInitReExec::test_pid1_reexec():
 	    - Create an invalid job to ensure re-exec can handle it.
 
+=======
+2014-01-20  Cameron Norman <[email protected]>
+	* extra/upstart-socket-bridge: Fixed indentation, used nih_local
+	* extra/man/socket-event.7: Added inet6 example
+
+2014-01-19  Kai Mast <[email protected]>
+	* extra/upstart-socket-bridge: Added IPv6 support
+
+>>>>>>> MERGE-SOURCE
 2014-01-15  James Hunt  <[email protected]>
 
 	* util/telinit.c: upstart_open(): Connect using private socket

=== modified file 'extra/man/socket-event.7'
--- extra/man/socket-event.7	2013-11-12 11:40:51 +0000
+++ extra/man/socket-event.7	2014-02-04 04:06:56 +0000
@@ -39,7 +39,7 @@
 .\"
 .SH EXAMPLES
 .\"
-.SS Internet socket
+.SS Internet (IPv4) socket
 Start web server when first client connects from localhost:
 .RS
 .nf
@@ -48,6 +48,15 @@
 .fi
 .RE
 .\"
+.SS Internet (IPv6) socket
+Start job when a client connects from localhost:
+.RS
+.nf
+
+start on socket PROTO=inet6 PORT=80 ADDR=::1
+.fi
+.RE
+.\"
 .SS Local socket
 .P
 .RS

=== modified file 'extra/upstart-socket-bridge.c'
--- extra/upstart-socket-bridge.c	2013-10-23 16:33:09 +0000
+++ extra/upstart-socket-bridge.c	2014-02-04 04:06:56 +0000
@@ -67,9 +67,10 @@
 	NihList entry;
 
 	union {
-		struct sockaddr        addr;
-		struct sockaddr_in sin_addr;
-		struct sockaddr_un sun_addr;
+		struct sockaddr         addr;
+		struct sockaddr_in  sin_addr;
+		struct sockaddr_in6 sin6_addr;
+		struct sockaddr_un  sun_addr;
 	};
 	socklen_t addrlen;
 
@@ -308,20 +309,36 @@
 		switch (sock->addr.sa_family) {
 		case AF_INET:
 			NIH_MUST (nih_str_array_add (&env, NULL, &env_len,
-						     "PROTO=inet"));
-
-			var = NIH_MUST (nih_sprintf (NULL, "PORT=%d",
-						     ntohs (sock->sin_addr.sin_port)));
-			NIH_MUST (nih_str_array_addp (&env, NULL, &env_len,
-						      var));
-			nih_discard (var);
-
-			var = NIH_MUST (nih_sprintf (NULL, "ADDR=%s",
-						     inet_ntoa (sock->sin_addr.sin_addr)));
-			NIH_MUST (nih_str_array_addp (&env, NULL, &env_len,
-						      var));
-			nih_discard (var);
-			break;
+							"PROTO=inet"));
+
+			var = NIH_MUST (nih_sprintf (NULL, "PORT=%d",
+							ntohs (sock->sin_addr.sin_port)));
+			NIH_MUST (nih_str_array_addp (&env, NULL, &env_len,
+							var));
+			nih_discard (var);
+
+			var = NIH_MUST (nih_sprintf (NULL, "ADDR=%s",
+							inet_ntoa (sock->sin_addr.sin_addr)));
+			NIH_MUST (nih_str_array_addp (&env, NULL, &env_len,
+							var));
+			nih_discard (var);
+ 		case AF_INET6:
+			NIH_MUST (nih_str_array_add (&env, NULL, &env_len,
+							"PROTO=inet6"));
+
+			var = NIH_MUST (nih_sprintf (NULL, "PORT=%d",
+							ntohs (sock->sin6_addr.sin6_port)));
+			NIH_MUST (nih_str_array_addp (&env, NULL, &env_len,
+							var));
+			nih_discard (var);
+
+			nih_local char buffer[INET6_ADDRSTRLEN];
+			var = NIH_MUST (nih_sprintf (NULL, "ADDR=%s",
+							inet_ntop(AF_INET6, &sock->sin6_addr.sin6_addr, buffer, INET6_ADDRSTRLEN)));
+
+			NIH_MUST (nih_str_array_addp (&env, NULL, &env_len,
+							var));
+			nih_discard (var);
 		case AF_UNIX:
 			NIH_MUST (nih_str_array_add (&env, NULL, &env_len,
 						     "PROTO=unix"));
@@ -504,6 +521,11 @@
 				sock->sin_addr.sin_family = AF_INET;
 				sock->sin_addr.sin_addr.s_addr = INADDR_ANY;
 				components = 1;
+			} else if (! strcmp (val, "inet6")) {
+				sock->addrlen = sizeof sock->sin6_addr;
+				sock->sin6_addr.sin6_family = AF_INET6;
+				sock->sin6_addr.sin6_addr = in6addr_any;
+				components = 1;
 			} else if (! strcmp (val, "unix")) {
 				sock->addrlen = sizeof sock->sun_addr;
 				sock->sun_addr.sun_family = AF_UNIX;
@@ -515,22 +537,25 @@
 			}
 
 		} else if (! strncmp (*env, "PORT", name_len)
-			   && (sock->sin_addr.sin_family == AF_INET)) {
+		           && (sock->sin_addr.sin_family == AF_INET)) {
 			sock->sin_addr.sin_port = htons (atoi (val));
 			components--;
-
+		} else if (! strncmp (*env, "PORT", name_len)
+		           && (sock->sin6_addr.sin6_family == AF_INET6)) {
+			sock->sin6_addr.sin6_port = htons (atoi (val));
+			components--;
 		} else if (! strncmp (*env, "ADDR", name_len)
-			   && (sock->sin_addr.sin_family == AF_INET)) {
+		           && (sock->sin_addr.sin_family == AF_INET)) {
 			if (inet_aton (val, &(sock->sin_addr.sin_addr)) == 0) {
 				nih_warn ("Ignored socket event with invalid ADDR=%s in %s",
-					  val, job->path);
+				          val, job->path);
 				goto error;
 			}
 
 		} else if (! strncmp (*env, "PATH", name_len)
-			   && (sock->sun_addr.sun_family == AF_UNIX)) {
+		           && (sock->sun_addr.sun_family == AF_UNIX)) {
 			strncpy (sock->sun_addr.sun_path, val,
-				 sizeof sock->sun_addr.sun_path);
+			         sizeof sock->sun_addr.sun_path);
 
 			if (sock->sun_addr.sun_path[0] == '@')
 				sock->sun_addr.sun_path[0] = '\0';

-- 
upstart-devel mailing list
[email protected]
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/upstart-devel

Reply via email to