aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/config.c
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2017-04-27 11:10:50 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2017-05-17 18:07:42 +0200
commitfabb6eca2b6fd41dd8010d40eaac3f55cec1df2c (patch)
tree4c63e9e601daafcc7c6b57825ccb839cfbf444cf /src/config.c
parentwg-quick: auto MTU discovery (diff)
downloadwireguard-tools-fabb6eca2b6fd41dd8010d40eaac3f55cec1df2c.tar.xz
wireguard-tools-fabb6eca2b6fd41dd8010d40eaac3f55cec1df2c.zip
noise: redesign preshared key mode
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'src/config.c')
-rw-r--r--src/config.c43
1 files changed, 21 insertions, 22 deletions
diff --git a/src/config.c b/src/config.c
index c00e91c..a129088 100644
--- a/src/config.c
+++ b/src/config.c
@@ -323,10 +323,6 @@ static bool process_line(struct config_ctx *ctx, const char *line)
ret = parse_key(ctx->buf.dev->private_key, value);
if (!ret)
memset(ctx->buf.dev->private_key, 0, WG_KEY_LEN);
- } else if (key_match("PresharedKey")) {
- ret = parse_key(ctx->buf.dev->preshared_key, value);
- if (!ret)
- memset(ctx->buf.dev->preshared_key, 0, WG_KEY_LEN);
} else
goto error;
} else if (ctx->is_peer_section) {
@@ -338,7 +334,11 @@ static bool process_line(struct config_ctx *ctx, const char *line)
ret = parse_ipmasks(&ctx->buf, ctx->peer_offset, value);
else if (key_match("PersistentKeepalive"))
ret = parse_persistent_keepalive(&peer_from_offset(ctx->buf.dev, ctx->peer_offset)->persistent_keepalive_interval, value);
- else
+ else if (key_match("PresharedKey")) {
+ ret = parse_key(peer_from_offset(ctx->buf.dev, ctx->peer_offset)->preshared_key, value);
+ if (!ret)
+ memset(peer_from_offset(ctx->buf.dev, ctx->peer_offset)->preshared_key, 0, WG_KEY_LEN);
+ } else
goto error;
} else
goto error;
@@ -408,8 +408,6 @@ bool config_read_finish(struct config_ctx *ctx)
fprintf(stderr, "No private key configured\n");
goto err;
}
- if (ctx->buf.dev->flags & WGDEVICE_REPLACE_PEERS && !key_is_valid(ctx->buf.dev->preshared_key))
- ctx->buf.dev->flags |= WGDEVICE_REMOVE_PRESHARED_KEY;
if (ctx->buf.dev->flags & WGDEVICE_REPLACE_PEERS && !ctx->buf.dev->fwmark)
ctx->buf.dev->flags |= WGDEVICE_REMOVE_FWMARK;
@@ -508,21 +506,6 @@ bool config_read_cmd(struct wgdevice **device, char *argv[], int argc)
goto error;
argv += 2;
argc -= 2;
- } else if (!strcmp(argv[0], "preshared-key") && argc >= 2 && !buf.dev->num_peers) {
- char *line;
- int ret = read_line(&line, argv[1]);
- if (ret == 0) {
- if (!parse_key(buf.dev->preshared_key, line)) {
- free(line);
- goto error;
- }
- free(line);
- } else if (ret == 1)
- buf.dev->flags |= WGDEVICE_REMOVE_PRESHARED_KEY;
- else
- goto error;
- argv += 2;
- argc -= 2;
} else if (!strcmp(argv[0], "peer") && argc >= 2) {
peer_offset = buf.pos;
if (use_space(&buf, sizeof(struct wgpeer)) < 0) {
@@ -560,6 +543,22 @@ bool config_read_cmd(struct wgdevice **device, char *argv[], int argc)
goto error;
argv += 2;
argc -= 2;
+ } else if (!strcmp(argv[0], "preshared-key") && argc >= 2 && buf.dev->num_peers) {
+ char *line;
+ int ret = read_line(&line, argv[1]);
+ if (ret == 0) {
+ if (!parse_key(peer_from_offset(buf.dev, peer_offset)->preshared_key, line)) {
+ free(line);
+ goto error;
+ }
+ free(line);
+ } else if (ret == 1) {
+ free(line);
+ buf.dev->flags |= WGPEER_REMOVE_PRESHARED_KEY;
+ } else
+ goto error;
+ argv += 2;
+ argc -= 2;
} else {
fprintf(stderr, "Invalid argument: %s\n", argv[0]);
goto error;