Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .twosky.json
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@
"project_id": "hostlists-registry",
"base_locale": "en",
"localizable_files": [
"client/src/__locales-services/en.json"
"client/src/__locales-services/services.json"
],
"languages": {
"ar": "العربية",
Expand Down
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ See also the [v0.107.78 GitHub milestone][ms-v0.107.78].

- The parsing of the `ech` parameter in DNS rewrite rules for the HTTPS record type ([#8276]).

- Validation of the `answer` field in DNS rewrite rules in case it is represented as CNAME.

- Blocked services check on the Custom filtering rules page does not work properly without specifying of a client.

[#7955]: https://github.com/AdguardTeam/AdGuardHome/issues/7955
Expand Down
2 changes: 1 addition & 1 deletion client/src/__locales/ar.json
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,7 @@
"filters_enable": "تفعيل الفلاتر",
"filters_interval": "الفاصل الزمني لتحديث الفلاتر",
"fix": "يصلح",
"for_last_days": "لآخر {{value}} يوم",
"for_last_days": "لآخر {{count}} يوم",
"for_last_days_plural": "لآخر {{count}} ايام",
"for_last_hours": "لآخر {{count}} ساعة",
"for_last_hours_plural": "لآخر {{count}} ساعة",
Expand Down
4 changes: 2 additions & 2 deletions client/src/__locales/be.json
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
"blocking_mode_custom_ip": "Карыстальніцкі IP: адказвае на ўручную наладжаны IP-адрас",
"blocking_mode_default": "Стандартны: Адказвае з нулёвым IP-адрасам (0.0.0.0 для A; :: для AAAA), калі заблакавана правілам у стылі Adblock; адказвае з IP-адрасам, паказаным у правіле, калі заблакавана правілам у стылі /etc/hosts-style",
"blocking_mode_null_ip": "Нулёвы IP: Адказвае з нулёвым IP-адрасам (0.0.0.0 для A; :: для AAAA)",
"blocking_mode_nxdomain": "NXDOMAIN: Адказвае з кодам NXDOMAIN\n",
"blocking_mode_nxdomain": "NXDOMAIN: Адказвае з кодам NXDOMAIN",
"blocking_mode_refused": "REFUSED: Адказаць з кодам REFUSED",
"blocklist": "Спіс заблакіраваных",
"bootstrap_dns": "Bootstrap сервер DNS",
Expand Down Expand Up @@ -445,7 +445,7 @@
"install_devices_ios_list_1": "Увайдзіце ў меню налад прылады.",
"install_devices_ios_list_2": "Выберыце Wi-Fi у меню злева (немагчыма сканфігурыраваць DNS для мабільнай сеткі).",
"install_devices_ios_list_3": "Націсніце на назву актыўнай у дадзены момант сеткі.",
"install_devices_ios_list_4": "У поле «DNS» увядзіце ўвядзіце адрасы AdGuard Home.",
"install_devices_ios_list_4": "У поле «DNS» увядзіце адрасы AdGuard Home.",
"install_devices_macos_list_1": "Клікніце па абразку Apple і перайдзіце ў Сістэмныя налады.",
"install_devices_macos_list_2": "Націсніце на значок «Сетка».",
"install_devices_macos_list_3": "Выберыце першае падключэнне ў сваім спісе і націсніце кнопку «Дадаткова».",
Expand Down
10 changes: 5 additions & 5 deletions client/src/__locales/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@
"form_enter_id": "Kennung eingeben",
"form_enter_ip": "IP-Adresse eingeben",
"form_enter_mac": "MAC-Adresse eingeben",
"form_enter_rate_limit": "Begrenzungswert eingeben",
"form_enter_rate_limit": "Ratenlimit eingeben",
"form_enter_rate_limit_subnet_len": "Geben Sie die Subnetzpräfixlänge für die Ratebegrenzung ein",
"form_enter_subnet_ip": "IP-Adresse zum Subnetz „{{cidr}}“ hinzufügen",
"form_enter_upstream_timeout": "Geben Sie die Timeout-Dauer des Upstream-Servers in Sekunden ein",
Expand Down Expand Up @@ -570,16 +570,16 @@
"query_log_retention_confirm": "Möchten Sie die Abfrageprotokollrotation wirklich ändern? Wenn Sie den Intervallwert verringern, gehen einige Daten verloren",
"query_log_strict_search": "Doppelte Anführungszeichen für die strikte Suche verwenden",
"query_log_updated": "Das Abfrageprotokoll wurde erfolgreich aktualisiert",
"rate_limit": "Begrenzungswert",
"rate_limit": "Ratenlimit",
"rate_limit_desc": "Die Anzahl der Anfragen pro Sekunde, die ein einzelner Client stellen darf. Das Setzen auf 0 bedeutet keine Begrenzung.",
"rate_limit_subnet_len_ipv4": "Länge des Subnetzpräfixes für IPv4-Adressen",
"rate_limit_subnet_len_ipv4_desc": "Subnetpräfixlänge für IPv4-Adressen, die für die Ratebegrenzung verwendet werden. Der Standardwert ist 24",
"rate_limit_subnet_len_ipv4_desc": "Subnetz-Präfixlänge für IPv4-Adressen, die für das Ratenlimit verwendet wird. Der Standardwert ist 24",
"rate_limit_subnet_len_ipv4_error": "Die Subnetzpräfixlänge für IPv4-Adressen sollte zwischen 0 und 32 liegen",
"rate_limit_subnet_len_ipv6": "Subnetzpräfixlänge für IPv6-Adressen",
"rate_limit_subnet_len_ipv6_desc": "Subnetpräfixlänge für IPv6-Adressen, die für die Ratebegrenzung verwendet werden. Der Standardwert ist 56",
"rate_limit_subnet_len_ipv6_desc": "Subnetz-Präfixlänge für IPv6-Adressen, die für das Ratenlimit verwendet wird. Der Standardwert ist 56",
"rate_limit_subnet_len_ipv6_error": "Die Subnetzpräfixlänge für IPv6-Adressen sollte zwischen 0 und 128 liegen",
"rate_limit_whitelist": "Zulassungsliste für die Ratebegrenzung",
"rate_limit_whitelist_desc": "IP-Adressen, die von der Ratebegrenzung ausgeschlossen sind",
"rate_limit_whitelist_desc": "IP-Adressen, die vom Ratenlimit ausgenommen sind",
"rate_limit_whitelist_placeholder": "Geben Sie eine IP-Adresse - eine pro Zeile",
"refresh_btn": "Aktualisieren",
"refresh_statics": "Statistiken aktualisieren",
Expand Down
2 changes: 1 addition & 1 deletion client/src/__locales/fa.json
Original file line number Diff line number Diff line change
Expand Up @@ -481,7 +481,7 @@
"install_welcome_title": "به AdGuard Home خوش آمدید!",
"interval_24_hour": "24 ساعت",
"interval_6_hour": "6 ساعت",
"interval_days": "{{value}} روز",
"interval_days": "{{count}} روز",
"interval_days_plural": "{{count}} روز",
"interval_hours": "{{count}} ساعت",
"interval_hours_plural": "{{count}} ساعت",
Expand Down
4 changes: 2 additions & 2 deletions client/src/__locales/id.json
Original file line number Diff line number Diff line change
Expand Up @@ -532,9 +532,9 @@
"number_of_dns_query_blocked_24_hours": "Jumlah permintaan DNS yang diblokir oleh filter adblock dan daftar hitam host",
"number_of_dns_query_blocked_24_hours_adult": "Jumlah situs web dewasa yang diblokir",
"number_of_dns_query_blocked_24_hours_by_sec": "Jumlah permintaan DNS yang diblokir oleh modul keamanan penjelajahan AdGuard",
"number_of_dns_query_days": "Jumlah kueri DNS diproses selama {{value}} hari terakhir",
"number_of_dns_query_days": "Jumlah kueri DNS diproses selama {{count}} hari terakhir",
"number_of_dns_query_days_plural": "Jumlah kueri DNS yang diproses selama {{count}} hari terakhir",
"number_of_dns_query_hours": "Jumlah kueri DNS diproses selama {{{count}} jam terakhir",
"number_of_dns_query_hours": "Jumlah kueri DNS diproses selama {{count}} jam terakhir",
"number_of_dns_query_hours_plural": "Jumlah kueri DNS diproses selama {{count}} jam terakhir",
"number_of_dns_query_to_safe_search": "Jumlah perminataan DNS ke mesin pencari yang dipaksa Pencarian Aman",
"nxdomain": "NXDOMAIN",
Expand Down
2 changes: 1 addition & 1 deletion client/src/__locales/ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -445,7 +445,7 @@
"install_devices_ios_list_1": "Войдите в меню настроек устройства.",
"install_devices_ios_list_2": "Выберите пункт «Wi-Fi» (для мобильных сетей ручная настройка DNS невозможна).",
"install_devices_ios_list_3": "Нажмите на название сети, к которой устройство подключено в данный момент.",
"install_devices_ios_list_4": "В поле «DNS» введите введите адреса AdGuard Home.",
"install_devices_ios_list_4": "В поле «DNS» введите адреса AdGuard Home.",
"install_devices_macos_list_1": "Кликните на иконку Apple и перейдите в «Системные настройки».",
"install_devices_macos_list_2": "Кликните на иконку «Сеть».",
"install_devices_macos_list_3": "Выберите первое подключение в списке и нажмите кнопку «Дополнительно».",
Expand Down
2 changes: 1 addition & 1 deletion client/src/__locales/si-lk.json
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,7 @@
"form_error_ip_format": "අ.ජා.කෙ. (IP) ලිපිනය වලංගු නොවේ",
"form_error_mac_format": "මා.ප්‍ර.පා. ලිපිනය වලංගු නොවේ",
"form_error_password": "මුරපදය නොගැළපේ",
"form_error_password_length": "මුරපදය අකුරු {{min}} සහ {{value}} ක් අතර විය යුතුය",
"form_error_password_length": "මුරපදය අකුරු {{min}} සහ {{max}} ක් අතර විය යුතුය",
"form_error_port": "වලංගු තොටක අගයක් යොදන්න",
"form_error_port_range": "80-65535 පරාසය හි තොටක අගයක් ඇතුල් කරන්න",
"form_error_port_unsafe": "මෙය අනාරක්‍ෂිත තොටකි",
Expand Down
2 changes: 1 addition & 1 deletion client/src/__locales/tr.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
"apply_btn": "Uygula",
"auto_clients_desc": "AdGuard Home'u kullanan veya kullanabilecek cihazların IP adresleri hakkında bilgiler. Bu bilgiler, ana bilgisayar dosyaları, ters DNS sorguları ve çeşitli diğer kaynaklardan toplanmaktadır.",
"auto_clients_title": "Bilinen istemciler",
"autofix_warning_list": "Şu görevleri gerçekleştirir: <0>Sistem DNSStubListener'ı devre dışı bırakır</0> <0>DNS sunucu adresini 127.0.0.1 olarak ayarlar</0> <0>/etc/resolv.conf'un sembolik bağlantı hedefini /run/systemd/resolve/resolv.conf ile değiştirir<0> <0>DNSStubListener'ı durdurur (systemd-resolved hizmeti yeniden yükler)</0>",
"autofix_warning_list": "Şu görevleri gerçekleştirir: <0>Sistem DNSStubListener'ı devre dışı bırakır</0> <0>DNS sunucu adresini 127.0.0.1 olarak ayarlar</0> <0>/etc/resolv.conf'un sembolik bağlantı hedefini /run/systemd/resolve/resolv.conf ile değiştirir</0> <0>DNSStubListener'ı durdurur (systemd-resolved hizmeti yeniden yükler)</0>",
"autofix_warning_result": "Sonuç olarak, sisteminizden gelen tüm DNS istekleri varsayılan olarak AdGuard Home tarafından işlenecektir.",
"autofix_warning_text": "\"Düzelt\" öğesine tıklarsanız, AdGuard Home, sisteminizi AdGuard Home DNS sunucusunu kullanacak şekilde yapılandıracaktır.",
"average_processing_time": "Ortalama işlem süresi",
Expand Down
2 changes: 1 addition & 1 deletion client/src/__locales/zh-hk.json
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,7 @@
"form_error_ip_format": "無效的 IP 格式",
"form_error_mac_format": "無效的 「MAC 位址」格式",
"form_error_password": "密碼不相符",
"form_error_password_length": "密碼必須至少 {{value}} 個字元長度",
"form_error_password_length": "密碼長度必須介於 {{min}} 至 {{max}} 個字元之間",
"form_error_port": "輸入有效的連接埠",
"form_error_port_range": "輸入範圍 80-65535 中的值",
"form_error_port_unsafe": "這個連接埠不安全",
Expand Down
4 changes: 0 additions & 4 deletions internal/filtering/rewritehttp.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,6 @@ func (d *DNSFilter) handleRewriteAdd(w http.ResponseWriter, r *http.Request) {

err = rw.normalize(ctx, l)
if err != nil {
// Shouldn't happen currently, since normalize only returns a non-nil
// error when a rewrite is nil, but be change-proof.
aghhttp.ErrorAndLog(ctx, l, r, w, http.StatusBadRequest, "normalizing: %s", err)

return
Expand Down Expand Up @@ -173,8 +171,6 @@ func (d *DNSFilter) handleRewriteUpdate(w http.ResponseWriter, r *http.Request)

err = rwAdd.normalize(ctx, l)
if err != nil {
// Shouldn't happen currently, since normalize only returns a non-nil
// error when a rewrite is nil, but be change-proof.
aghhttp.ErrorAndLog(ctx, l, r, w, http.StatusBadRequest, "normalizing: %s", err)

return
Expand Down
17 changes: 17 additions & 0 deletions internal/filtering/rewritehttp_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ const (
decodeUpdateErrorMsg = decodeMsg + " filtering.rewriteUpdateJSON\n"
)

// TODO(m.kazantsev): Improve maintainability.
func TestDNSFilter_HandleRewriteHTTP(t *testing.T) {
t.Parallel()

Expand All @@ -66,6 +67,7 @@ func TestDNSFilter_HandleRewriteHTTP(t *testing.T) {
updAnswer = "upd.rewrite"
invDomain = "inv.local"
invAnswer = "inv.rewrite"
invalidDomain = "invalid_domain"
)

testRewrites := []*rewriteJSON{
Expand Down Expand Up @@ -148,6 +150,21 @@ func TestDNSFilter_HandleRewriteHTTP(t *testing.T) {
wantStatus: http.StatusBadRequest,
wantBody: decodeErrorMsg,
wantList: testRewrites,
}, {
name: "add_error_invalid_cname",
url: addURL,
method: http.MethodPost,
reqData: rewriteJSON{
Domain: addDomain,
Answer: invalidDomain,
Enabled: aghalg.NBTrue,
},
wantConfMod: false,
wantStatus: http.StatusBadRequest,
wantBody: `normalizing: invalid CNAME target "` + invalidDomain + `": bad domain name ` +
`"` + invalidDomain + `": bad top-level domain name label "` + invalidDomain +
`": bad top-level domain name label rune '_'` + "\n",
wantList: testRewrites,
}, {
name: "delete",
url: deleteURL,
Expand Down
10 changes: 10 additions & 0 deletions internal/filtering/rewrites.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (

"github.com/AdguardTeam/golibs/errors"
"github.com/AdguardTeam/golibs/logutil/slogutil"
"github.com/AdguardTeam/golibs/netutil"
"github.com/miekg/dns"
)

Expand Down Expand Up @@ -93,6 +94,15 @@ func (rw *LegacyRewrite) normalize(ctx context.Context, l *slog.Logger) (err err
ip, err := netip.ParseAddr(rw.Answer)
if err != nil {
l.DebugContext(ctx, "normalizing legacy rewrite", slogutil.KeyError, err)

// Not an IP address, treat as CNAME target, but validate as a domain
// name first.
err = netutil.ValidateDomainName(rw.Answer)
if err != nil {
// Use capital letters, as the error message is shown to the user.
return fmt.Errorf("invalid CNAME target %q: %w", rw.Answer, err)
}

rw.Type = dns.TypeCNAME

return nil
Expand Down
Loading