[PATCH] ifupdown: Support "source-directory" stanza

Brandon Maier brandon.maier at rockwellcollins.com
Fri Sep 21 17:54:05 UTC 2018


Support the "source-directory" stanza from ifupdown[1]. source-directory
will include all files in the named directory. Similar to the Busybox
version of the "source" stanza, this version of source-directory does
not currently support shell wildcards.

We only check that the stanza starts with "source-dir" as ifupdown does[2].

[1] https://manpages.debian.org/stretch/ifupdown/interfaces.5.en.html#INCLUDING_OTHER_FILES
[2] https://salsa.debian.org/debian/ifupdown/blob/0.8.33/config.c#L498

Signed-off-by: Brandon Maier <brandon.maier at rockwellcollins.com>
---
 networking/ifupdown.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/networking/ifupdown.c b/networking/ifupdown.c
index a76fe10..7dd7881 100644
--- a/networking/ifupdown.c
+++ b/networking/ifupdown.c
@@ -1017,6 +1017,26 @@ static struct interfaces_file_t *read_interfaces(const char *filename, struct in
 			currently_processing = NONE;
 		} else if (strcmp(first_word, "source") == 0) {
 			read_interfaces(next_word(&rest_of_line), defn);
+		} else if (is_prefixed_with(first_word, "source-dir")) {
+			const char *dirpath;
+			char path[NAME_MAX];
+			struct dirent *entry;
+			DIR *dir;
+
+			dirpath = next_word(&rest_of_line);
+
+			dir = xopendir(dirpath);
+			while ((entry = readdir(dir)) != NULL) {
+				if (entry->d_name[0] == '.')
+					continue;
+
+				snprintf(path, NAME_MAX, "%s/%s",
+					 dirpath, entry->d_name);
+
+				read_interfaces(path, defn);
+			}
+
+			closedir(dir);
 		} else {
 			switch (currently_processing) {
 			case IFACE:
-- 
1.9.1



More information about the busybox mailing list