OpenWrt – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | #!/bin/sh /etc/rc.common |
2 | # Copyright (C) 2008-2013 OpenWrt.org |
||
3 | # Copyright (C) 2008 Jo-Philipp Wich |
||
4 | # This is free software, licensed under the GNU General Public License v2. |
||
5 | # See /LICENSE for more information. |
||
6 | |||
7 | START=90 |
||
8 | STOP=10 |
||
9 | |||
10 | USE_PROCD=1 |
||
11 | PROG=/usr/sbin/openvpn |
||
12 | |||
13 | LIST_SEP=" |
||
14 | " |
||
15 | |||
16 | UCI_STARTED= |
||
17 | UCI_DISABLED= |
||
18 | |||
19 | append_param() { |
||
20 | local s="$1" |
||
21 | local v="$2" |
||
22 | case "$v" in |
||
23 | *_*_*_*) v=${v%%_*}-${v#*_}; v=${v%%_*}-${v#*_}; v=${v%%_*}-${v#*_} ;; |
||
24 | *_*_*) v=${v%%_*}-${v#*_}; v=${v%%_*}-${v#*_} ;; |
||
25 | *_*) v=${v%%_*}-${v#*_} ;; |
||
26 | esac |
||
27 | echo -n "$v" >> "/var/etc/openvpn-$s.conf" |
||
28 | return 0 |
||
29 | } |
||
30 | |||
31 | append_bools() { |
||
32 | local p; local v; local s="$1"; shift |
||
33 | for p in $*; do |
||
34 | config_get_bool v "$s" "$p" |
||
35 | [ "$v" = 1 ] && append_param "$s" "$p" && echo >> "/var/etc/openvpn-$s.conf" |
||
36 | done |
||
37 | } |
||
38 | |||
39 | append_params() { |
||
40 | local p; local v; local s="$1"; shift |
||
41 | for p in $*; do |
||
42 | config_get v "$s" "$p" |
||
43 | IFS="$LIST_SEP" |
||
44 | for v in $v; do |
||
45 | [ -n "$v" ] && [ "$p" != "push" ] && append_param "$s" "$p" && echo " $v" >> "/var/etc/openvpn-$s.conf" |
||
46 | [ -n "$v" ] && [ "$p" == "push" ] && append_param "$s" "$p" && echo " \"$v\"" >> "/var/etc/openvpn-$s.conf" |
||
47 | done |
||
48 | unset IFS |
||
49 | done |
||
50 | } |
||
51 | |||
52 | append_list() { |
||
53 | local p; local v; local s="$1"; shift |
||
54 | |||
55 | list_cb_append() { |
||
56 | v="$1:${v}" |
||
57 | } |
||
58 | |||
59 | for p in $*; do |
||
60 | config_list_foreach "$s" "$p" list_cb_append |
||
61 | done |
||
62 | [ -n "$v" ] && append_param "$s" "$p" && echo " ${v%*:}" >> "/var/etc/openvpn-$s.conf" |
||
63 | } |
||
64 | |||
65 | section_enabled() { |
||
66 | config_get_bool enable "$1" 'enable' 0 |
||
67 | config_get_bool enabled "$1" 'enabled' 0 |
||
68 | [ $enable -gt 0 ] || [ $enabled -gt 0 ] |
||
69 | } |
||
70 | |||
71 | openvpn_add_instance() { |
||
72 | local name="$1" |
||
73 | local dir="$2" |
||
74 | local conf="$3" |
||
75 | |||
76 | procd_open_instance "$name" |
||
77 | procd_set_param command "$PROG" \ |
||
78 | --syslog "openvpn($name)" \ |
||
79 | --status "/var/run/openvpn.$name.status" \ |
||
80 | --cd "$dir" \ |
||
81 | --config "$conf" |
||
82 | procd_set_param file "$dir/$conf" |
||
83 | procd_set_param term_timeout 15 |
||
84 | procd_set_param respawn |
||
85 | procd_append_param respawn 3600 |
||
86 | procd_append_param respawn 5 |
||
87 | procd_append_param respawn -1 |
||
88 | procd_close_instance |
||
89 | } |
||
90 | |||
91 | start_instance() { |
||
92 | local s="$1" |
||
93 | |||
94 | config_get config "$s" config |
||
95 | config="${config:+$(readlink -f "$config")}" |
||
96 | |||
97 | section_enabled "$s" || { |
||
98 | append UCI_DISABLED "$config" "$LIST_SEP" |
||
99 | return 1 |
||
100 | } |
||
101 | |||
102 | [ ! -d "/var/run" ] && mkdir -p "/var/run" |
||
103 | |||
104 | if [ ! -z "$config" ]; then |
||
105 | append UCI_STARTED "$config" "$LIST_SEP" |
||
106 | openvpn_add_instance "$s" "${config%/*}" "$config" |
||
107 | return |
||
108 | fi |
||
109 | |||
110 | [ ! -d "/var/etc" ] && mkdir -p "/var/etc" |
||
111 | [ -f "/var/etc/openvpn-$s.conf" ] && rm "/var/etc/openvpn-$s.conf" |
||
112 | |||
113 | append_bools "$s" $OPENVPN_BOOLS |
||
114 | append_params "$s" $OPENVPN_PARAMS |
||
115 | append_list "$s" $OPENVPN_LIST |
||
116 | |||
117 | openvpn_add_instance "$s" "/var/etc" "openvpn-$s.conf" |
||
118 | } |
||
119 | |||
120 | start_service() { |
||
121 | local instance="$1" |
||
122 | local instance_found=0 |
||
123 | |||
124 | config_cb() { |
||
125 | local type="$1" |
||
126 | local name="$2" |
||
127 | if [ "$type" = "openvpn" ]; then |
||
128 | if [ -n "$instance" -a "$instance" = "$name" ]; then |
||
129 | instance_found=1 |
||
130 | fi |
||
131 | fi |
||
132 | } |
||
133 | |||
134 | . /usr/share/openvpn/openvpn.options |
||
135 | config_load 'openvpn' |
||
136 | |||
137 | if [ -n "$instance" ]; then |
||
138 | [ "$instance_found" -gt 0 ] || return |
||
139 | start_instance "$instance" |
||
140 | else |
||
141 | config_foreach start_instance 'openvpn' |
||
142 | |||
143 | local path name |
||
144 | for path in /etc/openvpn/*.conf; do |
||
145 | if [ -f "$path" ]; then |
||
146 | name="${path##*/}"; name="${name%.conf}" |
||
147 | |||
148 | # don't start configs again that are already started by uci |
||
149 | if echo "$UCI_STARTED" | grep -qxF "$path"; then |
||
150 | continue |
||
151 | |||
152 | # don't start configs which are set to disabled in uci |
||
153 | elif echo "$UCI_DISABLED" | grep -qxF "$path"; then |
||
154 | logger -t openvpn "$name.conf is disabled in /etc/config/openvpn" |
||
155 | continue |
||
156 | fi |
||
157 | |||
158 | openvpn_add_instance "$name" "${path%/*}" "$path" |
||
159 | fi |
||
160 | done |
||
161 | fi |
||
162 | } |
||
163 | |||
164 | service_triggers() { |
||
165 | procd_add_reload_trigger openvpn |
||
166 | } |