summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/config.c22
-rw-r--r--src/dhcpv4.c2
-rw-r--r--src/odhcpd.h5
3 files changed, 18 insertions, 11 deletions
diff --git a/src/config.c b/src/config.c
index 7940095..9ce20ef 100644
--- a/src/config.c
+++ b/src/config.c
@@ -4,12 +4,14 @@
#include <arpa/inet.h>
#include <unistd.h>
#include <libgen.h>
+#include <net/if.h>
#include <string.h>
#include <sys/stat.h>
#include <syslog.h>
#include <uci.h>
#include <uci_blob.h>
+#include <libubox/utils.h>
#include "odhcpd.h"
@@ -235,6 +237,7 @@ static void close_interface(struct interface *iface)
setup_dhcpv4_interface(iface, false);
clean_interface(iface);
+ free(iface->ifname);
free(iface);
}
@@ -394,11 +397,13 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr
struct interface *iface = get_interface(name);
if (!iface) {
- iface = calloc(1, sizeof(*iface));
+ char *iface_name;
+
+ iface = calloc_a(sizeof(*iface), &iface_name, strlen(name) + 1);
if (!iface)
return -1;
- strncpy(iface->name, name, sizeof(iface->name) - 1);
+ iface->name = strcpy(iface_name, name);
set_interface_defaults(iface);
@@ -415,15 +420,20 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr
}
#ifdef WITH_UBUS
- if (overwrite || !iface->ifname[0])
+ if (overwrite || !iface->ifname)
ifname = ubus_get_ifname(name);
#endif
- if (!iface->ifname[0] && !ifname)
+ if (!iface->ifname && !ifname)
goto err;
- if (ifname)
- strncpy(iface->ifname, ifname, sizeof(iface->ifname) - 1);
+ if (ifname) {
+ free(iface->ifname);
+ iface->ifname = strdup(ifname);
+
+ if (!iface->ifname)
+ goto err;
+ }
if ((iface->ifindex = if_nametoindex(iface->ifname)) <= 0)
goto err;
diff --git a/src/dhcpv4.c b/src/dhcpv4.c
index 21d94f2..e1f0df6 100644
--- a/src/dhcpv4.c
+++ b/src/dhcpv4.c
@@ -138,8 +138,6 @@ int setup_dhcpv4_interface(struct interface *iface, bool enable)
iface->dhcpv4_end.s_addr = end | htonl(12);
}
}
-
-
}
/* Parse static entries */
diff --git a/src/odhcpd.h b/src/odhcpd.h
index 1803a41..93adca6 100644
--- a/src/odhcpd.h
+++ b/src/odhcpd.h
@@ -16,7 +16,6 @@
#include <netinet/in.h>
#include <netinet/icmp6.h>
#include <netinet/ether.h>
-#include <net/if.h>
#include <stdbool.h>
#include <syslog.h>
@@ -118,8 +117,8 @@ struct interface {
struct list_head head;
int ifindex;
- char ifname[IF_NAMESIZE];
- char name[IF_NAMESIZE];
+ char *ifname;
+ const char *name;
// Runtime data
struct uloop_timeout timer_rs;