diff options
| author | 2012-08-30 01:09:21 +0000 | |
|---|---|---|
| committer | 2012-08-30 01:09:21 +0000 | |
| commit | f0824f7387a5ade6a8a0247833f50be36f590c4d (patch) | |
| tree | e4ee8a3b0bb954a7271ef11d5f15526dd0bc9b36 /libexec/tftp-proxy/filter.c | |
| parent | 1) Remove documentation of the groff-1.15 compatibility quirk (diff) | |
| download | wireguard-openbsd-f0824f7387a5ade6a8a0247833f50be36f590c4d.tar.xz wireguard-openbsd-f0824f7387a5ade6a8a0247833f50be36f590c4d.zip | |
remove libexec/tftp-proxy now we have usr.sbin/tftp-proxy
ok deraadt@
Diffstat (limited to 'libexec/tftp-proxy/filter.c')
| -rw-r--r-- | libexec/tftp-proxy/filter.c | 192 |
1 files changed, 0 insertions, 192 deletions
diff --git a/libexec/tftp-proxy/filter.c b/libexec/tftp-proxy/filter.c deleted file mode 100644 index 90a80d367f3..00000000000 --- a/libexec/tftp-proxy/filter.c +++ /dev/null @@ -1,192 +0,0 @@ -/* $OpenBSD: filter.c,v 1.13 2012/07/08 11:57:08 sthen Exp $ */ - -/* - * Copyright (c) 2004, 2005 Camiel Dobbelaar, <cd@sentia.nl> - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <syslog.h> - -#include <sys/ioctl.h> -#include <sys/types.h> -#include <sys/socket.h> - -#include <net/if.h> -#include <net/pfvar.h> -#include <netinet/in.h> -#include <netinet/tcp.h> -#include <arpa/inet.h> - -#include <err.h> -#include <errno.h> -#include <fcntl.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -#include "filter.h" - -/* From netinet/in.h, but only _KERNEL_ gets them. */ -#define satosin(sa) ((struct sockaddr_in *)(sa)) -#define satosin6(sa) ((struct sockaddr_in6 *)(sa)) - -enum { TRANS_FILTER = 0, TRANS_NAT, TRANS_RDR, TRANS_SIZE }; - -int prepare_rule(u_int32_t, struct sockaddr *, struct sockaddr *, - u_int16_t, u_int8_t); - -static struct pfioc_rule pfr; -static struct pfioc_trans pft; -static struct pfioc_trans_e pfte; -static int dev, rule_log; -static char *qname; - -int -add_filter(u_int32_t id, u_int8_t dir, struct sockaddr *src, - struct sockaddr *dst, u_int16_t d_port, u_int8_t proto) -{ - if (!src || !dst || !d_port || !proto) { - errno = EINVAL; - return (-1); - } - - if (prepare_rule(id, src, dst, d_port, proto) == -1) - return (-1); - - pfr.rule.direction = dir; - if (ioctl(dev, DIOCADDRULE, &pfr) == -1) - return (-1); - - return (0); -} - -int -do_commit(void) -{ - if (ioctl(dev, DIOCXCOMMIT, &pft) == -1) - return (-1); - - return (0); -} - -void -init_filter(char *opt_qname, int opt_verbose) -{ - struct pf_status status; - - qname = opt_qname; - - if (opt_verbose == 1) - rule_log = PF_LOG; - else if (opt_verbose == 2) - rule_log = PF_LOG_ALL; - - dev = open("/dev/pf", O_RDWR); - if (dev == -1) { - syslog(LOG_ERR, "can't open /dev/pf"); - exit(1); - } - if (ioctl(dev, DIOCGETSTATUS, &status) == -1) { - syslog(LOG_ERR, "DIOCGETSTATUS"); - exit(1); - } - if (!status.running) { - syslog(LOG_ERR, "pf is disabled"); - exit(1); - } -} - -int -prepare_commit(u_int32_t id) -{ - char an[PF_ANCHOR_NAME_SIZE]; - - memset(&pft, 0, sizeof pft); - memset(&pfte, 0, sizeof pfte); - pft.size = 1; - pft.esize = sizeof pfte; - pft.array = &pfte; - - snprintf(an, PF_ANCHOR_NAME_SIZE, "%s/%d.%d", FTP_PROXY_ANCHOR, - getpid(), id); - strlcpy(pfte.anchor, an, PF_ANCHOR_NAME_SIZE); - pfte.type = PF_TRANS_RULESET; - - if (ioctl(dev, DIOCXBEGIN, &pft) == -1) - return (-1); - - return (0); -} - -int -prepare_rule(u_int32_t id, struct sockaddr *src, - struct sockaddr *dst, u_int16_t d_port, u_int8_t proto) -{ - char an[PF_ANCHOR_NAME_SIZE]; - - if ((src->sa_family != AF_INET && src->sa_family != AF_INET6) || - (src->sa_family != dst->sa_family)) { - errno = EPROTONOSUPPORT; - return (-1); - } - - memset(&pfr, 0, sizeof pfr); - snprintf(an, PF_ANCHOR_NAME_SIZE, "%s/%d.%d", FTP_PROXY_ANCHOR, - getpid(), id); - strlcpy(pfr.anchor, an, PF_ANCHOR_NAME_SIZE); - - pfr.ticket = pfte.ticket; - - /* Generic for all rule types. */ - pfr.rule.af = src->sa_family; - pfr.rule.proto = proto; - pfr.rule.src.addr.type = PF_ADDR_ADDRMASK; - pfr.rule.dst.addr.type = PF_ADDR_ADDRMASK; - pfr.rule.rdr.addr.type = PF_ADDR_NONE; - pfr.rule.nat.addr.type = PF_ADDR_NONE; - - if (src->sa_family == AF_INET) { - memcpy(&pfr.rule.src.addr.v.a.addr.v4, - &satosin(src)->sin_addr.s_addr, 4); - memset(&pfr.rule.src.addr.v.a.mask.addr8, 255, 4); - memcpy(&pfr.rule.dst.addr.v.a.addr.v4, - &satosin(dst)->sin_addr.s_addr, 4); - memset(&pfr.rule.dst.addr.v.a.mask.addr8, 255, 4); - } else { - memcpy(&pfr.rule.src.addr.v.a.addr.v6, - &satosin6(src)->sin6_addr.s6_addr, 16); - memset(&pfr.rule.src.addr.v.a.mask.addr8, 255, 16); - memcpy(&pfr.rule.dst.addr.v.a.addr.v6, - &satosin6(dst)->sin6_addr.s6_addr, 16); - memset(&pfr.rule.dst.addr.v.a.mask.addr8, 255, 16); - } - pfr.rule.dst.port_op = PF_OP_EQ; - pfr.rule.dst.port[0] = htons(d_port); - pfr.rule.rtableid = -1; - pfr.rule.onrdomain = -1; - pfr.rule.set_prio[0] = pfr.rule.set_prio[1] = PF_PRIO_NOTSET; - pfr.rule.action = PF_PASS; - pfr.rule.quick = 1; - pfr.rule.log = rule_log; - pfr.rule.keep_state = 1; - pfr.rule.flags = (proto == IPPROTO_TCP ? TH_SYN : 0); - pfr.rule.flagset = (proto == IPPROTO_TCP ? - (TH_SYN|TH_ACK|TH_FIN|TH_RST) : 0); - pfr.rule.max_states = 1; - if (qname != NULL) - strlcpy(pfr.rule.qname, qname, sizeof pfr.rule.qname); - - return (0); -} |
