diff options
author | Steven Barth <steven@midlink.org> | 2013-12-10 15:56:41 +0100 |
---|---|---|
committer | Steven Barth <steven@midlink.org> | 2013-12-10 15:56:41 +0100 |
commit | 5df476f99b3254bfc26721452b17a5fc23e7142c (patch) | |
tree | 546400db61994a5a990fa32d56d168a124977110 /src/dhcpv4.c | |
parent | 3d84d7c0b5fa08068b4055c793e1cccd6e0e9ea3 (diff) | |
parent | 93a6018520bf3521a6e853e5ffbff827d33f96b9 (diff) |
Merge branch 'master' of github.com:sbyx/odhcpd
Diffstat (limited to 'src/dhcpv4.c')
-rw-r--r-- | src/dhcpv4.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/dhcpv4.c b/src/dhcpv4.c index 79fabe2..49b75f4 100644 --- a/src/dhcpv4.c +++ b/src/dhcpv4.c @@ -61,6 +61,11 @@ int setup_dhcpv4_interface(struct interface *iface, bool enable) INIT_LIST_HEAD(&iface->dhcpv4_assignments); int sock = socket(AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, IPPROTO_UDP); + if (sock < 0) { + syslog(LOG_ERR, "Failed to create DHCPv4 server socket: %s", + strerror(errno)); + return -1; + } // Basic IPv6 configuration int val = 1; @@ -139,7 +144,11 @@ int setup_dhcpv4_interface(struct interface *iface, bool enable) // Construct entry size_t hostlen = strlen(lease->hostname) + 1; struct dhcpv4_assignment *a = calloc(1, sizeof(*a) + hostlen); - + if (!a) { + syslog(LOG_ERR, "Calloc failed for static lease on interface %s", + iface->ifname); + return -1; + } a->addr = ntohl(lease->ipaddr.s_addr); memcpy(a->hwaddr, lease->mac.ether_addr_octet, sizeof(a->hwaddr)); memcpy(a->hostname, lease->hostname, hostlen); @@ -470,6 +479,10 @@ static struct dhcpv4_assignment* dhcpv4_lease(struct interface *iface, if (!a && !iface->no_dynamic_dhcp) { // Create new binding a = calloc(1, sizeof(*a) + hostlen); + if (!a) { + syslog(LOG_ERR, "Failed to calloc binding on interface %s", iface->ifname); + return NULL; + } memcpy(a->hwaddr, mac, sizeof(a->hwaddr)); memcpy(a->hostname, hostname, hostlen); @@ -478,6 +491,10 @@ static struct dhcpv4_assignment* dhcpv4_lease(struct interface *iface, if (assigned && !a->hostname[0] && hostname) { a = realloc(a, sizeof(*a) + hostlen); + if (!a) { + syslog(LOG_ERR, "Failed to realloc binding on interface %s", iface->ifname); + return NULL; + } memcpy(a->hostname, hostname, hostlen); // Fixup list |