OpenWrt – Blame information for rev 3
?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 | section_enabled() { |
||
53 | config_get_bool enable "$1" 'enable' 0 |
||
54 | config_get_bool enabled "$1" 'enabled' 0 |
||
55 | [ $enable -gt 0 ] || [ $enabled -gt 0 ] |
||
56 | } |
||
57 | |||
58 | openvpn_add_instance() { |
||
59 | local name="$1" |
||
60 | local dir="$2" |
||
61 | local conf="$3" |
||
62 | |||
63 | procd_open_instance "$name" |
||
64 | procd_set_param command "$PROG" \ |
||
65 | --syslog "openvpn($name)" \ |
||
66 | --status "/var/run/openvpn.$name.status" \ |
||
67 | --cd "$dir" \ |
||
68 | --config "$conf" |
||
69 | procd_set_param file "$dir/$conf" |
||
70 | procd_set_param respawn |
||
71 | procd_append_param respawn 3600 |
||
72 | procd_append_param respawn 5 |
||
73 | procd_append_param respawn -1 |
||
74 | procd_close_instance |
||
75 | } |
||
76 | |||
77 | start_instance() { |
||
78 | local s="$1" |
||
79 | |||
80 | config_get config "$s" config |
||
81 | config="${config:+$(readlink -f "$config")}" |
||
82 | |||
83 | section_enabled "$s" || { |
||
84 | append UCI_DISABLED "$config" "$LIST_SEP" |
||
85 | return 1 |
||
86 | } |
||
87 | |||
88 | [ ! -d "/var/run" ] && mkdir -p "/var/run" |
||
89 | |||
90 | if [ ! -z "$config" ]; then |
||
91 | append UCI_STARTED "$config" "$LIST_SEP" |
||
92 | openvpn_add_instance "$s" "${config%/*}" "$config" |
||
93 | return |
||
94 | fi |
||
95 | |||
96 | [ ! -d "/var/etc" ] && mkdir -p "/var/etc" |
||
97 | [ -f "/var/etc/openvpn-$s.conf" ] && rm "/var/etc/openvpn-$s.conf" |
||
98 | |||
99 | append_bools "$s" $OPENVPN_BOOLS |
||
100 | append_params "$s" $OPENVPN_PARAMS |
||
101 | |||
102 | openvpn_add_instance "$s" "/var/etc" "openvpn-$s.conf" |
||
103 | } |
||
104 | |||
105 | start_service() { |
||
106 | local instance="$1" |
||
107 | local instance_found=0 |
||
108 | |||
109 | config_cb() { |
||
110 | local type="$1" |
||
111 | local name="$2" |
||
112 | if [ "$type" = "openvpn" ]; then |
||
113 | if [ -n "$instance" -a "$instance" = "$name" ]; then |
||
114 | instance_found=1 |
||
115 | fi |
||
116 | fi |
||
117 | } |
||
118 | |||
119 | . /usr/share/openvpn/openvpn.options |
||
120 | config_load 'openvpn' |
||
121 | |||
122 | if [ -n "$instance" ]; then |
||
123 | [ "$instance_found" -gt 0 ] || return |
||
124 | start_instance "$instance" |
||
125 | else |
||
126 | config_foreach start_instance 'openvpn' |
||
127 | |||
128 | local path name |
||
129 | for path in /etc/openvpn/*.conf; do |
||
130 | if [ -f "$path" ]; then |
||
131 | name="${path##*/}"; name="${name%.conf}" |
||
132 | |||
133 | # don't start configs again that are already started by uci |
||
134 | if echo "$UCI_STARTED" | grep -qxF "$path"; then |
||
135 | continue |
||
136 | |||
137 | # don't start configs which are set to disabled in uci |
||
138 | elif echo "$UCI_DISABLED" | grep -qxF "$path"; then |
||
139 | logger -t openvpn "$name.conf is disabled in /etc/config/openvpn" |
||
140 | continue |
||
141 | fi |
||
142 | |||
143 | openvpn_add_instance "$name" "${path%/*}" "$path" |
||
144 | fi |
||
145 | done |
||
146 | fi |
||
147 | } |
||
148 | |||
149 | service_triggers() { |
||
150 | procd_add_reload_trigger openvpn |
||
151 | } |