aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/config.c
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2017-11-11 12:30:21 +0900
committerJason A. Donenfeld <Jason@zx2c4.com>2017-11-11 12:30:49 +0900
commite77a77a805fcf4e27c8604fd322d30fd27ff2f54 (patch)
tree34b7e58b34cb81d8645ff775a7d0790246b8833b /src/config.c
parentwg: remove ioctl cruft (diff)
downloadwireguard-tools-e77a77a805fcf4e27c8604fd322d30fd27ff2f54.tar.xz
wireguard-tools-e77a77a805fcf4e27c8604fd322d30fd27ff2f54.zip
wg: allow for NULL keys everywhere
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'src/config.c')
-rw-r--r--src/config.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/config.c b/src/config.c
index 5b25b46..540b800 100644
--- a/src/config.c
+++ b/src/config.c
@@ -318,9 +318,11 @@ static bool process_line(struct config_ctx *ctx, const char *line)
} else if (ctx->is_peer_section) {
if (key_match("Endpoint"))
ret = parse_endpoint(&ctx->last_peer->endpoint.addr, value);
- else if (key_match("PublicKey"))
+ else if (key_match("PublicKey")) {
ret = parse_key(ctx->last_peer->public_key, value);
- else if (key_match("AllowedIPs"))
+ if (ret)
+ ctx->last_peer->flags |= WGPEER_HAS_PUBLIC_KEY;
+ } else if (key_match("AllowedIPs"))
ret = parse_allowedips(ctx->last_peer, &ctx->last_allowedip, value);
else if (key_match("PersistentKeepalive"))
ret = parse_persistent_keepalive(&ctx->last_peer->persistent_keepalive_interval, &ctx->last_peer->flags, value);
@@ -328,7 +330,7 @@ static bool process_line(struct config_ctx *ctx, const char *line)
ret = parse_key(ctx->last_peer->preshared_key, value);
if (!ret)
memset(ctx->last_peer->preshared_key, 0, WG_KEY_LEN);
- else
+ else if (!key_is_zero(ctx->last_peer->preshared_key))
ctx->last_peer->flags |= WGPEER_HAS_PRESHARED_KEY;
} else
goto error;
@@ -390,7 +392,7 @@ struct wgdevice *config_read_finish(struct config_ctx *ctx)
struct wgpeer *peer;
for_each_wgpeer(ctx->device, peer) {
- if (key_is_zero(peer->public_key)) {
+ if (!(peer->flags & WGPEER_HAS_PUBLIC_KEY)) {
fprintf(stderr, "A peer is missing a public key\n");
goto err;
}
@@ -548,7 +550,8 @@ struct wgdevice *config_read_cmd(char *argv[], int argc)
if (read_keyfile(key_line, argv[1])) {
if (!parse_key(peer->preshared_key, key_line))
goto error;
- peer->flags |= WGPEER_HAS_PRESHARED_KEY;
+ if (!key_is_zero(peer->preshared_key))
+ peer->flags |= WGPEER_HAS_PRESHARED_KEY;
} else
goto error;
argv += 2;