summaryrefslogtreecommitdiff
path: root/usr.sbin/rebound
AgeCommit message (Collapse)Author
2016-10-23unbreak by fixing obvious pastosChristian Weisgerber
2016-10-23listen on inet6 sockets as well. we need this because stolen inet6 socketsTed Unangst
can't be redirected to inet4 listeners.
2016-10-16switch to a re-exec model instead of plain forking to reduce sharing.Ted Unangst
this shuffles about some of the initialization code and consolidates all the worker initialization in one place. the parent process runs the monitor loop and execs workers via -W, which then drop immediately into the worker loop. file descriptors currently inherited across exec, which probably exceeds safe magic levels, but fits the existing model without too many changes.
2016-10-15refactor the worker and monitor loops a little to make room for re-execTed Unangst
2016-10-15be more cautious about inspecting packets. use integer offsets instead ofTed Unangst
advancing pointers which may go past the end.
2016-10-15implement random casing for query names, also known as 0x20 hardening.Ted Unangst
this *should* work everywhere, and i consider minimum necessary protection for a program like rebound. in the event it doesn't work, rebound can be bypassed by disabling the port stealing sysctl.
2016-10-08a little more precision about reloading config. only reopen if it changedTed Unangst
2016-10-08too many blank linesTed Unangst
2016-10-07kern.dnsjacking -> kern.dnsjackport;Jason McIntyre
2016-10-07the parent mostly never crashes, but the child might. or the config fileTed Unangst
disappears. in such cases, the parent will exit. make sure to always reset the jackport, not just when receiving sigterm. (doesn't protect against parent crashing, but that shouldn't happen.)
2016-10-07several big changes, tied together.Ted Unangst
switch to reading resolv.conf to find upstream name servers. moitor this file and automatically restart if it changes. use the dnsjackport sysctl to steal DNS connections from libc. listen on port 54 to avoid collisions with other DNS servers.
2016-09-01naming a union 'sockthing' was a bit silly. sockun will do for now.Ted Unangst
2016-09-01print regular messages to stdout, not errTed Unangst
2016-09-01scan responses for minimum ttl, and cache for min(ttl, 300) instead ofTed Unangst
a fixed amount
2016-08-21introduce a union of sockaddr types and eliminate a lot of casts.Ted Unangst
2016-08-06reset timeout to null when reloopingTed Unangst
2016-07-02check cache tree for collisions when inserting replies.Ted Unangst
if two identical requests are sent out, the first will create a cache entry. the second will not go into the cache tree, but will linger around, causing a crash when we free it and try to remove from the tree. instead, give up if insert fails. diagnosis and initial patch from Duncan.
2016-06-05previous change (r1.27) converted to using non blocking sockets andTed Unangst
spinning on them, trying to preemptively avoid kevent. i've come to conclude this is a poor design. it is exceedingly rare for there to be two requests waiting. instead, we end up burning useless syscalls.
2016-05-31with the kernel perm check fixed, we can do this kevent after setuid,Ted Unangst
but still needs to be before pledge. also check for failure.
2016-05-13fix logging.Ted Unangst
1. va must be restarted before reuse. 2. don't syslog in debug. assume someone is watching stderr.
2016-05-02prepare userland for removing chroot(2) from allowed syscalls under pledge(2).Sebastien Marie
in rebound(8), the worker is still chrooted (and pledged). The supervisor process remains unpledged in order to create workers. ok tedu@
2016-01-03forgot to call RB_INIT. but yet things mostly worked...Ted Unangst
2015-12-17add return code to newrequest to distinguish between cache hit and error.Ted Unangst
we want to keep looping for more requests after a hit, not stop. (though i'm reconsidering if the looping is worthwhile. maybe should just return to kevent() after each request.)
2015-12-12correct commentTed Unangst
2015-12-11it's not necessary to use a tree to track requests if kevent can do this.Ted Unangst
2015-12-08more better fake replies. servfail is the correct response.Ted Unangst
2015-12-05all the signal ignoring can be done in one placeTed Unangst
2015-12-05pull the config file opening up considerably earlier to fail fast.Ted Unangst
parsing is still done in the child, so we can't guarantee success, but if the file is missing entirely we won't daemonize in that state.
2015-12-04refine some logging and error messages. errors will now always go to stderrTed Unangst
until daemonized and syslog as well. make logerr() work more like err().
2015-12-04push daemon call a little later so if the address is in use we see theTed Unangst
error message
2015-12-04one signal.h should sufficeTed Unangst
2015-12-04ignore SIGPIPE. i don't see any way for it to happen, but nevertheless weTed Unangst
definitely don't want to receive it unexpectedly.
2015-12-04- sync usageGleydson Soares
- add a bit more detail about config alternative file and add -d while here. manpage help from jmc@ schwarze@ thanks a lot! OK tedu jmc schwarze
2015-12-03when running on a machine without net, rebound will still receive queriesTed Unangst
from localhost, but then fail to forward them. this causes the resolver to stall waiting for timeouts in situations where it would otherwise fail quickly. we don't know this happens until it's too late, but we can push the resolver forward by sending back empty replies. ok deraadt
2015-12-02tell readers about config reloads.Sebastian Benoit
ok tedu
2015-12-01add missing fclose(3)Gleydson Soares
ok tedu@
2015-11-27add getpw to pledge. rpath would normally suffice, but there's some doubleTed Unangst
checking code in snapshots, and it serves as a useful annotation. from Carlin Bingham
2015-11-24use canonical pledge argument orderingTheo de Raadt
2015-11-16improve logging slightlyTed Unangst
2015-11-16the list insertion needs to occur right after we get a valid socket,Ted Unangst
as that is the hint that the request is on the list.
2015-11-10kill the whitespace.. kill the whitespace..Theo de Raadt
2015-11-01chroot to pw_dir instead of the hard-coded /var/empty. Also make theReyk Floeter
chroot+chdir step look more like in the other privsep daemons. OK tedu@
2015-10-30it is necessary to call tzset() to get syslog timestamps correct.Ted Unangst
i am quite surprised by this, but it's the way things are, so do it. reported by naddy
2015-10-29put timeout nullification in correct spotTed Unangst
2015-10-29be a little more precise about checking filtersTed Unangst
2015-10-29refold a few linesTed Unangst
2015-10-29collect some cool stats and print them out with SIGUSR1Ted Unangst
2015-10-28impose some limit on the cache size as well.Ted Unangst
2015-10-28if accept() fails due to fd exhaustion, stop accepting for one second.Ted Unangst
should only happen for ENFILE, but check for EMFILE too.
2015-10-28bug in the request tree code: requests were being added to the tree beforeTed Unangst
the socket (the key) was being set. move the enqueue code later, and fix freerequest to only dequeue if socket is set.