From: Ted Lemon Date: Fri, 17 May 1996 23:12:09 +0000 (+0000) Subject: Preinitialize static lease structure to avoid accidentally shadowing values across... X-Git-Tag: BETA-2~84 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9375101b4aafced31b0be0a4ede072c6dd72972d;p=thirdparty%2Fdhcp.git Preinitialize static lease structure to avoid accidentally shadowing values across lease statements; allow text strings as Unique Identifiers; zero-length Unique Identifiers generate warning, but do not cause code to fail --- diff --git a/confpars.c b/confpars.c index 239617701..1570c389c 100644 --- a/confpars.c +++ b/confpars.c @@ -839,7 +839,7 @@ struct lease *parse_lease_statement (cfile, bc) int token; unsigned char addr [4]; int len = sizeof addr; - char *name; + char *s; unsigned char *uid; int seenmask = 0; int seenbit; @@ -847,6 +847,9 @@ struct lease *parse_lease_statement (cfile, bc) char ubuf [1024]; static struct lease lease; + /* Zap the lease structure... */ + memset (&lease, 0, sizeof lease); + /* Get the address for which the lease has been issued. */ parse_numeric_aggregate (cfile, bc, addr, &len, DOT, 10, 8); memcpy (lease.ip_addr.iabuf, addr, len); @@ -885,15 +888,28 @@ struct lease *parse_lease_statement (cfile, bc) case UID: seenbit = 8; lease.uid_len = 0; - parse_numeric_aggregate (cfile, bc, ubuf, - &lease.uid_len, - ':', 16, 8); + token = peek_token (&val, cfile); + if (token == STRING) { + token = NEXT_TOKEN (&val, cfile); + lease.uid_len = strlen (val) + 1; + s = val; + } else { + parse_numeric_aggregate + (cfile, bc, ubuf, + &lease.uid_len, ':', 16, 8); + s = ubuf; + if (lease.uid_len == 0) { + parse_warn ("zero-length uid"); + seen_bit = 0; + break; + } + } lease.uid = (unsigned char *) malloc (lease.uid_len); if (!lease.uid) { error ("No memory for lease uid"); } - memcpy (lease.uid, ubuf, lease.uid_len); + memcpy (lease.uid, s, lease.uid_len); break; case HOST: diff --git a/server/confpars.c b/server/confpars.c index 239617701..1570c389c 100644 --- a/server/confpars.c +++ b/server/confpars.c @@ -839,7 +839,7 @@ struct lease *parse_lease_statement (cfile, bc) int token; unsigned char addr [4]; int len = sizeof addr; - char *name; + char *s; unsigned char *uid; int seenmask = 0; int seenbit; @@ -847,6 +847,9 @@ struct lease *parse_lease_statement (cfile, bc) char ubuf [1024]; static struct lease lease; + /* Zap the lease structure... */ + memset (&lease, 0, sizeof lease); + /* Get the address for which the lease has been issued. */ parse_numeric_aggregate (cfile, bc, addr, &len, DOT, 10, 8); memcpy (lease.ip_addr.iabuf, addr, len); @@ -885,15 +888,28 @@ struct lease *parse_lease_statement (cfile, bc) case UID: seenbit = 8; lease.uid_len = 0; - parse_numeric_aggregate (cfile, bc, ubuf, - &lease.uid_len, - ':', 16, 8); + token = peek_token (&val, cfile); + if (token == STRING) { + token = NEXT_TOKEN (&val, cfile); + lease.uid_len = strlen (val) + 1; + s = val; + } else { + parse_numeric_aggregate + (cfile, bc, ubuf, + &lease.uid_len, ':', 16, 8); + s = ubuf; + if (lease.uid_len == 0) { + parse_warn ("zero-length uid"); + seen_bit = 0; + break; + } + } lease.uid = (unsigned char *) malloc (lease.uid_len); if (!lease.uid) { error ("No memory for lease uid"); } - memcpy (lease.uid, ubuf, lease.uid_len); + memcpy (lease.uid, s, lease.uid_len); break; case HOST: