aboutsummaryrefslogtreecommitdiffstats
path: root/src/firejail/dhcp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/firejail/dhcp.c')
-rw-r--r--src/firejail/dhcp.c16
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
120static void dhcp_waitll(const char *ifname) {
121 sbox_run(SBOX_ROOT | SBOX_CAPS_NETWORK | SBOX_SECCOMP, 3, PATH_FNET, "waitll", ifname);
122}
123
124static 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
120void dhcp_start(void) { 135void 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);