changeset 1173:799259f7cc1b draft dhcpcd-4.0.8

Ensure that we have enough buffer for gethostname and terminate it correctly.
author Roy Marples <roy@marples.name>
date Mon, 26 Jan 2009 09:14:54 +0000
parents 25967fb816af
children 023d61dad33c
files dhcpcd.c dhcpcd.h
diffstat 2 files changed, 8 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/dhcpcd.c	Thu Jan 22 23:54:53 2009 +0000
+++ b/dhcpcd.c	Mon Jan 26 09:14:54 2009 +0000
@@ -648,7 +648,9 @@
 	}
 #endif
 
-	gethostname(options->hostname + 1, sizeof(options->hostname));
+	gethostname(options->hostname + 1, HOSTNAME_MAX_LEN);
+	/* Ensure that the hostname is NULL terminated */ 
+	options->hostname[HOSTNAME_MAX_LEN + 1] = '\0';
 	if (strcmp(options->hostname + 1, "(none)") == 0 ||
 	    strcmp(options->hostname + 1, "localhost") == 0)
 		options->hostname[1] = '\0';
--- a/dhcpcd.h	Thu Jan 22 23:54:53 2009 +0000
+++ b/dhcpcd.h	Mon Jan 26 09:14:54 2009 +0000
@@ -82,12 +82,12 @@
 	char script[PATH_MAX];
 	char pidfile[PATH_MAX];
 
-	char hostname[HOSTNAME_MAX_LEN + 1];
+	char hostname[HOSTNAME_MAX_LEN + 2];
 	int fqdn;
-	uint8_t vendorclassid[VENDORCLASSID_MAX_LEN + 1];
-	char clientid[CLIENTID_MAX_LEN + 1];
-	uint8_t userclass[USERCLASS_MAX_LEN + 1];
-	uint8_t vendor[VENDOR_MAX_LEN + 1];
+	uint8_t vendorclassid[VENDORCLASSID_MAX_LEN + 2];
+	char clientid[CLIENTID_MAX_LEN + 2];
+	uint8_t userclass[USERCLASS_MAX_LEN + 2];
+	uint8_t vendor[VENDOR_MAX_LEN + 2];
 
 	size_t blacklist_len;
 	in_addr_t *blacklist;