/*
* Copyright (C) 2022 Felix Fietkau <nbd@nbd.name>
*/
+#define _GNU_SOURCE
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
FILE *f = NULL;
int ret = -1;
- asprintf(&fname, "%s/%s.bin", data_dir, network_name(net));
+ if (asprintf(&fname, "%s/%s.bin", data_dir, network_name(net)) < 0)
+ return -1;
+
f = fopen(fname, "r");
free(fname);
!net->net_data_len)
return -1;
- asprintf(&fname, "%s/%s.bin.XXXXXXXX", data_dir, network_name(net));
+ if (asprintf(&fname, "%s/%s.bin.XXXXXXXX", data_dir, network_name(net)) < 0)
+ return -1;
+
fd = mkstemp(fname);
if (fd < 0)
goto error;
static void network_teardown(struct network *net)
{
+ uloop_timeout_cancel(&net->connect_timer);
uloop_timeout_cancel(&net->reload_timer);
network_do_update(net, false);
network_pex_close(net);
blobmsg_len(net->config.data));
if ((cur = tb[NETWORK_ATTR_TYPE]) == NULL ||
+ !strlen(blobmsg_get_string(cur)) ||
!strcmp(blobmsg_get_string(cur), "dynamic"))
net->config.type = NETWORK_TYPE_DYNAMIC;
else if (!strcmp(blobmsg_get_string(cur), "file"))
break;
}
- if ((cur = tb[NETWORK_ATTR_INTERFACE]) != NULL)
+ if ((cur = tb[NETWORK_ATTR_INTERFACE]) != NULL &&
+ strlen(blobmsg_get_string(cur)) > 0)
net->config.interface = blobmsg_get_string(cur);
- if ((cur = tb[NETWORK_ATTR_UPDATE_CMD]) != NULL)
+ if ((cur = tb[NETWORK_ATTR_UPDATE_CMD]) != NULL &&
+ strlen(blobmsg_get_string(cur)) > 0)
net->config.update_cmd = blobmsg_get_string(cur);
- if ((cur = tb[NETWORK_ATTR_DOMAIN]) != NULL)
+ if ((cur = tb[NETWORK_ATTR_DOMAIN]) != NULL &&
+ strlen(blobmsg_get_string(cur)) > 0)
net->config.domain = blobmsg_get_string(cur);
if ((cur = tb[NETWORK_ATTR_TUNNELS]) != NULL)