2
0
mirror of https://gitlab.isc.org/isc-projects/dhcp synced 2025-09-02 15:25:48 +00:00

Add tlname variable to store pointer to name of file being parsed; let parse_numeric_aggregate allocate uid buffer; don't reverse lists of numbers

This commit is contained in:
Ted Lemon
1996-05-23 22:20:26 +00:00
parent d2b9b5e149
commit 7e8381e5c3
2 changed files with 28 additions and 26 deletions

View File

@@ -59,6 +59,9 @@ void readconf ()
char *val; char *val;
int token; int token;
tlname = _PATH_DHCPD_CONF;
tlpos = tline = 0;
/* Set up the initial dhcp option universe. */ /* Set up the initial dhcp option universe. */
initialize_universes (); initialize_universes ();
@@ -80,6 +83,9 @@ void read_leases ()
int token; int token;
jmp_buf bc; jmp_buf bc;
tlname = _PATH_DHCPD_DB;
tlpos = tline = 0;
/* Open the lease file... */ /* Open the lease file... */
if ((cfile = fopen (_PATH_DHCPD_DB, "r")) == NULL) { if ((cfile = fopen (_PATH_DHCPD_DB, "r")) == NULL) {
warn ("Can't open lease database %s: %m", _PATH_DHCPD_DB); warn ("Can't open lease database %s: %m", _PATH_DHCPD_DB);
@@ -1050,12 +1056,9 @@ struct lease *parse_lease_statement (cfile, bc)
int token; int token;
unsigned char addr [4]; unsigned char addr [4];
int len = sizeof addr; int len = sizeof addr;
char *s;
unsigned char *uid;
int seenmask = 0; int seenmask = 0;
int seenbit; int seenbit;
char tbuf [32]; char tbuf [32];
char ubuf [1024];
static struct lease lease; static struct lease lease;
/* Zap the lease structure... */ /* Zap the lease structure... */
@@ -1098,29 +1101,27 @@ struct lease *parse_lease_statement (cfile, bc)
/* Colon-seperated hexadecimal octets... */ /* Colon-seperated hexadecimal octets... */
case UID: case UID:
seenbit = 8; seenbit = 8;
lease.uid_len = 0;
token = peek_token (&val, cfile); token = peek_token (&val, cfile);
if (token == STRING) { if (token == STRING) {
token = next_token (&val, cfile); token = next_token (&val, cfile);
lease.uid_len = strlen (val) + 1; lease.uid_len = strlen (val) + 1;
s = val; lease.uid = (unsigned char *)
malloc (lease.uid_len);
memcpy (lease.uid, val, lease.uid_len);
} else { } else {
parse_numeric_aggregate lease.uid_len = 0;
(cfile, bc, ubuf, lease.uid = parse_numeric_aggregate
(cfile, bc, (unsigned char *)0,
&lease.uid_len, ':', 16, 8); &lease.uid_len, ':', 16, 8);
s = ubuf;
if (lease.uid_len == 0) { if (lease.uid_len == 0) {
parse_warn ("zero-length uid"); parse_warn ("zero-length uid");
seenbit = 0; seenbit = 0;
break; break;
} }
} }
lease.uid = (unsigned char *)
malloc (lease.uid_len);
if (!lease.uid) { if (!lease.uid) {
error ("No memory for lease uid"); error ("No memory for lease uid");
} }
memcpy (lease.uid, s, lease.uid_len);
break; break;
#if 0 #if 0
@@ -1411,13 +1412,13 @@ unsigned char *parse_numeric_aggregate (cfile, bc, buf,
bufp = (unsigned char *)malloc (count * size / 8); bufp = (unsigned char *)malloc (count * size / 8);
if (!bufp) if (!bufp)
error ("can't allocate space for numeric aggregate."); error ("can't allocate space for numeric aggregate.");
s = bufp; s = bufp + count - size / 8;
*max = count; *max = count;
} }
while (c) { while (c) {
pair cdr = c -> cdr; pair cdr = c -> cdr;
convert_num (s, (char *)(c -> car), base, size); convert_num (s, (char *)(c -> car), base, size);
s += size / 8; s -= size / 8;
/* Free up temp space. */ /* Free up temp space. */
free (c -> car); free (c -> car);
free (c); free (c);

View File

@@ -59,6 +59,9 @@ void readconf ()
char *val; char *val;
int token; int token;
tlname = _PATH_DHCPD_CONF;
tlpos = tline = 0;
/* Set up the initial dhcp option universe. */ /* Set up the initial dhcp option universe. */
initialize_universes (); initialize_universes ();
@@ -80,6 +83,9 @@ void read_leases ()
int token; int token;
jmp_buf bc; jmp_buf bc;
tlname = _PATH_DHCPD_DB;
tlpos = tline = 0;
/* Open the lease file... */ /* Open the lease file... */
if ((cfile = fopen (_PATH_DHCPD_DB, "r")) == NULL) { if ((cfile = fopen (_PATH_DHCPD_DB, "r")) == NULL) {
warn ("Can't open lease database %s: %m", _PATH_DHCPD_DB); warn ("Can't open lease database %s: %m", _PATH_DHCPD_DB);
@@ -1050,12 +1056,9 @@ struct lease *parse_lease_statement (cfile, bc)
int token; int token;
unsigned char addr [4]; unsigned char addr [4];
int len = sizeof addr; int len = sizeof addr;
char *s;
unsigned char *uid;
int seenmask = 0; int seenmask = 0;
int seenbit; int seenbit;
char tbuf [32]; char tbuf [32];
char ubuf [1024];
static struct lease lease; static struct lease lease;
/* Zap the lease structure... */ /* Zap the lease structure... */
@@ -1098,29 +1101,27 @@ struct lease *parse_lease_statement (cfile, bc)
/* Colon-seperated hexadecimal octets... */ /* Colon-seperated hexadecimal octets... */
case UID: case UID:
seenbit = 8; seenbit = 8;
lease.uid_len = 0;
token = peek_token (&val, cfile); token = peek_token (&val, cfile);
if (token == STRING) { if (token == STRING) {
token = next_token (&val, cfile); token = next_token (&val, cfile);
lease.uid_len = strlen (val) + 1; lease.uid_len = strlen (val) + 1;
s = val; lease.uid = (unsigned char *)
malloc (lease.uid_len);
memcpy (lease.uid, val, lease.uid_len);
} else { } else {
parse_numeric_aggregate lease.uid_len = 0;
(cfile, bc, ubuf, lease.uid = parse_numeric_aggregate
(cfile, bc, (unsigned char *)0,
&lease.uid_len, ':', 16, 8); &lease.uid_len, ':', 16, 8);
s = ubuf;
if (lease.uid_len == 0) { if (lease.uid_len == 0) {
parse_warn ("zero-length uid"); parse_warn ("zero-length uid");
seenbit = 0; seenbit = 0;
break; break;
} }
} }
lease.uid = (unsigned char *)
malloc (lease.uid_len);
if (!lease.uid) { if (!lease.uid) {
error ("No memory for lease uid"); error ("No memory for lease uid");
} }
memcpy (lease.uid, s, lease.uid_len);
break; break;
#if 0 #if 0
@@ -1411,13 +1412,13 @@ unsigned char *parse_numeric_aggregate (cfile, bc, buf,
bufp = (unsigned char *)malloc (count * size / 8); bufp = (unsigned char *)malloc (count * size / 8);
if (!bufp) if (!bufp)
error ("can't allocate space for numeric aggregate."); error ("can't allocate space for numeric aggregate.");
s = bufp; s = bufp + count - size / 8;
*max = count; *max = count;
} }
while (c) { while (c) {
pair cdr = c -> cdr; pair cdr = c -> cdr;
convert_num (s, (char *)(c -> car), base, size); convert_num (s, (char *)(c -> car), base, size);
s += size / 8; s -= size / 8;
/* Free up temp space. */ /* Free up temp space. */
free (c -> car); free (c -> car);
free (c); free (c);