svn commit: trunk/busybox/networking/udhcp

vda at busybox.net vda at busybox.net
Fri Feb 2 01:16:09 UTC 2007


Author: vda
Date: 2007-02-01 17:16:08 -0800 (Thu, 01 Feb 2007)
New Revision: 17708

Log:
udhcpd: allow "domain" to be a list of DNS servers, not just one


Modified:
   trunk/busybox/networking/udhcp/files.c
   trunk/busybox/networking/udhcp/options.c


Changeset:
Modified: trunk/busybox/networking/udhcp/files.c
===================================================================
--- trunk/busybox/networking/udhcp/files.c	2007-02-02 01:03:29 UTC (rev 17707)
+++ trunk/busybox/networking/udhcp/files.c	2007-02-02 01:16:08 UTC (rev 17708)
@@ -101,19 +101,8 @@
 {
 	struct option_set *existing, *new, **curr;
 
-	/* add it to an existing option */
 	existing = find_option(*opt_list, option->code);
-	if (existing) {
-		DEBUG("Attaching option %s to existing member of list", option->name);
-		if (option->flags & OPTION_LIST) {
-			if (existing->data[OPT_LEN] + length <= 255) {
-				existing->data = realloc(existing->data,
-						existing->data[OPT_LEN] + length + 2);
-				memcpy(existing->data + existing->data[OPT_LEN] + 2, buffer, length);
-				existing->data[OPT_LEN] += length;
-			} /* else, ignore the data, we could put this in a second option in the future */
-		} /* else, ignore the new data */
-	} else {
+	if (!existing) {
 		DEBUG("Attaching option %s to list", option->name);
 
 		/* make a new option */
@@ -129,7 +118,26 @@
 
 		new->next = *curr;
 		*curr = new;
+		return;
 	}
+
+	/* add it to an existing option */
+	DEBUG("Attaching option %s to existing member of list", option->name);
+	if (option->flags & OPTION_LIST) {
+		if (existing->data[OPT_LEN] + length <= 255) {
+			existing->data = xrealloc(existing->data,
+					existing->data[OPT_LEN] + length + 3);
+			if ((option->flags & TYPE_MASK) == OPTION_STRING) {
+				if (existing->data[OPT_LEN] + length >= 255)
+					return;
+				/* add space separator between STRING options in a list */
+				existing->data[existing->data[OPT_LEN] + 2] = ' ';
+				existing->data[OPT_LEN]++;
+			}
+			memcpy(existing->data + existing->data[OPT_LEN] + 2, buffer, length);
+			existing->data[OPT_LEN] += length;
+		} /* else, ignore the data, we could put this in a second option in the future */
+	} /* else, ignore the new data */
 }
 
 

Modified: trunk/busybox/networking/udhcp/options.c
===================================================================
--- trunk/busybox/networking/udhcp/options.c	2007-02-02 01:03:29 UTC (rev 17707)
+++ trunk/busybox/networking/udhcp/options.c	2007-02-02 01:16:08 UTC (rev 17708)
@@ -23,7 +23,7 @@
 	{"lprsvr",      OPTION_IP | OPTION_LIST,                0x09},
 	{"hostname",    OPTION_STRING | OPTION_REQ,             0x0c},
 	{"bootsize",    OPTION_U16,                             0x0d},
-	{"domain",      OPTION_STRING | OPTION_REQ,             0x0f},
+	{"domain",      OPTION_STRING | OPTION_LIST | OPTION_REQ, 0x0f},
 	{"swapsvr",     OPTION_IP,                              0x10},
 	{"rootpath",    OPTION_STRING,                          0x11},
 	{"ipttl",       OPTION_U8,                              0x17},




More information about the busybox-cvs mailing list