aboutsummaryrefslogtreecommitdiffstats
path: root/wg-dynamic-server.c
diff options
context:
space:
mode:
authorThomas Gschwantner <tharre3@gmail.com>2019-12-11 04:06:21 +0100
committerThomas Gschwantner <tharre3@gmail.com>2019-12-11 06:22:17 +0100
commitca0e5670ac989ff3621ba133a455756ee378faf4 (patch)
treeaa8ba4da7c76cdfdeeae01a9274be09468f9c2ad /wg-dynamic-server.c
parentChange request_ip protocol (diff)
downloadwg-dynamic-ca0e5670ac989ff3621ba133a455756ee378faf4.tar.xz
wg-dynamic-ca0e5670ac989ff3621ba133a455756ee378faf4.zip
Properly send and display wg_errno and errmsg
Diffstat (limited to '')
-rw-r--r--wg-dynamic-server.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/wg-dynamic-server.c b/wg-dynamic-server.c
index 3b4b1f1..7502aaa 100644
--- a/wg-dynamic-server.c
+++ b/wg-dynamic-server.c
@@ -262,16 +262,23 @@ static bool send_response(struct wg_dynamic_connection *con)
lease = set_lease(con->pubkey, leasetime, &con->lladdr, ip4,
ip6);
- if (lease) {
+
+ if (lease->ipv4.s_addr) {
+ ans.has_ipv4 = true;
memcpy(&ans.ipv4, &lease->ipv4, sizeof ans.ipv4);
+ }
+ if (!IN6_IS_ADDR_UNSPECIFIED(&lease->ipv6)) {
+ ans.has_ipv6 = true;
memcpy(&ans.ipv6, &lease->ipv6, sizeof ans.ipv6);
- ans.has_ipv4 = ans.has_ipv6 = true;
- ans.start = lease->start_real;
- ans.leasetime = lease->leasetime;
- } else {
- ans.wg_errno = E_IP_UNAVAIL;
}
+ if ((!ans.has_ipv4 && rip->has_ipv4) ||
+ (!ans.has_ipv6 && rip->has_ipv6))
+ ans.wg_errno = E_IP_UNAVAIL;
+
+ ans.start = lease->start_real;
+ ans.leasetime = lease->leasetime;
+
msglen = serialize_request_ip(false, buf, sizeof buf, &ans);
break;
default: