From 67435d203432f3319db471046cf5bf2f8a4752de Mon Sep 17 00:00:00 2001 From: crazy Date: Tue, 21 Mar 2017 11:45:57 +0100 Subject: [PATCH 1/3] finit.h: added fallback for _PATH_{STDPATH,VARRUN} in case is not defined That should never be needed , however I saw already systems with broken paths.h so better have something around in case something breaks. Signed-off-by: crazy --- src/finit.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/finit.h b/src/finit.h index 4e01c21d..56dc4507 100644 --- a/src/finit.h +++ b/src/finit.h @@ -36,6 +36,16 @@ #include #include +/* just in case */ +#ifndef _PATH_STDPATH +#define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin" +#endif + +#ifndef _PATH_VARRUN +#define _PATH_VARRUN "/var/run/" +#endif + + #define CMD_SIZE 256 #define LINE_SIZE 1024 #define BUF_SIZE 4096 From a44daf20cb4b91d04279d3fcf0901d267c9512db Mon Sep 17 00:00:00 2001 From: crazy Date: Tue, 21 Mar 2017 11:53:46 +0100 Subject: [PATCH 2/3] finit.c: set _PATH_STDPATH much earlier This should allow us to run 'prog' without absolute paths. Eg: run("/bin/foo"); -> run("foo"); However we still need absolute PATH for checking since fexist() need full path right now. Signed-off-by: crazy --- src/finit.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/finit.c b/src/finit.c index 8550a6ee..66be9f82 100644 --- a/src/finit.c +++ b/src/finit.c @@ -251,6 +251,11 @@ int main(int argc, char* argv[]) uev_init(&loop); ctx = &loop; + /* + * Set the PATH early to something sane + */ + setenv("PATH", _PATH_STDPATH, 1); + /* * Mount base file system, kernel is assumed to run devtmpfs for /dev */ @@ -340,9 +345,6 @@ int main(int argc, char* argv[]) /* Set hostname as soon as possible, for syslog et al. */ set_hostname(&hostname); - /* Set default PATH, for uid 0 */ - setenv("PATH", _PATH_STDPATH, 1); - /* * Mount filesystems */ From 885056a6c9d8cf4872647aef672762ac248a8ae8 Mon Sep 17 00:00:00 2001 From: crazy Date: Tue, 21 Mar 2017 12:12:06 +0100 Subject: [PATCH 3/3] networking(): check first ifup exists Check first ifup exists before using it since this is really something only exits on some distros an in different ways. Debian/Ubunu has an package for this while others have it in the initscripts package(s) , meaning the file can be around even without the prog. Signed-off-by: crazy --- src/finit.c | 51 +++++++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/src/finit.c b/src/finit.c index 66be9f82..c9b9abf6 100644 --- a/src/finit.c +++ b/src/finit.c @@ -155,36 +155,39 @@ static void networking(void) return; } - /* Debian/Ubuntu/Busybox interfaces file */ - fp = fopen("/etc/network/interfaces", "r"); - if (fp) { - int i = 0; - char buf[160]; + /* Debian/Ubuntu/Busybox/RH/Suse */ + if (fexist("/sbin/ifup")) { + /* interfaces file */ + fp = fopen("/etc/network/interfaces", "r"); + if (fp) { + int i = 0; + char buf[160]; - /* Bring up all 'auto' interfaces */ - while (fgets(buf, sizeof(buf), fp)) { - char cmd[80]; - char *line, *ifname = NULL; + /* Bring up all 'auto' interfaces */ + while (fgets(buf, sizeof(buf), fp)) { + char cmd[80]; + char *line, *ifname = NULL; - chomp(buf); - line = strip_line(buf); + chomp(buf); + line = strip_line(buf); - if (!strncmp(line, "auto", 4)) - ifname = &line[5]; - if (!strncmp(line, "allow-hotplug", 13)) - ifname = &line[14]; + if (!strncmp(line, "auto", 4)) + ifname = &line[5]; + if (!strncmp(line, "allow-hotplug", 13)) + ifname = &line[14]; - if (!ifname) - continue; + if (!ifname) + continue; - snprintf(cmd, 80, "/sbin/ifup %s", ifname); - run_interactive(cmd, "Bringing up interface %s", ifname); - i++; + snprintf(cmd, 80, "/sbin/ifup %s", ifname); + run_interactive(cmd, "Bringing up interface %s", ifname); + i++; + } + + fclose(fp); + if (i) + return; } - - fclose(fp); - if (i) - return; } /* Fall back to bring up at least loopback */