head	1.5;
access;
symbols
	RELEASE_6_1_0:1.4
	RELEASE_5_5_0:1.4
	RELEASE_6_0_0:1.4
	RELEASE_5_4_0:1.4
	RELEASE_4_11_0:1.4
	RELEASE_5_3_0:1.2
	RELEASE_4_10_0:1.1;
locks; strict;
comment	@# @;


1.5
date	2006.05.23.04.25.03;	author oliver;	state dead;
branches;
next	1.4;

1.4
date	2004.10.24.12.16.51;	author oliver;	state Exp;
branches;
next	1.3;

1.3
date	2004.10.15.17.44.18;	author oliver;	state Exp;
branches;
next	1.2;

1.2
date	2004.05.19.19.43.30;	author oliver;	state Exp;
branches;
next	1.1;

1.1
date	2004.03.25.18.53.48;	author oliver;	state Exp;
branches;
next	;


desc
@@


1.5
log
@update to 2.0.8
@
text
@diff -ru src.old/kernel/freebsd.c src/kernel/freebsd.c
--- src.old/kernel/freebsd.c	Tue May 18 23:12:23 2004
+++ src/kernel/freebsd.c	Tue May 18 23:13:45 2004
@@@@ -159,11 +159,11 @@@@
 
 #ifdef _HAVE_OLD_INPCB
 
