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>
This commit is contained in:
Frank Bergmann 2015-03-13 10:05:08 +01:00 committed by Denys Vlasenko
parent 75a76269ba
commit 6ca03f2dd8
1 changed files with 4 additions and 3 deletions

View File

@ -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);