Merge pull request 'Rewrite logic of validation and generation config for dnsmasq' (#2) from rewrite-gen-config into main
Reviewed-on: #2
This commit is contained in:
commit
886a3f495f
1 changed files with 39 additions and 16 deletions
|
|
@ -1,28 +1,51 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
set -euo pipefail
|
||||
|
||||
# Читаем домены из файла, исключая комментарии и пустые строки
|
||||
DOMAINS=$(grep -v '^#' domains.txt | grep -v '^$')
|
||||
|
||||
# Создаем временные файлы
|
||||
INPUT_FILE="domains.txt"
|
||||
IPSET_CONF="/tmp/91-ipset-bbrkn.conf"
|
||||
RESOLVE_CONF="/tmp/92-resolve-bbrkn.conf"
|
||||
|
||||
# Очищаем файлы
|
||||
> "$IPSET_CONF"
|
||||
> "$RESOLVE_CONF"
|
||||
# Очистка выходных файлов
|
||||
: > "$IPSET_CONF"
|
||||
: > "$RESOLVE_CONF"
|
||||
|
||||
echo "Generating configuration files..."
|
||||
|
||||
# Генерируем конфигурации для каждого домена
|
||||
while read -r domain; do
|
||||
# Добавляем в ipset конфигурацию
|
||||
echo "ipset=/$domain/bbrkn" >> "$IPSET_CONF"
|
||||
normalize_domain() {
|
||||
local raw="$1"
|
||||
# Удаляем комментарии после домена (inline), обрезаем пробелы
|
||||
raw="$(echo "$raw" | sed -E 's/#.*$//' | awk '{$1=$1};1')"
|
||||
# Пустые строки отбрасываем
|
||||
[ -z "$raw" ] && return 1
|
||||
# Приводим к нижнему регистру
|
||||
raw="$(echo "$raw" | tr '[:upper:]' '[:lower:]')"
|
||||
# Удаляем лидирующее "*." (wildcard из пользовательского файла)
|
||||
raw="$(echo "$raw" | sed -E 's/^\*\.\s*//')"
|
||||
# Удаляем лидирующие точки (исторически dnsmasq игнорирует их)
|
||||
raw="$(echo "$raw" | sed -E 's/^\.+//')"
|
||||
# Удаляем финальные точки (FQDN с точкой на конце)
|
||||
raw="$(echo "$raw" | sed -E 's/\.+$//')"
|
||||
# Удаляем дублирующиеся точки внутри
|
||||
raw="$(echo "$raw" | sed -E 's/\.+/./g')"
|
||||
# Базовая проверка формата домена: label(.label)+, tld >=2
|
||||
if echo "$raw" | grep -Eq '^[a-z0-9-]+(\.[a-z0-9-]+)+$' && \
|
||||
echo "$raw" | grep -Eq '\.[a-z]{2,}$'; then
|
||||
printf '%s' "$raw"
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Добавляем в resolve конфигурацию
|
||||
echo "server=/$domain/8.8.8.8" >> "$RESOLVE_CONF"
|
||||
done <<< "$DOMAINS"
|
||||
# Читаем вход и генерируем конфиги
|
||||
while IFS= read -r line || [ -n "$line" ]; do
|
||||
dom="$(normalize_domain "$line" || true)"
|
||||
[ -z "$dom" ] && continue
|
||||
echo "ipset=/$dom/bbrkn" >> "$IPSET_CONF"
|
||||
echo "server=/$dom/8.8.8.8" >> "$RESOLVE_CONF"
|
||||
done < "$INPUT_FILE"
|
||||
|
||||
echo "Configuration files generated:"
|
||||
echo "- $IPSET_CONF ($(wc -l < "$IPSET_CONF") entries)"
|
||||
echo "- $RESOLVE_CONF ($(wc -l < "$RESOLVE_CONF") entries)"
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue