From d9b62a0a225acca8377479964ac0c743727c673d Mon Sep 17 00:00:00 2001 From: itojun Date: Fri, 9 Jul 1999 15:58:34 +0000 Subject: integrate USE_INET6 build better. uses the same set of NetBSD patches, and switch INET6/non-INET6 build by "#ifdef INET6". --- mail/qpopper/Makefile | 8 +- mail/qpopper/files/md5 | 2 +- mail/qpopper/files/patch-sum | 4 +- mail/qpopper/patches.v6/patch-ba | 17 ---- mail/qpopper/patches.v6/patch-bb | 176 ------------------------------------- mail/qpopper/patches/patch-ah | 19 ++++ mail/qpopper/patches/patch-ai | 184 +++++++++++++++++++++++++++++++++++++++ 7 files changed, 208 insertions(+), 202 deletions(-) delete mode 100644 mail/qpopper/patches.v6/patch-ba delete mode 100644 mail/qpopper/patches.v6/patch-bb create mode 100644 mail/qpopper/patches/patch-ah create mode 100644 mail/qpopper/patches/patch-ai (limited to 'mail/qpopper') diff --git a/mail/qpopper/Makefile b/mail/qpopper/Makefile index e80a928d3a5..a8528f3ff5f 100644 --- a/mail/qpopper/Makefile +++ b/mail/qpopper/Makefile @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.15 1999/07/08 17:11:56 itojun Exp $ +# $NetBSD: Makefile,v 1.16 1999/07/09 15:58:34 itojun Exp $ # DISTNAME= qpopper2.53 @@ -24,12 +24,6 @@ CONFIGURE_ARGS+= --enable-servermode .endif .if defined(USE_INET6) CONFIGURE_ENV+= O_DEFS="${O_DEFS}" CFLAGS="-DINET6" -PATCHDIR= ${WRKDIR}/.patches - -pre-patch: - ${MKDIR} ${WRKDIR}/.patches - ${CP} ${.CURDIR}/patches/patch-* ${WRKDIR}/.patches - ${CP} ${.CURDIR}/patches.v6/patch-* ${WRKDIR}/.patches .endif # popper makefile doesn't have an install target... diff --git a/mail/qpopper/files/md5 b/mail/qpopper/files/md5 index cafa8a3eae3..12066b7da1a 100644 --- a/mail/qpopper/files/md5 +++ b/mail/qpopper/files/md5 @@ -1,3 +1,3 @@ -$NetBSD: md5,v 1.5 1998/08/07 13:25:03 agc Exp $ +$NetBSD: md5,v 1.6 1999/07/09 15:58:34 itojun Exp $ MD5 (qpopper2.53.tar.Z) = fc8ef705510369692ca514808423b723 diff --git a/mail/qpopper/files/patch-sum b/mail/qpopper/files/patch-sum index 718e8a97147..39aa17bc1f4 100644 --- a/mail/qpopper/files/patch-sum +++ b/mail/qpopper/files/patch-sum @@ -1,4 +1,4 @@ -$NetBSD: patch-sum,v 1.1 1999/07/09 14:09:06 agc Exp $ +$NetBSD: patch-sum,v 1.2 1999/07/09 15:58:34 itojun Exp $ MD5 (patch-aa) = 0c73de75838fa87bdeee8ff25215aa6c MD5 (patch-ab) = 023d541f3737c6af4f226a736151fa4b @@ -7,3 +7,5 @@ MD5 (patch-ad) = f159699e6d26570cbf5e2653db9a1c13 MD5 (patch-ae) = 2c3c67441b4ba5ca70b3e84365fdbbd0 MD5 (patch-af) = 0b6310b766f2840ed1b909adceb34b7f MD5 (patch-ag) = 15372d496bd7e7a4829b8ffdd9aa06a3 +MD5 (patch-ah) = 95917820ef99cd7f8f5780fa830017f7 +MD5 (patch-ai) = 723837297204949e004422ffeaa5fcc3 diff --git a/mail/qpopper/patches.v6/patch-ba b/mail/qpopper/patches.v6/patch-ba deleted file mode 100644 index 2ac1c33bca6..00000000000 --- a/mail/qpopper/patches.v6/patch-ba +++ /dev/null @@ -1,17 +0,0 @@ -$NetBSD: patch-ba,v 1.1 1999/07/08 17:11:57 itojun Exp $ - ---- /dev/null Wed May 13 18:16:48 1998 -+++ sockunion.h Wed May 13 17:57:27 1998 -@@ -0,0 +1,12 @@ -+union sockunion { -+ struct sockinet { -+ u_char si_len; -+ u_char si_family; -+ u_short si_port; -+ } su_si; -+ struct sockaddr_in su_sin; -+ struct sockaddr_in6 su_sin6; -+}; -+#define su_len su_si.si_len -+#define su_family su_si.si_family -+#define su_port su_si.si_port diff --git a/mail/qpopper/patches.v6/patch-bb b/mail/qpopper/patches.v6/patch-bb deleted file mode 100644 index 67ef79f4f8e..00000000000 --- a/mail/qpopper/patches.v6/patch-bb +++ /dev/null @@ -1,176 +0,0 @@ -$NetBSD: patch-bb,v 1.1 1999/07/08 17:11:57 itojun Exp $ - ---- pop_init.c.orig Thu Nov 20 06:20:38 1997 -+++ pop_init.c Thu May 14 14:28:25 1998 -@@ -44,6 +44,8 @@ - - #include - -+#include "sockunion.h" -+ - /* CNS Kerberos IV */ - #ifdef KERBEROS - AUTH_DAT kdata; -@@ -75,9 +77,31 @@ - } - #endif - -+char * -+sock_ntop(p) -+ struct sockaddr *p; -+{ -+ static char ntop_buf[INET6_ADDRSTRLEN]; -+ union sockunion *su; -+ -+ su = (union sockunion *)p; -+ switch (su->su_family) { -+ case AF_INET: -+ inet_ntop(su->su_family, &su->su_sin.sin_addr, ntop_buf, -+ sizeof(ntop_buf)); -+ return ntop_buf; -+ case AF_INET6: -+ inet_ntop(su->su_family, &su->su_sin6.sin6_addr, ntop_buf, -+ sizeof(ntop_buf)); -+ return ntop_buf; -+ default: -+ return "(unsupported AF)"; -+ } -+} -+ - authenticate(p, addr) - POP *p; -- struct sockaddr_in *addr; -+ struct socket *addr; - { - - #ifdef KERBEROS -@@ -87,10 +111,10 @@ - char version[9]; - int auth; - -- if (p->kerberos) { -+ if (p->kerberos && addr->sa_family == AF_INET) { /*XXX*/ - strcpy(instance, "*"); - auth = krb_recvauth(0L, 0, &ticket, KERBEROS_SERVICE, instance, -- addr, (struct sockaddr_in *) NULL, -+ (struct sockaddr_in *)addr, (struct sockaddr_in *) NULL, - &kdata, "", schedule, version); - - if (auth != KSUCCESS) { -@@ -105,7 +129,7 @@ - # ifdef DEBUG - if (p->debug) - pop_log(p, POP_DEBUG, "%s.%s@%s (%s): ok", kdata.pname, -- kdata.pinst, kdata.prealm, inet_ntoa(addr->sin_addr)); -+ kdata.pinst, kdata.prealm, sock_ntop(addr)); - # endif /* DEBUG */ - - strncpy(p->user, kdata.pname, sizeof(p->user)); -@@ -126,7 +150,7 @@ - char ** argmessage; - { - -- struct sockaddr_in cs; /* Communication parameters */ -+ union sockunion cs; /* Communication parameters */ - struct hostent * ch; /* Client host information */ - int errflag = 0; - int c; -@@ -272,13 +296,23 @@ - - /* Save the dotted decimal form of the client's IP address - in the POP parameter block */ -- p->ipaddr = (char *)strdup(inet_ntoa(cs.sin_addr)); -+ p->ipaddr = (char *)strdup(sock_ntop(&cs)); - - /* Save the client's port */ -- p->ipport = ntohs(cs.sin_port); -+ p->ipport = ntohs(cs.su_port); - - /* Get the canonical name of the host to whom I am speaking */ -- ch = gethostbyaddr((char *) &cs.sin_addr, sizeof(cs.sin_addr), AF_INET); -+ switch (cs.su_family) { -+ case AF_INET: -+ ch = gethostbyaddr((char *) &cs.su_sin.sin_addr, sizeof(cs.su_sin.sin_addr), AF_INET); -+ break; -+ case AF_INET6: -+ ch = gethostbyaddr((char *) &cs.su_sin6.sin6_addr, sizeof(cs.su_sin6.sin6_addr), AF_INET6); -+ break; -+ default: -+ ch = NULL; -+ break; -+ } - if (ch == NULL){ - pop_log(p,POP_PRIORITY, - "(v%s) Unable to get canonical name of client, err = %d", -@@ -320,6 +354,7 @@ - - strncpy(h_name, ch->h_name, sizeof(h_name)); - -+#if 0 - /* See if the name obtained for the client's IP - address returns an address */ - if ((ch_again = gethostbyname(h_name)) == NULL) { -@@ -336,7 +371,7 @@ - /* Look for the client's IP address in the list returned - for its name */ - for (addrp=ch_again->h_addr_list; *addrp; ++addrp) -- if (bcmp(*addrp,&(cs.sin_addr),sizeof(cs.sin_addr)) == 0) break; -+ if (bcmp(*addrp,&(cs.su_sin.sin_addr),sizeof(cs.su_sin.sin_addr)) == 0) break; - - if (!*addrp) { - pop_log (p,POP_PRIORITY, -@@ -345,6 +380,54 @@ - p->client = p->ipaddr; - } - } -+#else -+ { -+ struct addrinfo hints, *res; -+ int error; -+ -+ p->client = (char *)strdup(ch->h_name); -+ -+ /* -+ * See if the name obtained for the client's IP -+ * address returns an address -+ */ -+ memset(&hints, 0, sizeof(hints)); -+ hints.ai_flags = AI_CANONNAME; -+ hints.ai_family = AF_UNSPEC; -+ hints.ai_socktype = SOCK_STREAM; -+ hints.ai_protocol = 0; -+ error = getaddrinfo(h_name, NULL, &hints, &res); -+ if (error) { -+ pop_log(p,POP_PRIORITY, -+ "Client at \"%s\" resolves to an unknown host name \"%s\"", -+ p->ipaddr, h_name); -+ p->client = p->ipaddr; -+ } else { -+ for ( ; res; res = res->ai_next) { -+ if (res->ai_addr->sa_family == AF_INET) { -+ if (!memcmp(&((struct sockaddr_in *)res->ai_addr)->sin_addr, -+ &(cs.su_sin.sin_addr), sizeof(cs.su_sin.sin_addr))) { -+ break; -+ } -+ } else if (res->ai_addr->sa_family == AF_INET6) { -+ if (!memcmp(&((struct sockaddr_in6 *)res->ai_addr)->sin6_addr, -+ &(cs.su_sin6.sin6_addr), sizeof(cs.su_sin6.sin6_addr))) { -+ break; -+ } -+ } else { -+ break; -+ } -+ } -+ -+ if (!res) { -+ pop_log (p,POP_PRIORITY, -+ "Client address \"%s\" not listed for its host name \"%s\"", -+ p->ipaddr,h_name); -+ p->client = p->ipaddr; -+ } -+ } -+ } -+#endif - - #ifdef RES_DEFNAMES - /* diff --git a/mail/qpopper/patches/patch-ah b/mail/qpopper/patches/patch-ah new file mode 100644 index 00000000000..2c65462b940 --- /dev/null +++ b/mail/qpopper/patches/patch-ah @@ -0,0 +1,19 @@ +$NetBSD: patch-ah,v 1.3 1999/07/09 15:58:34 itojun Exp $ + +--- sockunion.h.orig Fri Jul 9 08:18:22 1999 ++++ sockunion.h Fri Jul 9 08:20:21 1999 +@@ -0,0 +1,14 @@ ++union sockunion { ++ struct sockinet { ++ u_char si_len; ++ u_char si_family; ++ u_short si_port; ++ } su_si; ++ struct sockaddr_in su_sin; ++#ifdef INET6 ++ struct sockaddr_in6 su_sin6; ++#endif ++}; ++#define su_len su_si.si_len ++#define su_family su_si.si_family ++#define su_port su_si.si_port diff --git a/mail/qpopper/patches/patch-ai b/mail/qpopper/patches/patch-ai new file mode 100644 index 00000000000..a031cf03d06 --- /dev/null +++ b/mail/qpopper/patches/patch-ai @@ -0,0 +1,184 @@ +$NetBSD: patch-ai,v 1.1 1999/07/09 15:58:34 itojun Exp $ + +--- pop_init.c.orig Thu Jul 9 16:44:07 1998 ++++ pop_init.c Fri Jul 9 08:20:24 1999 +@@ -44,6 +44,8 @@ + + #include + ++#include "sockunion.h" ++ + /* CNS Kerberos IV */ + #ifdef KERBEROS + AUTH_DAT kdata; +@@ -75,9 +77,37 @@ + } + #endif + ++char * ++sock_ntop(p) ++ struct sockaddr *p; ++{ ++#ifndef INET6 ++ static char ntop_buf[INET6_ADDRSTRLEN]; ++#else ++ static char ntop_buf[INET_ADDRSTRLEN]; ++#endif ++ union sockunion *su; ++ ++ su = (union sockunion *)p; ++ switch (su->su_family) { ++ case AF_INET: ++ inet_ntop(su->su_family, &su->su_sin.sin_addr, ntop_buf, ++ sizeof(ntop_buf)); ++ return ntop_buf; ++#ifdef INET6 ++ case AF_INET6: ++ inet_ntop(su->su_family, &su->su_sin6.sin6_addr, ntop_buf, ++ sizeof(ntop_buf)); ++ return ntop_buf; ++#endif ++ default: ++ return "(unsupported AF)"; ++ } ++} ++ + authenticate(p, addr) + POP *p; +- struct sockaddr_in *addr; ++ struct socket *addr; + { + + #ifdef KERBEROS +@@ -87,10 +117,10 @@ + char version[9]; + int auth; + +- if (p->kerberos) { ++ if (p->kerberos && addr->sa_family == AF_INET) { /*XXX*/ + strcpy(instance, "*"); + auth = krb_recvauth(0L, 0, &ticket, KERBEROS_SERVICE, instance, +- addr, (struct sockaddr_in *) NULL, ++ (struct sockaddr_in *)addr, (struct sockaddr_in *) NULL, + &kdata, "", schedule, version); + + if (auth != KSUCCESS) { +@@ -105,7 +135,7 @@ + # ifdef DEBUG + if (p->debug) + pop_log(p, POP_DEBUG, "%s.%s@%s (%s): ok", kdata.pname, +- kdata.pinst, kdata.prealm, inet_ntoa(addr->sin_addr)); ++ kdata.pinst, kdata.prealm, sock_ntop(addr)); + # endif /* DEBUG */ + + strncpy(p->user, kdata.pname, sizeof(p->user)); +@@ -126,7 +156,7 @@ + char ** argmessage; + { + +- struct sockaddr_in cs; /* Communication parameters */ ++ union sockunion cs; /* Communication parameters */ + struct hostent * ch; /* Client host information */ + int errflag = 0; + int c; +@@ -272,13 +302,25 @@ + + /* Save the dotted decimal form of the client's IP address + in the POP parameter block */ +- p->ipaddr = (char *)strdup(inet_ntoa(cs.sin_addr)); ++ p->ipaddr = (char *)strdup(sock_ntop(&cs)); + + /* Save the client's port */ +- p->ipport = ntohs(cs.sin_port); ++ p->ipport = ntohs(cs.su_port); + + /* Get the canonical name of the host to whom I am speaking */ +- ch = gethostbyaddr((char *) &cs.sin_addr, sizeof(cs.sin_addr), AF_INET); ++ switch (cs.su_family) { ++ case AF_INET: ++ ch = gethostbyaddr((char *) &cs.su_sin.sin_addr, sizeof(cs.su_sin.sin_addr), AF_INET); ++ break; ++#ifdef INET6 ++ case AF_INET6: ++ ch = gethostbyaddr((char *) &cs.su_sin6.sin6_addr, sizeof(cs.su_sin6.sin6_addr), AF_INET6); ++ break; ++#endif ++ default: ++ ch = NULL; ++ break; ++ } + if (ch == NULL){ + pop_log(p,POP_PRIORITY, + "(v%s) Unable to get canonical name of client, err = %d", +@@ -320,6 +362,7 @@ + + strncpy(h_name, ch->h_name, sizeof(h_name)); + ++#ifndef INET6 + /* See if the name obtained for the client's IP + address returns an address */ + if ((ch_again = gethostbyname(h_name)) == NULL) { +@@ -336,7 +379,7 @@ + /* Look for the client's IP address in the list returned + for its name */ + for (addrp=ch_again->h_addr_list; *addrp; ++addrp) +- if (bcmp(*addrp,&(cs.sin_addr),sizeof(cs.sin_addr)) == 0) break; ++ if (bcmp(*addrp,&(cs.su_sin.sin_addr),sizeof(cs.su_sin.sin_addr)) == 0) break; + + if (!*addrp) { + pop_log (p,POP_PRIORITY, +@@ -345,6 +388,54 @@ + p->client = p->ipaddr; + } + } ++#else ++ { ++ struct addrinfo hints, *res; ++ int error; ++ ++ p->client = (char *)strdup(ch->h_name); ++ ++ /* ++ * See if the name obtained for the client's IP ++ * address returns an address ++ */ ++ memset(&hints, 0, sizeof(hints)); ++ hints.ai_flags = AI_CANONNAME; ++ hints.ai_family = AF_UNSPEC; ++ hints.ai_socktype = SOCK_STREAM; ++ hints.ai_protocol = 0; ++ error = getaddrinfo(h_name, NULL, &hints, &res); ++ if (error) { ++ pop_log(p,POP_PRIORITY, ++ "Client at \"%s\" resolves to an unknown host name \"%s\"", ++ p->ipaddr, h_name); ++ p->client = p->ipaddr; ++ } else { ++ for ( ; res; res = res->ai_next) { ++ if (res->ai_addr->sa_family == AF_INET) { ++ if (!memcmp(&((struct sockaddr_in *)res->ai_addr)->sin_addr, ++ &(cs.su_sin.sin_addr), sizeof(cs.su_sin.sin_addr))) { ++ break; ++ } ++ } else if (res->ai_addr->sa_family == AF_INET6) { ++ if (!memcmp(&((struct sockaddr_in6 *)res->ai_addr)->sin6_addr, ++ &(cs.su_sin6.sin6_addr), sizeof(cs.su_sin6.sin6_addr))) { ++ break; ++ } ++ } else { ++ break; ++ } ++ } ++ ++ if (!res) { ++ pop_log (p,POP_PRIORITY, ++ "Client address \"%s\" not listed for its host name \"%s\"", ++ p->ipaddr,h_name); ++ p->client = p->ipaddr; ++ } ++ } ++ } ++#endif + + #ifdef RES_DEFNAMES + /* -- cgit v1.2.3