diff options
author | ru <ru@FreeBSD.org> | 2000-10-12 07:59:14 +0000 |
---|---|---|
committer | ru <ru@FreeBSD.org> | 2000-10-12 07:59:14 +0000 |
commit | 26ce601f70d9658c4c6e5326220f41872924930e (patch) | |
tree | a2407f29ccbc751a39609730dfe9dac082121bff | |
parent | acecaa1fc20521bb074aac431cdae4193ce27ee6 (diff) | |
download | FreeBSD-src-26ce601f70d9658c4c6e5326220f41872924930e.zip FreeBSD-src-26ce601f70d9658c4c6e5326220f41872924930e.tar.gz |
Allow for IP_FW_ADD to be used in getsockopt(2) incarnation as
well, in which case return the rule number back into userland.
PR: bin/18351
Reviewed by: archie, luigi
-rw-r--r-- | sbin/ipfw/ipfw.c | 6 | ||||
-rw-r--r-- | sys/netinet/ip_fw.c | 4 | ||||
-rw-r--r-- | sys/netinet/raw_ip.c | 1 |
3 files changed, 7 insertions, 4 deletions
diff --git a/sbin/ipfw/ipfw.c b/sbin/ipfw/ipfw.c index 1923efd..d24280a 100644 --- a/sbin/ipfw/ipfw.c +++ b/sbin/ipfw/ipfw.c @@ -2131,11 +2131,11 @@ badviacombo: rule.fw_loghighest = rule.fw_logamount; } done: + i = sizeof(rule); + if (getsockopt(s, IPPROTO_IP, IP_FW_ADD, &rule, &i) == -1) + err(EX_UNAVAILABLE, "getsockopt(%s)", "IP_FW_ADD"); if (!do_quiet) show_ipfw(&rule, 10, 10); - i = setsockopt(s, IPPROTO_IP, IP_FW_ADD, &rule, sizeof rule); - if (i) - err(EX_UNAVAILABLE, "setsockopt(%s)", "IP_FW_ADD"); } static void diff --git a/sys/netinet/ip_fw.c b/sys/netinet/ip_fw.c index e81b159..e156895 100644 --- a/sys/netinet/ip_fw.c +++ b/sys/netinet/ip_fw.c @@ -1512,7 +1512,7 @@ add_entry(struct ip_fw_head *chainptr, struct ip_fw *frwl) } if (nbr < IPFW_DEFAULT_RULE - 100) nbr += 100; - ftmp->fw_number = nbr; + ftmp->fw_number = frwl->fw_number = nbr; } /* Got a valid number; now insert it, keeping the list ordered */ @@ -1928,6 +1928,8 @@ ip_fw_ctl(struct sockopt *sopt) error = EINVAL; } else { error = add_entry(&ip_fw_chain, &frwl); + if (!error && sopt->sopt_dir == SOPT_GET) + error = sooptcopyout(sopt, &frwl, sizeof frwl); } break; diff --git a/sys/netinet/raw_ip.c b/sys/netinet/raw_ip.c index 5d056ce..5544782 100644 --- a/sys/netinet/raw_ip.c +++ b/sys/netinet/raw_ip.c @@ -259,6 +259,7 @@ rip_ctloutput(so, sopt) error = sooptcopyout(sopt, &optval, sizeof optval); break; + case IP_FW_ADD: case IP_FW_GET: if (ip_fw_ctl_ptr == 0) error = ENOPROTOOPT; |