-static struct socket *getlist4(	void *arg,
+static struct socket *getlist(	void *arg,
 								in_port_t lport,
 								in_port_t fport,
-								const struct in_addr *laddr,
-								const struct in_addr *faddr)
+								const struct sockaddr *laddr,
+								const struct sockaddr *faddr)
 {
 	struct inpcb *pcbp = arg;
 	struct inpcb *head;
@@@@ -175,8 +175,8 @@@@
 
 	do {
 		if (opt_enabled(PROXY)) {
-			if (faddr->s_addr == SIN4(&proxy)->sin_addr.s_addr &&
-				laddr->s_addr != SIN4(&proxy)->sin_addr.s_addr &&
+			if (SIN4(faddr)->sin_addr.s_addr == SIN4(&proxy)->sin_addr.s_addr &&
+				SIN4(laddr)->sin_addr.s_addr != SIN4(&proxy)->sin_addr.s_addr &&
 				pcbp->inp_fport == fport &&
 				pcbp->inp_lport == lport)
 			{
@@@@ -184,8 +184,8 @@@@
 			}
 		}
 
-		if (pcbp->inp_faddr.s_addr == faddr->s_addr &&
-			pcbp->inp_laddr.s_addr == laddr->s_addr &&
+		if (pcbp->inp_faddr.s_addr == SIN4(faddr)->sin_addr.s_addr &&
+			pcbp->inp_laddr.s_addr == SIN4(laddr)->sin_addr.s_addr &&
 			pcbp->inp_fport == fport &&
 			pcbp->inp_lport == lport)
 		{
@@@@ -199,28 +199,45 @@@@
 
 #else
 
-static struct socket *getlist4(	void *arg,
+static struct socket *getlist(	void *arg,
 								in_port_t lport,
 								in_port_t fport,
-								const struct in_addr *laddr,
-								const struct in_addr *faddr)
+								const struct sockaddr *local,
+								const struct sockaddr *remote)
 {
 	struct inpcb *head, pcbp;
 	struct inpcbhead *pcbhead = arg;
+	char *faddr, *laddr, *pfaddr, *pladdr;
+	int alen;
 
-	(void) laddr;
+	if (remote->sa_family != local->sa_family)
+		return (NULL);
+	switch (remote->sa_family) {
+	case AF_INET:
+		faddr = (char *)&SIN4(remote)->sin_addr;
+		laddr = (char *)&SIN4(local)->sin_addr;
+		break;
+#ifdef INP_IPV6
+	case AF_INET6:
+		faddr = (char *)&SIN6(remote)->sin6_addr;
+		laddr = (char *)&SIN6(local)->sin6_addr;
+		break;
+#endif
+	default:
+		return (NULL);
+	}
 
 	head = pcbhead->lh_first;
 	if (head == NULL)
 		return (NULL);
 
-	do {
+	for (; head != NULL; head = pcbp.inp_list.le_next) {
 		if (getbuf((u_long) head, &pcbp, sizeof(struct inpcb)) == -1)
 			break;
 
-		if (opt_enabled(PROXY)) {
-			if (faddr->s_addr == SIN4(&proxy)->sin_addr.s_addr &&
-				laddr->s_addr != SIN4(&proxy)->sin_addr.s_addr &&
+		if (opt_enabled(PROXY) && remote->sa_family == AF_INET) {
+			if (SIN4(remote)->sin_addr.s_addr == SIN4(&proxy)->sin_addr.s_addr &&
+				SIN4(local)->sin_addr.s_addr != SIN4(&proxy)->sin_addr.s_addr &&
 				pcbp.inp_fport == fport &&
 				pcbp.inp_lport == lport)
 			{
@@@@ -228,16 +245,39 @@@@
 			}
 		}
 
-		if (pcbp.inp_faddr.s_addr == faddr->s_addr &&
-			pcbp.inp_laddr.s_addr == laddr->s_addr &&
+#ifdef INP_IPV6
+		if (pcbp.inp_vflag & INP_IPV4)
+		{
+			if (remote->sa_family != AF_INET)
+				continue;
+			pfaddr = (char *)&pcbp.inp_faddr;
+			pladdr = (char *)&pcbp.inp_laddr;
+			alen = sizeof(struct in_addr);
+		}
+		else if (pcbp.inp_vflag & INP_IPV6)
+		{
+			if (remote->sa_family != AF_INET6)
+				continue;
+			pfaddr = (char *)&pcbp.in6p_faddr;
+			pladdr = (char *)&pcbp.in6p_laddr;
+			alen = sizeof(struct in6_addr);
+		}
+		else
+			continue;
+#else
+		pfaddr = (char *)&pcbp.inp_faddr;
+		pladdr = (char *)&pcbp.inp_laddr;
+		alen = sizeof(struct in_addr);
+#endif
+		if (memcmp(pfaddr, faddr, alen) == 0 &&
+			memcmp(pladdr, laddr, alen) == 0 &&
 			pcbp.inp_fport == fport &&
 			pcbp.inp_lport == lport)
 		{
 			return (pcbp.inp_socket);
 		}
 
-		head = pcbp.inp_list.le_next;
-	} while (head != NULL);
+	}
 
 	return (NULL);
 }
@@@@ -248,7 +288,7 @@@@
 ** Return the UID of the connection owner
 */
 
-int get_user4(	in_port_t lport,
+static int get_user(	in_port_t lport,
 				in_port_t fport,
 				struct sockaddr_storage *laddr,
 				struct sockaddr_storage *faddr)
@@@@ -276,8 +316,9 @@@@
 	tcb.inp_prev = (struct inpcb *) kinfo->nl[N_TCB].n_value;
 #endif
 
-	sockp = getlist4(&tcb, lport, fport,
-				&SIN4(laddr)->sin_addr, &SIN4(faddr)->sin_addr);
+	sockp = getlist(&tcb, lport, fport,
+				(struct sockaddr *)laddr,
+				(struct sockaddr *)faddr);
 
 	if (sockp == NULL)
 		return (-1);
@@@@ -346,6 +387,14 @@@@
 	return (-1);
 }
 
+int get_user4(	in_port_t lport,
+				in_port_t fport,
+				struct sockaddr_storage *laddr,
+				struct sockaddr_storage *faddr)
+{
+	return (get_user(lport, fport, laddr, faddr));
+}
+
 #ifdef MASQ_SUPPORT
 
 /*
@@@@ -456,36 +505,7 @@@@
 				struct sockaddr_storage *laddr,
 				struct sockaddr_storage *faddr)
 {
-	struct ucred ucred;
-	struct sockaddr_in6 sin6[2];
-	int len;
-	int ret;
-
-	len = sizeof(struct ucred);
-
-	memset(sin6, 0, sizeof(sin6));
-
-	sin6[0].sin6_len = sizeof(struct sockaddr_in6);
-	sin6[0].sin6_family = AF_INET6;
-	sin6[0].sin6_port = lport;
-	memcpy(&sin6[0].sin6_addr, &SIN6(laddr)->sin6_addr,
-		sizeof(sin6[0].sin6_addr));
-
-	sin6[1].sin6_len = sizeof(struct sockaddr_in6);
-	sin6[1].sin6_family = AF_INET6;
-	sin6[1].sin6_port = fport;
-	memcpy(&sin6[1].sin6_addr, &SIN6(faddr)->sin6_addr,
-		sizeof(sin6[1].sin6_addr));
-
-	ret = sysctlbyname("net.inet6.tcp6.getcred",
-			&ucred, &len, sin6, sizeof(sin6));
-
-	if (ret == -1) {
-		debug("sysctlbyname: %s", strerror(errno));
-		return (-1);
-	}
-
-	return (ucred.cr_uid);
+	return (get_user(lport, fport, laddr, faddr));
 }
 
 #endif
diff -ru src.old/kernel/freebsd5.c src/kernel/freebsd5.c
--- src.old/kernel/freebsd5.c	Tue May 18 23:12:23 2004
+++ src/kernel/freebsd5.c	Tue May 18 23:12:46 2004
@@@@ -160,11 +160,11 @@@@
 
 #ifdef _HAVE_OLD_INPCB
 
-static struct socket *getlist4(	void *arg,
+static struct socket *getlist(	void *arg,
 								in_port_t lport,
 								in_port_t fport,
-								const struct in_addr *laddr,
-								const struct in_addr *faddr)
+								const struct sockaddr *laddr,
+								const struct sockaddr *faddr)
 {
 	struct inpcb *pcbp = arg;
 	struct inpcb *head;
@@@@ -176,8 +176,8 @@@@
 
 	do {
 		if (opt_enabled(PROXY)) {
-			if (faddr->s_addr == SIN4(&proxy)->sin_addr.s_addr &&
-				laddr->s_addr != SIN4(&proxy)->sin_addr.s_addr &&
+			if (SIN4(faddr)->sin_addr.s_addr == SIN4(&proxy)->sin_addr.s_addr &&
+				SIN4(laddr)->sin_addr.s_addr != SIN4(&proxy)->sin_addr.s_addr &&
 				pcbp->inp_fport == fport &&
 				pcbp->inp_lport == lport)
 			{
@@@@ -185,8 +185,8 @@@@
 			}
 		}
 
-		if (pcbp->inp_faddr.s_addr == faddr->s_addr &&
-			pcbp->inp_laddr.s_addr == laddr->s_addr &&
+		if (pcbp->inp_faddr.s_addr == SIN4(faddr)->sin_addr.s_addr &&
+			pcbp->inp_laddr.s_addr == SIN4(laddr)->sin_addr.s_addr &&
 			pcbp->inp_fport == fport &&
 			pcbp->inp_lport == lport)
 		{
@@@@ -200,16 +200,31 @@@@
 
 #else
 
-static struct socket *getlist4(	void *arg,
+static struct socket *getlist(	void *arg,
 								in_port_t lport,
 								in_port_t fport,
-								const struct in_addr *laddr,
-								const struct in_addr *faddr)
+								const struct sockaddr *local,
+								const struct sockaddr *remote)
 {
 	struct inpcb *head, pcbp;
 	struct inpcbhead *pcbhead = arg;
+	char *faddr, *laddr, *pfaddr, *pladdr;
+	int alen;
 
-	(void) laddr;
+	if (remote->sa_family != local->sa_family)
+		return (NULL);
+	switch (remote->sa_family) {
+	case AF_INET:
+		faddr = (char *)&SIN4(remote)->sin_addr;
+		laddr = (char *)&SIN4(local)->sin_addr;
+		break;
+	case AF_INET6:
+		faddr = (char *)&SIN6(remote)->sin6_addr;
+		laddr = (char *)&SIN6(local)->sin6_addr;
+		break;
+	default:
+		return (NULL);
+	}
 
 	head = pcbhead->lh_first;
 	if (head == NULL)
@@@@ -219,9 +234,9 @@@@
 		if (getbuf((u_long) head, &pcbp, sizeof(struct inpcb)) == -1)
 			break;
 
-		if (opt_enabled(PROXY)) {
-			if (faddr->s_addr == SIN4(&proxy)->sin_addr.s_addr &&
-				laddr->s_addr != SIN4(&proxy)->sin_addr.s_addr &&
+		if (opt_enabled(PROXY) && remote->sa_family == AF_INET) {
+			if (SIN4(remote)->sin_addr.s_addr == SIN4(&proxy)->sin_addr.s_addr &&
+				SIN4(local)->sin_addr.s_addr != SIN4(&proxy)->sin_addr.s_addr &&
 				pcbp.inp_fport == fport &&
 				pcbp.inp_lport == lport)
 			{
@@@@ -229,8 +244,22 @@@@
 			}
 		}
 
-		if (pcbp.inp_faddr.s_addr == faddr->s_addr &&
-			pcbp.inp_laddr.s_addr == laddr->s_addr &&
+		if (remote->sa_family == AF_INET)
+		{
+			pfaddr = (char *)&pcbp.inp_faddr;
+			pladdr = (char *)&pcbp.inp_laddr;
+			alen = sizeof(struct in_addr);
+		}
+		else if (remote->sa_family == AF_INET6)
+		{
+			pfaddr = (char *)&pcbp.in6p_faddr;
+			pladdr = (char *)&pcbp.in6p_laddr;
+			alen = sizeof(struct in6_addr);
+		}
+		else
+			continue;
+		if (memcmp(pfaddr, faddr, alen) == 0 &&
+			memcmp(pladdr, laddr, alen) == 0 &&
 			pcbp.inp_fport == fport &&
 			pcbp.inp_lport == lport)
 		{
@@@@ -249,7 +278,7 @@@@
 ** Return the UID of the connection owner
 */
 
-int get_user4(	in_port_t lport,
+static int get_user(	in_port_t lport,
 				in_port_t fport,
 				struct sockaddr_storage *laddr,
 				struct sockaddr_storage *faddr)
@@@@ -276,8 +305,9 @@@@
 	tcb.inp_prev = (struct inpcb *) kinfo->nl[N_TCB].n_value;
 #endif
 
-	sockp = getlist4(&tcb, lport, fport,
-				&SIN4(laddr)->sin_addr, &SIN4(faddr)->sin_addr);
+	sockp = getlist(&tcb, lport, fport,
+				(struct sockaddr *)laddr,
+				(struct sockaddr *)faddr);
 
 	if (sockp == NULL)
 		return (-1);
@@@@ -338,6 +368,14 @@@@
 	return (-1);
 }
 
+int get_user4(	in_port_t lport,
+				in_port_t fport,
+				struct sockaddr_storage *laddr,
+				struct sockaddr_storage *faddr)
+{
+	return (get_user(lport, fport, laddr, faddr));
+}
+
 #ifdef MASQ_SUPPORT
 
 /*
@@@@ -448,36 +486,7 @@@@
 				struct sockaddr_storage *laddr,
 				struct sockaddr_storage *faddr)
 {
-	struct ucred ucred;
-	struct sockaddr_in6 sin6[2];
-	int len;
-	int ret;
-
-	len = sizeof(struct ucred);
-
-	memset(sin6, 0, sizeof(sin6));
-
-	sin6[0].sin6_len = sizeof(struct sockaddr_in6);
-	sin6[0].sin6_family = AF_INET6;
-	sin6[0].sin6_port = lport;
-	memcpy(&sin6[0].sin6_addr, &SIN6(laddr)->sin6_addr,
-		sizeof(sin6[0].sin6_addr));
-
-	sin6[1].sin6_len = sizeof(struct sockaddr_in6);
-	sin6[1].sin6_family = AF_INET6;
-	sin6[1].sin6_port = fport;
-	memcpy(&sin6[1].sin6_addr, &SIN6(faddr)->sin6_addr,
-		sizeof(sin6[1].sin6_addr));
-
-	ret = sysctlbyname("net.inet6.tcp6.getcred",
-			&ucred, &len, sin6, sizeof(sin6));
-
-	if (ret == -1) {
-		debug("sysctlbyname: %s", strerror(errno));
-		return (-1);
-	}
-
-	return (ucred.cr_uid);
+	return (get_user(lport, fport, laddr, faddr));
 }
 
 #endif
@


1.4
log
@fix unprev. IPv6 for FreeBSD 4
Bump PORTREVISION

Noted By:	Dariusz Kulinski <d.kulinski@@gmail.com>
@
text
@@


1.3
log
@[1]:
        - Remove USE_GMAKE (builds okay here with BSD make)
        - Clean up portions of main Makefile (don't need post/pre)
        - Add %%PREFIX%% man page patches
        - Add patch for ipv6_missing.h; removes EAI_MEMORY
          re-definition warnings, and is more FreeBSD-focused
        - Support 'oidentd_conf' rc.subr variable for those who want to
          be able to specify a configuration file.  Also update the
          'required_files' code to work with this too...

[2]:
        - make it work with FreeBSD-5 in combination with option  --reply

PR:		ports/71378 [1]
Submitted By:	Jeremy Chadwick <freebsd@@jdc.parodius.com> [1]
Noted By:	Markus Hstbacka <midian@@ihme.org> [2]
@
text
@d1 215
a215 2
--- src/kernel/freebsd5.c.orig	Wed Feb 12 03:15:59 2003
+++ src/kernel/freebsd5.c	Fri Oct 15 19:36:01 2004
@


1.2
log
@In get_list() function there is do-while loop, patch included additional
continue instructions, which skipped "head = pcbp.inp_list.le_next;"
making oidentd go into infinite loop.

Submitted By:	Dariusz Kulinski <takeda3@@netzero.net>
PR:		ports/66858
@
text
@d1 2
a2 215
diff -ru src.old/kernel/freebsd.c src/kernel/freebsd.c
--- src.old/kernel/freebsd.c	Tue May 18 23:12:23 2004
+++ src/kernel/freebsd.c	Tue May 18 23:13:45 2004
@@@@ -159,11 +159,11 @@@@
 
 #ifdef _HAVE_OLD_INPCB
 
-static struct socket *getlist4(	void *arg,
+static struct socket *getlist(	void *arg,
 								in_port_t lport,
 								in_port_t fport,
-								const struct in_addr *laddr,
-								const struct in_addr *faddr)
+								const struct sockaddr *laddr,
+								const struct sockaddr *faddr)
 {
 	struct inpcb *pcbp = arg;
 	struct inpcb *head;
@@@@ -175,8 +175,8 @@@@
 
 	do {
 		if (opt_enabled(PROXY)) {
-			if (faddr->s_addr == SIN4(&proxy)->sin_addr.s_addr &&
-				laddr->s_addr != SIN4(&proxy)->sin_addr.s_addr &&
+			if (SIN4(faddr)->sin_addr.s_addr == SIN4(&proxy)->sin_addr.s_addr &&
+				SIN4(laddr)->sin_addr.s_addr != SIN4(&proxy)->sin_addr.s_addr &&
 				pcbp->inp_fport == fport &&
 				pcbp->inp_lport == lport)
 			{
@@@@ -184,8 +184,8 @@@@
 			}
 		}
 
-		if (pcbp->inp_faddr.s_addr == faddr->s_addr &&
-			pcbp->inp_laddr.s_addr == laddr->s_addr &&
+		if (pcbp->inp_faddr.s_addr == SIN4(faddr)->sin_addr.s_addr &&
+			pcbp->inp_laddr.s_addr == SIN4(laddr)->sin_addr.s_addr &&
 			pcbp->inp_fport == fport &&
 			pcbp->inp_lport == lport)
 		{
@@@@ -199,28 +199,45 @@@@
 
 #else
 
-static struct socket *getlist4(	void *arg,
+static struct socket *getlist(	void *arg,
 								in_port_t lport,
 								in_port_t fport,
-								const struct in_addr *laddr,
-								const struct in_addr *faddr)
+								const struct sockaddr *local,
+								const struct sockaddr *remote)
 {
 	struct inpcb *head, pcbp;
 	struct inpcbhead *pcbhead = arg;
+	char *faddr, *laddr, *pfaddr, *pladdr;
+	int alen;
 
-	(void) laddr;
+	if (remote->sa_family != local->sa_family)
+		return (NULL);
+	switch (remote->sa_family) {
+	case AF_INET:
+		faddr = (char *)&SIN4(remote)->sin_addr;
+		laddr = (char *)&SIN4(local)->sin_addr;
+		break;
+#ifdef INP_IPV6
+	case AF_INET6:
+		faddr = (char *)&SIN6(remote)->sin6_addr;
+		laddr = (char *)&SIN6(local)->sin6_addr;
+		break;
+#endif
+	default:
+		return (NULL);
+	}
 
 	head = pcbhead->lh_first;
 	if (head == NULL)
 		return (NULL);
 
-	do {
+	for (; head != NULL; head = pcbp.inp_list.le_next) {
 		if (getbuf((u_long) head, &pcbp, sizeof(struct inpcb)) == -1)
 			break;
 
-		if (opt_enabled(PROXY)) {
-			if (faddr->s_addr == SIN4(&proxy)->sin_addr.s_addr &&
-				laddr->s_addr != SIN4(&proxy)->sin_addr.s_addr &&
+		if (opt_enabled(PROXY) && remote->sa_family == AF_INET) {
+			if (SIN4(remote)->sin_addr.s_addr == SIN4(&proxy)->sin_addr.s_addr &&
+				SIN4(local)->sin_addr.s_addr != SIN4(&proxy)->sin_addr.s_addr &&
 				pcbp.inp_fport == fport &&
 				pcbp.inp_lport == lport)
 			{
@@@@ -228,16 +245,39 @@@@
 			}
 		}
 
-		if (pcbp.inp_faddr.s_addr == faddr->s_addr &&
-			pcbp.inp_laddr.s_addr == laddr->s_addr &&
+#ifdef INP_IPV6
+		if (pcbp.inp_vflag & INP_IPV4)
+		{
+			if (remote->sa_family != AF_INET)
+				continue;
+			pfaddr = (char *)&pcbp.inp_faddr;
+			pladdr = (char *)&pcbp.inp_laddr;
+			alen = sizeof(struct in_addr);
+		}
+		else if (pcbp.inp_vflag & INP_IPV6)
+		{
+			if (remote->sa_family != AF_INET6)
+				continue;
+			pfaddr = (char *)&pcbp.in6p_faddr;
+			pladdr = (char *)&pcbp.in6p_laddr;
+			alen = sizeof(struct in6_addr);
+		}
+		else
+			continue;
+#else
+		pfaddr = (char *)&pcbp.inp_faddr;
+		pladdr = (char *)&pcbp.inp_laddr;
+		alen = sizeof(struct in_addr);
+#endif
+		if (memcmp(pfaddr, faddr, alen) == 0 &&
+			memcmp(pladdr, laddr, alen) == 0 &&
 			pcbp.inp_fport == fport &&
 			pcbp.inp_lport == lport)
 		{
 			return (pcbp.inp_socket);
 		}
 
-		head = pcbp.inp_list.le_next;
-	} while (head != NULL);
+	}
 
 	return (NULL);
 }
@@@@ -248,7 +288,7 @@@@
 ** Return the UID of the connection owner
 */
 
-int get_user4(	in_port_t lport,
+static int get_user(	in_port_t lport,
 				in_port_t fport,
 				struct sockaddr_storage *laddr,
 				struct sockaddr_storage *faddr)
@@@@ -276,8 +316,9 @@@@
 	tcb.inp_prev = (struct inpcb *) kinfo->nl[N_TCB].n_value;
 #endif
 
-	sockp = getlist4(&tcb, lport, fport,
-				&SIN4(laddr)->sin_addr, &SIN4(faddr)->sin_addr);
+	sockp = getlist(&tcb, lport, fport,
+				(struct sockaddr *)laddr,
+				(struct sockaddr *)faddr);
 
 	if (sockp == NULL)
 		return (-1);
@@@@ -346,6 +387,14 @@@@
 	return (-1);
 }
 
+int get_user4(	in_port_t lport,
+				in_port_t fport,
+				struct sockaddr_storage *laddr,
+				struct sockaddr_storage *faddr)
+{
+	return (get_user(lport, fport, laddr, faddr));
+}
+
 #ifdef MASQ_SUPPORT
 
 /*
@@@@ -456,36 +505,7 @@@@
 				struct sockaddr_storage *laddr,
 				struct sockaddr_storage *faddr)
 {
-	struct ucred ucred;
-	struct sockaddr_in6 sin6[2];
-	int len;
-	int ret;
-
-	len = sizeof(struct ucred);
-
-	memset(sin6, 0, sizeof(sin6));
-
-	sin6[0].sin6_len = sizeof(struct sockaddr_in6);
-	sin6[0].sin6_family = AF_INET6;
-	sin6[0].sin6_port = lport;
-	memcpy(&sin6[0].sin6_addr, &SIN6(laddr)->sin6_addr,
-		sizeof(sin6[0].sin6_addr));
-
-	sin6[1].sin6_len = sizeof(struct sockaddr_in6);
-	sin6[1].sin6_family = AF_INET6;
-	sin6[1].sin6_port = fport;
-	memcpy(&sin6[1].sin6_addr, &SIN6(faddr)->sin6_addr,
-		sizeof(sin6[1].sin6_addr));
-
-	ret = sysctlbyname("net.inet6.tcp6.getcred",
-			&ucred, &len, sin6, sizeof(sin6));
-
-	if (ret == -1) {
-		debug("sysctlbyname: %s", strerror(errno));
-		return (-1);
-	}
-
-	return (ucred.cr_uid);
+	return (get_user(lport, fport, laddr, faddr));
 }
 
 #endif
diff -ru src.old/kernel/freebsd5.c src/kernel/freebsd5.c
--- src.old/kernel/freebsd5.c	Tue May 18 23:12:23 2004
+++ src/kernel/freebsd5.c	Tue May 18 23:12:46 2004
d89 1
a89 1
@@@@ -229,8 +244,26 @@@@
d95 1
a95 1
+		if (pcbp.inp_vflag & INP_IPV4)
a96 2
+			if (remote->sa_family != AF_INET)
+				continue;
d101 1
a101 1
+		else if (pcbp.inp_vflag & INP_IPV6)
a102 2
+			if (remote->sa_family != AF_INET6)
+				continue;
d114 1
a114 1
@@@@ -249,7 +282,7 @@@@
d123 1
a123 1
@@@@ -276,8 +309,9 @@@@
d135 1
a135 1
@@@@ -338,6 +372,14 @@@@
d150 1
a150 1
@@@@ -448,36 +490,7 @@@@
@


1.1
log
@Make it work with IPv6 properly. [1]
Fix plist

PR:		64546 [1]
Submitted By:	Dariusz Kulinski <takeda3@@netzero.net>
@
text
@d2 2
a3 2
--- src.old/kernel/freebsd.c	Sat Mar 20 20:36:51 2004
+++ src/kernel/freebsd.c	Sat Mar 20 20:37:09 2004
d41 1
a41 1
@@@@ -199,16 +199,33 @@@@
d79 4
a82 1
@@@@ -218,9 +235,9 @@@@
d95 1
a95 1
@@@@ -228,8 +245,32 @@@@
d130 10
a139 1
@@@@ -248,7 +289,7 @@@@
d148 1
a148 1
@@@@ -276,8 +317,9 @@@@
d160 1
a160 1
@@@@ -346,6 +388,14 @@@@
d175 1
a175 1
@@@@ -456,36 +506,7 @@@@
d214 2
a215 2
--- src.old/kernel/freebsd5.c	Sat Mar 20 20:36:51 2004
+++ src/kernel/freebsd5.c	Sat Mar 20 20:37:13 2004
@

