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
