diff options
Diffstat (limited to 'package/webif/files/usr/lib/webif/apply.sh')
-rwxr-xr-x | package/webif/files/usr/lib/webif/apply.sh | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/package/webif/files/usr/lib/webif/apply.sh b/package/webif/files/usr/lib/webif/apply.sh new file mode 100755 index 000000000..9cbadf44a --- /dev/null +++ b/package/webif/files/usr/lib/webif/apply.sh @@ -0,0 +1,76 @@ +#!/bin/ash +# +# Default handlers for config files +# +HANDLERS_config=' + wireless) reload_wireless;; + network) reload_network;; + system) reload_system;; +' +HANDLERS_file=' + hosts) rm -f /etc/hosts; mv $config /etc/hosts; killall -HUP dnsmasq ;; + ethers) rm -f /etc/ethers; mv $config /etc/ethers; killall -HUP dnsmasq ;; + firewall) mv /tmp/.webif/file-firewall /etc/config/firewall && /etc/init.d/S45firewall;; +' + +# for some reason a for loop with "." doesn't work +eval "$(cat /usr/lib/webif/apply-*.sh 2>&-)" + +reload_network() { + echo '@TR<<Reloading>> @TR<<networking settings>> ...' + grep '^wan_' config-network >&- 2>&- && { + ifdown wan + ifup wan + killall -HUP dnsmasq + } + + grep '^lan_' config-network >&- 2>&- && { + ifdown lan + ifup lan + killall dnsmasq + /etc/init.d/S??dnsmasq + } +} + +reload_wireless() { + echo '@TR<<Reloading>> @TR<<wireless settings>> ...' + killall nas >&- 2>&- && sleep 2 + ( + /sbin/wifi + [ -f /etc/init.d/S41wpa ] && /etc/init.d/S41wpa + ) >&- 2>&- <&- +} + +reload_system() { + echo '@TR<<Applying>> @TR<<system settings>> ...' + echo "$(nvram get wan_hostname)" > /proc/sys/kernel/hostname +} + +cd /tmp/.webif + +# file-* other config files +for config in $(ls file-* 2>&-); do + name=${config#file-} + echo "@TR<<Processing>> @TR<<config file>>: $name" + eval 'case "$name" in + '"$HANDLERS_file"' + esac' +done + +# config-* simple config files +( + cd /proc/self + cat /tmp/.webif/config-* 2>&- | grep '=' >&- 2>&- && { + cat /tmp/.webif/config-* 2>&- | tee fd/1 | xargs -n1 nvram set + echo "@TR<<Committing>> NVRAM ..." + nvram commit + } +) +for config in $(ls config-* 2>&-); do + name=${config#config-} + eval 'case "$name" in + '"$HANDLERS_config"' + esac' +done +sleep 2 +rm -f config-* |