diff options
Diffstat (limited to 'src/firejail/dhcp.c')
-rw-r--r-- | src/firejail/dhcp.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/firejail/dhcp.c b/src/firejail/dhcp.c index c9bbb4d8f..7ce9a2b18 100644 --- a/src/firejail/dhcp.c +++ b/src/firejail/dhcp.c | |||
@@ -117,6 +117,21 @@ static void dhcp_start_dhclient(const Dhclient *client) { | |||
117 | *(client->pid) = dhcp_read_pidfile(client); | 117 | *(client->pid) = dhcp_read_pidfile(client); |
118 | } | 118 | } |
119 | 119 | ||
120 | static void dhcp_waitll(const char *ifname) { | ||
121 | sbox_run(SBOX_ROOT | SBOX_CAPS_NETWORK | SBOX_SECCOMP, 3, PATH_FNET, "waitll", ifname); | ||
122 | } | ||
123 | |||
124 | static void dhcp_waitll_all() { | ||
125 | if (cfg.bridge0.arg_ip6_dhcp) | ||
126 | dhcp_waitll(cfg.bridge0.devsandbox); | ||
127 | if (cfg.bridge1.arg_ip6_dhcp) | ||
128 | dhcp_waitll(cfg.bridge1.devsandbox); | ||
129 | if (cfg.bridge2.arg_ip6_dhcp) | ||
130 | dhcp_waitll(cfg.bridge2.devsandbox); | ||
131 | if (cfg.bridge3.arg_ip6_dhcp) | ||
132 | dhcp_waitll(cfg.bridge3.devsandbox); | ||
133 | } | ||
134 | |||
120 | void dhcp_start(void) { | 135 | void dhcp_start(void) { |
121 | if (!any_dhcp()) | 136 | if (!any_dhcp()) |
122 | return; | 137 | return; |
@@ -131,6 +146,7 @@ void dhcp_start(void) { | |||
131 | printf("Running dhclient -4 in the background as pid %ld\n", (long) dhclient4_pid); | 146 | printf("Running dhclient -4 in the background as pid %ld\n", (long) dhclient4_pid); |
132 | } | 147 | } |
133 | if (any_ip6_dhcp()) { | 148 | if (any_ip6_dhcp()) { |
149 | dhcp_waitll_all(); | ||
134 | dhcp_start_dhclient(&dhclient6); | 150 | dhcp_start_dhclient(&dhclient6); |
135 | if (arg_debug) | 151 | if (arg_debug) |
136 | printf("Running dhclient -6 in the background as pid %ld\n", (long) dhclient6_pid); | 152 | printf("Running dhclient -6 in the background as pid %ld\n", (long) dhclient6_pid); |