Rev 6 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
#!/bin/sh# IPsec startup and shutdown script#### BEGIN INIT INFO# Provides: ipsec# Required-Start: $network $remote_fs $syslog $named# Required-Stop: $syslog $remote_fs# Default-Start:# Default-Stop: 0 1 6# Short-Description: Start Libreswan IPsec at boot time# Description: Enable automatic key management for IPsec (KLIPS and NETKEY)### END INIT INFO#### see https://bugzilla.redhat.com/show_bug.cgi?id=636572### Debian and Fedora interpret the LSB differently for Default-Start:# Copyright (C) 1998, 1999, 2001 Henry Spencer.# Copyright (C) 2002 Michael Richardson <mcr@freeswan.org># Copyright (C) 2006 Michael Richardson <mcr@xelerance.com># Copyright (C) 2008 Michael Richardson <mcr@sandelman.ca># Copyright (C) 2008-2014 Tuomo Soini <tis@foobar.fi># Copyright (C) 2012 Paul Wouters <paul@libreswan.org>## 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.## ipsec sysv style init.d script for starting and stopping# the IPsec security subsystem (KLIPS and Pluto).## This script becomes /etc/rc.d/init.d/ipsec# and is also accessible as "ipsec setup"## The startup and shutdown times are a difficult compromise (in particular,# it is almost impossible to reconcile them with the insanely early/late# times of NFS filesystem startup/shutdown). Startup is after startup of# syslog and pcmcia support; shutdown is just before shutdown of syslog.## chkconfig: - 47 76# description: IPsec provides encrypted and authenticated communications; \# NETKEY/KLIPS is the kernel half of it, Pluto is the user-level management daemon.test ${IPSEC_INIT_SCRIPT_DEBUG} && set -v -x# Source function library.. /etc/rc.d/init.d/functions# Check that networking is up.[ "${NETWORKING}" = "no" ] && exit 6if [ ! -f /etc/sysconfig/network ]; thenexit 6fiif [ $(id -u) -ne 0 ]; thenecho "permission denied (must be superuser)" | \logger -s -p daemon.error -t ipsec_setup 2>&1exit 4fiif [ $(ip addr list | grep -c cipsec) -ne 0 ]; thenecho "Cisco IPSec client is already loaded, aborting! (cipsec# device found)"exit 1fi# where the private directory and the config files areIPSEC_CONF="${IPSEC_CONF:-/etc/ipsec.conf}"IPSEC_EXECDIR="${IPSEC_EXECDIR:-/usr/libexec/ipsec}"IPSEC_SBINDIR="${IPSEC_SBINDIR:-/usr/sbin}"unset PLUTO_OPTIONSrundir=/var/run/plutoplutopid=${rundir}/pluto.pidplutoctl=${rundir}/pluto.ctllockdir=/var/lock/subsyslockfile=${lockdir}/ipsecipsecversion=/proc/net/ipsec_versionkamepfkey=/proc/net/pfkey# /etc/resolv.conf related pathsLIBRESWAN_RESOLV_CONF=${rundir}/libreswan-resolv-conf-backupORIG_RESOLV_CONF=/etc/resolv.conf# there is some confusion over the name - just do both[ -f /etc/sysconfig/ipsec ] && . /etc/sysconfig/ipsec[ -f /etc/sysconfig/pluto ] && . /etc/sysconfig/pluto# misc setupumask 022# standardize PATH, and export it for everything else's benefitPATH="${IPSEC_SBINDIR}:/sbin:/usr/sbin:/usr/local/bin:/bin:/usr/bin"export PATHmkdir -p ${rundir}chmod 700 ${rundir}verify_config() {[ -f ${IPSEC_CONF} ] || exit 6config_error=$(ipsec addconn --config ${IPSEC_CONF} --checkconfig 2>&1)RETVAL=$?if [ ${RETVAL} -gt 0 ]; thenecho "Configuration error - the following error occured:"echo ${config_error}echo "IKE daemon status was not modified"exit ${RETVAL}fi}start() {echo -n $"Starting pluto IKE daemon for IPsec: "ipsec _stackmanager start# pluto searches the current directory, so this is required for making it selinux compliantcd /# This script will enter an endless loop to ensure pluto restarts on crashipsec _plutorun --config ${IPSEC_CONF} --nofork ${PLUTO_OPTIONS} &[ -d ${lockdir} ] || mkdir -p ${lockdir}touch ${lockfile}# Because _plutorun starts pluto at background we need to make sure pluto is started# before we know if start was successful or notfor waitsec in 1 2 3 4 5; doif status -p ${plutopid} -l ${lockfile} ${IPSEC_EXECDIR}/pluto >/dev/null; thenRETVAL=0breakelseecho -n "."sleep 1RETVAL=1fidoneif [ ${RETVAL} -eq 0 ]; thensuccesselserm -f ${lockfile}failurefiechoreturn ${RETVAL}}stop() {if [ ! -e ${plutoctl} ]; thenecho "Missing control file ${plutoctl} - is pluto running?"elseecho $"Shutting down pluto IKE daemon"ipsec whack --shutdown# don't use seq, might not exist on embeddedfor waitsec in 1 2 3 4 5 6 7 8 9 10; doif [ -s ${plutopid} ]; thenecho -n "."sleep 1elsebreakfidoneechorm -f ${plutoctl} # we won't be using this anymorefiif [ -s ${plutopid} ]; then# pluto did not die peacefullyecho "Attempt to shut Pluto down failed! Trying kill"killproc -p ${plutopid} ${IPSEC_EXECDIR}/plutoRETVAL=$?[ ${RETVAL} -eq 0 ] && rm -f ${plutopid}fiipsec _stackmanager stop# cleaning up backup resolv.confif [ -e ${LIBRESWAN_RESOLV_CONF} ]; thenif grep 'Libreswan' ${ORIG_RESOLV_CONF} > /dev/null 2>&1; thencp ${LIBRESWAN_RESOLV_CONF} ${ORIG_RESOLV_CONF}firm -f ${LIBRESWAN_RESOLV_CONF}firm -f ${lockfile}return ${RETVAL}}restart() {verify_configstopstartreturn $?}condrestart() {if [ -f ${lockfile} ]; thenrestartreturn $?fi}version() {ipsec versionreturn $?}# do itcase "$1" instart)startRETVAL=$?;;stop)stopRETVAL=$?;;restart)restartRETVAL=$?;;reload|force-reload)restartRETVAL=$?;;condrestart|try-restart)condrestartRETVAL=$?;;status)status -p ${plutopid} -l ${lockfile} ${IPSEC_EXECDIR}/plutoRETVAL=$?;;version)versionRETVAL=$?;;*)echo "Usage: $0 {start|stop|restart|reload|force-reload|condrestart|try-restart|status|version}"RETVAL=2esacexit ${RETVAL}