[PATCH] ifupdown: improve debian compatibility for mapping

Jens Rehsack rehsack at gmail.com
Wed Mar 16 11:03:10 UTC 2016


According to http://manpages.debian.org/cgi-bin/man.cgi?query=interfaces&sektion=5
mapping for ifaces uses pairs as API to the mapping script. Furthermode, ifdown
must prove logical iface name in iface_state file.

Signed-off-by: Jens Rehsack <sno at netbsd.org>
---
networking/ifupdown.c | 23 +++++++++++++++++++----
1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/networking/ifupdown.c b/networking/ifupdown.c
index 2c6db92..c74766a 100644
--- a/networking/ifupdown.c
+++ b/networking/ifupdown.c
@@ -85,7 +85,10 @@ struct mapping_defn_t {
	char *script;

	int n_mappings;
-	char **mapping;
+	struct {
+	    char *key;
+	    char *scheme;
+	} *mapping;
};

struct variable_t {
@@ -820,6 +823,7 @@ static struct interfaces_file_t *read_interfaces(const char *filename, struct in

			while ((first_word = next_word(&rest_of_line)) != NULL) {
				currmap->match = xrealloc_vector(currmap->match, 4, currmap->n_matches);
+				debug_noise("Add mapping for %s\n", first_word);
				currmap->match[currmap->n_matches++] = xstrdup(first_word);
			}
			/*currmap->n_mappings = 0;*/
@@ -948,8 +952,13 @@ static struct interfaces_file_t *read_interfaces(const char *filename, struct in
						bb_error_msg_and_die("duplicate script in mapping \"%s\"", buf);
					currmap->script = xstrdup(next_word(&rest_of_line));
				} else if (strcmp(first_word, "map") == 0) {
+					if (rest_of_line[0] == '\0')
+						bb_error_msg_and_die("map without pair \"%s\"", buf);
					currmap->mapping = xrealloc_vector(currmap->mapping, 2, currmap->n_mappings);
-					currmap->mapping[currmap->n_mappings] = xstrdup(next_word(&rest_of_line));
+					currmap->mapping[currmap->n_mappings].key = xstrdup(next_word(&rest_of_line));
+					if (rest_of_line[0] == '\0')
+						bb_error_msg_and_die("map without scheme \"%s\"", buf);
+					currmap->mapping[currmap->n_mappings].scheme = xstrdup(next_word(&rest_of_line));
					currmap->n_mappings++;
				} else {
					bb_error_msg_and_die("misplaced option \"%s\"", buf);
@@ -1140,7 +1149,7 @@ static char *run_mapping(char *physical, struct mapping_defn_t *map)

	/* Write mappings to stdin of mapping script. */
	for (i = 0; i < map->n_mappings; i++) {
-		fprintf(in, "%s\n", map->mapping[i]);
+		fprintf(in, "%s %s\n", map->mapping[i].key, map->mapping[i].scheme);
	}
	fclose(in);
	safe_waitpid(pid, &status, 0);
@@ -1278,7 +1287,13 @@ int ifupdown_main(int argc UNUSED_PARAM, char **argv)
				}
			} else {
				/* ifdown */
-				if (!iface_state) {
+				if (iface_state) {
+					char *after_iface = is_prefixed_with(iface_state->data, iface);
+					if (after_iface && *after_iface == '=') {
+						free(liface);
+						liface = xstrdup(after_iface + 1);
+					}
+				} else {
					bb_error_msg("interface %s not configured", iface);
					goto next;
				}
--
2.5.4 (Apple Git-61)


--
Jens Rehsack - rehsack at gmail.com

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 842 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.busybox.net/pipermail/busybox/attachments/20160316/3f5c3fbf/attachment-0001.asc>


More information about the busybox mailing list