aboutsummaryrefslogtreecommitdiff
path: root/networking/ifupdown.c
diff options
context:
space:
mode:
authorFrank Bergmann <frank.frajasalo@googlemail.com>2015-03-13 10:05:08 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2015-03-22 17:04:27 +0100
commit6ca03f2dd82ee2a09f257fad7c2bf6898310c438 (patch)
treeb2430893e999ab9157a4f29899734081227a0bb4 /networking/ifupdown.c
parent75a76269ba2549cb5392d7d720a4c393de01b934 (diff)
downloadbusybox-6ca03f2dd82ee2a09f257fad7c2bf6898310c438.tar.gz
ifupdown: correct ifstate update during 'ifup -a'. Closes 6212
When 'if -a' runs into an failure on an interface all further interfaces won't be correctly updated in ifstate. This patch inserts a new variable that only tracks the current interfaces failure so that the write to ifstate can rely on this and not the one for the functions return value. Fixes https://bugs.busybox.net/show_bug.cgi?id=6212 Signed-off-by: Frank Bergmann <frank.frajasalo@googlemail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'networking/ifupdown.c')
-rw-r--r--networking/ifupdown.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/networking/ifupdown.c b/networking/ifupdown.c
index daabeec0c..9f2500331 100644
--- a/networking/ifupdown.c
+++ b/networking/ifupdown.c
@@ -1239,6 +1239,7 @@ int ifupdown_main(int argc UNUSED_PARAM, char **argv)
char *pch;
bool okay = 0;
int cmds_ret;
+ bool curr_failure = 0;
iface = xstrdup(target_list->data);
target_list = target_list->link;
@@ -1306,9 +1307,9 @@ int ifupdown_main(int argc UNUSED_PARAM, char **argv)
if (cmds_ret == -1) {
bb_error_msg("don't seem to have all the variables for %s/%s",
liface, currif->address_family->name);
- any_failures = 1;
+ any_failures = curr_failure = 1;
} else if (cmds_ret == 0) {
- any_failures = 1;
+ any_failures = curr_failure = 1;
}
currif->iface = oldiface;
@@ -1329,7 +1330,7 @@ int ifupdown_main(int argc UNUSED_PARAM, char **argv)
llist_t *state_list = read_iface_state();
llist_t *iface_state = find_iface_state(state_list, iface);
- if (cmds == iface_up && !any_failures) {
+ if (cmds == iface_up && !curr_failure) {
char *newiface = xasprintf("%s=%s", iface, liface);
if (!iface_state) {
llist_add_to_end(&state_list, newiface);