diff options
Diffstat (limited to 'sbin/pfctl')
| -rw-r--r-- | sbin/pfctl/pfctl.c | 6 | ||||
| -rw-r--r-- | sbin/pfctl/pfctl.h | 2 | ||||
| -rw-r--r-- | sbin/pfctl/pfctl_radix.c | 4 | ||||
| -rw-r--r-- | sbin/pfctl/pfctl_table.c | 13 | 
4 files changed, 10 insertions, 15 deletions
| diff --git a/sbin/pfctl/pfctl.c b/sbin/pfctl/pfctl.c index 3d2632c1cf74..02d6c9c84a32 100644 --- a/sbin/pfctl/pfctl.c +++ b/sbin/pfctl/pfctl.c @@ -2618,6 +2618,8 @@ pfctl_apply_limit(struct pfctl *pf, const char *opt, unsigned int limit)  int  pfctl_load_limit(struct pfctl *pf, unsigned int index, unsigned int limit)  { +	static int restore_limit_handler_armed = 0; +  	if (pfctl_set_limit(pf->h, index, limit)) {  		if (errno == EBUSY)  			warnx("Current pool size exceeds requested %s limit %u", @@ -2626,6 +2628,9 @@ pfctl_load_limit(struct pfctl *pf, unsigned int index, unsigned int limit)  			warnx("Cannot set %s limit to %u",  			    pf_limits[index].name, limit);  		return (1); +	} else if (restore_limit_handler_armed == 0) { +		atexit(pfctl_restore_limits); +		restore_limit_handler_armed = 1;  	}  	return (0);  } @@ -3474,7 +3479,6 @@ main(int argc, char *argv[])  	if ((opts & PF_OPT_NOACTION) == 0) {  		pfctl_read_limits(pfh); -		atexit(pfctl_restore_limits);  	}  	if (opts & PF_OPT_DISABLE) diff --git a/sbin/pfctl/pfctl.h b/sbin/pfctl/pfctl.h index 136f51ea08f9..c540c6348d84 100644 --- a/sbin/pfctl/pfctl.h +++ b/sbin/pfctl/pfctl.h @@ -110,7 +110,7 @@ int	 pfr_clr_astats(struct pfr_table *, struct pfr_addr *, int, int *, int);  int	 pfr_clr_addrs(struct pfr_table *, int *, int);  int	 pfr_add_addrs(struct pfr_table *, struct pfr_addr *, int, int *, int);  int	 pfr_del_addrs(struct pfr_table *, struct pfr_addr *, int, int *, int); -int	 pfr_set_addrs(struct pfr_table *, struct pfr_addr *, int, int *, +int	 pfr_set_addrs(struct pfr_table *, struct pfr_addr *, int,  	    int *, int *, int *, int);  int	 pfr_get_addrs(struct pfr_table *, struct pfr_addr *, int *, int);  int	 pfr_get_astats(struct pfr_table *, struct pfr_astats *, int *, int); diff --git a/sbin/pfctl/pfctl_radix.c b/sbin/pfctl/pfctl_radix.c index 98f907738d95..3b7161420e33 100644 --- a/sbin/pfctl/pfctl_radix.c +++ b/sbin/pfctl/pfctl_radix.c @@ -163,11 +163,11 @@ pfr_del_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int size,  int  pfr_set_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int size, -    int *size2, int *nadd, int *ndel, int *nchange, int flags) +    int *nadd, int *ndel, int *nchange, int flags)  {  	int ret; -	ret = pfctl_table_set_addrs(dev, tbl, addr, size, size2, nadd, ndel, +	ret = pfctl_table_set_addrs_h(pfh, tbl, addr, size, nadd, ndel,  	    nchange, flags);  	if (ret) {  		errno = ret; diff --git a/sbin/pfctl/pfctl_table.c b/sbin/pfctl/pfctl_table.c index 4955e1791fd7..aae347712547 100644 --- a/sbin/pfctl/pfctl_table.c +++ b/sbin/pfctl/pfctl_table.c @@ -236,17 +236,8 @@ pfctl_table(int argc, char *argv[], char *tname, const char *command,  		CREATE_TABLE;  		if (opts & PF_OPT_VERBOSE)  			flags |= PFR_FLAG_FEEDBACK; -		for (;;) { -			int sz2 = b.pfrb_msize; - -			RVTEST(pfr_set_addrs(&table, b.pfrb_caddr, b.pfrb_size, -			    &sz2, &nadd, &ndel, &nchange, flags)); -			if (sz2 <= b.pfrb_msize) { -				b.pfrb_size = sz2; -				break; -			} else -				pfr_buf_grow(&b, sz2); -		} +		RVTEST(pfr_set_addrs(&table, b.pfrb_caddr, b.pfrb_size, +		    &nadd, &ndel, &nchange, flags));  		if (nadd)  			xprintf(opts, "%d addresses added", nadd);  		if (ndel) | 
