fix build errors when built against glibc
[project/unetd.git] / network.c
index 80909c40103e9ae74344686f7fd1227827375712..b39deb4c8f1c6733f843092dbba8f28e001cb635 100644 (file)
--- a/network.c
+++ b/network.c
@@ -2,6 +2,7 @@
 /*
  * Copyright (C) 2022 Felix Fietkau <nbd@nbd.name>
  */
+#define _GNU_SOURCE
 #include <arpa/inet.h>
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -127,7 +128,9 @@ static int network_load_dynamic(struct network *net)
        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);
 
@@ -174,7 +177,9 @@ int network_save_dynamic(struct network *net)
            !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;
@@ -436,6 +441,7 @@ static int network_setup(struct network *net)
 
 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);
@@ -474,6 +480,7 @@ network_set_config(struct network *net, struct blob_attr *config)
                      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"))
@@ -510,13 +517,16 @@ network_set_config(struct network *net, struct blob_attr *config)
                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)