head 1.1; access; symbols; locks; strict; comment @# @; 1.1 date 2026.10.06.11.23.17; author drixter; state Exp; branches; next ; commitid Z33nYmIKFAXvnpYG; desc @@ 1.1 log @rcvd: Add version 0.3.1 rcvd is a privacy-first encrypted DNS engine: a single Go binary driven by purpose-built configuration files. It speaks DNS over QUIC (DoQ), DNS over TLS (DoT), and DNS over HTTPS (DoH/DoH3), and never falls back to cleartext DNS. If every encrypted upstream fails it returns SERVFAIL rather than leaking a query over port 53. Features include multi-upstream fallback with health checks, DNSSEC validation, domain blocklists (plain-list and hosts formats, with wildcard support), a local cache, runtime statistics, and both forwarder and DoH-service (upstream) modes. TLS can be automated via ACME (certmagic) so a DoH endpoint presents a real CA certificate with a DNS-ID in its SAN. rcvd: Update to version 0.3.1 Privacy-first DNS. One binary, encrypted egress only This is a small bug fix release. There are no new features and no configuration changes. Fixed: rcvd panicked on shutdown and exited with status 2 instead of 0. This affected every platform whenever a Mode 1 listener was running. Clean shutdown When rcvd received SIGTERM, the server and the main process both closed the upstream resolver chain. The second close panicked. DNS service was not affected while running, but every stop ended in a panic: the exit status was 2, and the final RCVD stopped log line was never written. Service managers notice that. OpenRC and systemd report the stop as a failure, and anything that watches the exit code or the shutdown log line gets the wrong signal. Closing the upstream chain is now idempotent, so a second close is a no-op. A new unit test covers the double close. A shutdown regression check in our container test suite confirms that SIGTERM now exits 0 and logs RCVD stopped. The bug was present since v0.1.0 on all platforms. A Mode 2-only configuration was not affected, because it closes the chain only once. @ text @$NetBSD$ BLAKE2s (github.com__burnt_sushi_toml_@@v_v1.6.0.mod) = 26f62b858e9ef333fa0b51b46ce83c2d385ddf010431d6415a115aef9a338b35 SHA512 (github.com__burnt_sushi_toml_@@v_v1.6.0.mod) = fb6b4ae74dfdcc39b915f1b5f84f8e52e830d273d29f9225dc5ed4f26e970d9f61921f6f3588249141a82404c3ba180f735b4f23e700050e76a740fbf541ac78 Size (github.com__burnt_sushi_toml_@@v_v1.6.0.mod) = 43 bytes BLAKE2s (github.com__burnt_sushi_toml_@@v_v1.6.0.zip) = 2f5f362ba4a41907d51f25f4c4b0b3f848eb42b7aa8848b34fb4bb6d41f2e6aa SHA512 (github.com__burnt_sushi_toml_@@v_v1.6.0.zip) = 6ab4b3d4a0c50299f1d48be5d6b79f6174b2c9c0b27a58123284df543e523ac7da6dd55a626e5732219bc00e68c9b2da2bc098bb1823d0440877d194e8b1f0c3 Size (github.com__burnt_sushi_toml_@@v_v1.6.0.zip) = 462127 bytes BLAKE2s (github.com_caddyserver_certmagic_@@v_v0.25.6.mod) = 1b5384028c604c2aabbc1436b7288a818ef1b40e0a3d17e06f5018e196475f48 SHA512 (github.com_caddyserver_certmagic_@@v_v0.25.6.mod) = 341c4b05cab12ade0313b49d709abfac97edd4bde59a776e0ceb2143ce47d272af51e22df8f0377a96eebd651f001ad8e8197752a43d5da381d261631dbd0f2d Size (github.com_caddyserver_certmagic_@@v_v0.25.6.mod) = 498 bytes BLAKE2s (github.com_caddyserver_certmagic_@@v_v0.25.6.zip) = c8f254ea437b150119ee449ad963baaa53fdde5900e2027c53fa06234f4a9054 SHA512 (github.com_caddyserver_certmagic_@@v_v0.25.6.zip) = 01f88c05efe50107733efc7603d5e8102a7d0c29b7e4c94293f1dcb259690ee5b86dde881806c0a6105c03abfe86b6cc09038d7d182b8520c6f5f9809ca7f319 Size (github.com_caddyserver_certmagic_@@v_v0.25.6.zip) = 284150 bytes BLAKE2s (github.com_caddyserver_zerossl_@@v_v0.1.6.mod) = 03d2b37f148b5c05b6cdafde5adc541199f63e9faebdd96eab0a711bceeb3e5f SHA512 (github.com_caddyserver_zerossl_@@v_v0.1.6.mod) = 313c955b432f7b5ea37b9add01111ea26d5c6a74da4d7a8a225404910a0d1d7aae4965e158d70f39a78d1a219cb2cc477e01189419b08811c6542ca629c9c1b7 Size (github.com_caddyserver_zerossl_@@v_v0.1.6.mod) = 49 bytes BLAKE2s (github.com_caddyserver_zerossl_@@v_v0.1.6.zip) = 7aff8cf5839bdcad037bc7270599583cc88c98a5bbb7b5af58ecaf99b3eff7d4 SHA512 (github.com_caddyserver_zerossl_@@v_v0.1.6.zip) = 6156e7c017ff6b2ec7954b775e2f578b44e2a5a5eb2a26b2101b7ade8b61eb7858d54b020fdc1662722fa311fabceed846497d219d8a0fdceff16d3bd8f07cd8 Size (github.com_caddyserver_zerossl_@@v_v0.1.6.zip) = 9458 bytes BLAKE2s (github.com_klauspost_cpuid_v2_@@v_v2.4.0.mod) = bfa10370b47c5079e7ab09b76145c1773ce130f60c664374d3a228d3dad52f98 SHA512 (github.com_klauspost_cpuid_v2_@@v_v2.4.0.mod) = 465d88e7ac6359c2dce98fc8ca8485b4cf19aeee874ea2d7be5d661fadd5e27b175323ecf18b60da4f57c4611b05b094dce9a628dacca72a972fa8a102dcd1d6 Size (github.com_klauspost_cpuid_v2_@@v_v2.4.0.mod) = 82 bytes BLAKE2s (github.com_klauspost_cpuid_v2_@@v_v2.4.0.zip) = 2b6848ce552cca3914d27ebdf1a9913a9e03411e94b7bcb8bcabb7e1283e1327 SHA512 (github.com_klauspost_cpuid_v2_@@v_v2.4.0.zip) = 0558750a3fa65072ca84ee5d1db74b900224bf8c388107f623b4040cea8862d891cbe5dd470c59d6560c1684220d6e8a1cef16a48e73427f03d043d44d6f924a Size (github.com_klauspost_cpuid_v2_@@v_v2.4.0.zip) = 66828 bytes BLAKE2s (github.com_libdns_cloudflare_@@v_v0.2.2.mod) = b6bfeb3d845f501b6d63daced5bae8b0ec6f6a229e046d6592cd1bbb85f6b935 SHA512 (github.com_libdns_cloudflare_@@v_v0.2.2.mod) = 625bfe277204917c5bcfc327d5fdb48b519c672d1c0e6b4a4c9c560c6cb47ecf1ddc3529ec92ce1b425bd2a1a8ad6e0cc89c9a43e94509715fd3c73b82ca4bd4 Size (github.com_libdns_cloudflare_@@v_v0.2.2.mod) = 86 bytes BLAKE2s (github.com_libdns_cloudflare_@@v_v0.2.2.zip) = 9aa97ff3646f1cd811ea7577879df1b896ef41a9282e9b09f8913581c0d32e42 SHA512 (github.com_libdns_cloudflare_@@v_v0.2.2.zip) = 0d912e85a4988f995a6b75a2462445967a8c2dd5e979ac0235a614f4364a540d52320f1b3f8ab7cb5b3443843dd0cd83b66881ca37fa694a1cbf8647628af50f Size (github.com_libdns_cloudflare_@@v_v0.2.2.zip) = 10855 bytes BLAKE2s (github.com_libdns_libdns_@@v_v1.1.1.mod) = 1a0ff4b1d6f15590d6d491d1a4b2881c722884c1aff50dbc9302da3a0975dc70 SHA512 (github.com_libdns_libdns_@@v_v1.1.1.mod) = 17fd147b187bf23f0410ad9af61b9113d55a371a06729e186d024232f773e30453426fa578c7f9b3e80c1915261f9c0a6d271782d641522e1f7c5c7bfe22f823 Size (github.com_libdns_libdns_@@v_v1.1.1.mod) = 41 bytes BLAKE2s (github.com_libdns_libdns_@@v_v1.1.1.zip) = 94c2e9675c4eb7ad51aba39dc8818e297d36a2083ea60708e694dd335adeb279 SHA512 (github.com_libdns_libdns_@@v_v1.1.1.zip) = 401416723c892d57364ed3b8629167e4cef81c98f732285106eb9e25e58c32db57f3cb00bfdb786223e86143aaf15ae6b67d540a363f7d97fde5d7d64e325ab8 Size (github.com_libdns_libdns_@@v_v1.1.1.zip) = 23530 bytes BLAKE2s (github.com_mholt_acmez_v3_@@v_v3.1.7.mod) = 40bdcfee79c38ba6e4b2b613a78f4514496f4d01b47022219494c620f313b1a2 SHA512 (github.com_mholt_acmez_v3_@@v_v3.1.7.mod) = d11e7c50f67edbc476a42468310c1428c3cf8877efb0b3c4441cb514192e842f59d2054af281590e08ac777898e6ece5fb94093cbb9f5a6e8c06730a2965c3fd Size (github.com_mholt_acmez_v3_@@v_v3.1.7.mod) = 536 bytes BLAKE2s (github.com_mholt_acmez_v3_@@v_v3.1.7.zip) = 208af84e54e7ed8fda4d34be884902e060c53a200775a73edda8f0c6dcac574e SHA512 (github.com_mholt_acmez_v3_@@v_v3.1.7.zip) = 64951b64291edfef27bcdfca8da4fb2cd08151b2eb03ab09059e0259d3dc78f6e78bf12ca35481de2e3edaaf1161ac94268df1b22405a7def019aa2d6e0a2e52 Size (github.com_mholt_acmez_v3_@@v_v3.1.7.zip) = 102852 bytes BLAKE2s (github.com_miekg_dns_@@v_v1.1.73.mod) = 2166941b2b191cf155b0fef31ec251bfd5b3c75ceb9ab72716c4c863e079d035 SHA512 (github.com_miekg_dns_@@v_v1.1.73.mod) = 31e4c629c91eb2c153d44d8519569650336964ad76e7c9face290f0480303cb1b872e13bdc22995059e1015a304fe0c7770be5e76d8b96a6e5c68b25f3ca72d5 Size (github.com_miekg_dns_@@v_v1.1.73.mod) = 283 bytes BLAKE2s (github.com_miekg_dns_@@v_v1.1.73.zip) = bb1b16c0bde244b1076537c5dc14b7ec96fadd5caf525ad36c80d77a338e76e3 SHA512 (github.com_miekg_dns_@@v_v1.1.73.zip) = 4da5aa096d40e805ab3aff880492bd9e3968a486eed489aad1fcefeeb7302ea867369af9cadcbf1a6cb362feebf9743420d0e4277256584dcc22cd3f1349a40f Size (github.com_miekg_dns_@@v_v1.1.73.zip) = 265362 bytes BLAKE2s (github.com_quic-go_qpack_@@v_v0.6.0.mod) = 00958567444078e3ce71b48acef9ef218b41a116cf598394b9876b4e726be25f SHA512 (github.com_quic-go_qpack_@@v_v0.6.0.mod) = a331fe10c25947958342ff451bc3574e6412d30b5d35aa2cd1b441e4dcd84872674c764127a022f5db988544fce7495002bf5dd3b2bfb4b99cc71aa757a454f0 Size (github.com_quic-go_qpack_@@v_v0.6.0.mod) = 263 bytes BLAKE2s (github.com_quic-go_qpack_@@v_v0.6.0.zip) = c2ac8612fce34c9cc9a0f48c235003e5bea4709168e230344c982c774b825e38 SHA512 (github.com_quic-go_qpack_@@v_v0.6.0.zip) = f0e7c9cc648bb42ee6a8ae5487b66ebe43f7d4a3b8c799cbb695159d6ca37834b0fd87859bb5638ee1f24c36552d1a9014af9f373c320a1be575c7ad2a906372 Size (github.com_quic-go_qpack_@@v_v0.6.0.zip) = 48205 bytes BLAKE2s (github.com_quic-go_quic-go_@@v_v0.63.0.mod) = cbfb6b987f2d3eab572c19c2128d266d4bd1bffbc72c5500a655f156e56103ac SHA512 (github.com_quic-go_quic-go_@@v_v0.63.0.mod) = bddcff284e52eb629dc7b936ea9cf2d8ac1d4740d13701aed9715d2aa9969d60c1b71c927a1e533477cb1e0cca12c30263b622e53f295114a323303c03d2fe43 Size (github.com_quic-go_quic-go_@@v_v0.63.0.mod) = 636 bytes BLAKE2s (github.com_quic-go_quic-go_@@v_v0.63.0.zip) = fca5427520eb2fc1a3304d655a4fd1fb341967f0085533f774ac0cf9089eee71 SHA512 (github.com_quic-go_quic-go_@@v_v0.63.0.zip) = 05aa3168a3a45abf72ec5d3328ecc457adf365d7ff8a80dbd6ca601778b5c288382435921a990d80d830a28afd8cedd1440bda687bc8572e464b800182eec3fb Size (github.com_quic-go_quic-go_@@v_v0.63.0.zip) = 1019911 bytes BLAKE2s (github.com_zeebo_blake3_@@v_v0.2.4.mod) = bf2b83b407128ac57180f69901d10f41835d297987ea7779e45be10781afebf6 SHA512 (github.com_zeebo_blake3_@@v_v0.2.4.mod) = 73490d67f5027541f74f7843b202c9c6d9ac4ab89118cf64366f18528d54b3cd5a35637e5c97def578d6312b7c37c1b96cb2dfed98164c5dd616b33e907dd73e Size (github.com_zeebo_blake3_@@v_v0.2.4.mod) = 153 bytes BLAKE2s (github.com_zeebo_blake3_@@v_v0.2.4.zip) = c9c2b2b904be7f0c2777ed658a9e9e0c4b1132506f20ddbdb1141466f1c32cb7 SHA512 (github.com_zeebo_blake3_@@v_v0.2.4.zip) = 552f2971dccb6828687281ab05c695278bbf9b8941da6469df5bc8e15d785c35650257ddb98435ea4e5954f9e71324bbcec87ac0301517df6301462b68233f15 Size (github.com_zeebo_blake3_@@v_v0.2.4.zip) = 111107 bytes BLAKE2s (go.uber.org_multierr_@@v_v1.11.0.mod) = af43db525fd91735162b6974a2d5fcd5f747aa82158a7bf08cb4bc6fc8c58ac5 SHA512 (go.uber.org_multierr_@@v_v1.11.0.mod) = f104d72db3ff0496329bf07fa55629a9e8d4f9833769aac37b37bc0b16bc3a88b14f0d249e44f669050275e878c54c35678470e9a99b2f42ae5eb2a2cece9b0e Size (go.uber.org_multierr_@@v_v1.11.0.mod) = 228 bytes BLAKE2s (go.uber.org_multierr_@@v_v1.11.0.zip) = 38cc533a0c9eea9b5cc6393d1d24d1c18c1a8e2cbd986575e627372fa23e7389 SHA512 (go.uber.org_multierr_@@v_v1.11.0.zip) = 68040fe6658ae4d8215b807c5ccb00df995cbf6bae56d68beef8335abb38d1008f2814abf71b196ccb1ccde10d5234de2da77055171ae87780816ac20521a662 Size (go.uber.org_multierr_@@v_v1.11.0.zip) = 25681 bytes BLAKE2s (go.uber.org_zap_@@v_v1.28.0.mod) = 401425875192756be80aa866429f8756cea29017d93614f7077c37a257175683 SHA512 (go.uber.org_zap_@@v_v1.28.0.mod) = 7b8e935bc69d3993283e90816ca4e217d037991f25d86f8785f38955db6d574d7b67371440f41da91f78ea7694ee9b2044a280fca2698a7c16b6b91957745f43 Size (go.uber.org_zap_@@v_v1.28.0.mod) = 351 bytes BLAKE2s (go.uber.org_zap_@@v_v1.28.0.zip) = 0f1a413c2063d8870d39739e7eab2cf1ea71340aa2e5d9413d4bf57dfd469af2 SHA512 (go.uber.org_zap_@@v_v1.28.0.zip) = d728f6735a668770c2a8d21d5dd6e98a10d095831311ccddd2e92db79dd90bc41e3bfe4ec40c6b82bcb3cbdaa567793ea539c141edc2ac67630e1f540a66b3da Size (go.uber.org_zap_@@v_v1.28.0.zip) = 290595 bytes BLAKE2s (go.uber.org_zap_exp_@@v_v0.3.0.mod) = f142715a41460f2a519c5811cc69289a3d2a105a2711a445bd7e7d3acad12062 SHA512 (go.uber.org_zap_exp_@@v_v0.3.0.mod) = 84770c21c6d413f5eb684ffe0b57494126d86aa1815668d3baa0127299bff51dd5f5030790b905e3b071ae3063589b8e39af5433aedaa1c00ec1d6e23bcbfe72 Size (go.uber.org_zap_exp_@@v_v0.3.0.mod) = 331 bytes BLAKE2s (go.uber.org_zap_exp_@@v_v0.3.0.zip) = 6189599fe3979996466d2222131257d3801d2e3812e1259b847003ace06ced9b SHA512 (go.uber.org_zap_exp_@@v_v0.3.0.zip) = d83e1b4579e056a90ef7875838ab1bbbaa96bd51e8295ff7295328968c6b88fa645c3f7242a1ad00d8b906a9e056b280458da9c51e53a099eec7e0de9c53c9cd Size (go.uber.org_zap_exp_@@v_v0.3.0.zip) = 15842 bytes BLAKE2s (golang.org_x_crypto_@@v_v0.57.0.mod) = 5786d5d9fc2b2a8d2785a6628a5e906adc793cb0f9f5c59566f2118ef13c3b37 SHA512 (golang.org_x_crypto_@@v_v0.57.0.mod) = 7786101b114f79c5fe3c98d3e4fbdf1e40e8f43ad425ebbf45124bd208e3368016e95b0895b2119b84dcbe64123ff5083330e5c9a40527fa324c1313596c8f34 Size (golang.org_x_crypto_@@v_v0.57.0.mod) = 192 bytes BLAKE2s (golang.org_x_crypto_@@v_v0.57.0.zip) = 8bb0a709d540a75d4d46ad3b1521fe780703418ab87f0cffc0d67898855ef472 SHA512 (golang.org_x_crypto_@@v_v0.57.0.zip) = 94b88bc36708172f117ee56c274217fe934af2139df6e211ee403d6aba465e768d376a9976f9094d6cbf4b36fa598dbf40b1af944e6adb91974c3f2de8ffda01 Size (golang.org_x_crypto_@@v_v0.57.0.zip) = 2312809 bytes BLAKE2s (golang.org_x_net_@@v_v0.59.0.mod) = 6c90b1cdb361a9f10f26cf944b5ee704ee1a36afcfc4dacd6cd31ffdec872590 SHA512 (golang.org_x_net_@@v_v0.59.0.mod) = b97725b8154f76955df4a1d39457b774fe0e477314c69d5a7cd7a66f786265dea749be72bae8d605ccd4ed77174ab052e92696b16fad9920e0fff24d1c9e5df8 Size (golang.org_x_net_@@v_v0.59.0.mod) = 157 bytes BLAKE2s (golang.org_x_net_@@v_v0.59.0.zip) = 91b068c6d63e2871c191bd0b0b7bd36418ecec43a29b04e6b94a5a2d6bcccedd SHA512 (golang.org_x_net_@@v_v0.59.0.zip) = f23a5148d57e68cebacabe20efa6d93a00ba71ea3f8b948a38fc40838728a87328cb31cedd160294ac3645c997c7c05a677000ac6f28e7cbf7be6590d8405694 Size (golang.org_x_net_@@v_v0.59.0.zip) = 1941034 bytes BLAKE2s (golang.org_x_sys_@@v_v0.48.0.mod) = f609363d838f5ab76912006e45f8be731a32059069f64baeb2b494e4589f0a1c SHA512 (golang.org_x_sys_@@v_v0.48.0.mod) = a307d84c89d7a12775fcb0274d2c9c5a54315cc6559596ab94b40e0b53f192e55373ca0f5f17768158090a456d23591cf4052a70579a080f2761ee0f62654a4f Size (golang.org_x_sys_@@v_v0.48.0.mod) = 35 bytes BLAKE2s (golang.org_x_sys_@@v_v0.48.0.zip) = 336c761f0465b662c71a9742b6e394b6c5590d1cdb3f01a60eb03945300bb4e0 SHA512 (golang.org_x_sys_@@v_v0.48.0.zip) = 2a8305d837186d483786d910d5622318a523b4afcf3187ba87517d227fa289bc876c26e0db3b858c3928a816b30eb16e39c94115438a80c5bc28fff37cbf4501 Size (golang.org_x_sys_@@v_v0.48.0.zip) = 2094772 bytes BLAKE2s (golang.org_x_text_@@v_v0.42.0.mod) = 3e3ec62ee1da53e5a3cc49d7ebf79918d370b7a7707b314ac198a739f3b07e4a SHA512 (golang.org_x_text_@@v_v0.42.0.mod) = b77b73acfa718df21d32a839faf829c725b85945f1bc7bc02f6a566df730b00ee61a13fb9138264e1d7f9bec037a8423153aaec19e14b746d7f43dc88a5a6ccc Size (golang.org_x_text_@@v_v0.42.0.mod) = 190 bytes BLAKE2s (golang.org_x_text_@@v_v0.42.0.zip) = 4734b150d73173c76b7bd46e8860960bb5314d8324d40a654e794652002f09f3 SHA512 (golang.org_x_text_@@v_v0.42.0.zip) = b717d593e11a7684aafd7f959c21bed82cdd8d98e2ac8824d42e1c6c10a60f21a6da931103d27c5e54980dee4cb8fc05407a9f3329a6754216e7da99f9bf756e Size (golang.org_x_text_@@v_v0.42.0.zip) = 7337550 bytes BLAKE2s (rcvd-0.3.1.tar.gz) = bb8f06f924e95dcbd8466a3063963b61a1504dc0191e1a713bfd3178ef6c52ce SHA512 (rcvd-0.3.1.tar.gz) = 711167f18fd37c2aba222cad2742c07d7dc9bfb5d45ba3db5215d00c1c91f7815a1a0192c6cc7050f62eba610182ba22a23a88ceb97bb2c5c32fbaf90733de84 Size (rcvd-0.3.1.tar.gz) = 370567 bytes @