summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Code tidying.HEADmasterSimon Kelley2023-05-011-10/+7
|
* Fix issue with stale caching.Simon Kelley2023-05-012-51/+59
| | | | | | | | | After replying with stale data, dnsmasq sends the query upstream to refresh the cache asynchronously and sometimes sends the wrong packet: packet length can be wrong, and if an EDE marking stale data is added to the answer that can end up in the query also. This bug only seems to cause problems when the usptream server is a DOH/DOT proxy. Thanks to Justin He for the bug report.
* Improve RFC3315 para 15 packet validation.Simon Kelley2023-04-241-6/+28
| | | | Thanks to Shashikumar Shashil for spotting the ommision.
* Log failure to determine MAC address in DHCPv6.Simon Kelley2023-04-171-0/+2
|
* Optimization of socket events handling of dbus.Petr Menšík2023-04-171-10/+9
| | | | | Reduces calls to locate the file descriptor structure. Should lower CPU usage when monitoring dbus watches.
* Fix crash in dbus code.Petr Menšík2023-04-171-4/+20
| | | | | | | | | If I configure dnsmasq to use dbus and then restart dbus.service with watchers present, it crashes dnsmasq. The reason is simple, it uses loop to walk over watchers to call dbus handling code. But from that code the same list can be modified and watchers removed. But the list iteration continues anyway. Restart the loop if list were modified.
* Fix paren blunder in aaba66efbd3b4e7283993ca3718df47706a8549bSimon Kelley2023-04-171-1/+1
| | | | Thanks to Dominik Derigs for spotting this.
* Add --no-dhcpv4-interface and --no-dhcpv6-interface options.Simon Kelley2023-04-1210-15/+51
|
* Turn "used" member of struct iname into flags in preparation for more.Simon Kelley2023-04-125-11/+22
|
* Missed copyright date.Simon Kelley2023-04-051-1/+1
|
* Make --server=/#/<addr> behave the same as --server=<addr>Simon Kelley2023-04-051-2/+2
| | | | For consistency with --address and older dnsmasq releases.
* Bump copyrights to 2023.Simon Kelley2023-04-0548-49/+49
|
* Fix long-term bug in TCP caching code which would lose NXDOMAIN.Simon Kelley2023-04-011-52/+57
| | | | | | A NXDOMAIN answer recieved over TCP by a child process would be correctly sent back to the master process which would then fail to insert it into the cache.
* Use a simpler arrangement for the all_addr union to avoidSimon Kelley2023-04-013-51/+84
| | | | | | | | the compiler padding it with an extra 8 bytes. Use the F_KEYTAG flag in a a cache record to discriminate between an arbitrary RR stored entirely in the addr union and one which has a point to block storage.
* Fix copy-n-paste error in 138e1e2a2d918b37cb0274fe310d53be35acf4cfSimon Kelley2023-04-011-1/+1
|
* --domain=# is valid. --synth-domain=# isn't.Simon Kelley2023-03-311-172/+175
|
* Allow --cache-rr=ANY with the obvious meaning.Simon Kelley2023-03-312-2/+2
|
* Optimse memory use for arbitrary-RR caching.Simon Kelley2023-03-313-59/+87
| | | | RRs 13 bytes or less don't need to allocate block storage.
* Optimise no-action case in rrfilter().all-rr-typeSimon Kelley2023-03-301-0/+3
|
* Add filtering of arbitrary RR-types.Simon Kelley2023-03-298-90/+102
|
* Remove code for caching SRV.Simon Kelley2023-03-286-130/+42
| | | | | | | Function replaced by the ability to cache any RR type. For backwards compatibilty SRV records are always on the list of cacheable RR-types.
* Add --cache-rr to enable caching of arbitrary RR types.Simon Kelley2023-03-239-173/+415
|
* Fold F_NOERR and F_DNSSEC to make space for new F_RR.Simon Kelley2023-03-203-5/+10
|
* Merge branch 'master' into all-rr-typeSimon Kelley2023-03-2020-97/+241
|\
| * Close Debian bug.Simon Kelley2023-03-201-1/+1
| |
| * Add EDE "filtered" extended error when --filter-A or --filter-AAAA act.Simon Kelley2023-03-205-47/+83
| | | | | | | | | | | | | | | | | | If a NODATA answer is returned instead of actual data for A or AAAA queries because of the existence of --filter-A or --filter-AAAA config options, then mark the replies with an EDE "filtered" tag. Basic patch by Petr Menšík, tweaked by Simon Kelley to apply onto the preceding caching patches.
| * More --filter-AAAA caching improvements.Simon Kelley2023-03-202-19/+38
| | | | | | | | Cache answers before filtering and filter coming out of the cache.
| * Improve cache use with --filter-A and --filter-AAAASimon Kelley2023-03-201-0/+20
| | | | | | | | | | | | | | If --filter-AAAA is set and we have cached entry for the domain in question fpr any RR type that allows us to return a NODATA reply when --filter-AAAA is set without going upstream. Similarly for --filter-A.
| * Remove limitation on --dynamic-host.Simon Kelley2023-03-161-11/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Dynamic-host was implemented to ignore interface addresses with /32 (or /128 for IPv6) prefix lengths, since they are not useful for synthesising addresses. Due to a bug before 2.88, this didn't work for IPv4, and some have used --dynamic-host=example.com,0.0.0.0,eth0 to do the equivalent of --interface-name for such interfaces. When the bug was fixed in 2.88 these uses broke. Since this behaviour seems to violate the principle of least surprise, and since the 2.88 fix is breaking existing imstallations, this commit removes the check on /32 and /128 prefix lengths to solve both problems.
| * Fix DHCPv6 "use multicast" response which previously failedSimon Kelley2023-03-151-2/+4
| | | | | | | | | | | | to set the message type correctly. Thanks to Petr Menšík for spotting the problem.
| * Allow configuring filter-A/AAAA via dbus.Clayton Craft2023-03-082-0/+22
| |
| * Generalise cached NXDOMAIN replies.Simon Kelley2023-03-081-4/+18
| | | | | | | | | | We can cache an NXDOMAIN reply to a query for any RRTYPE and reply from a cached NXDOMAIN to any RRTYPE.
| * Set the default maximum DNS UDP packet size to 1232.Simon Kelley2023-03-073-3/+11
| | | | | | | | | | | | http://www.dnsflagday.net/2020/ refers. Thanks to Xiang Li for the prompt.
| * Bump version in Debian changelog.Simon Kelley2023-03-061-0/+6
| |
| * Fix possible SEGV when no servers defined.Simon Kelley2023-03-062-2/+14
| | | | | | | | | | | | | | | | | | | | If there exists a --address=/<domain>/ or --server=/<domain>/# configuration but no upstream server config unqualified by domain then when a query which doesnt match the domain is recieved it will use the qualfied server config and in the process possibly make an out-of-bounds memory access. Thanks to Daniel Danzberger for spotting the bug.
| * Fix --rev-server option. It was broken in ↵Dominik Derigs2023-03-061-0/+6
| | | | | | | | | | | | 1db9943c6879c160a5fbef885d5ceadd3668b74d when resolving upstream servers by name was extended to --rev-server without accounting for the fact that re-using one and the same upstream server for each of the x.y.z.in-addr.arpa is actually a wanted feature Signed-off-by: DL6ER <dl6er@dl6er.de>
| * Document suppressing deafult options in --dhcp-option.Simon Kelley2023-03-061-1/+9
| |
| * Avoid undefined behaviour with the ctype(3) functions.Taylor R Campbell2023-02-277-14/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As defined in the C standard: In all cases the argument is an int, the value of which shall be representable as an unsigned char or shall equal the value of the macro EOF. If the argument has any other value, the behavior is undefined. This is because they're designed to work with the int values returned by getc or fgetc; they need extra work to handle a char value. If EOF is -1 (as it almost always is), with 8-bit bytes, the allowed inputs to the ctype(3) functions are: {-1, 0, 1, 2, 3, ..., 255}. However, on platforms where char is signed, such as x86 with the usual ABI, code like char *arg = ...; ... isspace(*arg) ... may pass in values in the range: {-128, -127, -126, ..., -2, -1, 0, 1, ..., 127}. This has two problems: 1. Inputs in the set {-128, -127, -126, ..., -2} are forbidden. 2. The non-EOF byte 0xff is conflated with the value EOF = -1, so even though the input is not forbidden, it may give the wrong answer. Casting char to int first before passing the result to ctype(3) doesn't help: inputs like -128 are unchanged by this cast. It is necessary to cast char inputs to unsigned char first; you can then cast to int if you like but there's no need because the functions will always convert the argument to int by definition. So the above fragment needs to be: char *arg = ...; ... isspace((unsigned char)*arg) ... This patch inserts unsigned char casts where necessary, and changes int casts to unsigned char casts where the input is char. I left alone int casts where the input is unsigned char already -- they're not immediately harmful, although they would have the effect of suppressing some compiler warnings if the input is ever changed to be char instead of unsigned char, so it might be better to remove those casts too. I also left alone calls where the input is int to begin with because it came from getc; casting to unsigned char here would be wrong, of course.
| * Replace dead link in dnsmasq.conf.example.v2.89Simon Kelley2023-02-021-1/+1
| | | | | | | | Thanks to Timo van Roermund for spotting this.
* | Replace dead link in dnsmasq.conf.example.Simon Kelley2023-02-021-1/+1
|/ | | | Thanks to Timo van Roermund for spotting this.
* Add --no-ident option.v2.89test1Dominik Derigs2023-01-233-25/+38
|
* Add acknowledgements to CHANGELOG for the 2.88 AWS efforts.Simon Kelley2023-01-141-4/+10
|
* Fix Changelog typos.Simon Kelley2023-01-141-2/+2
|
* Bump version in Debian changelog.Simon Kelley2023-01-131-0/+6
|
* Fix bug which can break the invariants on the order of a hash chain.Simon Kelley2023-01-132-6/+24
| | | | | | | | | | | | | | | If there are multiple cache records with the same name but different F_REVERSE and/or F_IMMORTAL flags, the code added in fe9a134b could concievable break the REVERSE-FORWARD-IMMORTAL order invariant. Reproducing this is damn near impossible, but it is responsible for rare and otherwise inexplicable reversion between 2.87 and 2.88 which manifests itself as a cache internal error. All observed cases have depended on DNSSEC being enabled, but the bug could in theory manifest itself without DNSSEC Thanks to Timo van Roermund for reporting the bug and huge efforts to isolate it.
* Fix cosmetic big in dump_cache_entry()Simon Kelley2023-01-041-2/+1
|
* Log all cache internal errors.Simon Kelley2023-01-021-8/+3
|
* If we hit a cache internal error, log the entry we failed to remove.Simon Kelley2022-12-221-82/+97
| | | | | This is code which should never run, but if it does, we now log information useful for debugging.
* Add posix-timezone and tzdb-timezone DHCPv6 options.v2.88Simon Kelley2022-12-041-0/+2
| | | | They are already in place for DHCPv4.
* Handle malformed DNS replies better.v2.88rc5Simon Kelley2022-11-263-17/+32
| | | | | | If we detect that that reply from usptream is malformed, transform it into a SERVFAIL reply before sending to the original requestor.