Print this page
OS-4741 Add support for multiple addresses & IPv6 to lx-branded zones
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>

@@ -34,10 +34,11 @@
 #include <libcontract_priv.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <zone.h>
 
 #include "dhcpagent_ipc.h"
 #include "dhcpagent_util.h"
 
 /*

@@ -123,11 +124,17 @@
         dhcp_ipc_request_t      *request;
         dhcp_ipc_reply_t        *reply;
         int                     ctfd;
         pid_t                   childpid;
         ctid_t                  ct;
+        char                    dhcpcmd[MAXPATHLEN];
+        const char              *zroot = zone_get_nroot();
 
+        /* Prepend the root of the native code in the brand to the command */
+        (void) snprintf(dhcpcmd, sizeof (dhcpcmd), "%s%s", zroot != NULL ?
+            zroot : "", DHCP_AGENT_PATH);
+
         /*
          * just send a dummy request to the agent to find out if it's
          * up.  we do this instead of directly connecting to it since
          * we want to make sure we follow its IPC conventions
          * (otherwise, it will log warnings to syslog).

@@ -158,11 +165,11 @@
         switch (childpid) {
         case -1:
                 goto fail;
 
         case  0:
-                (void) execl(DHCP_AGENT_PATH, DHCP_AGENT_PATH, (char *)0);
+                (void) execl(dhcpcmd, dhcpcmd, (char *)0);
                 _exit(EXIT_FAILURE);
 
         default:
                 break;
         }