Before this patch we could exit the process without waiting for
file writing task to complete.
As a result a file could become corrupted or a large chunk of data
could be missing.
Now the main thread either waits until file writing task completes
or it writes log buffer to file itself.
* dnsforward: prioritize host files over null filter
* dnsforward, config: adjust setting variable to blocking_mode
* dnsforward: use net.IPv4zero for null IP
Close#720
* commit '68f9ec70fb0f8ff2a73bf382bc15257c367b7967':
Optimize Docker image layers; comment out runtime user; add sample docker-compose.yml
Run as non-root user
Close#732
* commit 'c4e67690f4fcceb055cbea73610b5974855db96f':
* dnsfilter: don't use global variable for custom resolver function
- dnsfilter: prevent recursion when both parental control and safebrowsing are enabled
* commit '528c1a72cac331f08de5fdee4538529c70dff1bb':
- use 127.0.0.1 as a resolver address when DNS binding address is 0.0.0.0
- app: don't print filter update error messages on first launch before DNS server is set up
Before this patch we couldn't receive incoming DHCP packets.
Now we bind() to 0.0.0.0 and set the required network interface
using SO_BINDTODEVICE option.
As an improvement, we now wait until a reply to our request is
received and skip all unknown packets.
* commit '79b0fac01a544e35207420fed78e1c2a63d428d8':
* control: move /install handlers to a separate file
+ add technical document
* app: move code for http server loop to a separate function
* client: fixed getDefaultAddresses structure
- client: npm audit fix
* client: validate form on load
* client: installation wizard additional checks
* update openapi.yaml
+ service install: a post-install guide of what to do next
* control: /install/configure: validate port number
* control: /install/configure: reset configuration back to its current state on error
+ control: /install/*: test TCP port availability for DNS server
+ control: /install/check_config: Check and deactivate DNSStubListener
* control: /install/configure: refactor
+ control: add /install/check_config handler
* control: /install/get_addresses: don't check if ports are available
+ app: unix, windows: require root user on first launch
* setRlimit(): move OS-specific code to separate files