This patch:
* Replaces the mess the config file generation was with a bunch of helper
routines.
* Makes absent boolean config options use the aiccu internal defaults like for
the strings. These options are commented out in the config per default.
* Ensures that the generated config file has mode 600. I know that OpenWrt is
normally not a multiuser system but we've got passwords in there, better safe
than sorry.
* Records for each (probably only one) running aiccu the state in /var/state
and stops the tunnels based on that. This avoids weird errors when you
change your config and then try to restart aiccu.
* Replaces config_cb with config_foreach which makes the file a lot better to
understand for non-pros like >me.
* Adds a name to the section in the default config file so the files
in /var/run have a nicer name. Maybe the files should be named based on the
interface name instead but I didn't find a clean way to implement this.
Signed-off-by: Malte S. Stretz
---
ipv6/aiccu/files/aiccu.conf | 10 ++--
ipv6/aiccu/files/aiccu.init | 93 +-
2 files changed, 60 insertions(+), 43 deletions(-)
diff --git a/ipv6/aiccu/files/aiccu.conf b/ipv6/aiccu/files/aiccu.conf
index 671fd16..b088992 100755
--- a/ipv6/aiccu/files/aiccu.conf
+++ b/ipv6/aiccu/files/aiccu.conf
@@ -1,11 +1,11 @@
-config aiccu
+config aiccu tunnel
option username ''
option password ''
option protocol ''
option server ''
option interface''
option tunnel_id''
- option requiretls ''
- option defaultroute '1'
- option nat '1'
- option heartbeat'1'
+# option requiretls 'true'
+# option defaultroute 'true'
+# option nat 'true'
+# option heartbeat'true'
diff --git a/ipv6/aiccu/files/aiccu.init b/ipv6/aiccu/files/aiccu.init
index 56de87d..6567bcd 100644
--- a/ipv6/aiccu/files/aiccu.init
+++ b/ipv6/aiccu/files/aiccu.init
@@ -1,52 +1,69 @@
#!/bin/sh /etc/rc.common
-# Copyright (C) 2006 OpenWrt.org
+# Copyright (C) 2006-2009 OpenWrt.org
START=50
-config_cb() {
- local cfg_type="$1"
- local cfg_name="$2"
+aiccu_set() {
+ local config="$1"
+ local option="$2"
+ local value="$3"
+ echo "$option $value" >> /var/run/aiccu-${config}.conf
+}
+
+aiccu_set_string() {
+ local config="$1"
+ local option="$2"
+ local setting="$3"
+ config_get dummy $config ${setting:-$option}
+ [ -n "$dummy" ] && aiccu_set $config $option $dummy
+}
- case "$cfg_type" in
- aiccu)
- append cfgs_sections "$cfg_name" "$N"
- ;;
+aiccu_set_bool() {
+ local config="$1"
+ local option="$2"
+ local setting="$3"
+ config_get_bool dummy $config ${setting:-$option} "undef"
+ case "$dummy" in
+ 0) aiccu_set $config $option false ;;
+ 1) aiccu_set $config $option true ;;
esac
}
start() {
config_load aiccu
- for cfgs_section in $cfgs_sections; do
- config_get username $cfgs_section username
- config_get password $cfgs_section password
- config_get server $cfgs_section server
- config_get protocol $cfgs_section protocol
- config_get interface $cfgs_section interface
- config_get tunnel_id $cfgs_section tunnel_id
- config_get_bool requiretls $cfgs_section requiretls 0
- config_get_bool defaultroute $cfgs_section defaultroute 1
- config_get_bool nat $cfgs_section nat 1
- config_get_bool heartbeat $cfgs_section heartbeat 1
- mkdir -p /tmp/run
- echo "username $username" > /tmp/run/aiccu-${cfgs_section}.conf
- echo "password $password" >> /tmp/run/aiccu-${cfgs_section}.conf
- [ -n "$server" ] && echo "server $server"
>> /tmp/run/aiccu-${cfgs_section}.conf
- [ -n "$protocol" ] && echo "protocol $protocol"
>> /tmp/run/aiccu-${cfgs_section}.conf
- [ -n "$interface" ] && echo "ipv6_interface $interface"
>> /tmp/run/aiccu-${cfgs_section}.conf
- [ -n "$tunnel_id" ] && echo "tunnel_id $tunnel_id"
>> /tmp/run/aiccu-${cfgs_section}.conf
- [ "$requiretls" = "1" ] && echo "requiretls true"
>> /tmp/run/aiccu-${cfgs_section}.conf
- [ "$defaultroute" != "1" ] && echo "defaultroute false
>> /tmp/run/aiccu-${cfgs_section}.conf
- [ "$nat" = "1" ] && echo "behindnat true
>> /tmp/run/aiccu-${cfgs_section}.conf
- [ "$heartbeat" != "1" ] && echo "makebeats false"
>> /tmp/run/aiccu-${cfgs_section}.conf
- echo 'daemonize true' >> /tmp/run/aiccu-${cfgs_section}.conf
- echo "pidfile /var/run/aiccu-${cfgs_section}.pid"
>> /tmp/run/aic