diff --git a/CHANGELOG.md b/CHANGELOG.md index d8403683..e958d00d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,11 +14,11 @@ and this project adheres to @@ -29,6 +29,25 @@ NOTE: Add new changes ABOVE THIS COMMENT. +## [v0.107.38] - 2023-09-11 + +See also the [v0.107.38 GitHub milestone][ms-v0.107.38]. + +### Fixed + +- Incorrect original answer when a response is filtered ([#6183]). +- Comments in the *Fallback DNS servers* field in the UI ([#6182]). +- Empty or default Safe Browsing and Parental Control settings ([#6181]). +- Various UI issues. + +[#6181]: https://github.com/AdguardTeam/AdGuardHome/issues/6181 +[#6182]: https://github.com/AdguardTeam/AdGuardHome/issues/6182 +[#6183]: https://github.com/AdguardTeam/AdGuardHome/issues/6183 + +[ms-v0.107.38]: https://github.com/AdguardTeam/AdGuardHome/milestone/73?closed=1 + + + ## [v0.107.37] - 2023-09-07 See also the [v0.107.37 GitHub milestone][ms-v0.107.37]. @@ -219,6 +238,10 @@ See also the [v0.107.36 GitHub milestone][ms-v0.107.36]. - Client hostnames not resolving when upstream server responds with zero-TTL records ([#6046]). +### Removed + +- Go 1.19 support, as it has reached end of life. + [#6046]: https://github.com/AdguardTeam/AdGuardHome/issues/6046 [#6049]: https://github.com/AdguardTeam/AdGuardHome/issues/6049 @@ -2464,11 +2487,12 @@ See also the [v0.104.2 GitHub milestone][ms-v0.104.2]. -[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.37...HEAD +[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.38...HEAD +[v0.107.38]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.37...v0.107.38 [v0.107.37]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.36...v0.107.37 [v0.107.36]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.35...v0.107.36 [v0.107.35]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.34...v0.107.35 diff --git a/Makefile b/Makefile index 770faa3e..9c8913ea 100644 --- a/Makefile +++ b/Makefile @@ -37,6 +37,8 @@ SIGN = 1 VERSION = v0.0.0 YARN = yarn +NEXTAPI = 0 + # Macros for the build-release target. If FRONTEND_PREBUILT is 0, the # default, the macro $(BUILD_RELEASE_DEPS_$(FRONTEND_PREBUILT)) expands # into BUILD_RELEASE_DEPS_0, and so both frontend and backend @@ -64,6 +66,7 @@ ENV = env\ PATH="$${PWD}/bin:$$( "$(GO.MACRO)" env GOPATH )/bin:$${PATH}"\ RACE='$(RACE)'\ SIGN='$(SIGN)'\ + NEXTAPI='$(NEXTAPI)'\ VERBOSE="$(VERBOSE.MACRO)"\ VERSION='$(VERSION)'\ diff --git a/client/src/__locales/be.json b/client/src/__locales/be.json index f93ff15a..e1e5ecf4 100644 --- a/client/src/__locales/be.json +++ b/client/src/__locales/be.json @@ -532,6 +532,8 @@ "statistics_retention_confirm": "Вы ўпэўнены, што хочаце змяніць тэрмін захоўвання статыстыкі? Пры памяншэнні інтэрвалу, некаторыя даныя могуць быць страчаны", "statistics_cleared": "Статыстыка паспяхова вычышчана", "statistics_enable": "Уключыць статыстыку", + "ignore_domains_desc_stats": "Запыты, якія адпавядаюць гэтым правілам, не запісваюцца ў статыстыку", + "ignore_domains_desc_query": "Запыты, якія адпавядаюць гэтым правілам, не запісваюцца ў часопіс запытаў", "interval_hours": "{{count}} гадзіна", "interval_hours_plural": "{{count}} гадзін", "filters_configuration": "Налада фільтраў", diff --git a/client/src/__locales/cs.json b/client/src/__locales/cs.json index 71fd614a..219fa098 100644 --- a/client/src/__locales/cs.json +++ b/client/src/__locales/cs.json @@ -537,8 +537,8 @@ "statistics_enable": "Povolit statistiky", "ignore_domains": "Ignorované domény (oddělené novým řádkem)", "ignore_domains_title": "Ignorované domény", - "ignore_domains_desc_stats": "Dotazy pro tyto domény se do statistik nezapisují", - "ignore_domains_desc_query": "Dotazy pro tyto domény se do záznamu dotazů nezapisují", + "ignore_domains_desc_stats": "Dotazy odpovídající těmto pravidlům se do statistik nezapisují", + "ignore_domains_desc_query": "Dotazy odpovídající těmto pravidlům se do protokolu dotazů nezapisují", "interval_hours": "Hodiny: {{count}}", "interval_hours_plural": "Hodiny: {{count}}", "filters_configuration": "Konfigurace filtrů", diff --git a/client/src/__locales/da.json b/client/src/__locales/da.json index 85de61d5..8f53c734 100644 --- a/client/src/__locales/da.json +++ b/client/src/__locales/da.json @@ -537,8 +537,8 @@ "statistics_enable": "Aktivér statistikker", "ignore_domains": "Ignorerede domæner (adskilt af ny linje)", "ignore_domains_title": "Ignorerede domæner", - "ignore_domains_desc_stats": "Forespørgsler til disse domæner opføres ikke i statistikken", - "ignore_domains_desc_query": "Forespørgsler til disse domæner opføres ikke i forespørgselsloggen", + "ignore_domains_desc_stats": "Forespørgsler, der matcher disse regler, skrives ikke til statistikken", + "ignore_domains_desc_query": "Forespørgsler, der matcher disse regler, skrives ikke til forespørgselsloggen", "interval_hours": "{{count}} time", "interval_hours_plural": "{{count}} timer", "filters_configuration": "Filteropsætninger", diff --git a/client/src/__locales/de.json b/client/src/__locales/de.json index 43a49ffd..2d59c292 100644 --- a/client/src/__locales/de.json +++ b/client/src/__locales/de.json @@ -537,8 +537,8 @@ "statistics_enable": "Statistiken aktivieren", "ignore_domains": "Ignorierte Domains (durch Zeilenumbruch getrennt)", "ignore_domains_title": "Ignorierte Domains", - "ignore_domains_desc_stats": "Abfragen für diese Domains werden nicht in die Statistik aufgenommen", - "ignore_domains_desc_query": "Abfragen für diese Domains werden nicht in das Abfrageprotokoll aufgenommen", + "ignore_domains_desc_stats": "Anfragen, die diesen Regeln entsprechen, werden nicht in die Statistik aufgenommen", + "ignore_domains_desc_query": "Anfragen, die diesen Regeln entsprechen, werden nicht in das Anfragenprotokoll aufgenommen", "interval_hours": "{{count}} Stunde", "interval_hours_plural": "{{count}} Stunden", "filters_configuration": "Filterkonfiguration", diff --git a/client/src/__locales/es.json b/client/src/__locales/es.json index 9f8e9aff..fea775e1 100644 --- a/client/src/__locales/es.json +++ b/client/src/__locales/es.json @@ -537,8 +537,8 @@ "statistics_enable": "Habilitar estadísticas", "ignore_domains": "Dominios ignorados (separados por una nueva línea)", "ignore_domains_title": "Dominios ignorados", - "ignore_domains_desc_stats": "Las consultas para estos dominios no aparecen en las estadísticas", - "ignore_domains_desc_query": "Las consultas para estos dominios no aparecen en el registro de consultas", + "ignore_domains_desc_stats": "Las consultas que coinciden con estas reglas no aparecen en las estadísticas", + "ignore_domains_desc_query": "Las consultas que coinciden con estas reglas no aparecen en el registro de consultas", "interval_hours": "{{count}} hora", "interval_hours_plural": "{{count}} horas", "filters_configuration": "Configuración de filtros", diff --git a/client/src/__locales/fi.json b/client/src/__locales/fi.json index ae8655ea..4d1ca1f3 100644 --- a/client/src/__locales/fi.json +++ b/client/src/__locales/fi.json @@ -537,8 +537,8 @@ "statistics_enable": "Ota tilastointi käyttöön", "ignore_domains": "Ohitettavat verkkotunnukset (erotettu rivinvaihdolla)", "ignore_domains_title": "Ohitettavat verkkotunnukset", - "ignore_domains_desc_stats": "Näihin verkkotunnuksiin lähetettyjä pyyntöjä ei tallenneta tilastoihin.", - "ignore_domains_desc_query": "Näihin verkkotunnuksiin lähetettyjä pyyntöjä ei tallenneta pyyntöhistoriaan.", + "ignore_domains_desc_stats": "Sääntöihin sopivat kyselyt eivät kirjoitu tilastoihin", + "ignore_domains_desc_query": "Sääntöihin sopivat kyselyt eivät tallennu kyselylokiin", "interval_hours": "{{count}} tunti", "interval_hours_plural": "{{count}} tuntia", "filters_configuration": "Suodatinten määritys", diff --git a/client/src/__locales/hr.json b/client/src/__locales/hr.json index eb9bb9d6..fffaf2a1 100644 --- a/client/src/__locales/hr.json +++ b/client/src/__locales/hr.json @@ -537,8 +537,8 @@ "statistics_enable": "Omogući statistiku", "ignore_domains": "Zanemarene domene (odvojene novim retkom)", "ignore_domains_title": "Zanemarene domene", - "ignore_domains_desc_stats": "Upiti za ove domene ne upisuju se u statistiku", - "ignore_domains_desc_query": "Upiti za te domene nisu zapisani u zapisnik upita", + "ignore_domains_desc_stats": "Upiti koji odgovaraju ovim pravilima ne upisuju se u statistiku", + "ignore_domains_desc_query": "Upiti koji odgovaraju ovim pravilima ne upisuju se u zapisnik upita", "interval_hours": "{{count}} sata/i", "interval_hours_plural": "{{count}} sata/i", "filters_configuration": "Postavke filtara", diff --git a/client/src/__locales/hu.json b/client/src/__locales/hu.json index b94af27f..deca8d4e 100644 --- a/client/src/__locales/hu.json +++ b/client/src/__locales/hu.json @@ -537,8 +537,8 @@ "statistics_enable": "Statisztikák engedélyezése", "ignore_domains": "Figyelmen kívül hagyott domainek (újsorral elválasztva)", "ignore_domains_title": "Figyelmen kívül hagyott domainek", - "ignore_domains_desc_stats": "Az ezekre a tartományokra vonatkozó lekérdezések nem kerülnek a statisztikákba", - "ignore_domains_desc_query": "Az ezekhez a tartományokhoz tartozó lekérdezések nem kerülnek a lekérdezési naplóba", + "ignore_domains_desc_stats": "Az ezeknek a szabályoknak megfelelő lekérdezések nem kerülnek be a statisztikákba", + "ignore_domains_desc_query": "Az ezeknek a szabályoknak megfelelő lekérdezések nem kerülnek a lekérdezési naplóba", "interval_hours": "{{count}} óra", "interval_hours_plural": "{{count}} óra", "filters_configuration": "Szűrők beállításai", diff --git a/client/src/__locales/id.json b/client/src/__locales/id.json index b0ae2ff8..eb84cced 100644 --- a/client/src/__locales/id.json +++ b/client/src/__locales/id.json @@ -527,6 +527,8 @@ "statistics_retention_confirm": "Apakah Anda yakin ingin mengubah retensi statistik? Jika Anda menurunkan nilai interval, beberapa data akan hilang", "statistics_cleared": "Statistik berhasil dihapus", "statistics_enable": "Aktifkan statistik", + "ignore_domains_desc_stats": "Kueri yang cocok dengan aturan ini tidak ditulis ke statistik", + "ignore_domains_desc_query": "Kueri yang cocok dengan aturan ini tidak ditulis ke log kueri", "interval_hours": "{{count}} jam", "interval_hours_plural": "{{count}} jam", "filters_configuration": "Konfigurasi filter", diff --git a/client/src/__locales/ja.json b/client/src/__locales/ja.json index 0f4a9528..2617d292 100644 --- a/client/src/__locales/ja.json +++ b/client/src/__locales/ja.json @@ -537,8 +537,8 @@ "statistics_enable": "統計を有効にする", "ignore_domains": "無視するドメイン(それぞれ改行で区切ってください)", "ignore_domains_title": "無視するドメイン", - "ignore_domains_desc_stats": "これらのドメインへのクエリは統計に書き込まれません。", - "ignore_domains_desc_query": "これらのドメインへのクエリはクエリログに書き込まれません。", + "ignore_domains_desc_stats": "これらのルールに一致するクエリは統計に書き込まれません。", + "ignore_domains_desc_query": "これらのルールに一致するクエリはクエリログに書き込まれません。", "interval_hours": "{{count}}時間", "interval_hours_plural": "{{count}}時間", "filters_configuration": "フィルタ設定", diff --git a/client/src/__locales/ko.json b/client/src/__locales/ko.json index 549e21c0..2752559e 100644 --- a/client/src/__locales/ko.json +++ b/client/src/__locales/ko.json @@ -537,8 +537,8 @@ "statistics_enable": "통계 활성화", "ignore_domains": "무시된 도메인(줄 바꿈으로 구분)", "ignore_domains_title": "무시된 도메인", - "ignore_domains_desc_stats": "이러한 도메인에 대한 쿼리는 통계에 기록되지 않습니다.", - "ignore_domains_desc_query": "이러한 도메인에 대한 쿼리는 쿼리 로그에 기록되지 않습니다.", + "ignore_domains_desc_stats": "이러한 규칙과 일치하는 쿼리는 통계에 기록되지 않습니다.", + "ignore_domains_desc_query": "이러한 규칙과 일치하는 쿼리는 쿼리 로그에 기록되지 않습니다.", "interval_hours": "{{count}} 시간", "interval_hours_plural": "{{count}} 시간", "filters_configuration": "필터 구성", diff --git a/client/src/__locales/nl.json b/client/src/__locales/nl.json index a19fa3c2..4934ccde 100644 --- a/client/src/__locales/nl.json +++ b/client/src/__locales/nl.json @@ -537,8 +537,8 @@ "statistics_enable": "Statistieken inschakelen", "ignore_domains": "Genegeerde domeinen (gescheiden door nieuwe regel)", "ignore_domains_title": "Genegeerde domeinen", - "ignore_domains_desc_stats": "Zoekopdrachten voor deze domeinen worden niet naar de statistieken geschreven", - "ignore_domains_desc_query": "Zoekopdrachten voor deze domeinen worden niet naar het zoeklogboek geschreven", + "ignore_domains_desc_stats": "Zoekopdrachten die aan deze regels voldoen, worden niet naar de statistieken geschreven", + "ignore_domains_desc_query": "Zoekopdrachten die aan deze regels voldoen, worden niet naar het zoeklogboek geschreven", "interval_hours": "{{count}} uur", "interval_hours_plural": "{{count}} uren", "filters_configuration": "Filters instellingen", diff --git a/client/src/__locales/pl.json b/client/src/__locales/pl.json index 3fdae444..a2cf0c08 100644 --- a/client/src/__locales/pl.json +++ b/client/src/__locales/pl.json @@ -537,8 +537,8 @@ "statistics_enable": "Włącz statystyki", "ignore_domains": "Ignorowane domeny (każda w nowym wierszu)", "ignore_domains_title": "Ignorowane domeny", - "ignore_domains_desc_stats": "Zapytania dla tych domen nie są zapisywane do statystyk", - "ignore_domains_desc_query": "Zapytania dla tych domen nie są zapisywane do dziennika", + "ignore_domains_desc_stats": "Zapytania pasujące do tych reguł nie są zapisywane w statystykach", + "ignore_domains_desc_query": "Zapytania pasujące do tych reguł nie są zapisywane w dzienniku zapytań", "interval_hours": "{{count}} godzina", "interval_hours_plural": "{{count}} godziny", "filters_configuration": "Konfiguracja filtrów", diff --git a/client/src/__locales/pt-br.json b/client/src/__locales/pt-br.json index ba951312..c0c2fa89 100644 --- a/client/src/__locales/pt-br.json +++ b/client/src/__locales/pt-br.json @@ -537,8 +537,8 @@ "statistics_enable": "Ativar estatísticas", "ignore_domains": "Domínios ignorados (separados por nova linha)", "ignore_domains_title": "Domínios ignorados", - "ignore_domains_desc_stats": "As consultas para esses domínios não são gravadas nas estatísticas", - "ignore_domains_desc_query": "As consultas para esses domínios não são gravadas no registro de consulta", + "ignore_domains_desc_stats": "As consultas que correspondem a essas regras não são gravadas nas estatísticas", + "ignore_domains_desc_query": "As consultas que correspondem a essas regras não são gravadas no registro de consultas", "interval_hours": "{{count}} hora", "interval_hours_plural": "{{count}} horas", "filters_configuration": "Configuração de filtros", diff --git a/client/src/__locales/pt-pt.json b/client/src/__locales/pt-pt.json index 1d0cf574..8f48ce7a 100644 --- a/client/src/__locales/pt-pt.json +++ b/client/src/__locales/pt-pt.json @@ -537,8 +537,8 @@ "statistics_enable": "Ativar estatísticas", "ignore_domains": "Domínios ignorados (separados por nova linha)", "ignore_domains_title": "Domínios ignorados", - "ignore_domains_desc_stats": "As consultas para estes domínios não aparecem nas estatísticas", - "ignore_domains_desc_query": "As consultas para estes domínios não aparecem no registo de consultas", + "ignore_domains_desc_stats": "As consultas que correspondem a essas regras não são gravadas nas estatísticas", + "ignore_domains_desc_query": "As consultas que correspondem a essas regras não são gravadas no registo de consultas", "interval_hours": "{{count}} hora", "interval_hours_plural": "{{count}} horas", "filters_configuration": "Definição dos filtros", diff --git a/client/src/__locales/ro.json b/client/src/__locales/ro.json index 157cf26f..2be8d099 100644 --- a/client/src/__locales/ro.json +++ b/client/src/__locales/ro.json @@ -537,8 +537,8 @@ "statistics_enable": "Activați statisticile", "ignore_domains": "Domenii ignorate (separate prin linie nouă)", "ignore_domains_title": "Domenii ignorate", - "ignore_domains_desc_stats": "Interogările pentru aceste domenii nu sunt scrise în statistici", - "ignore_domains_desc_query": "Interogările pentru aceste domenii nu sunt scrise în jurnalul de interogări", + "ignore_domains_desc_stats": "Interogările care corespund acestor reguli nu sunt scrise în statistici", + "ignore_domains_desc_query": "Interogările care corespund acestor reguli nu sunt scrise în jurnalul de interogări", "interval_hours": "{{count}} oră", "interval_hours_plural": "{{count}} ore", "filters_configuration": "Configurația filtrelor", diff --git a/client/src/__locales/ru.json b/client/src/__locales/ru.json index 214f770c..d83f7c6e 100644 --- a/client/src/__locales/ru.json +++ b/client/src/__locales/ru.json @@ -17,7 +17,7 @@ "local_ptr_no_default_resolver": "AdGuard Home не смог определить подходящие приватные обратные DNS-резолверы для этой системы.", "local_ptr_placeholder": "Введите по одному адресу на строчку", "resolve_clients_title": "Включить запрашивание доменных имён для IP-адресов клиентов", - "resolve_clients_desc": "Определять доменные имена клиентов через PTR-запросы к соответствующим серверам (приватные DNS-серверы для локальных клиентов, upstream-сервер для клиентов с публичным IP-адресом).", + "resolve_clients_desc": "Определять доменные имена клиентов через PTR-запросы к соответствующим серверам (приватные DNS-серверы для локальных клиентов, upstream-серверы для клиентов с публичным IP-адресом).", "use_private_ptr_resolvers_title": "Использовать приватные обратные DNS-резолверы", "use_private_ptr_resolvers_desc": "Посылать обратные DNS-запросы для локально обслуживаемых адресов на указанные серверы. Если отключено, AdGuard Home будет отвечать NXDOMAIN на все подобные PTR-запросы, кроме запросов о клиентах, уже известных по DHCP, /etc/hosts и так далее.", "check_dhcp_servers": "Проверить DHCP-серверы", @@ -537,8 +537,8 @@ "statistics_enable": "Включить статистику", "ignore_domains": "Игнорируемые домены (построчно)", "ignore_domains_title": "Игнорируемые домены", - "ignore_domains_desc_stats": "Запросы для этих доменов не записываются в статистику", - "ignore_domains_desc_query": "Запросы для этих доменов не записываются в журнал запросов", + "ignore_domains_desc_stats": "Запросы, соответствующие этим правилам, не записываются в статистику", + "ignore_domains_desc_query": "Запросы, соответствующие этим правилам, не записываются в журнал запросов", "interval_hours": "{{count}} час", "interval_hours_plural": "{{count}} часов", "filters_configuration": "Настройка фильтров", diff --git a/client/src/__locales/sk.json b/client/src/__locales/sk.json index 9f167163..7748b8c1 100644 --- a/client/src/__locales/sk.json +++ b/client/src/__locales/sk.json @@ -537,8 +537,8 @@ "statistics_enable": "Zapnúť štatistiku", "ignore_domains": "Ignorované domény (oddelené novým riadkom)", "ignore_domains_title": "Ignorované domény", - "ignore_domains_desc_stats": "Dopyty pre tieto domény sa nezapisujú do štatistík", - "ignore_domains_desc_query": "Dopyty pre tieto domény sa nezapisujú do denníka dopytov", + "ignore_domains_desc_stats": "Dopyty zodpovedajúce týmto pravidlám sa nezapisujú do štatistík", + "ignore_domains_desc_query": "Dopyty zodpovedajúce týmto pravidlám sa nezapisujú do denníka dopytov", "interval_hours": "{{count}} hodina", "interval_hours_plural": "{{count}} hodín", "filters_configuration": "Konfigurácia filtrov", diff --git a/client/src/__locales/sl.json b/client/src/__locales/sl.json index 72033550..b9c7fe52 100644 --- a/client/src/__locales/sl.json +++ b/client/src/__locales/sl.json @@ -537,8 +537,8 @@ "statistics_enable": "Omogoči statistiko", "ignore_domains": "Prezrte domene (ločene z novo vrstico)", "ignore_domains_title": "Prezrte domene", - "ignore_domains_desc_stats": "Poizvedbe za te domene niso zapisane v statistiko", - "ignore_domains_desc_query": "Poizvedbe za te domene niso zapisane v dnevnik poizvedb", + "ignore_domains_desc_stats": "Poizvedbe, ki ustrezajo tem pravilom, se ne zapišejo v statistiko", + "ignore_domains_desc_query": "Poizvedbe, ki ustrezajo tem pravilom, se ne zapišejo v dnevnik poizvedb", "interval_hours": "{{count}} ur", "interval_hours_plural": "{{count}} ur", "filters_configuration": "Nastavitve filtrov", diff --git a/client/src/__locales/sr-cs.json b/client/src/__locales/sr-cs.json index 62b8dae1..1a0da40e 100644 --- a/client/src/__locales/sr-cs.json +++ b/client/src/__locales/sr-cs.json @@ -537,8 +537,8 @@ "statistics_enable": "Uključi statistiku", "ignore_domains": "Zanemari domene (razdvojene novom linijom)", "ignore_domains_title": "Zanemareni domeni", - "ignore_domains_desc_stats": "Upiti za ove domene nisu upisani u statistiku", - "ignore_domains_desc_query": "Upiti za ove domene nisu upisani u evidenciju upita", + "ignore_domains_desc_stats": "Upiti koji se podudaraju sa ovim pravilima nisu upisani u statistiku", + "ignore_domains_desc_query": "Upiti koji se podudaraju sa ovim pravilima nisu upisani u evidenciju upita", "interval_hours": "{{count}} čas", "interval_hours_plural": "{{count}} časova", "filters_configuration": "Konfiguracija filtera", diff --git a/client/src/__locales/sv.json b/client/src/__locales/sv.json index 2d3ee0b0..8194d785 100644 --- a/client/src/__locales/sv.json +++ b/client/src/__locales/sv.json @@ -536,8 +536,8 @@ "statistics_enable": "Aktivera statistik", "ignore_domains": "Ignorerade domäner (avgränsade med ny rad)", "ignore_domains_title": "Ignorerade domäner", - "ignore_domains_desc_stats": "Förfrågningar för dessa domäner skrivs inte till statistiken", - "ignore_domains_desc_query": "Förfrågningar för dessa domäner skrivs inte till frågeloggningen", + "ignore_domains_desc_stats": "Förfrågningar som matchar dessa regler skrivs inte till statistiken", + "ignore_domains_desc_query": "Förfrågningar som matchar dessa regler skrivs inte till förfrågningsloggen", "interval_hours": "{{count}} timme", "interval_hours_plural": "{{count}} timmar", "filters_configuration": "Filterinställningar", diff --git a/client/src/__locales/tr.json b/client/src/__locales/tr.json index 14114953..7bc16a5a 100644 --- a/client/src/__locales/tr.json +++ b/client/src/__locales/tr.json @@ -537,8 +537,8 @@ "statistics_enable": "İstatistikleri etkinleştir", "ignore_domains": "Yok sayılan alan adları (yeni satırla ayrılmış)", "ignore_domains_title": "Yok sayılan alan adları", - "ignore_domains_desc_stats": "Bu alan adları için yapılan sorgular istatistiklere yazılmaz", - "ignore_domains_desc_query": "Bu alan adları için yapılan sorgular sorgu günlüğüne yazılmaz", + "ignore_domains_desc_stats": "Bu kurallarla eşleşen sorgular istatistiklere yazılmaz", + "ignore_domains_desc_query": "Bu kurallarla eşleşen sorgular sorgu günlüğüne yazılmaz", "interval_hours": "{{count}} saat", "interval_hours_plural": "{{count}} saat", "filters_configuration": "Filtre yapılandırması", diff --git a/client/src/__locales/uk.json b/client/src/__locales/uk.json index f997077e..b0c8e35f 100644 --- a/client/src/__locales/uk.json +++ b/client/src/__locales/uk.json @@ -537,8 +537,8 @@ "statistics_enable": "Увімкнути статистику", "ignore_domains": "Ігноровані домени (по одному на рядок)", "ignore_domains_title": "Ігноровані домени", - "ignore_domains_desc_stats": "Запити для цих доменів в статистику не пишуться", - "ignore_domains_desc_query": "Запити для цих доменів не записуються до журналу запитів", + "ignore_domains_desc_stats": "Запити, які відповідають цим правилам, в статистику не пишуться", + "ignore_domains_desc_query": "Запити, які відповідають цим правилам, не записуються до журналу запитів", "interval_hours": "{{count}} година", "interval_hours_plural": "{{count}} годин(и)", "filters_configuration": "Конфігурація фільтрів", diff --git a/client/src/__locales/vi.json b/client/src/__locales/vi.json index bbc81890..b3c87c7a 100644 --- a/client/src/__locales/vi.json +++ b/client/src/__locales/vi.json @@ -537,8 +537,8 @@ "statistics_enable": "Bật thống kê", "ignore_domains": "Các miền bị bỏ qua (cách nhau bởi dòng mới)", "ignore_domains_title": "Các miền bị bỏ qua", - "ignore_domains_desc_stats": "Các truy vấn cho các miền này sẽ không được ghi vào thống kê", - "ignore_domains_desc_query": "Các truy vấn cho các miền này sẽ không được ghi vào nhật ký truy vấn", + "ignore_domains_desc_stats": "Các truy vấn phù hợp với các quy tắc này không được ghi vào số liệu thống kê", + "ignore_domains_desc_query": "Các truy vấn khớp với các quy tắc này không được ghi vào nhật ký truy vấn", "interval_hours": "{{count}} giờ", "interval_hours_plural": "{{count}} giờ", "filters_configuration": "Cấu hình bộ lọc", diff --git a/client/src/__locales/zh-cn.json b/client/src/__locales/zh-cn.json index 4c618a26..8863c285 100644 --- a/client/src/__locales/zh-cn.json +++ b/client/src/__locales/zh-cn.json @@ -537,8 +537,8 @@ "statistics_enable": "启用统计数据", "ignore_domains": "忽略的网域(以换行符分隔)", "ignore_domains_title": "被忽略的网域", - "ignore_domains_desc_stats": "这些网域的查询不在统计信息", - "ignore_domains_desc_query": "这些网域的查询不在查询日志记录", + "ignore_domains_desc_stats": "匹配这些规则的查询不在统计信息", + "ignore_domains_desc_query": "匹配这些规则的查询不在查询日志", "interval_hours": "{{count}} 小时", "interval_hours_plural": "{{count}} 小时", "filters_configuration": "过滤器配置", diff --git a/client/src/__locales/zh-tw.json b/client/src/__locales/zh-tw.json index 2b571f3c..cab91dd4 100644 --- a/client/src/__locales/zh-tw.json +++ b/client/src/__locales/zh-tw.json @@ -537,8 +537,8 @@ "statistics_enable": "啟用統計資料", "ignore_domains": "忽略的網域(以換行符分隔)", "ignore_domains_title": "被忽略的網域", - "ignore_domains_desc_stats": "這些網域的查詢不在統計資料", - "ignore_domains_desc_query": "這些網域的查詢不在查詢記錄", + "ignore_domains_desc_stats": "符合這些規則的查詢不會被記錄在統計資料中", + "ignore_domains_desc_query": "符合這些規則的查詢不會被寫入查詢記錄中", "interval_hours": "{{count}} 小時", "interval_hours_plural": "{{count}} 小時", "filters_configuration": "過濾器配置", diff --git a/client/src/components/Filters/Services/ScheduleForm/Modal.js b/client/src/components/Filters/Services/ScheduleForm/Modal.js index 429db9be..806146f9 100644 --- a/client/src/components/Filters/Services/ScheduleForm/Modal.js +++ b/client/src/components/Filters/Services/ScheduleForm/Modal.js @@ -72,31 +72,16 @@ export const Modal = ({ const onFormSubmit = (e) => { e.preventDefault(); - if (currentDay) { - const newSchedule = schedule; + const newSchedule = schedule; - Array.from(days).forEach((day) => { - newSchedule[day] = { - start: startTime, - end: endTime, - }; - }); - - onSubmit(newSchedule); - } else { - const newSchedule = { - time_zone: timezone, + Array.from(days).forEach((day) => { + newSchedule[day] = { + start: startTime, + end: endTime, }; + }); - Array.from(days).forEach((day) => { - newSchedule[day] = { - start: startTime, - end: endTime, - }; - }); - - onSubmit(newSchedule); - } + onSubmit(newSchedule); }; return ( @@ -133,7 +118,7 @@ export const Modal = ({ > {getShortDayName(t, day)} - )) } + ))}
diff --git a/go.mod b/go.mod index f82c2ca7..95431f07 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,7 @@ require ( github.com/google/gopacket v1.1.19 github.com/google/renameio/v2 v2.0.0 github.com/google/uuid v1.3.1 - github.com/insomniacslk/dhcp v0.0.0-20230816195147-b3ca2534940d + github.com/insomniacslk/dhcp v0.0.0-20230906122924-c71a6be05968 github.com/josharian/native v1.1.1-0.20230202152459-5c7d0dd6ab86 github.com/kardianos/service v1.2.2 github.com/mdlayher/ethernet v0.0.0-20220221185849-529eae5b6118 @@ -27,14 +27,14 @@ require ( // own code for that. Perhaps, use gopacket. github.com/mdlayher/raw v0.1.0 github.com/miekg/dns v1.1.55 - github.com/quic-go/quic-go v0.38.0 + github.com/quic-go/quic-go v0.38.1 github.com/stretchr/testify v1.8.4 github.com/ti-mo/netfilter v0.5.0 go.etcd.io/bbolt v1.3.7 - golang.org/x/crypto v0.12.0 - golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 - golang.org/x/net v0.14.0 - golang.org/x/sys v0.11.0 + golang.org/x/crypto v0.13.0 + golang.org/x/exp v0.0.0-20230905200255-921286631fa9 + golang.org/x/net v0.15.0 + golang.org/x/sys v0.12.0 gopkg.in/natefinch/lumberjack.v2 v2.2.1 gopkg.in/yaml.v3 v3.0.1 howett.net/plist v1.0.0 @@ -48,18 +48,18 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/golang/mock v1.6.0 // indirect - github.com/google/pprof v0.0.0-20230821062121-407c9e7a662f // indirect - github.com/mdlayher/socket v0.4.1 // indirect + github.com/google/pprof v0.0.0-20230906154834-20cde9067b3b // indirect + github.com/mdlayher/socket v0.5.0 // indirect github.com/onsi/ginkgo/v2 v2.12.0 // indirect github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/pierrec/lz4/v4 v4.1.18 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/quic-go/qpack v0.4.0 // indirect - github.com/quic-go/qtls-go1-20 v0.3.3 // indirect + github.com/quic-go/qtls-go1-20 v0.3.4 // indirect github.com/u-root/uio v0.0.0-20230305220412-3e8cd9d6bf63 // indirect golang.org/x/mod v0.12.0 // indirect golang.org/x/sync v0.3.0 // indirect - golang.org/x/text v0.12.0 // indirect - golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846 // indirect + golang.org/x/text v0.13.0 // indirect + golang.org/x/tools v0.13.0 // indirect ) diff --git a/go.sum b/go.sum index 5f527069..194b950f 100644 --- a/go.sum +++ b/go.sum @@ -43,16 +43,16 @@ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= -github.com/google/pprof v0.0.0-20230821062121-407c9e7a662f h1:pDhu5sgp8yJlEF/g6osliIIpF9K4F5jvkULXa4daRDQ= -github.com/google/pprof v0.0.0-20230821062121-407c9e7a662f/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= +github.com/google/pprof v0.0.0-20230906154834-20cde9067b3b h1:AIwVPxYWRaz7GetyrRj3ShUL5hr7WeuqF52G0g8Hne8= +github.com/google/pprof v0.0.0-20230906154834-20cde9067b3b/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/google/renameio/v2 v2.0.0 h1:UifI23ZTGY8Tt29JbYFiuyIU3eX+RNFtUwefq9qAhxg= github.com/google/renameio/v2 v2.0.0/go.mod h1:BtmJXm5YlszgC+TD4HOEEUFgkJP3nLxehU6hfe7jRt4= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hugelgupf/socketpair v0.0.0-20190730060125-05d35a94e714 h1:/jC7qQFrv8CrSJVmaolDVOxTfS9kc36uB6H40kdbQq8= -github.com/insomniacslk/dhcp v0.0.0-20230816195147-b3ca2534940d h1:Ka64cclWedOkGzm9M2/XYuwJUdmWRUozmsxW0PyKA3A= -github.com/insomniacslk/dhcp v0.0.0-20230816195147-b3ca2534940d/go.mod h1:7474bZ1YNCvarT6WFKie4kEET6J0KYRDC4XJqqXzQW4= +github.com/insomniacslk/dhcp v0.0.0-20230906122924-c71a6be05968 h1:uBiv5/8x42J7myumCdFuDOc5HnEXRK6eOtefwvE6+TQ= +github.com/insomniacslk/dhcp v0.0.0-20230906122924-c71a6be05968/go.mod h1:zmdm3sTSDP3vOOX3CEWRkkRHtKr1DxBx+J1OQFoDQQs= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/josharian/native v1.0.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= github.com/josharian/native v1.0.1-0.20221213033349-c1e37c09b531/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= @@ -73,8 +73,8 @@ github.com/mdlayher/packet v1.1.2/go.mod h1:GEu1+n9sG5VtiRE4SydOmX5GTwyyYlteZiFU github.com/mdlayher/raw v0.1.0 h1:K4PFMVy+AFsp0Zdlrts7yNhxc/uXoPVHi9RzRvtZF2Y= github.com/mdlayher/raw v0.1.0/go.mod h1:yXnxvs6c0XoF/aK52/H5PjsVHmWBCFfZUfoh/Y5s9Sg= github.com/mdlayher/socket v0.2.1/go.mod h1:QLlNPkFR88mRUNQIzRBMfXxwKal8H7u1h3bL1CV+f0E= -github.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U= -github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA= +github.com/mdlayher/socket v0.5.0 h1:ilICZmJcQz70vrWVes1MFera4jGiWNocSkykwwoy3XI= +github.com/mdlayher/socket v0.5.0/go.mod h1:WkcBFfvyG8QENs5+hfQPl1X6Jpd2yeLIYgrGFmJiJxI= github.com/miekg/dns v1.1.55 h1:GoQ4hpsj0nFLYe+bWiCToyrBEJXkQfOOIvFGFy0lEgo= github.com/miekg/dns v1.1.55/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= @@ -94,10 +94,10 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= -github.com/quic-go/qtls-go1-20 v0.3.3 h1:17/glZSLI9P9fDAeyCHBFSWSqJcwx1byhLwP5eUIDCM= -github.com/quic-go/qtls-go1-20 v0.3.3/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k= -github.com/quic-go/quic-go v0.38.0 h1:T45lASr5q/TrVwt+jrVccmqHhPL2XuSyoCLVCpfOSLc= -github.com/quic-go/quic-go v0.38.0/go.mod h1:MPCuRq7KBK2hNcfKj/1iD1BGuN3eAYMeNxp3T42LRUg= +github.com/quic-go/qtls-go1-20 v0.3.4 h1:MfFAPULvst4yoMgY9QmtpYmfij/em7O8UUi+bNVm7Cg= +github.com/quic-go/qtls-go1-20 v0.3.4/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k= +github.com/quic-go/quic-go v0.38.1 h1:M36YWA5dEhEeT+slOu/SwMEucbYd0YFidxG3KlGPZaE= +github.com/quic-go/quic-go v0.38.1/go.mod h1:ijnZM7JsFIkp4cRyjxJNIzdSfCLmUMg9wdyhGmg+SN4= github.com/shirou/gopsutil/v3 v3.23.7 h1:C+fHO8hfIppoJ1WdsVm1RoI0RwXoNdfTK7yWXV0wVj4= github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -119,10 +119,10 @@ go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= -golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= -golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 h1:m64FZMko/V45gv0bNmrNYoDEq8U5YUhetc9cBWKS1TQ= -golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63/go.mod h1:0v4NqG35kSWCMzLaMeX+IQrlSnVE/bqGSyC2cz/9Le8= +golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -135,8 +135,8 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= @@ -155,19 +155,19 @@ golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.1-0.20230131160137-e7d7f63158de/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846 h1:Vve/L0v7CXXuxUmaMGIEK/dEeq7uiqb5qBgQrZzIE7E= -golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= +golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/internal/confmigrate/migrations_test.go b/internal/confmigrate/migrations_internal_test.go similarity index 100% rename from internal/confmigrate/migrations_test.go rename to internal/confmigrate/migrations_internal_test.go diff --git a/internal/confmigrate/migrator_test.go b/internal/confmigrate/migrator_test.go index 5cc8f3fb..27ac0592 100644 --- a/internal/confmigrate/migrator_test.go +++ b/internal/confmigrate/migrator_test.go @@ -3,7 +3,7 @@ package confmigrate_test import ( "io/fs" "os" - "path/filepath" + "path" "testing" "github.com/AdguardTeam/AdGuardHome/internal/confmigrate" @@ -12,6 +12,9 @@ import ( yaml "gopkg.in/yaml.v3" ) +// testdata is a virtual filesystem containing test data. +var testdata = os.DirFS("testdata") + // getField returns the value located at the given indexes in the given object. // It fails the test if the value is not found or of the expected type. The // indexes can be either strings or integers, and are interpreted as map keys or @@ -42,9 +45,6 @@ func getField[T any](t require.TestingT, obj any, indexes ...any) (val T) { return obj.(T) } -// testdata is a virtual filesystem containing test data. -var testdata = os.DirFS("testdata") - func TestMigrateConfig_Migrate(t *testing.T) { const ( inputFileName = "input.yml" @@ -189,10 +189,10 @@ func TestMigrateConfig_Migrate(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - body, err := fs.ReadFile(testdata, filepath.Join(t.Name(), inputFileName)) + body, err := fs.ReadFile(testdata, path.Join(t.Name(), inputFileName)) require.NoError(t, err) - wantBody, err := fs.ReadFile(testdata, filepath.Join(t.Name(), outputFileName)) + wantBody, err := fs.ReadFile(testdata, path.Join(t.Name(), outputFileName)) require.NoError(t, err) migrator := confmigrate.New(&confmigrate.Config{ diff --git a/internal/dhcpd/http_unix_test.go b/internal/dhcpd/http_unix_test.go index 2a569f4e..07dd0169 100644 --- a/internal/dhcpd/http_unix_test.go +++ b/internal/dhcpd/http_unix_test.go @@ -54,7 +54,7 @@ func TestServer_handleDHCPStatus(t *testing.T) { assert.JSONEq(t, b.String(), w.Body.String()) } - // defaultResponse is a helper that returs the response with default + // defaultResponse is a helper that returns the response with default // configuration. defaultResponse := func() *dhcpStatusResponse { conf4 := defaultV4ServerConf() diff --git a/internal/dnsforward/dnsforward.go b/internal/dnsforward/dnsforward.go index f5fd5e5c..c5abbfad 100644 --- a/internal/dnsforward/dnsforward.go +++ b/internal/dnsforward/dnsforward.go @@ -614,6 +614,7 @@ func (s *Server) Prepare(conf *ServerConfig) (err error) { // setupFallbackDNS initializes the fallback DNS servers. func (s *Server) setupFallbackDNS() (err error) { fallbacks := s.conf.FallbackDNS + fallbacks = stringutil.FilterOut(fallbacks, IsCommentOrEmpty) if len(fallbacks) == 0 { return nil } diff --git a/internal/dnsforward/dnsforward_test.go b/internal/dnsforward/dnsforward_test.go index 8417a0df..f315a661 100644 --- a/internal/dnsforward/dnsforward_test.go +++ b/internal/dnsforward/dnsforward_test.go @@ -372,6 +372,27 @@ func TestServer_timeout(t *testing.T) { }) } +func TestServer_Prepare_fallbacks(t *testing.T) { + srvConf := &ServerConfig{ + Config: Config{ + FallbackDNS: []string{ + "#tls://1.1.1.1", + "8.8.8.8", + }, + EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, + }, + } + + s, err := NewServer(DNSCreateParams{}) + require.NoError(t, err) + + err = s.Prepare(srvConf) + require.NoError(t, err) + require.NotNil(t, s.dnsProxy.Fallbacks) + + assert.Len(t, s.dnsProxy.Fallbacks.Upstreams, 1) +} + func TestServerWithProtectionDisabled(t *testing.T) { s := createTestServer(t, &filtering.Config{ BlockingMode: filtering.BlockingModeDefault, diff --git a/internal/dnsforward/filter.go b/internal/dnsforward/filter.go index 6f551e59..d80f022e 100644 --- a/internal/dnsforward/filter.go +++ b/internal/dnsforward/filter.go @@ -11,6 +11,7 @@ import ( "github.com/AdguardTeam/dnsproxy/proxy" "github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/netutil" + "github.com/AdguardTeam/urlfilter/rules" "github.com/miekg/dns" "golang.org/x/exp/slices" ) @@ -140,15 +141,15 @@ func (s *Server) filterRewritten( // checkHostRules checks the host against filters. It is safe for concurrent // use. -func (s *Server) checkHostRules(host string, rrtype uint16, setts *filtering.Settings) ( - r *filtering.Result, - err error, -) { +func (s *Server) checkHostRules( + host string, + rrtype rules.RRType, + setts *filtering.Settings, +) (r *filtering.Result, err error) { s.serverLock.RLock() defer s.serverLock.RUnlock() - var res filtering.Result - res, err = s.dnsFilter.CheckHostRules(host, rrtype, setts) + res, err := s.dnsFilter.CheckHostRules(host, rrtype, setts) if err != nil { return nil, err } @@ -156,20 +157,21 @@ func (s *Server) checkHostRules(host string, rrtype uint16, setts *filtering.Set return &res, err } -// filterDNSResponse checks each resource record of the response's answer -// section from pctx and returns a non-nil res if at least one of canonical -// names or IP addresses in it matches the filtering rules. -func (s *Server) filterDNSResponse( - pctx *proxy.DNSContext, - setts *filtering.Settings, -) (res *filtering.Result, err error) { +// filterDNSResponse checks each resource record of answer section of +// dctx.proxyCtx.Res. It sets dctx.result and dctx.origResp if at least one of +// canonical names, IP addresses, or HTTPS RR hints in it matches the filtering +// rules, as well as sets dctx.proxyCtx.Res to the filtered response. +func (s *Server) filterDNSResponse(dctx *dnsContext) (err error) { + setts := dctx.setts if !setts.FilteringEnabled { - return nil, nil + return nil } - for _, a := range pctx.Res.Answer { + var res *filtering.Result + pctx := dctx.proxyCtx + for i, a := range pctx.Res.Answer { host := "" - var rrtype uint16 + var rrtype rules.RRType switch a := a.(type) { case *dns.CNAME: host = strings.TrimSuffix(a.Target, ".") @@ -195,18 +197,19 @@ func (s *Server) filterDNSResponse( log.Debug("dnsforward: checked %s %s for %s", dns.Type(rrtype), host, a.Header().Name) if err != nil { - return nil, err - } else if res == nil { - continue - } else if res.IsFiltered { + return fmt.Errorf("filtering answer at index %d: %w", i, err) + } else if res != nil && res.IsFiltered { + dctx.result = res + dctx.origResp = pctx.Res pctx.Res = s.genDNSFilterMessage(pctx, res) + log.Debug("dnsforward: matched %q by response: %q", pctx.Req.Question[0].Name, host) - return res, nil + break } } - return nil, nil + return nil } // removeIPv6Hints deletes IPv6 hints from RR values. diff --git a/internal/dnsforward/filter_test.go b/internal/dnsforward/filter_test.go index 88a316e8..fe64cdf0 100644 --- a/internal/dnsforward/filter_test.go +++ b/internal/dnsforward/filter_test.go @@ -328,26 +328,34 @@ func TestHandleDNSRequest_filterDNSResponse(t *testing.T) { Addr: &net.UDPAddr{IP: net.IP{127, 0, 0, 1}, Port: 1}, } - res, rErr := s.filterDNSResponse(pctx, &filtering.Settings{ - ProtectionEnabled: true, - FilteringEnabled: true, - }) - require.NoError(t, rErr) + dctx := &dnsContext{ + proxyCtx: pctx, + setts: &filtering.Settings{ + ProtectionEnabled: true, + FilteringEnabled: true, + }, + } + fltErr := s.filterDNSResponse(dctx) + require.NoError(t, fltErr) + + res := dctx.result if tc.wantRule == "" { assert.Nil(t, res) return } - want := &filtering.Result{ + wantResult := &filtering.Result{ IsFiltered: true, Reason: filtering.FilteredBlockList, Rules: []*filtering.ResultRule{{ Text: tc.wantRule, }}, } - assert.Equal(t, want, res) + + assert.Equal(t, wantResult, res) + assert.Equal(t, resp, dctx.origResp) }) } } diff --git a/internal/dnsforward/http.go b/internal/dnsforward/http.go index 3827e101..1ceac032 100644 --- a/internal/dnsforward/http.go +++ b/internal/dnsforward/http.go @@ -749,6 +749,7 @@ func (s *Server) handleTestUpstreamDNS(w http.ResponseWriter, r *http.Request) { } req.Upstreams = stringutil.FilterOut(req.Upstreams, IsCommentOrEmpty) + req.FallbackDNS = stringutil.FilterOut(req.FallbackDNS, IsCommentOrEmpty) req.PrivateUpstreams = stringutil.FilterOut(req.PrivateUpstreams, IsCommentOrEmpty) upsNum := len(req.Upstreams) + len(req.FallbackDNS) + len(req.PrivateUpstreams) diff --git a/internal/dnsforward/http_test.go b/internal/dnsforward/http_test.go index 7987d94e..c44f943c 100644 --- a/internal/dnsforward/http_test.go +++ b/internal/dnsforward/http_test.go @@ -577,6 +577,14 @@ func TestServer_HandleTestUpstreamDNS(t *testing.T) { badUps + ` over tcp: dns: id mismatch`, }, name: "fallback_broken", + }, { + body: map[string]any{ + "fallback_dns": []string{goodUps, "#this.is.comment"}, + }, + wantResp: map[string]any{ + goodUps: "OK", + }, + name: "fallback_comment_mix", }} for _, tc := range testCases { diff --git a/internal/dnsforward/process.go b/internal/dnsforward/process.go index 4780c856..0b572d8b 100644 --- a/internal/dnsforward/process.go +++ b/internal/dnsforward/process.go @@ -671,11 +671,11 @@ func (s *Server) processLocalPTR(dctx *dnsContext) (rc resultCode) { } // Apply filtering logic -func (s *Server) processFilteringBeforeRequest(ctx *dnsContext) (rc resultCode) { +func (s *Server) processFilteringBeforeRequest(dctx *dnsContext) (rc resultCode) { log.Debug("dnsforward: started processing filtering before req") defer log.Debug("dnsforward: finished processing filtering before req") - if ctx.proxyCtx.Res != nil { + if dctx.proxyCtx.Res != nil { // Go on since the response is already set. return resultCodeSuccess } @@ -684,8 +684,8 @@ func (s *Server) processFilteringBeforeRequest(ctx *dnsContext) (rc resultCode) defer s.serverLock.RUnlock() var err error - if ctx.result, err = s.filterDNSRequest(ctx); err != nil { - ctx.err = err + if dctx.result, err = s.filterDNSRequest(dctx); err != nil { + dctx.err = err return resultCodeError } @@ -857,7 +857,6 @@ func (s *Server) processFilteringAfterResponse(dctx *dnsContext) (rc resultCode) log.Debug("dnsforward: started processing filtering after resp") defer log.Debug("dnsforward: finished processing filtering after resp") - pctx := dctx.proxyCtx switch res := dctx.result; res.Reason { case filtering.NotFilteredAllowList: return resultCodeSuccess @@ -871,6 +870,7 @@ func (s *Server) processFilteringAfterResponse(dctx *dnsContext) (rc resultCode) return resultCodeSuccess } + pctx := dctx.proxyCtx pctx.Req.Question[0], pctx.Res.Question[0] = dctx.origQuestion, dctx.origQuestion if len(pctx.Res.Answer) > 0 { rr := s.genAnswerCNAME(pctx.Req, res.CanonName) @@ -880,13 +880,13 @@ func (s *Server) processFilteringAfterResponse(dctx *dnsContext) (rc resultCode) return resultCodeSuccess default: - return s.filterAfterResponse(dctx, pctx) + return s.filterAfterResponse(dctx) } } // filterAfterResponse returns the result of filtering the response that wasn't // explicitly allowed or rewritten. -func (s *Server) filterAfterResponse(dctx *dnsContext, pctx *proxy.DNSContext) (res resultCode) { +func (s *Server) filterAfterResponse(dctx *dnsContext) (res resultCode) { // Check the response only if it's from an upstream. Don't check the // response if the protection is disabled since dnsrewrite rules aren't // applied to it anyway. @@ -894,17 +894,12 @@ func (s *Server) filterAfterResponse(dctx *dnsContext, pctx *proxy.DNSContext) ( return resultCodeSuccess } - result, err := s.filterDNSResponse(pctx, dctx.setts) + err := s.filterDNSResponse(dctx) if err != nil { dctx.err = err return resultCodeError } - if result != nil { - dctx.result = result - dctx.origResp = pctx.Res - } - return resultCodeSuccess } diff --git a/internal/home/config.go b/internal/home/config.go index 0be84753..7a70b893 100644 --- a/internal/home/config.go +++ b/internal/home/config.go @@ -282,6 +282,12 @@ type statsConfig struct { Enabled bool `yaml:"enabled"` } +// Default block host constants. +const ( + defaultSafeBrowsingBlockHost = "standard-block.dns.adguard.com" + defaultParentalBlockHost = "family-block.dns.adguard.com" +) + // config is the global configuration structure. // // TODO(a.garipov, e.burkov): This global is awful and must be removed. @@ -389,6 +395,9 @@ var config = &configuration{ Schedule: schedule.EmptyWeekly(), IDs: []string{}, }, + + ParentalBlockHost: defaultParentalBlockHost, + SafeBrowsingBlockHost: defaultSafeBrowsingBlockHost, }, DHCP: &dhcpd.ServerConfig{ LocalDomainName: "lan", diff --git a/internal/home/home.go b/internal/home/home.go index eae9422a..613e6429 100644 --- a/internal/home/home.go +++ b/internal/home/home.go @@ -359,9 +359,6 @@ func setupDNSFilteringConf(conf *filtering.Config) (err error) { pcService = "parental control" defaultParentalServer = `https://family.adguard-dns.com/dns-query` pcTXTSuffix = `pc.dns.adguard.com.` - - defaultSafeBrowsingBlockHost = "standard-block.dns.adguard.com" - defaultParentalBlockHost = "family-block.dns.adguard.com" ) conf.EtcHosts = Context.etcHosts @@ -398,8 +395,15 @@ func setupDNSFilteringConf(conf *filtering.Config) (err error) { CacheSize: conf.SafeBrowsingCacheSize, }) - if conf.SafeBrowsingBlockHost != "" { - conf.SafeBrowsingBlockHost = defaultSafeBrowsingBlockHost + // Protect against invalid configuration, see #6181. + // + // TODO(a.garipov): Validate against an empty host instead of setting it to + // default. + if conf.SafeBrowsingBlockHost == "" { + host := defaultSafeBrowsingBlockHost + log.Info("%s: warning: empty blocking host; using default: %q", sbService, host) + + conf.SafeBrowsingBlockHost = host } parUps, err := upstream.AddressToUpstream(defaultParentalServer, upsOpts) @@ -415,8 +419,15 @@ func setupDNSFilteringConf(conf *filtering.Config) (err error) { CacheSize: conf.ParentalCacheSize, }) - if conf.ParentalBlockHost != "" { - conf.ParentalBlockHost = defaultParentalBlockHost + // Protect against invalid configuration, see #6181. + // + // TODO(a.garipov): Validate against an empty host instead of setting it to + // default. + if conf.ParentalBlockHost == "" { + host := defaultParentalBlockHost + log.Info("%s: warning: empty blocking host; using default: %q", pcService, host) + + conf.ParentalBlockHost = host } conf.SafeSearchConf.CustomResolver = safeSearchResolver{} diff --git a/internal/stats/unit.go b/internal/stats/unit.go index 31fc3984..60481d15 100644 --- a/internal/stats/unit.go +++ b/internal/stats/unit.go @@ -72,7 +72,7 @@ type Entry struct { Time time.Duration } -// validate returs an error if entry is not valid. +// validate returns an error if entry is not valid. func (e *Entry) validate() (err error) { switch { case e.Result == 0: @@ -295,7 +295,7 @@ func loadUnitFromDB(tx *bbolt.Tx, id uint32) (udb *unitDB) { return udb } -// deserealize assigns the appropriate values from udb to u. u must not be nil. +// deserialize assigns the appropriate values from udb to u. u must not be nil. // It's safe for concurrent use. func (u *unit) deserialize(udb *unitDB) { if udb == nil { diff --git a/internal/updater/updater.go b/internal/updater/updater.go index a3680506..ff76b978 100644 --- a/internal/updater/updater.go +++ b/internal/updater/updater.go @@ -113,9 +113,9 @@ func (u *Updater) Update(firstRun bool) (err error) { log.Info("updater: updating") defer func() { if err != nil { - log.Error("updater: failed: %v", err) + log.Info("updater: failed") } else { - log.Info("updater: finished") + log.Info("updater: finished successfully") } }() @@ -240,18 +240,24 @@ func (u *Updater) unpack() error { // check returns an error if the configuration file couldn't be used with the // version of AdGuard Home just downloaded. -func (u *Updater) check() error { +func (u *Updater) check() (err error) { log.Debug("updater: checking configuration") - err := copyFile(u.confName, filepath.Join(u.updateDir, "AdGuardHome.yaml")) + err = copyFile(u.confName, filepath.Join(u.updateDir, "AdGuardHome.yaml")) if err != nil { return fmt.Errorf("copyFile() failed: %w", err) } + const format = "executing configuration check command: %w %d:\n" + + "below is the output of configuration check:\n" + + "%s" + + "end of the output" + cmd := exec.Command(u.updateExeName, "--check-config") - err = cmd.Run() - if err != nil || cmd.ProcessState.ExitCode() != 0 { - return fmt.Errorf("exec.Command(): %s %d", err, cmd.ProcessState.ExitCode()) + out, err := cmd.CombinedOutput() + code := cmd.ProcessState.ExitCode() + if err != nil || code != 0 { + return fmt.Errorf(format, err, code, out) } return nil diff --git a/main.go b/main.go index b0c10213..85c2795e 100644 --- a/main.go +++ b/main.go @@ -1,3 +1,5 @@ +//go:build !next + package main import ( diff --git a/scripts/make/go-build.sh b/scripts/make/go-build.sh index 9f148341..7f629cd8 100644 --- a/scripts/make/go-build.sh +++ b/scripts/make/go-build.sh @@ -128,7 +128,13 @@ export CGO_ENABLED GO111MODULE='on' export GO111MODULE -tags_flags='--tags=' +# Build the new binary if requested. +if [ "${NEXTAPI:-0}" -eq '0' ] +then + tags_flags='--tags=' +else + tags_flags='--tags=next' +fi readonly tags_flags if [ "$verbose" -gt '0' ] diff --git a/scripts/translations/main.go b/scripts/translations/main.go index 800c36ee..cff6d03c 100644 --- a/scripts/translations/main.go +++ b/scripts/translations/main.go @@ -30,7 +30,7 @@ const ( twoskyURI = "https://twosky.int.agrd.dev/api/v1" readLimit = 1 * 1024 * 1024 - uploadTimeout = 10 * time.Second + uploadTimeout = 20 * time.Second ) // blockerLangCodes is the codes of languages which need to be fully translated.