Fwknopd: Bump PKG_RELEASE and minor fix
[feed/packages.git] / net / fwknop / files / fwknopd.init
1 #!/bin/sh /etc/rc.common
2 #
3 # Fwknop is developed primarily by the people listed in the file 'AUTHORS'.
4 # Copyright (C) 2009-2014 fwknop developers and contributors. For a full
5 # list of contributors, see the file 'CREDITS'.
6 #
7
8 USE_PROCD=1
9 START=95
10
11 FWKNOPD_BIN=/usr/sbin/fwknopd
12
13 start_service()
14 {
15 generate_configuration
16
17 procd_open_instance
18 procd_set_param command "$FWKNOPD_BIN" --foreground --syslog-enable
19 procd_set_param respawn
20
21 if [ $UCI_ENABLED -eq 1 ]; then
22 procd_append_param command -c /var/etc/fwknopd.conf
23 procd_append_param command -a /var/etc/access.conf
24 fi
25
26 procd_append_param command -i "$DEPEND_IFNAME"
27 procd_set_param netdev "$DEPEND_IFNAME"
28
29 procd_close_instance
30 }
31
32 service_triggers()
33 {
34 procd_add_reload_trigger "fwknopd"
35 }
36
37 get_bool()
38 {
39 local _tmp="$1"
40 case "$_tmp" in
41 1|on|true|yes|enabled) _tmp=1;;
42 0|off|false|no|disabled) _tmp=0;;
43 *) _tmp="$2";;
44 esac
45 echo -n "$_tmp"
46 }
47
48 generate_configuration()
49 {
50 [ -f /tmp/access.conf.tmp ] && rm /tmp/access.conf.tmp
51
52 UCI_ENABLED=0
53 DEPEND_IFNAME=
54 local NETWORK=
55 local PCAP_INTF=
56 local USER_CONFIG_PATH=/etc/fwknop/fwknopd.conf
57 local DEFAULT_UCI_NETWORK=wan
58 local DEFAULT_FWKNOPD_IFNAME=eth0
59
60 config_cb() {
61 local type="$1"
62 local name="$2"
63 if [ "$type" = "global" ]; then
64 option_cb() {
65 local option="$1"
66 local value="$2"
67 if [ "$option" = "uci_enabled" ] && [ "$(get_bool "$value" 0)" -eq 1 ] ; then
68 > /var/etc/fwknopd.conf
69 > /var/etc/access.conf
70 chmod 600 /var/etc/fwknopd.conf
71 chmod 600 /var/etc/access.conf
72 UCI_ENABLED=1
73 fi
74 }
75 elif [ "$type" = "network" ]; then
76 option_cb() {
77 local option="$1"
78 local value="$2"
79 if [ $UCI_ENABLED -eq 1 ] && [ $option = "network" ]; then
80 NETWORK="$value"
81 fi
82 }
83 elif [ "$type" = "config" ]; then
84 option_cb() {
85 local option="$1"
86 local value="$2"
87 if [ $UCI_ENABLED -eq 1 ] && [ $option = "PCAP_INTF" ]; then
88 PCAP_INTF="$value"
89 echo "$option $value" >> /var/etc/fwknopd.conf #writing each option to fwknopd.conf
90 elif [ $UCI_ENABLED -eq 1 ]; then
91 echo "$option $value" >> /var/etc/fwknopd.conf #writing each option to fwknopd.conf
92 fi
93 }
94 elif [ "$type" = "access" ]
95 then
96 if [ -f /tmp/access.conf.tmp ] ; then
97 cat /tmp/access.conf.tmp >> /var/etc/access.conf
98 rm /tmp/access.conf.tmp
99 fi
100 option_cb() {
101 local option="$1"
102 local value="$2"
103 if [ $UCI_ENABLED -eq 1 ] && [ $option = "SOURCE" ]; then
104 echo "$option $value" >> /var/etc/access.conf #writing each option to access.conf
105 fi
106 if [ $UCI_ENABLED -eq 1 ] && [ $option != "SOURCE" ]; then
107 echo "$option $value" >> /tmp/access.conf.tmp #writing each option to access.conf
108 fi
109 }
110 else
111 option_cb() { return; }
112 if [ -z "$type" ]; then
113 # Finalize reading
114 if [ -f /tmp/access.conf.tmp ] ; then
115 cat /tmp/access.conf.tmp >> /var/etc/access.conf
116 rm /tmp/access.conf.tmp
117 fi
118 fi
119 fi
120 }
121
122 if [ -f /etc/config/fwknopd ]; then
123 config_load fwknopd
124 fi
125
126 if [ $UCI_ENABLED -eq 0 ]; then
127 if [ -f $USER_CONFIG_PATH ] ; then
128 # Scan user configuration for PCAP_INTF settings
129 DEPEND_IFNAME="$( sed -ne '/^\s*PCAP_INTF\s\+/ { s/^\s*PCAP_INTF\s\+//; s/\s\+$//; p; q; }' /etc/fwknop/fwknopd.conf )"
130 if [ -n "$DEPEND_IFNAME" ]; then
131 logger -p daemon.debug -t "fwknopd[----]" "Found fwknopd.conf configuration, using PCAP_INTF interface $DEPEND_IFNAME"
132 else
133 logger -p daemon.info -t "fwknopd[----]" "No PCAP_INTF interface specified in fwknopd.conf, fwknopd's default $DEFAULT_FWKNOPD_IFNAME will be used"
134 DEPEND_IFNAME="$DEFAULT_FWKNOPD_IFNAME"
135 fi
136 else
137 logger -p daemon.error -t "fwknopd[----]" "No $USER_CONFIG_PATH found, not starting"
138 exit 1
139 fi
140 elif [ $UCI_ENABLED -eq 1 ]; then
141 if [ -n "$NETWORK" ] && [ -n "$PCAP_INTF" ]; then
142 logger -p daemon.warn -t "fwknopd[----]" "Specified both network and PCAP_INTF. Ignoring PCAP_INTF"
143 elif [ -z "$NETWORK" ] && [ -z "$PCAP_INTF" ]; then
144 # Fallback - compatibility with old script, which used wan interface by default
145 logger -p daemon.info -t "fwknopd[----]" "Neither network, nor PCAP_INTF interface specified, trying network $DEFAULT_UCI_NETWORK"
146 NETWORK="$DEFAULT_UCI_NETWORK"
147 fi
148
149 if [ -n "$NETWORK" ]; then
150 . /lib/functions/network.sh
151 network_get_physdev DEPEND_IFNAME "$NETWORK"
152 if [ -n "$DEPEND_IFNAME" ]; then
153 logger -p daemon.debug -t "fwknopd[----]" "Resolved network $NETWORK as interface $DEPEND_IFNAME"
154 else
155 logger -p daemon.warn -t "fwknopd[----]" "Cannot find interface for network $NETWORK, fwknopd's default $DEFAULT_FWKNOPD_IFNAME will be used"
156 DEPEND_IFNAME="$DEFAULT_FWKNOPD_IFNAME"
157 fi
158 elif [ -n "$PCAP_INTF" ]; then
159 DEPEND_IFNAME="$PCAP_INTF"
160 logger -p daemon.debug -t "fwknopd[----]" "Using configured PCAP_INTF interface $DEPEND_IFNAME"
161 fi
162 fi
163 }