mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
88 lines
2.5 KiB
Bash
Executable file
88 lines
2.5 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
set -e
|
|
. /usr/share/yunohost/helpers
|
|
|
|
do_pre_regen() {
|
|
pending_dir=$1
|
|
|
|
cd /usr/share/yunohost/templates/dnsmasq
|
|
|
|
# create directory for pending conf
|
|
dnsmasq_dir="${pending_dir}/etc/dnsmasq.d"
|
|
mkdir -p "$dnsmasq_dir"
|
|
etcdefault_dir="${pending_dir}/etc/default"
|
|
mkdir -p "$etcdefault_dir"
|
|
|
|
# add general conf files
|
|
cp plain/etcdefault ${pending_dir}/etc/default/dnsmasq
|
|
cp plain/dnsmasq.conf ${pending_dir}/etc/dnsmasq.conf
|
|
|
|
# add resolver file
|
|
cat plain/resolv.dnsmasq.conf | grep "^nameserver" | shuf > ${pending_dir}/etc/resolv.dnsmasq.conf
|
|
|
|
# retrieve variables
|
|
ipv4=$(curl -s -4 https://ip.yunohost.org 2>/dev/null || true)
|
|
ynh_validate_ip4 "$ipv4" || ipv4='127.0.0.1'
|
|
ipv6=$(curl -s -6 https://ip6.yunohost.org 2>/dev/null || true)
|
|
ynh_validate_ip6 "$ipv6" || ipv6=''
|
|
domain_list=$(yunohost domain list --output-as plain --quiet)
|
|
|
|
# add domain conf files
|
|
for domain in $domain_list; do
|
|
cat domain.tpl \
|
|
| sed "s/{{ domain }}/${domain}/g" \
|
|
| sed "s/{{ ip }}/${ipv4}/g" \
|
|
> "${dnsmasq_dir}/${domain}"
|
|
[[ -n $ipv6 ]] \
|
|
&& echo "address=/${domain}/${ipv6}" >> "${dnsmasq_dir}/${domain}"
|
|
done
|
|
|
|
# remove old domain conf files
|
|
conf_files=$(ls -1 /etc/dnsmasq.d \
|
|
| awk '/^[^\.]+\.[^\.]+.*$/ { print $1 }')
|
|
for domain in $conf_files; do
|
|
[[ $domain_list =~ $domain ]] \
|
|
|| touch "${dnsmasq_dir}/${domain}"
|
|
done
|
|
}
|
|
|
|
do_post_regen() {
|
|
regen_conf_files=$1
|
|
|
|
# Fuck it, those domain/search entries from dhclient are usually annoying
|
|
# lying shit from the ISP trying to MiTM
|
|
if grep -q -E "^ *(domain|search)" /run/resolvconf/resolv.conf
|
|
then
|
|
if grep -q -E "^ *(domain|search)" /run/resolvconf/interface/*.dhclient 2>/dev/null
|
|
then
|
|
sed -E "s/^(domain|search)/#\1/g" -i /run/resolvconf/interface/*.dhclient
|
|
fi
|
|
|
|
grep -q '^supersede domain-name "";' /etc/dhcp/dhclient.conf 2>/dev/null || echo '^supersede domain-name "";' >> /etc/dhcp/dhclient.conf
|
|
grep -q '^supersede domain-search "";' /etc/dhcp/dhclient.conf 2>/dev/null || echo '^supersede domain-search "";' >> /etc/dhcp/dhclient.conf
|
|
grep -q '^supersede name "";' /etc/dhcp/dhclient.conf 2>/dev/null || echo '^supersede name "";' >> /etc/dhcp/dhclient.conf
|
|
systemctl restart resolvconf
|
|
fi
|
|
|
|
[[ -z "$regen_conf_files" ]] \
|
|
|| service dnsmasq restart
|
|
}
|
|
|
|
FORCE=${2:-0}
|
|
DRY_RUN=${3:-0}
|
|
|
|
case "$1" in
|
|
pre)
|
|
do_pre_regen $4
|
|
;;
|
|
post)
|
|
do_post_regen $4
|
|
;;
|
|
*)
|
|
echo "hook called with unknown argument \`$1'" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
exit 0
|