aboutsummaryrefslogtreecommitdiff
path: root/networking/udhcp
diff options
context:
space:
mode:
Diffstat (limited to 'networking/udhcp')
-rw-r--r--networking/udhcp/ChangeLog7
-rw-r--r--networking/udhcp/dhcpd.c11
-rw-r--r--networking/udhcp/options.c4
3 files changed, 19 insertions, 3 deletions
diff --git a/networking/udhcp/ChangeLog b/networking/udhcp/ChangeLog
index 34cfe16f9..13818953b 100644
--- a/networking/udhcp/ChangeLog
+++ b/networking/udhcp/ChangeLog
@@ -1,3 +1,10 @@
+0.9.9 (pending)
++ Added sanity check for max_leases (udhcp bug #1285) (me)
++ Finally got rid of the trailing space in enviromental vars (me)
++ added an new enviromental variable: $mask. It contains the number
+ of subnet bits for tools like ip route that require it.
+ (Bastian Blank <waldi@debian.org>, me)
+
0.9.8 (021031)
+ split up README files (me)
+ use /dev/urandom to seed xid's (instead of time(0)) (me)
diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c
index 6c16dfeb0..56ddaa942 100644
--- a/networking/udhcp/dhcpd.c
+++ b/networking/udhcp/dhcpd.c
@@ -95,6 +95,7 @@ int main(int argc, char *argv[])
int pid_fd;
int max_sock;
int sig;
+ unsigned long num_ips;
OPEN_LOG("udhcpd");
LOG(LOG_INFO, "udhcp server (v%s) started", VERSION);
@@ -114,7 +115,15 @@ int main(int argc, char *argv[])
}
else server_config.lease = LEASE_TIME;
- leases = malloc(sizeof(struct dhcpOfferedAddr) * server_config.max_leases);
+ /* Sanity check */
+ num_ips = ntohl(server_config.end) - ntohl(server_config.start);
+ if (server_config.max_leases > num_ips) {
+ LOG(LOG_ERR, "max_leases value (%lu) not sane, setting to %lu instead",
+ server_config.max_leases, num_ips);
+ server_config.max_leases = num_ips;
+ }
+
+ leases = xmalloc(sizeof(struct dhcpOfferedAddr) * server_config.max_leases);
memset(leases, 0, sizeof(struct dhcpOfferedAddr) * server_config.max_leases);
read_leases(server_config.lease_file);
diff --git a/networking/udhcp/options.c b/networking/udhcp/options.c
index 58144728e..9f95c1558 100644
--- a/networking/udhcp/options.c
+++ b/networking/udhcp/options.c
@@ -214,8 +214,8 @@ void attach_option(struct option_set **opt_list, struct dhcp_option *option, cha
DEBUG(LOG_INFO, "Attaching option %s to list", option->name);
/* make a new option */
- new = malloc(sizeof(struct option_set));
- new->data = malloc(length + 2);
+ new = xmalloc(sizeof(struct option_set));
+ new->data = xmalloc(length + 2);
new->data[OPT_CODE] = option->code;
new->data[OPT_LEN] = length;
memcpy(new->data + 2, buffer, length);