Date: Mon, 26 Nov 2001 04:40:19 +0100 From: Daniel Rock <D.Rock@t-online.de> To: current@freebsd.org Subject: Bug in libalias (firewall manipulating) Message-ID: <3C01B9A3.CFE7157@t-online.de>
next in thread | raw e-mail | index | archive | help
Dies ist eine mehrteilige Nachricht im MIME-Format. --------------1ED430FD412D197DF89C8DAE Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hi, just noticed: adding dynamic rules to ipfw via PKT_ALIAS_PUNCH_FW (or the command "nat punch_fw" in ppp) doesn't work: For adding firewall rules, IP_FW_ADD requires getsockopt() instead of setsockopt(). This should also be reflected in the manual page. Below is my fix and a quick test suggest it is indeed working now. Daniel --------------1ED430FD412D197DF89C8DAE Content-Type: text/plain; charset=us-ascii; name="libalias.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="libalias.diff" Index: alias_db.c =================================================================== RCS file: /data/cvs/src/lib/libalias/alias_db.c,v retrieving revision 1.47 diff -u -r1.47 alias_db.c --- alias_db.c 3 Nov 2001 11:34:09 -0000 1.47 +++ alias_db.c 26 Nov 2001 03:34:22 -0000 @@ -2688,6 +2688,7 @@ PunchFWHole(struct alias_link *link) { int r; /* Result code */ struct ip_fw rule; /* On-the-fly built rule */ + int rsz; int fwhole; /* Where to punch hole */ /* Don't do anything unless we are asked to */ @@ -2744,19 +2745,21 @@ (Code should be left even if the problem is fixed - it is a clear optimization) */ if (rule.fw_uar.fw_pts[0] != 0 && rule.fw_uar.fw_pts[1] != 0) { - r = setsockopt(fireWallFD, IPPROTO_IP, IP_FW_ADD, &rule, sizeof rule); + rsz = sizeof(rule); + r = getsockopt(fireWallFD, IPPROTO_IP, IP_FW_ADD, &rule, &rsz); #ifdef DEBUG if (r) - err(1, "alias punch inbound(1) setsockopt(IP_FW_ADD)"); + err(1, "alias punch inbound(1) getsockopt(IP_FW_ADD)"); #endif rule.fw_src = GetDestAddress(link); rule.fw_dst = GetOriginalAddress(link); rule.fw_uar.fw_pts[0] = ntohs(GetDestPort(link)); rule.fw_uar.fw_pts[1] = ntohs(GetOriginalPort(link)); - r = setsockopt(fireWallFD, IPPROTO_IP, IP_FW_ADD, &rule, sizeof rule); + rsz = sizeof(rule); + r = getsockopt(fireWallFD, IPPROTO_IP, IP_FW_ADD, &rule, &rsz); #ifdef DEBUG if (r) - err(1, "alias punch inbound(2) setsockopt(IP_FW_ADD)"); + err(1, "alias punch inbound(2) getsockopt(IP_FW_ADD)"); #endif } /* Indicate hole applied */ --------------1ED430FD412D197DF89C8DAE-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3C01B9A3.CFE7157>