]> git.ipfire.org Git - thirdparty/dhcp.git/commitdiff
Preinitialize static lease structure to avoid accidentally shadowing values across...
authorTed Lemon <source@isc.org>
Fri, 17 May 1996 23:12:09 +0000 (23:12 +0000)
committerTed Lemon <source@isc.org>
Fri, 17 May 1996 23:12:09 +0000 (23:12 +0000)
confpars.c
server/confpars.c

index 2396177011165d8a1a73aa667779360c33078981..1570c389c0a9ead623ce49c091c475e257f3921a 100644 (file)
@@ -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:
index 2396177011165d8a1a73aa667779360c33078981..1570c389c0a9ead623ce49c091c475e257f3921a 100644 (file)
@@ -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: