123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349 |
- #! /bin/sh
- # prefix command to run stuff from our programs directory
- # Copyright (C) 1998-2002 Henry Spencer.
- # Copyright (C) 2006-2014 Andreas Steffen
- # Copyright (C) 2006 Martin Willi
- #
- # This program is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by the
- # Free Software Foundation; either version 2 of the License, or (at your
- # option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
- #
- # This program is distributed in the hope that it will be useful, but
- # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- # for more details.
- # define a minimum PATH environment in case it is not set
- PATH=${PATH:-"/sbin:/bin:/usr/sbin:/usr/bin"}
- export PATH
- # set daemon name
- [ -z "$DAEMON_NAME" ] && DAEMON_NAME="charon"
- # name and version of the ipsec implementation
- OS_NAME=`uname -s`
- IPSEC_NAME="strongSwan"
- IPSEC_VERSION="U5.8.1/K`uname -r`"
- # where the private directory and the config files are
- IPSEC_DIR="/usr/local/libexec/ipsec"
- IPSEC_BINDIR="/usr/local/bin"
- IPSEC_SBINDIR="/usr/local/sbin"
- IPSEC_CONFDIR="/usr/local/etc"
- IPSEC_PIDDIR="/var/run"
- IPSEC_SCRIPT="ipsec"
- IPSEC_STARTER_PID="${IPSEC_PIDDIR}/starter.${DAEMON_NAME}.pid"
- IPSEC_CHARON_PID="${IPSEC_PIDDIR}/${DAEMON_NAME}.pid"
- IPSEC_STROKE="${IPSEC_DIR}/stroke"
- IPSEC_STARTER="${IPSEC_DIR}/starter"
- export IPSEC_DIR IPSEC_BINDIR IPSEC_SBINDIR IPSEC_CONFDIR IPSEC_PIDDIR IPSEC_SCRIPT IPSEC_VERSION IPSEC_NAME IPSEC_STARTER_PID IPSEC_CHARON_PID
- IPSEC_DISTRO="University of Applied Sciences Rapperswil, Switzerland"
- command_dir="$IPSEC_DIR"
- case "$1" in
- '')
- echo "$IPSEC_SCRIPT command [arguments]"
- echo
- echo "Use --help for a list of commands, or refer to the $IPSEC_SCRIPT(8) man page."
- echo "See <http://www.strongswan.org> for more general information."
- exit 0
- ;;
- --help)
- echo "$IPSEC_SCRIPT command [arguments]"
- echo
- echo "Commands:"
- echo " start|restart [arguments]"
- echo " update|reload|stop"
- echo " up|down|route|unroute <connectionname>"
- echo " down-srcip <start> [<end>]"
- echo " status|statusall [<connectionname>]"
- echo " listalgs|listpubkeys|listcerts [--utc]"
- echo " listcacerts|listaacerts|listocspcerts [--utc]"
- echo " listacerts|listgroups|listcainfos [--utc]"
- echo " listcrls|listocsp|listplugins|listall [--utc]"
- echo " listcounters|resetcounters [name]"
- echo " leases [<poolname> [<address>]]"
- echo " rereadsecrets|rereadcacerts|rereadaacerts"
- echo " rereadocspcerts|rereadacerts|rereadcrls|rereadall"
- echo " purgecerts|purgecrls|purgeike|purgeocsp"
- echo " scepclient|pki"
- echo " stroke"
- echo " version"
- echo
- echo "Refer to the $IPSEC_SCRIPT(8) man page for details."
- echo "Some commands have their own man pages, e.g. pki(1) or scepclient(8)."
- exit 0
- ;;
- --versioncode)
- echo "$IPSEC_VERSION"
- exit 0
- ;;
- --directory)
- echo "$IPSEC_DIR"
- exit 0
- ;;
- --confdir)
- echo "$IPSEC_CONFDIR"
- exit 0
- ;;
- --piddir)
- echo "$IPSEC_PIDDIR"
- exit 0
- ;;
- down)
- shift
- if [ "$#" -ne 1 ]
- then
- echo "Usage: $IPSEC_SCRIPT down <connection name>"
- exit 2
- fi
- rc=7
- if [ -e $IPSEC_CHARON_PID ]
- then
- $IPSEC_STROKE down "$1"
- rc="$?"
- fi
- exit "$rc"
- ;;
- down-srcip)
- shift
- if [ "$#" -lt 1 ]
- then
- echo "Usage: $IPSEC_SCRIPT down-srcip <start> [<end>]"
- exit 2
- fi
- rc=7
- if [ -e $IPSEC_CHARON_PID ]
- then
- $IPSEC_STROKE down-srcip $*
- rc="$?"
- fi
- exit "$rc"
- ;;
- leases)
- op="$1"
- rc=7
- shift
- if [ -e $IPSEC_CHARON_PID ]
- then
- case "$#" in
- 0) $IPSEC_STROKE "$op" ;;
- 1) $IPSEC_STROKE "$op" "$1" ;;
- *) $IPSEC_STROKE "$op" "$1" "$2" ;;
- esac
- rc="$?"
- fi
- exit "$rc"
- ;;
- listalgs|listpubkeys|listplugins|\
- listcerts|listcacerts|listaacerts|\
- listacerts|listgroups|listocspcerts|\
- listcainfos|listcrls|listocsp|listall|\
- rereadsecrets|rereadcacerts|rereadaacerts|\
- rereadacerts|rereadocspcerts|rereadcrls|\
- rereadall|purgeocsp|listcounters|resetcounters)
- op="$1"
- rc=7
- shift
- if [ -e $IPSEC_CHARON_PID ]
- then
- $IPSEC_STROKE "$op" "$@"
- rc="$?"
- fi
- exit "$rc"
- ;;
- purgeike|purgecrls|purgecerts)
- rc=7
- if [ -e $IPSEC_CHARON_PID ]
- then
- $IPSEC_STROKE "$1"
- rc="$?"
- fi
- exit "$rc"
- ;;
- reload)
- rc=7
- if [ -e $IPSEC_STARTER_PID ]
- then
- echo "Reloading strongSwan IPsec configuration..." >&2
- kill -USR1 `cat $IPSEC_STARTER_PID` 2>/dev/null && rc=0
- else
- echo "Reloading strongSwan IPsec failed: starter is not running" >&2
- fi
- exit "$rc"
- ;;
- restart)
- $IPSEC_SBINDIR/$IPSEC_SCRIPT stop
- sleep 2
- shift
- exec $IPSEC_SBINDIR/$IPSEC_SCRIPT start "$@"
- ;;
- route|unroute)
- op="$1"
- rc=7
- shift
- if [ "$#" -ne 1 ]
- then
- echo "Usage: $IPSEC_SCRIPT $op <connection name>"
- exit 2
- fi
- if [ -e $IPSEC_CHARON_PID ]
- then
- $IPSEC_STROKE "$op" "$1"
- rc="$?"
- fi
- exit "$rc"
- ;;
- secrets)
- rc=7
- if [ -e $IPSEC_CHARON_PID ]
- then
- $IPSEC_STROKE rereadsecrets
- rc="$?"
- fi
- exit "$rc"
- ;;
- start)
- shift
- if [ -d /var/lock/subsys ]; then
- touch /var/lock/subsys/ipsec
- fi
- exec $IPSEC_STARTER --daemon $DAEMON_NAME "$@"
- ;;
- status|statusall)
- op="$1"
- # Return value is slightly different for the status command:
- # 0 - service up and running
- # 1 - service dead, but /var/run/ pid file exists
- # 2 - service dead, but /var/lock/ lock file exists
- # 3 - service not running (unused)
- # 4 - service status unknown :-(
- # 5--199 reserved (5--99 LSB, 100--149 distro, 150--199 appl.)
- shift
- if [ $# -eq 0 ]
- then
- if [ -e $IPSEC_CHARON_PID ]
- then
- $IPSEC_STROKE "$op"
- fi
- else
- if [ -e $IPSEC_CHARON_PID ]
- then
- $IPSEC_STROKE "$op" "$1"
- fi
- fi
- if [ -e $IPSEC_STARTER_PID ]
- then
- kill -0 `cat $IPSEC_STARTER_PID` 2>/dev/null
- exit $?
- fi
- exit 3
- ;;
- stop)
- # stopping a not-running service is considered as success
- if [ -e $IPSEC_STARTER_PID ]
- then
- echo "Stopping strongSwan IPsec..." >&2
- spid=`cat $IPSEC_STARTER_PID`
- if [ -n "$spid" ]
- then
- kill $spid 2>/dev/null
- loop=110
- while [ $loop -gt 0 ] ; do
- kill -0 $spid 2>/dev/null || break
- sleep 0.1 2>/dev/null
- if [ $? -ne 0 ]
- then
- sleep 1
- loop=$(($loop - 9))
- fi
- loop=$(($loop - 1))
- done
- if [ $loop -le 0 ]
- then
- kill -KILL $spid 2>/dev/null
- rm -f $IPSEC_STARTER_PID
- fi
- fi
- else
- echo "Stopping strongSwan IPsec failed: starter is not running" >&2
- fi
- if [ -d /var/lock/subsys ]; then
- rm -f /var/lock/subsys/ipsec
- fi
- exit 0
- ;;
- up)
- shift
- if [ "$#" -ne 1 ]
- then
- echo "Usage: $IPSEC_SCRIPT up <connection name>"
- exit 2
- fi
- rc=7
- if [ -e $IPSEC_CHARON_PID ]
- then
- $IPSEC_STROKE up "$1"
- rc="$?"
- fi
- exit "$rc"
- ;;
- update)
- if [ -e $IPSEC_STARTER_PID ]
- then
- echo "Updating strongSwan IPsec configuration..." >&2
- kill -HUP `cat $IPSEC_STARTER_PID`
- exit 0
- else
- echo "Updating strongSwan IPsec failed: starter is not running" >&2
- exit 7
- fi
- ;;
- aikgen|pki)
- # programs in BINDIR may be called directly, these two are listed for legacy reasons
- command_dir="$IPSEC_BINDIR"
- # fall through
- ;;
- attest|conftest|dumm|irdumm|pool|pt-tls-client|scepclient|stroke|\
- duplicheck|error-notify|imv_policy_manager|load-tester|lookip|whitelist|\
- _updown|_imv_policy)
- # fall through
- ;;
- copyright|--copyright)
- set _copyright
- # fall through
- ;;
- version|--version)
- printf "$OS_NAME $IPSEC_NAME $IPSEC_VERSION\n"
- printf "$IPSEC_DISTRO\n"
- printf "See '$IPSEC_SCRIPT --copyright' for copyright information.\n"
- exit 0
- ;;
- --*)
- echo "$0: unknown option \`$1' (perhaps command name was omitted?)" >&2
- exit 2
- ;;
- *)
- echo "$0: unknown command \`$1' (\`$IPSEC_SCRIPT --help' for list)" >&2
- exit 2
- ;;
- esac
- cmd="$1"
- shift
- path="$command_dir/$cmd"
- if [ ! -x "$path" ]
- then
- echo "$0: unknown command \`$cmd' (\`$IPSEC_SCRIPT --help' for list)" >&2
- exit 2
- fi
- exec $path "$@"
|