Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package wireguard-tools for openSUSE:Factory checked in at 2021-03-16 15:45:46 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/wireguard-tools (Old) and /work/SRC/openSUSE:Factory/.wireguard-tools.new.2401 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "wireguard-tools" Tue Mar 16 15:45:46 2021 rev:10 rq:879265 version:1.0.20210315 Changes: -------- --- /work/SRC/openSUSE:Factory/wireguard-tools/wireguard-tools.changes 2021-02-25 18:30:06.934284856 +0100 +++ /work/SRC/openSUSE:Factory/.wireguard-tools.new.2401/wireguard-tools.changes 2021-03-16 15:46:47.693265079 +0100 @@ -1,0 +2,9 @@ +Mon Mar 15 15:11:03 UTC 2021 - Martin Hauke <mar...@gmx.de> + +- Update to version 1.0.20210315 + * Makefile: fix version indicator + * wireguard-tools: const correctness + * wireguard-tools: drag in headers for prototypes + * ipc: uniformly ignore preshared keys that are zero + +------------------------------------------------------------------- Old: ---- wireguard-tools-1.0.20210223.tar.asc wireguard-tools-1.0.20210223.tar.xz New: ---- wireguard-tools-1.0.20210315.tar.asc wireguard-tools-1.0.20210315.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ wireguard-tools.spec ++++++ --- /var/tmp/diff_new_pack.S7S1U9/_old 2021-03-16 15:46:48.273265979 +0100 +++ /var/tmp/diff_new_pack.S7S1U9/_new 2021-03-16 15:46:48.277265986 +0100 @@ -2,7 +2,7 @@ # spec file for package wireguard-tools # # Copyright (c) 2021 SUSE LLC -# Copyright (c) 2020, Martin Hauke <mar...@gmx.de> +# Copyright (c) 2020-2021, Martin Hauke <mar...@gmx.de> # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ Name: wireguard-tools -Version: 1.0.20210223 +Version: 1.0.20210315 Release: 0 Summary: WireGuard userspace tools License: GPL-2.0-only ++++++ wireguard-tools-1.0.20210223.tar.xz -> wireguard-tools-1.0.20210315.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wireguard-tools-1.0.20210223/src/Makefile new/wireguard-tools-1.0.20210315/src/Makefile --- old/wireguard-tools-1.0.20210223/src/Makefile 2021-02-23 19:32:18.000000000 +0100 +++ new/wireguard-tools-1.0.20210315/src/Makefile 2021-03-15 15:04:02.000000000 +0100 @@ -48,10 +48,13 @@ ifeq ($(DEBUG),yes) CFLAGS += -g endif -WIREGUARD_TOOLS_VERSION = $(patsubst v%,%,$(shell GIT_CEILING_DIRECTORIES="$(PWD)/../.." git describe --dirty 2>/dev/null)) +WIREGUARD_TOOLS_VERSION = $(patsubst v%,%,$(shell GIT_DIR="$(PWD)/../.git" git describe --dirty 2>/dev/null)) ifneq ($(WIREGUARD_TOOLS_VERSION),) CFLAGS += -D'WIREGUARD_TOOLS_VERSION="$(WIREGUARD_TOOLS_VERSION)"' endif +ifeq ($(PLATFORM),freebsd) +LDLIBS += -lnv +endif ifeq ($(PLATFORM),haiku) LDLIBS += -lnetwork -lbsd endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wireguard-tools-1.0.20210223/src/config.c new/wireguard-tools-1.0.20210315/src/config.c --- old/wireguard-tools-1.0.20210223/src/config.c 2021-02-23 19:32:18.000000000 +0100 +++ new/wireguard-tools-1.0.20210315/src/config.c 2021-03-15 15:04:02.000000000 +0100 @@ -561,7 +561,7 @@ return out; } -struct wgdevice *config_read_cmd(char *argv[], int argc) +struct wgdevice *config_read_cmd(const char *argv[], int argc) { struct wgdevice *device = calloc(1, sizeof(*device)); struct wgpeer *peer = NULL; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wireguard-tools-1.0.20210223/src/config.h new/wireguard-tools-1.0.20210315/src/config.h --- old/wireguard-tools-1.0.20210223/src/config.h 2021-02-23 19:32:18.000000000 +0100 +++ new/wireguard-tools-1.0.20210315/src/config.h 2021-03-15 15:04:02.000000000 +0100 @@ -19,7 +19,7 @@ bool is_peer_section, is_device_section; }; -struct wgdevice *config_read_cmd(char *argv[], int argc); +struct wgdevice *config_read_cmd(const char *argv[], int argc); bool config_read_init(struct config_ctx *ctx, bool append); bool config_read_line(struct config_ctx *ctx, const char *line); struct wgdevice *config_read_finish(struct config_ctx *ctx); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wireguard-tools-1.0.20210223/src/genkey.c new/wireguard-tools-1.0.20210315/src/genkey.c --- old/wireguard-tools-1.0.20210223/src/genkey.c 2021-02-23 19:32:18.000000000 +0100 +++ new/wireguard-tools-1.0.20210315/src/genkey.c 2021-03-15 15:04:02.000000000 +0100 @@ -72,7 +72,7 @@ } #endif -int genkey_main(int argc, char *argv[]) +int genkey_main(int argc, const char *argv[]) { uint8_t key[WG_KEY_LEN]; char base64[WG_KEY_LEN_BASE64]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wireguard-tools-1.0.20210223/src/ipc-freebsd.h new/wireguard-tools-1.0.20210315/src/ipc-freebsd.h --- old/wireguard-tools-1.0.20210223/src/ipc-freebsd.h 1970-01-01 01:00:00.000000000 +0100 +++ new/wireguard-tools-1.0.20210315/src/ipc-freebsd.h 2021-03-15 15:04:02.000000000 +0100 @@ -0,0 +1,350 @@ +// SPDX-License-Identifier: MIT +/* + * Copyright (C) 2015-2021 Jason A. Donenfeld <ja...@zx2c4.com>. All Rights Reserved. + * + */ + +#include <sys/nv.h> +#include <sys/sockio.h> +#include <dev/if_wg/if_wg.h> + +#define IPC_SUPPORTS_KERNEL_INTERFACE + +static int get_dgram_socket(void) +{ + static int sock = -1; + if (sock < 0) + sock = socket(AF_INET, SOCK_DGRAM, 0); + return sock; +} + +static int kernel_get_wireguard_interfaces(struct string_list *list) +{ + struct ifgroupreq ifgr = { .ifgr_name = "wg" }; + struct ifg_req *ifg; + int s = get_dgram_socket(), ret = 0; + + if (s < 0) + return -errno; + + if (ioctl(s, SIOCGIFGMEMB, (caddr_t)&ifgr) < 0) + return errno == ENOENT ? 0 : -errno; + + ifgr.ifgr_groups = calloc(1, ifgr.ifgr_len); + if (!ifgr.ifgr_groups) + return -errno; + if (ioctl(s, SIOCGIFGMEMB, (caddr_t)&ifgr) < 0) { + ret = -errno; + goto out; + } + + for (ifg = ifgr.ifgr_groups; ifg && ifgr.ifgr_len > 0; ++ifg) { + if ((ret = string_list_add(list, ifg->ifgrq_member)) < 0) + goto out; + ifgr.ifgr_len -= sizeof(struct ifg_req); + } + +out: + free(ifgr.ifgr_groups); + return ret; +} + +static int kernel_get_device(struct wgdevice **device, const char *ifname) +{ + struct wg_data_io wgd = { 0 }; + nvlist_t *nvl_device = NULL; + const nvlist_t *const *nvl_peers; + struct wgdevice *dev = NULL; + size_t size, peer_count, i; + uint64_t number; + const void *binary; + int ret = 0, s; + + *device = NULL; + s = get_dgram_socket(); + if (s < 0) + goto err; + + strlcpy(wgd.wgd_name, ifname, sizeof(wgd.wgd_name)); + if (ioctl(s, SIOCGWG, &wgd) < 0) + goto err; + + wgd.wgd_data = malloc(wgd.wgd_size); + if (!wgd.wgd_data) + goto err; + if (ioctl(s, SIOCGWG, &wgd) < 0) + goto err; + + dev = calloc(1, sizeof(*dev)); + if (!dev) + goto err; + strlcpy(dev->name, ifname, sizeof(dev->name)); + nvl_device = nvlist_unpack(wgd.wgd_data, wgd.wgd_size, 0); + if (!nvl_device) + goto err; + + if (nvlist_exists_number(nvl_device, "listen-port")) { + number = nvlist_get_number(nvl_device, "listen-port"); + if (number <= UINT16_MAX) { + dev->listen_port = number; + dev->flags |= WGDEVICE_HAS_LISTEN_PORT; + } + } + if (nvlist_exists_number(nvl_device, "user-cookie")) { + number = nvlist_get_number(nvl_device, "user-cookie"); + if (number <= UINT32_MAX) { + dev->fwmark = number; + dev->flags |= WGDEVICE_HAS_FWMARK; + } + } + if (nvlist_exists_binary(nvl_device, "public-key")) { + binary = nvlist_get_binary(nvl_device, "public-key", &size); + if (binary && size == sizeof(dev->public_key)) { + memcpy(dev->public_key, binary, sizeof(dev->public_key)); + dev->flags |= WGDEVICE_HAS_PUBLIC_KEY; + } + } + if (nvlist_exists_binary(nvl_device, "private-key")) { + binary = nvlist_get_binary(nvl_device, "private-key", &size); + if (binary && size == sizeof(dev->private_key)) { + memcpy(dev->private_key, binary, sizeof(dev->private_key)); + dev->flags |= WGDEVICE_HAS_PRIVATE_KEY; + } + } + if (!nvlist_exists_nvlist_array(nvl_device, "peers")) + goto skip_peers; + nvl_peers = nvlist_get_nvlist_array(nvl_device, "peers", &peer_count); + if (!nvl_peers) + goto skip_peers; + for (i = 0; i < peer_count; ++i) { + struct wgpeer *peer; + struct wgallowedip *aip; + const nvlist_t *const *nvl_aips; + size_t aip_count, j; + + peer = calloc(1, sizeof(*peer)); + if (!peer) + goto err_peer; + if (nvlist_exists_binary(nvl_peers[i], "public-key")) { + binary = nvlist_get_binary(nvl_peers[i], "public-key", &size); + if (binary && size == sizeof(peer->public_key)) { + memcpy(peer->public_key, binary, sizeof(peer->public_key)); + peer->flags |= WGPEER_HAS_PUBLIC_KEY; + } + } + if (nvlist_exists_binary(nvl_peers[i], "preshared-key")) { + binary = nvlist_get_binary(nvl_peers[i], "preshared-key", &size); + if (binary && size == sizeof(peer->preshared_key)) { + memcpy(peer->preshared_key, binary, sizeof(peer->preshared_key)); + if (!key_is_zero(peer->preshared_key)) + peer->flags |= WGPEER_HAS_PRESHARED_KEY; + } + } + if (nvlist_exists_number(nvl_peers[i], "persistent-keepalive-interval")) { + number = nvlist_get_number(nvl_peers[i], "persistent-keepalive-interval"); + if (number <= UINT16_MAX) { + peer->persistent_keepalive_interval = number; + peer->flags |= WGPEER_HAS_PERSISTENT_KEEPALIVE_INTERVAL; + } + } + if (nvlist_exists_binary(nvl_peers[i], "endpoint")) { + const struct sockaddr *endpoint = nvlist_get_binary(nvl_peers[i], "endpoint", &size); + if (endpoint && size <= sizeof(peer->endpoint) && size >= sizeof(peer->endpoint.addr) && + (endpoint->sa_family == AF_INET || endpoint->sa_family == AF_INET6)) + memcpy(&peer->endpoint.addr, endpoint, size); + } + if (nvlist_exists_number(nvl_peers[i], "rx-bytes")) + peer->rx_bytes = nvlist_get_number(nvl_peers[i], "rx-bytes"); + if (nvlist_exists_number(nvl_peers[i], "tx-bytes")) + peer->tx_bytes = nvlist_get_number(nvl_peers[i], "tx-bytes"); + if (nvlist_exists_binary(nvl_peers[i], "last-handshake-time")) { + binary = nvlist_get_binary(nvl_peers[i], "last-handshake-time", &size); + if (binary && size == sizeof(peer->last_handshake_time)) + memcpy(&peer->last_handshake_time, binary, sizeof(peer->last_handshake_time)); + } + + if (!nvlist_exists_nvlist_array(nvl_peers[i], "allowed-ips")) + goto skip_allowed_ips; + nvl_aips = nvlist_get_nvlist_array(nvl_peers[i], "allowed-ips", &aip_count); + if (!aip_count || !nvl_aips) + goto skip_allowed_ips; + for (j = 0; j < aip_count; ++j) { + aip = calloc(1, sizeof(*aip)); + if (!aip) + goto err_allowed_ips; + if (!nvlist_exists_number(nvl_aips[j], "cidr")) + continue; + number = nvlist_get_number(nvl_aips[j], "cidr"); + if (nvlist_exists_binary(nvl_aips[j], "ipv4")) { + binary = nvlist_get_binary(nvl_aips[j], "ipv4", &size); + if (!binary || number > 32) { + ret = EINVAL; + goto err_allowed_ips; + } + aip->family = AF_INET; + aip->cidr = number; + memcpy(&aip->ip4, binary, sizeof(aip->ip4)); + } else if (nvlist_exists_binary(nvl_aips[j], "ipv6")) { + binary = nvlist_get_binary(nvl_aips[j], "ipv6", &size); + if (!binary || number > 128) { + ret = EINVAL; + goto err_allowed_ips; + } + aip->family = AF_INET6; + aip->cidr = number; + memcpy(&aip->ip6, binary, sizeof(aip->ip6)); + } else + continue; + + if (!peer->first_allowedip) + peer->first_allowedip = aip; + else + peer->last_allowedip->next_allowedip = aip; + peer->last_allowedip = aip; + continue; + + err_allowed_ips: + if (!ret) + ret = -errno; + free(aip); + goto err_peer; + } + skip_allowed_ips: + if (!dev->first_peer) + dev->first_peer = peer; + else + dev->last_peer->next_peer = peer; + dev->last_peer = peer; + continue; + + err_peer: + if (!ret) + ret = -errno; + free(peer); + goto err; + } + +skip_peers: + free(wgd.wgd_data); + nvlist_destroy(nvl_device); + *device = dev; + return 0; + +err: + if (!ret) + ret = -errno; + free(wgd.wgd_data); + nvlist_destroy(nvl_device); + free(dev); + return ret; +} + + +static int kernel_set_device(struct wgdevice *dev) +{ + struct wg_data_io wgd = { 0 }; + nvlist_t *nvl_device = NULL, **nvl_peers = NULL; + size_t peer_count = 0, i = 0; + struct wgpeer *peer; + int ret = 0, s; + + strlcpy(wgd.wgd_name, dev->name, sizeof(wgd.wgd_name)); + + nvl_device = nvlist_create(0); + if (!nvl_device) + goto err; + + for_each_wgpeer(dev, peer) + ++peer_count; + if (peer_count) { + nvl_peers = calloc(peer_count, sizeof(*nvl_peers)); + if (!nvl_peers) + goto err; + } + if (dev->flags & WGDEVICE_HAS_PRIVATE_KEY) + nvlist_add_binary(nvl_device, "private-key", dev->private_key, sizeof(dev->private_key)); + if (dev->flags & WGDEVICE_HAS_LISTEN_PORT) + nvlist_add_number(nvl_device, "listen-port", dev->listen_port); + if (dev->flags & WGDEVICE_HAS_FWMARK) + nvlist_add_number(nvl_device, "user-cookie", dev->fwmark); + if (dev->flags & WGDEVICE_REPLACE_PEERS) + nvlist_add_bool(nvl_device, "replace-peers", true); + + for_each_wgpeer(dev, peer) { + size_t aip_count = 0, j = 0; + nvlist_t **nvl_aips = NULL; + struct wgallowedip *aip; + + nvl_peers[i] = nvlist_create(0); + if (!nvl_peers[i]) + goto err_peer; + for_each_wgallowedip(peer, aip) + ++aip_count; + if (aip_count) { + nvl_aips = calloc(aip_count, sizeof(*nvl_aips)); + if (!nvl_aips) + goto err_peer; + } + nvlist_add_binary(nvl_peers[i], "public-key", peer->public_key, sizeof(peer->public_key)); + if (peer->flags & WGPEER_HAS_PRESHARED_KEY) + nvlist_add_binary(nvl_peers[i], "preshared-key", peer->preshared_key, sizeof(peer->preshared_key)); + if (peer->flags & WGPEER_HAS_PERSISTENT_KEEPALIVE_INTERVAL) + nvlist_add_number(nvl_peers[i], "persistent-keepalive-interval", peer->persistent_keepalive_interval); + if (peer->endpoint.addr.sa_family == AF_INET || peer->endpoint.addr.sa_family == AF_INET6) + nvlist_add_binary(nvl_peers[i], "endpoint", &peer->endpoint.addr, peer->endpoint.addr.sa_len); + if (peer->flags & WGPEER_REPLACE_ALLOWEDIPS) + nvlist_add_bool(nvl_peers[i], "replace-allowedips", true); + if (peer->flags & WGPEER_REMOVE_ME) + nvlist_add_bool(nvl_peers[i], "remove", true); + for_each_wgallowedip(peer, aip) { + nvl_aips[j] = nvlist_create(0); + if (!nvl_aips[j]) + goto err_peer; + nvlist_add_number(nvl_aips[j], "cidr", aip->cidr); + if (aip->family == AF_INET) + nvlist_add_binary(nvl_aips[j], "ipv4", &aip->ip4, sizeof(aip->ip4)); + else if (aip->family == AF_INET6) + nvlist_add_binary(nvl_aips[j], "ipv6", &aip->ip6, sizeof(aip->ip6)); + ++j; + } + if (j) { + nvlist_add_nvlist_array(nvl_peers[i], "allowed-ips", (const nvlist_t *const *)nvl_aips, j); + for (j = 0; j < aip_count; ++j) + nvlist_destroy(nvl_aips[j]); + free(nvl_aips); + } + ++i; + continue; + + err_peer: + ret = -errno; + for (j = 0; j < aip_count && nvl_aips; ++j) + nvlist_destroy(nvl_aips[j]); + free(nvl_aips); + nvlist_destroy(nvl_peers[i]); + goto err; + } + if (i) { + nvlist_add_nvlist_array(nvl_device, "peers", (const nvlist_t *const *)nvl_peers, i); + for (i = 0; i < peer_count; ++i) + nvlist_destroy(nvl_peers[i]); + free(nvl_peers); + } + wgd.wgd_data = nvlist_pack(nvl_device, &wgd.wgd_size); + nvlist_destroy(nvl_device); + if (!wgd.wgd_data) + goto err; + s = get_dgram_socket(); + if (s < 0) + return -errno; + return ioctl(s, SIOCSWG, &wgd); + +err: + if (!ret) + ret = -errno; + for (i = 0; i < peer_count && nvl_peers; ++i) + nvlist_destroy(nvl_peers[i]); + free(nvl_peers); + nvlist_destroy(nvl_device); + return ret; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wireguard-tools-1.0.20210223/src/ipc-openbsd.h new/wireguard-tools-1.0.20210315/src/ipc-openbsd.h --- old/wireguard-tools-1.0.20210223/src/ipc-openbsd.h 2021-02-23 19:32:18.000000000 +0100 +++ new/wireguard-tools-1.0.20210315/src/ipc-openbsd.h 2021-03-15 15:04:02.000000000 +0100 @@ -129,7 +129,8 @@ if (wg_peer->p_flags & WG_PEER_HAS_PSK) { memcpy(peer->preshared_key, wg_peer->p_psk, sizeof(peer->preshared_key)); - peer->flags |= WGPEER_HAS_PRESHARED_KEY; + if (!key_is_zero(peer->preshared_key)) + peer->flags |= WGPEER_HAS_PRESHARED_KEY; } if (wg_peer->p_flags & WG_PEER_HAS_PKA) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wireguard-tools-1.0.20210223/src/ipc.c new/wireguard-tools-1.0.20210315/src/ipc.c --- old/wireguard-tools-1.0.20210223/src/ipc.c 2021-02-23 19:32:18.000000000 +0100 +++ new/wireguard-tools-1.0.20210315/src/ipc.c 2021-03-15 15:04:02.000000000 +0100 @@ -7,6 +7,7 @@ #include <stdlib.h> #include <errno.h> #include "containers.h" +#include "ipc.h" struct string_list { char *buffer; @@ -44,6 +45,8 @@ #include "ipc-linux.h" #elif defined(__OpenBSD__) #include "ipc-openbsd.h" +#elif defined(__FreeBSD__) +#include "ipc-freebsd.h" #endif /* first\0second\0third\0forth\0last\0\0 */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wireguard-tools-1.0.20210223/src/pubkey.c new/wireguard-tools-1.0.20210315/src/pubkey.c --- old/wireguard-tools-1.0.20210223/src/pubkey.c 2021-02-23 19:32:18.000000000 +0100 +++ new/wireguard-tools-1.0.20210315/src/pubkey.c 2021-03-15 15:04:02.000000000 +0100 @@ -11,7 +11,7 @@ #include "subcommands.h" #include "ctype.h" -int pubkey_main(int argc, char *argv[]) +int pubkey_main(int argc, const char *argv[]) { uint8_t key[WG_KEY_LEN] __attribute__((aligned(sizeof(uintptr_t)))); char base64[WG_KEY_LEN_BASE64]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wireguard-tools-1.0.20210223/src/set.c new/wireguard-tools-1.0.20210315/src/set.c --- old/wireguard-tools-1.0.20210223/src/set.c 2021-02-23 19:32:18.000000000 +0100 +++ new/wireguard-tools-1.0.20210315/src/set.c 2021-03-15 15:04:02.000000000 +0100 @@ -12,7 +12,7 @@ #include "ipc.h" #include "subcommands.h" -int set_main(int argc, char *argv[]) +int set_main(int argc, const char *argv[]) { struct wgdevice *device = NULL; int ret = 1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wireguard-tools-1.0.20210223/src/setconf.c new/wireguard-tools-1.0.20210315/src/setconf.c --- old/wireguard-tools-1.0.20210223/src/setconf.c 2021-02-23 19:32:18.000000000 +0100 +++ new/wireguard-tools-1.0.20210315/src/setconf.c 2021-03-15 15:04:02.000000000 +0100 @@ -98,7 +98,7 @@ return true; } -int setconf_main(int argc, char *argv[]) +int setconf_main(int argc, const char *argv[]) { struct wgdevice *device = NULL; struct config_ctx ctx; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wireguard-tools-1.0.20210223/src/show.c new/wireguard-tools-1.0.20210315/src/show.c --- old/wireguard-tools-1.0.20210223/src/show.c 2021-02-23 19:32:18.000000000 +0100 +++ new/wireguard-tools-1.0.20210315/src/show.c 2021-03-15 15:04:02.000000000 +0100 @@ -75,14 +75,14 @@ return base64; } -static char *maybe_key(const uint8_t maybe_key[static WG_KEY_LEN], bool have_it) +static const char *maybe_key(const uint8_t maybe_key[static WG_KEY_LEN], bool have_it) { if (!have_it) return "(none)"; return key(maybe_key); } -static char *masked_key(const uint8_t masked_key[static WG_KEY_LEN]) +static const char *masked_key(const uint8_t masked_key[static WG_KEY_LEN]) { const char *var = getenv("WG_HIDE_KEYS"); @@ -376,7 +376,7 @@ return true; } -int show_main(int argc, char *argv[]) +int show_main(int argc, const char *argv[]) { int ret = 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wireguard-tools-1.0.20210223/src/showconf.c new/wireguard-tools-1.0.20210315/src/showconf.c --- old/wireguard-tools-1.0.20210223/src/showconf.c 2021-02-23 19:32:18.000000000 +0100 +++ new/wireguard-tools-1.0.20210315/src/showconf.c 2021-03-15 15:04:02.000000000 +0100 @@ -18,7 +18,7 @@ #include "ipc.h" #include "subcommands.h" -int showconf_main(int argc, char *argv[]) +int showconf_main(int argc, const char *argv[]) { char base64[WG_KEY_LEN_BASE64]; char ip[INET6_ADDRSTRLEN]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wireguard-tools-1.0.20210223/src/subcommands.h new/wireguard-tools-1.0.20210315/src/subcommands.h --- old/wireguard-tools-1.0.20210223/src/subcommands.h 2021-02-23 19:32:18.000000000 +0100 +++ new/wireguard-tools-1.0.20210315/src/subcommands.h 2021-03-15 15:04:02.000000000 +0100 @@ -7,11 +7,11 @@ #define SUBCOMMANDS_H extern const char *PROG_NAME; -int show_main(int argc, char *argv[]); -int showconf_main(int argc, char *argv[]); -int set_main(int argc, char *argv[]); -int setconf_main(int argc, char *argv[]); -int genkey_main(int argc, char *argv[]); -int pubkey_main(int argc, char *argv[]); +int show_main(int argc, const char *argv[]); +int showconf_main(int argc, const char *argv[]); +int set_main(int argc, const char *argv[]); +int setconf_main(int argc, const char *argv[]); +int genkey_main(int argc, const char *argv[]); +int pubkey_main(int argc, const char *argv[]); #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wireguard-tools-1.0.20210223/src/terminal.c new/wireguard-tools-1.0.20210315/src/terminal.c --- old/wireguard-tools-1.0.20210223/src/terminal.c 2021-02-23 19:32:18.000000000 +0100 +++ new/wireguard-tools-1.0.20210315/src/terminal.c 2021-03-15 15:04:02.000000000 +0100 @@ -11,6 +11,7 @@ #include <stdbool.h> #include <unistd.h> #include "ctype.h" +#include "terminal.h" static bool color_mode(void) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wireguard-tools-1.0.20210223/src/uapi/freebsd/dev/if_wg/if_wg.h new/wireguard-tools-1.0.20210315/src/uapi/freebsd/dev/if_wg/if_wg.h --- old/wireguard-tools-1.0.20210223/src/uapi/freebsd/dev/if_wg/if_wg.h 1970-01-01 01:00:00.000000000 +0100 +++ new/wireguard-tools-1.0.20210315/src/uapi/freebsd/dev/if_wg/if_wg.h 2021-03-15 15:04:02.000000000 +0100 @@ -0,0 +1,16 @@ +#ifndef __IF_WG_H__ +#define __IF_WG_H__ + +#include <net/if.h> +#include <netinet/in.h> + +struct wg_data_io { + char wgd_name[IFNAMSIZ]; + void *wgd_data; + size_t wgd_size; +}; + +#define SIOCSWG _IOWR('i', 210, struct wg_data_io) +#define SIOCGWG _IOWR('i', 211, struct wg_data_io) + +#endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wireguard-tools-1.0.20210223/src/version.h new/wireguard-tools-1.0.20210315/src/version.h --- old/wireguard-tools-1.0.20210223/src/version.h 2021-02-23 19:32:18.000000000 +0100 +++ new/wireguard-tools-1.0.20210315/src/version.h 2021-03-15 15:04:02.000000000 +0100 @@ -1,3 +1,3 @@ #ifndef WIREGUARD_TOOLS_VERSION -#define WIREGUARD_TOOLS_VERSION "1.0.20210223" +#define WIREGUARD_TOOLS_VERSION "1.0.20210315" #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wireguard-tools-1.0.20210223/src/wg-quick/freebsd.bash new/wireguard-tools-1.0.20210315/src/wg-quick/freebsd.bash --- old/wireguard-tools-1.0.20210223/src/wg-quick/freebsd.bash 2021-02-23 19:32:18.000000000 +0100 +++ new/wireguard-tools-1.0.20210315/src/wg-quick/freebsd.bash 2021-03-15 15:04:02.000000000 +0100 @@ -8,6 +8,7 @@ shopt -s extglob export LC_ALL=C +exec 3>&2 SELF="$(readlink -f "${BASH_SOURCE[0]}")" export PATH="${SELF%/*}:$PATH" @@ -28,7 +29,7 @@ ARGS=( "$@" ) cmd() { - echo "[#] $*" >&2 + echo "[#] $*" >&3 "$@" } @@ -114,6 +115,16 @@ } add_if() { + local ret rc + if ret="$(cmd ifconfig wg create name "$INTERFACE" 2>&1 >/dev/null)"; then + return 0 + fi + rc=$? + if [[ $ret == *"ifconfig: ioctl SIOCSIFNAME (set name): File exists"* ]]; then + echo "$ret" >&3 + return $rc + fi + echo "[!] Missing WireGuard kernel support ($ret). Falling back to slow userspace implementation." >&3 cmd "${WG_QUICK_USERSPACE_IMPLEMENTATION:-wireguard-go}" "$INTERFACE" } @@ -157,7 +168,11 @@ del_if() { [[ $HAVE_SET_DNS -eq 0 ]] || unset_dns - cmd rm -f "/var/run/wireguard/$INTERFACE.sock" + if [[ -f /var/run/wireguard/$INTERFACE.sock ]]; then + cmd rm -f "/var/run/wireguard/$INTERFACE.sock" + else + cmd ifconfig "$INTERFACE" destroy + fi while if_exists; do # HACK: it would be nice to `route monitor` here and wait for RTM_IFANNOUNCE # but it turns out that the announcement is made before the interface @@ -290,7 +305,6 @@ # endpoints change. while read -r event; do [[ $event == RTM_* ]] || continue - [[ -e /var/run/wireguard/$INTERFACE.sock ]] || break if_exists || break [[ $AUTO_ROUTE4 -eq 1 || $AUTO_ROUTE6 -eq 1 ]] && set_endpoint_direct_route # TODO: set the mtu as well, but only if up @@ -335,7 +349,7 @@ } set_config() { - cmd wg setconf "$INTERFACE" <(echo "$WG_CONFIG") + echo "$WG_CONFIG" | cmd wg setconf "$INTERFACE" /dev/stdin } save_config() { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wireguard-tools-1.0.20210223/src/wg.c new/wireguard-tools-1.0.20210315/src/wg.c --- old/wireguard-tools-1.0.20210223/src/wg.c 2021-02-23 19:32:18.000000000 +0100 +++ new/wireguard-tools-1.0.20210315/src/wg.c 2021-03-15 15:04:02.000000000 +0100 @@ -14,7 +14,7 @@ static const struct { const char *subcommand; - int (*function)(int, char**); + int (*function)(int, const char**); const char *description; } subcommands[] = { { "show", show_main, "Shows the current configuration and device information" }, @@ -37,7 +37,7 @@ fprintf(file, "You may pass `--help' to any of these subcommands to view usage.\n"); } -int main(int argc, char *argv[]) +int main(int argc, const char *argv[]) { PROG_NAME = argv[0]; @@ -51,7 +51,7 @@ } if (argc == 1) { - static char *new_argv[] = { "show", NULL }; + static const char *new_argv[] = { "show", NULL }; return show_main(1, new_argv); }