diff options
author | gilles <gilles@poolp.org> | 2016-06-05 14:08:32 +0200 |
---|---|---|
committer | gilles <gilles@poolp.org> | 2016-06-05 14:08:32 +0200 |
commit | d16ab13f3b6e366a1c037b0d8239376a1fa3a39e (patch) | |
tree | 739e9b3154f90f82c76390803e94aaaf6b585d01 /smtpd/to.c | |
parent | Merge branch 'master' into portable (diff) | |
parent | sync with OpenBSD: (diff) | |
download | OpenSMTPD-d16ab13f3b6e366a1c037b0d8239376a1fa3a39e.tar.xz OpenSMTPD-d16ab13f3b6e366a1c037b0d8239376a1fa3a39e.zip |
Merge branch 'master' into portable
Diffstat (limited to 'smtpd/to.c')
-rw-r--r-- | smtpd/to.c | 68 |
1 files changed, 15 insertions, 53 deletions
@@ -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; |