aboutsummaryrefslogtreecommitdiffstats
path: root/smtpd/to.c
diff options
context:
space:
mode:
authorgilles <gilles@poolp.org>2016-06-05 14:08:32 +0200
committergilles <gilles@poolp.org>2016-06-05 14:08:32 +0200
commitd16ab13f3b6e366a1c037b0d8239376a1fa3a39e (patch)
tree739e9b3154f90f82c76390803e94aaaf6b585d01 /smtpd/to.c
parentMerge branch 'master' into portable (diff)
parentsync with OpenBSD: (diff)
downloadOpenSMTPD-d16ab13f3b6e366a1c037b0d8239376a1fa3a39e.tar.xz
OpenSMTPD-d16ab13f3b6e366a1c037b0d8239376a1fa3a39e.zip
Merge branch 'master' into portable
Diffstat (limited to 'smtpd/to.c')
-rw-r--r--smtpd/to.c68
1 files changed, 15 insertions, 53 deletions
diff --git a/smtpd/to.c b/smtpd/to.c
index 2eceb5e7..4a6a7655 100644
--- a/smtpd/to.c
+++ b/smtpd/to.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: to.c,v 1.27 2016/05/22 11:15:31 gilles Exp $ */
+/* $OpenBSD: to.c,v 1.28 2016/05/30 12:33:44 mpi Exp $ */
/*
* Copyright (c) 2009 Jacek Masiulaniec <jacekm@dobremiasto.net>
@@ -290,62 +290,24 @@ text_to_netaddr(struct netaddr *netaddr, const char *s)
if (strncasecmp("IPv6:", s, 5) == 0)
s += 5;
- if (strchr(s, '/') != NULL) {
- /* dealing with netmask */
- bits = inet_net_pton(AF_INET, s, &ssin.sin_addr,
- sizeof(struct in_addr));
- if (bits != -1) {
- ssin.sin_family = AF_INET;
- memcpy(&ss, &ssin, sizeof(ssin));
+ bits = inet_net_pton(AF_INET, s, &ssin.sin_addr,
+ sizeof(struct in_addr));
+ if (bits != -1) {
+ ssin.sin_family = AF_INET;
+ memcpy(&ss, &ssin, sizeof(ssin));
#ifdef HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN
- ss.ss_len = sizeof(struct sockaddr_in);
+ ss.ss_len = sizeof(struct sockaddr_in);
#endif
- }
- else {
- bits = inet_net_pton(AF_INET6, s, &ssin6.sin6_addr,
- sizeof(struct in6_addr));
- if (bits == -1) {
-
- /* XXX - some systems don't support
- inet_net_pton(AF_INET6, ...); */
- if (errno != EAFNOSUPPORT) {
- log_warn("inet_net_pton");
- return 0;
- }
- bits = temp_inet_net_pton_ipv6(s,
- &ssin6.sin6_addr,
- sizeof(struct in6_addr));
- }
- if (bits == -1) {
- log_warn("warn: inet_net_pton");
- return 0;
- }
- ssin6.sin6_family = AF_INET6;
- memcpy(&ss, &ssin6, sizeof(ssin6));
-#ifdef HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN
- ss.ss_len = sizeof(struct sockaddr_in6);
-#endif
- }
- }
- else {
- /* IP address ? */
- if (inet_pton(AF_INET, s, &ssin.sin_addr) == 1) {
- ssin.sin_family = AF_INET;
- bits = 32;
- memcpy(&ss, &ssin, sizeof(ssin));
-#ifdef HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN
- ss.ss_len = sizeof(struct sockaddr_in);
-#endif
- }
- else if (inet_pton(AF_INET6, s, &ssin6.sin6_addr) == 1) {
- ssin6.sin6_family = AF_INET6;
- bits = 128;
- memcpy(&ss, &ssin6, sizeof(ssin6));
+ } else {
+ bits = inet_net_pton(AF_INET6, s, &ssin6.sin6_addr,
+ sizeof(struct in6_addr));
+ if (bits == -1)
+ return 0;
+ ssin6.sin6_family = AF_INET6;
+ memcpy(&ss, &ssin6, sizeof(ssin6));
#ifdef HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN
- ss.ss_len = sizeof(struct sockaddr_in6);
+ ss.ss_len = sizeof(struct sockaddr_in6);
#endif
- }
- else return 0;
}
netaddr->ss = ss;