diff options
author | 2019-11-28 15:44:52 +0000 | |
---|---|---|
committer | 2019-11-28 15:44:52 +0000 | |
commit | cc9b77c2dfb2ac291e1cc1e46a36ebe4349fe67b (patch) | |
tree | 77e8f56aacbb70e8c5521e7480369dc60311405c | |
parent | No more example file; ok florian@ (diff) | |
download | wireguard-openbsd-cc9b77c2dfb2ac291e1cc1e46a36ebe4349fe67b.tar.xz wireguard-openbsd-cc9b77c2dfb2ac291e1cc1e46a36ebe4349fe67b.zip |
Introduce copy_sockaddrtoipa() and set_ipmask() bits from pfctl
The new wrapper will be used in the upcoming diff, set_ipmask() will be
called with -1.
Both is in analogy to pfctl, bgpd and others where IP/host parsing has been
made more AF agnostic already.
copy_sockaddrtoipa() is not called copy_satoipa() to avoid confusion with
IPSec terminology (SA) as suggested by tobhe.
No functional change
OK tobhe
-rw-r--r-- | sbin/iked/parse.y | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/sbin/iked/parse.y b/sbin/iked/parse.y index f61c68044a2..28dcf2c9bcb 100644 --- a/sbin/iked/parse.y +++ b/sbin/iked/parse.y @@ -1,4 +1,4 @@ -/* $OpenBSD: parse.y,v 1.85 2019/11/12 16:45:04 tobhe Exp $ */ +/* $OpenBSD: parse.y,v 1.86 2019/11/28 15:44:52 kn Exp $ */ /* * Copyright (c) 2019 Tobias Heider <tobias.heider@stusta.de> @@ -331,6 +331,8 @@ struct ipsec_filters { unsigned int tap; }; +void copy_sockaddrtoipa(struct ipsec_addr_wrap *, + struct sockaddr *); struct ipsec_addr_wrap *host(const char *); struct ipsec_addr_wrap *host_v6(const char *, int); struct ipsec_addr_wrap *host_v4(const char *, int); @@ -341,7 +343,7 @@ void ifa_load(void); int ifa_exists(const char *); struct ipsec_addr_wrap *ifa_lookup(const char *ifa_name); struct ipsec_addr_wrap *ifa_grouplookup(const char *); -void set_ipmask(struct ipsec_addr_wrap *, uint8_t); +void set_ipmask(struct ipsec_addr_wrap *, int); const struct ipsec_xf *parse_xf(const char *, unsigned int, const struct ipsec_xf *); const char *print_xf(unsigned int, unsigned int, @@ -1169,6 +1171,17 @@ struct keywords { int k_val; }; +void +copy_sockaddrtoipa(struct ipsec_addr_wrap *ipa, struct sockaddr *sa) +{ + if (sa->sa_family == AF_INET6) + memcpy(&ipa->address, sa, sizeof(struct sockaddr_in6)); + else if (sa->sa_family == AF_INET) + memcpy(&ipa->address, sa, sizeof(struct sockaddr_in)); + else + warnx("unhandled af %d", sa->sa_family); +} + int yyerror(const char *fmt, ...) { @@ -2149,16 +2162,7 @@ host_dns(const char *s, int mask) ipa = calloc(1, sizeof(struct ipsec_addr_wrap)); if (ipa == NULL) err(1, "%s", __func__); - switch (res->ai_family) { - case AF_INET: - memcpy(&ipa->address, res->ai_addr, - sizeof(struct sockaddr_in)); - break; - case AF_INET6: - memcpy(&ipa->address, res->ai_addr, - sizeof(struct sockaddr_in6)); - break; - } + copy_sockaddrtoipa(ipa, res->ai_addr); error = getnameinfo(res->ai_addr, res->ai_addrlen, hbuf, sizeof(hbuf), NULL, 0, NI_NUMERICHOST); if (error) @@ -2407,9 +2411,12 @@ ifa_lookup(const char *ifa_name) } void -set_ipmask(struct ipsec_addr_wrap *address, uint8_t b) +set_ipmask(struct ipsec_addr_wrap *address, int b) { - address->mask = b; + if (b == -1) + address->mask = address->af == AF_INET ? 32 : 128; + else + address->mask = b; } const struct ipsec_xf * |