]> git.ipfire.org Git - thirdparty/wireguard-tools.git/commitdiff
wg: Use seqpacket instead of dgram
authorJason A. Donenfeld <Jason@zx2c4.com>
Fri, 22 Jul 2016 18:30:34 +0000 (20:30 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Fri, 22 Jul 2016 18:30:34 +0000 (20:30 +0200)
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
src/ipc.c
src/ipc.h

index cc70fd1b0718781071e8cef8c73a8e25c86a2643..c4d11285505077e0a26b930f44d2804d5f07d29f 100644 (file)
--- a/src/ipc.c
+++ b/src/ipc.c
@@ -80,21 +80,10 @@ static int add_next_to_inflatable_buffer(struct inflatable_buffer *buffer)
        return 0;
 }
 
-static void close_and_unlink(int fd)
-{
-       struct sockaddr_un addr;
-       socklen_t len = sizeof(addr);
-
-       if (!getsockname(fd, (struct sockaddr *)&addr, &len))
-               unlink(addr.sun_path);
-       close(fd);
-}
-
 static int userspace_interface_fd(const char *interface)
 {
        struct stat sbuf;
-       struct sockaddr_un addr = { .sun_family = AF_UNIX }, bind_addr = { .sun_family = AF_UNIX };
-       mode_t old_umask;
+       struct sockaddr_un addr = { .sun_family = AF_UNIX };
        int fd = -1, ret;
 
        ret = -EINVAL;
@@ -103,10 +92,6 @@ static int userspace_interface_fd(const char *interface)
        ret = snprintf(addr.sun_path, sizeof(addr.sun_path) - 1, SOCK_PATH "%s" SOCK_SUFFIX, interface);
        if (ret < 0)
                goto out;
-       ret = snprintf(bind_addr.sun_path, sizeof(bind_addr.sun_path) - 1, SOCK_PATH ".wg-tool-%s-%d.client", interface, getpid());
-       if (ret < 0)
-               goto out;
-       unlink(bind_addr.sun_path);
        ret = stat(addr.sun_path, &sbuf);
        if (ret < 0)
                goto out;
@@ -114,12 +99,7 @@ static int userspace_interface_fd(const char *interface)
        if (!S_ISSOCK(sbuf.st_mode))
                goto out;
 
-       ret = fd = socket(AF_UNIX, SOCK_DGRAM, 0);
-       if (ret < 0)
-               goto out;
-       old_umask = umask(0077);
-       ret = bind(fd, (struct sockaddr *)&bind_addr, sizeof(bind_addr));
-       umask(old_umask);
+       ret = fd = socket(AF_UNIX, SOCK_SEQPACKET, 0);
        if (ret < 0)
                goto out;
 
@@ -131,7 +111,7 @@ static int userspace_interface_fd(const char *interface)
        }
 out:
        if (ret && fd >= 0)
-               close_and_unlink(fd);
+               close(fd);
        if (!ret)
                ret = fd;
        return ret;
@@ -142,7 +122,7 @@ static bool userspace_has_wireguard_interface(const char *interface)
        int fd = userspace_interface_fd(interface);
        if (fd < 0)
                return false;
-       close_and_unlink(fd);
+       close(fd);
        return true;
 }
 
@@ -200,7 +180,7 @@ static int userspace_set_device(struct wgdevice *dev)
                goto out;
        ret = ret_code;
 out:
-       close_and_unlink(fd);
+       close(fd);
        errno = -ret;
        return (int)ret;
 }
@@ -251,7 +231,7 @@ static int userspace_get_device(struct wgdevice **dev, const char *interface)
 out:
        if (*dev && ret)
                free(*dev);
-       close_and_unlink(fd);
+       close(fd);
        errno = -ret;
        return ret;
 }
index b2312ad4237ac6a998e73778e805966795bd97d2..9cb9db277ef5f02cbccec3425239790238bac52d 100644 (file)
--- a/src/ipc.h
+++ b/src/ipc.h
@@ -12,13 +12,4 @@ int ipc_get_device(struct wgdevice **dev, const char *interface);
 char *ipc_list_devices(void);
 bool ipc_has_device(const char *interface);
 
-
-#define for_each_wgpeer(__dev, __peer, __i) for ((__i) = 0, (__peer) = (typeof(__peer))((uint8_t *)(__dev) + sizeof(struct wgdevice)); \
-                                                (__i) < (__dev)->num_peers; \
-                                                ++(__i), (__peer) = (typeof(__peer))((uint8_t *)(__peer) + sizeof(struct wgpeer) + (sizeof(struct wgipmask) * (__peer)->num_ipmasks)))
-
-#define for_each_wgipmask(__peer, __ipmask, __i) for ((__i) = 0, (__ipmask) = (typeof(__ipmask))((uint8_t *)(__peer) + sizeof(struct wgpeer)); \
-                                                (__i) < (__peer)->num_ipmasks; \
-                                                ++(__i), (__ipmask) = (typeof(__ipmask))((uint8_t *)(__ipmask) + sizeof(struct wgipmask)))
-
 #endif