|
7 | 7 | TMP_PUSH_CONFIGFILE=$(mktemp -t vpn_push.XXXXXXX)
|
8 | 8 | TMP_ROUTE_CONFIGFILE=$(mktemp -t vpn_route.XXXXXXX)
|
9 | 9 | TMP_EXTRA_CONFIGFILE=$(mktemp -t vpn_extra.XXXXXXX)
|
| 10 | +TMP_EXTRA_CLIENT_CONFIGFILE=$(mktemp -t vpn_extra_client.XXXXXXX) |
10 | 11 |
|
11 | 12 | #Traceback on Error and Exit come from https://docwhat.org/tracebacks-in-bash/
|
12 | 13 | set -eu
|
@@ -45,6 +46,7 @@ on_exit() {
|
45 | 46 | rm -f $TMP_PUSH_CONFIGFILE
|
46 | 47 | rm -f $TMP_ROUTE_CONFIGFILE
|
47 | 48 | rm -f $TMP_EXTRA_CONFIGFILE
|
| 49 | + rm -f $TMP_EXTRA_CLIENT_CONFIGFILE |
48 | 50 | local _ec="$?"
|
49 | 51 | if [[ $_ec != 0 && "${_showed_traceback}" != t ]]; then
|
50 | 52 | traceback 1
|
@@ -83,6 +85,7 @@ usage() {
|
83 | 85 | echo "usage: $0 [-d]"
|
84 | 86 | echo " -u SERVER_PUBLIC_URL"
|
85 | 87 | echo " [-e EXTRA_SERVER_CONFIG ]"
|
| 88 | + echo " [-E EXTRA_CLIENT_CONFIG ]" |
86 | 89 | echo " [-f FRAGMENT ]"
|
87 | 90 | echo " [-n DNS_SERVER ...]"
|
88 | 91 | echo " [-p PUSH ...]"
|
@@ -127,6 +130,13 @@ process_extra_config() {
|
127 | 130 |
|
128 | 131 | }
|
129 | 132 |
|
| 133 | +process_extra_client_config() { |
| 134 | + local ovpn_extra_config='' |
| 135 | + ovpn_extra_config="$1" |
| 136 | + echo "Processing Extra Client Config: '${ovpn_extra_config}'" |
| 137 | + [[ -n "$ovpn_extra_config" ]] && echo "$ovpn_extra_config" >> "$TMP_EXTRA_CLIENT_CONFIGFILE" |
| 138 | +} |
| 139 | + |
130 | 140 | if [ "${DEBUG:-}" == "1" ]; then
|
131 | 141 | set -x
|
132 | 142 | fi
|
@@ -159,14 +169,17 @@ CUSTOM_ROUTE_CONFIG=''
|
159 | 169 | [ -r "$OVPN_ENV" ] && source "$OVPN_ENV"
|
160 | 170 |
|
161 | 171 | # Parse arguments
|
162 |
| -while getopts ":a:e:C:T:r:s:du:cp:n:DNmf:tz2" opt; do |
| 172 | +while getopts ":a:e:E:C:T:r:s:du:cp:n:DNmf:tz2" opt; do |
163 | 173 | case $opt in
|
164 | 174 | a)
|
165 | 175 | OVPN_AUTH="$OPTARG"
|
166 | 176 | ;;
|
167 | 177 | e)
|
168 | 178 | process_extra_config "$OPTARG"
|
169 | 179 | ;;
|
| 180 | + E) |
| 181 | + process_extra_client_config "$OPTARG" |
| 182 | + ;; |
170 | 183 | C)
|
171 | 184 | OVPN_CIPHER="$OPTARG"
|
172 | 185 | ;;
|
|
254 | 267 | [ -z "$OVPN_PORT" ] && OVPN_PORT=1194
|
255 | 268 | [ -z "$CUSTOM_ROUTE_CONFIG" ] && process_route_config "192.168.254.0/24"
|
256 | 269 |
|
| 270 | +# Save extra client config |
| 271 | +OVPN_ADDITIONAL_CLIENT_CONFIG=$(cat $TMP_EXTRA_CLIENT_CONFIGFILE) |
| 272 | + |
257 | 273 | export OVPN_SERVER OVPN_ROUTES OVPN_DEFROUTE
|
258 | 274 | export OVPN_SERVER_URL OVPN_ENV OVPN_PROTO OVPN_CN OVPN_PORT
|
259 | 275 | export OVPN_CLIENT_TO_CLIENT OVPN_PUSH OVPN_NAT OVPN_DNS OVPN_MTU OVPN_DEVICE
|
260 | 276 | export OVPN_TLS_CIPHER OVPN_CIPHER OVPN_AUTH
|
261 | 277 | export OVPN_COMP_LZO
|
262 | 278 | export OVPN_OTP_AUTH
|
263 | 279 | export OVPN_FRAGMENT
|
| 280 | +export OVPN_ADDITIONAL_CLIENT_CONFIG |
264 | 281 |
|
265 | 282 | # Preserve config
|
266 | 283 | if [ -f "$OVPN_ENV" ]; then
|
267 | 284 | bak_env=$OVPN_ENV.$(date +%s).bak
|
268 | 285 | echo "Backing up $OVPN_ENV -> $bak_env"
|
269 | 286 | mv "$OVPN_ENV" "$bak_env"
|
270 | 287 | fi
|
271 |
| -export | grep OVPN_ > "$OVPN_ENV" |
| 288 | + |
| 289 | +# Like `export | grep OVPN_ > "$OVPN_ENV"` but handles multiline variables |
| 290 | +set +u |
| 291 | +while read var ; do |
| 292 | + eval value=\$$var |
| 293 | + if [ -n "$value" ]; then |
| 294 | + echo "declare -x $var=\"$value\"" >> "$OVPN_ENV" |
| 295 | + else |
| 296 | + echo "declare -x $var" >> "$OVPN_ENV" |
| 297 | + fi |
| 298 | +done < <(export | egrep -o '(OVPN_[^=]+)') |
| 299 | +set -u |
272 | 300 |
|
273 | 301 | conf=${OPENVPN:-}/openvpn.conf
|
274 | 302 | if [ -f "$conf" ]; then
|
|
0 commit comments