mirror of
https://git.freebsd.org/ports.git
synced 2025-06-07 13:50:38 -04:00
Add a patch to unbreak port when CHECK_PORTINUSE option is activated. The issue was caussed by changes in the structures xtcpcb and xinpcb returned by the kernel after r315662. The fix was inspired by changes made in usr.bin/systat/netstat.c tool. The patch was submitted to the upstream project and merged : https://github.com/miniupnp/miniupnp/pull/353 PR: 236173 Reported by: Igor Pavlov <igor.arabesc.pavlov@gmail.com> Approved by: Tor Halvard Furulund <squat@squat.no> (maintainer)
49 lines
1.5 KiB
C
49 lines
1.5 KiB
C
--- portinuse.c.orig 2017-11-02 17:38:02 UTC
|
|
+++ portinuse.c
|
|
@@ -280,7 +280,7 @@ static struct nlist list[] = {
|
|
struct xinpgen *xig, *exig;
|
|
struct xinpcb *xip;
|
|
struct xtcpcb *xtp;
|
|
- struct inpcb *inp;
|
|
+ struct in_conninfo *inc;
|
|
void *buf = NULL;
|
|
size_t len;
|
|
|
|
@@ -339,7 +339,8 @@ static struct nlist list[] = {
|
|
free(buf);
|
|
return -1;
|
|
}
|
|
- inp = &xtp->xt_inp;
|
|
+ xip = &xtp->xt_inp;
|
|
+ inc = &xip->inp_inc;
|
|
break;
|
|
case IPPROTO_UDP:
|
|
xip = (struct xinpcb *)xig;
|
|
@@ -349,21 +350,21 @@ static struct nlist list[] = {
|
|
free(buf);
|
|
return -1;
|
|
}
|
|
- inp = &xip->xi_inp;
|
|
+ inc = &xip->inp_inc;
|
|
break;
|
|
default:
|
|
abort();
|
|
}
|
|
/* no support for IPv6 */
|
|
- if ((inp->inp_vflag & INP_IPV6) != 0)
|
|
+ if ((xip->inp_vflag & INP_IPV6) != 0)
|
|
continue;
|
|
syslog(LOG_DEBUG, "%08lx:%hu %08lx:%hu <=> %hu %08lx:%hu",
|
|
- (u_long)inp->inp_laddr.s_addr, ntohs(inp->inp_lport),
|
|
- (u_long)inp->inp_faddr.s_addr, ntohs(inp->inp_fport),
|
|
+ (u_long)inc->inc_laddr.s_addr, ntohs(inc->inc_lport),
|
|
+ (u_long)inc->inc_faddr.s_addr, ntohs(inc->inc_fport),
|
|
eport, (u_long)ip_addr.s_addr, iport
|
|
);
|
|
- if (eport == (unsigned)ntohs(inp->inp_lport)) {
|
|
- if (inp->inp_laddr.s_addr == INADDR_ANY || inp->inp_laddr.s_addr == ip_addr.s_addr) {
|
|
+ if (eport == (unsigned)ntohs(inc->inc_lport)) {
|
|
+ if (inc->inc_laddr.s_addr == INADDR_ANY || inc->inc_laddr.s_addr == ip_addr.s_addr) {
|
|
found++;
|
|
break; /* don't care how many, just that we found at least one */
|
|
}
|