#!/bin/sh # This script wraps openfortivpn in order to obtain the password # file from cmd and to daemonize # $1 password file # $2 is the config name # $3... are passed to openconnect test -z "$1" && exit 1 pwfile=$1; shift config=$1; shift killed=0 trap_with_arg() { func="$1" ; shift for sig ; do trap "$func $sig" "$sig" done } func_trap() { logger "openfortivpn-wrapper[$$]" "$config: sending signal ${1}" killed=1 kill "-${1}" "$child" 2>/dev/null } trap_with_arg func_trap INT TERM KILL start_time=$(date '+%s') /usr/sbin/openfortivpn "$@" < "$pwfile" 2>/dev/null & child=$! wait $child || { [ "$killed" = 1 ] && exit 0 current_time=$(date '+%s') elapsed=$((current_time-start_time)) . /lib/netifd/netifd-proto.sh proto_notify_error "$config" "Failed to connect after $elapsed seconds." proto_block_restart "$config" exit 1 }