-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathgenerate_bind_configs.sh
46 lines (39 loc) · 1.52 KB
/
generate_bind_configs.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/bash
set -eu
file=$1
ip=$2
zones=/etc/named.reductor.zones
DOMAIN_TMPLT=/opt/named_fakezone_generator/reductor_named_domain.tmplt
# удаляем сгенерированные в прошлый раз зоны, префикс чтобы не трогать чужие зоны при этом
cleanup() {
> $zones
mkdir -p /etc/named/
rm -f /etc/named/reductor_*
rm -f $file.processed
}
# с кириллическими доменами пока что проблема, вообще здесь избавляемся от дублирования из-за fqdn/www.
process_list() {
grep -v "[а-я]" | sed 's/\.$//' | sed -e 's/^www\.//' | sort -u
}
# генерируем всё необходимое для блокировки одного конкретного домена
create_config() {
local domain=$1
local ip=$2
echo 'zone "'$domain'" { type master; file "/etc/named/reductor_'$domain'.conf"; };' >> $zones
m4 -D__domain__=$domain -D__ip__=$ip $DOMAIN_TMPLT > "/etc/named/reductor_$domain.conf"
}
main() {
cleanup
process_list < $file > $file.processed
if [ ! -s $file.processed ]; then
echo "Empty $file.processed, fail"
exit 1
fi
while read domain; do
create_config $domain $ip
done < $file.processed
# стараемся залить данные "мягко", но сервер может лежать, тогда поднимаем его
# вообще спорный момент, в теории можно убрать || service named restart
rndc reload || service named restart
}
main