diff options
author | Thomas Gschwantner <tharre3@gmail.com> | 2019-12-11 04:06:21 +0100 |
---|---|---|
committer | Thomas Gschwantner <tharre3@gmail.com> | 2019-12-11 06:22:17 +0100 |
commit | ca0e5670ac989ff3621ba133a455756ee378faf4 (patch) | |
tree | aa8ba4da7c76cdfdeeae01a9274be09468f9c2ad /wg-dynamic-server.c | |
parent | Change request_ip protocol (diff) | |
download | wg-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.c | 19 |
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: |