udhcpc: don't exit after backgrounding on -n -b

Currently, running "udhcpc -n -b" causes udhcpc to go to background and
then exit after some time unless a lease is obtained.

It's not very useful to do so
as the calling process doesn't know
if the lease was obtained or not anyway.

The code actually tries to favor "-b" over "-n",
but doesn't clear "-n" flag while clearing "-b" after backgrounding.

So, clear "-n" flag after going into background.
This effectively makes "-b" override "-n" completely
and "-n -b" behave the same as "-b".

This allows to override default "-n" option, passed to udhcpc by ifupdown,
without recompiling busybox.

URL: https://bugs.busybox.net/11691

Signed-off-by: Andrey Mazo <ahippo@yandex.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Andrey Mazo 2019-02-22 16:46:19 -05:00 committed by Denys Vlasenko
parent 544143da0c
commit 87e216294a
2 changed files with 14 additions and 2 deletions

View File

@ -1370,7 +1370,13 @@ int udhcpc6_main(int argc UNUSED_PARAM, char **argv)
bb_error_msg("no lease, forking to background"); bb_error_msg("no lease, forking to background");
client_background(); client_background();
/* do not background again! */ /* do not background again! */
opt = ((opt & ~OPT_b) | OPT_f); opt = ((opt & ~(OPT_b|OPT_n)) | OPT_f);
/* ^^^ also disables -n (-b takes priority over -n):
* ifup's default udhcpc options are -R -n,
* and users want to be able to add -b
* (in a config file) to make it background
* _and not exit_.
*/
} else } else
#endif #endif
if (opt & OPT_n) { /* abort if no lease */ if (opt & OPT_n) { /* abort if no lease */

View File

@ -1484,7 +1484,13 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
bb_error_msg("no lease, forking to background"); bb_error_msg("no lease, forking to background");
client_background(); client_background();
/* do not background again! */ /* do not background again! */
opt = ((opt & ~OPT_b) | OPT_f); opt = ((opt & ~(OPT_b|OPT_n)) | OPT_f);
/* ^^^ also disables -n (-b takes priority over -n):
* ifup's default udhcpc options are -R -n,
* and users want to be able to add -b
* (in a config file) to make it background
* _and not exit_.
*/
} else } else
#endif #endif
if (opt & OPT_n) { /* abort if no lease */ if (opt & OPT_n) { /* abort if no lease */