mirror of
https://git.FreeBSD.org/ports.git
synced 2025-01-16 07:58:04 +00:00
83eb2c3700
literal name_enable wherever possible, and ${name}_enable when it's not, to prepare for the demise of set_rcvar(). In cases where I had to hand-edit unusual instances also modify formatting slightly to be more uniform (and in some cases, correct). This includes adding some $FreeBSD$ tags, and most importantly moving rcvar= to right after name= so it's clear that one is derived from the other.
107 lines
2.6 KiB
Bash
107 lines
2.6 KiB
Bash
#!/bin/sh
|
|
#
|
|
# Author: kamikaze
|
|
# Contact: kamikaze@bsdforen.de
|
|
#
|
|
# If vpnc_conf is defined, it will be treated as a list of configuration files
|
|
# in vpnc_conf_dir. This managed mode is useful where where vpnc tunnels have
|
|
# to be established through other vpnc tunnels.
|
|
# You can pass further command line options to vpnc by specifying
|
|
# them in vpnc_flags.
|
|
#
|
|
|
|
# PROVIDE: vpnc
|
|
# REQUIRE: LOGIN
|
|
# KEYWORD: shutdown
|
|
|
|
# Default settings - don't change this.
|
|
: ${vpnc_enable="NO"}
|
|
: ${vpnc_pid_dir="/var/run"}
|
|
: ${vpnc_pid_file="vpnc/pid"}
|
|
: ${vpnc_conf_dir="%%PREFIX%%/etc"}
|
|
: ${vpnc_record="$vpnc_pid_dir/vpnc.record"}
|
|
|
|
. /etc/rc.subr
|
|
|
|
name="vpnc"
|
|
rcvar=vpnc_enable
|
|
|
|
command="%%PREFIX%%/sbin/$name"
|
|
|
|
vpnc_start() {
|
|
if [ -z "$vpnc_conf" ]; then
|
|
#No configuration files given, run unmanaged.
|
|
$command $vpnc_flags
|
|
return $?
|
|
fi
|
|
|
|
# A list of configurations is present. Connect managing
|
|
# what is required for a clean shutdown later.
|
|
|
|
for config in $vpnc_conf; do
|
|
|
|
# The current configuration file.
|
|
current="$vpnc_conf_dir/$config"
|
|
|
|
# Start vpnc.
|
|
$command --local-port 0 $current $vpnc_flags
|
|
status=$?
|
|
if [ $status -ne 0 ]; then
|
|
# VPNC does not print a newline after an error.
|
|
echo
|
|
echo "Running 'vpnc $current --local-port 0 $vpnc_flags' failed."
|
|
return $status
|
|
fi
|
|
|
|
# Wait for the system to catch up.
|
|
/bin/sleep 1
|
|
|
|
# Copy files to allow a clean shutdown
|
|
# of multiple connections.
|
|
|
|
/bin/cp "$vpnc_pid_dir/$vpnc_pid_file" "$vpnc_pid_dir/vpnc.$config.pid"
|
|
/bin/cp "$vpnc_pid_dir/vpnc.defaultroute" "$vpnc_pid_dir/vpnc.$config.defaultroute" 2> /dev/null
|
|
/bin/cp "$vpnc_pid_dir/vpnc.resolv.conf-backup" "$vpnc_pid_dir/vpnc.$config.resolv.conf-backup" 2> /dev/null
|
|
echo "$config" >> "$vpnc_record"
|
|
done
|
|
}
|
|
|
|
vpnc_stop() {
|
|
if [ ! -e "$vpnc_record" ]; then
|
|
/bin/sleep 1
|
|
# There's no record of connections, assume unmanaged shutdown.
|
|
$command-disconnect
|
|
return $?
|
|
fi
|
|
|
|
# A record of vpnc connections is present. Attempt a
|
|
# managed shutdown.
|
|
|
|
for config in `/usr/bin/tail -r "$vpnc_record"`; do
|
|
|
|
# Wait to give the system a chance to catch up with
|
|
# recent changes.
|
|
|
|
/bin/sleep 1
|
|
|
|
# Move the vpnc files back into position.
|
|
|
|
/bin/mv "$vpnc_pid_dir/vpnc.$config.pid" "$vpnc_pid_dir/$vpnc_pid_file"
|
|
/bin/mv "$vpnc_pid_dir/vpnc.$config.defaultroute" "$vpnc_pid_dir/vpnc.defaultroute" 2> /dev/null
|
|
/bin/mv "$vpnc_pid_dir/vpnc.$config.resolv.conf-backup" "$vpnc_pid_dir/vpnc.resolv.conf-backup" 2> /dev/null
|
|
|
|
# Run the disconnect command.
|
|
$command-disconnect
|
|
done
|
|
|
|
# Remove the connection record.
|
|
|
|
/bin/rm "$vpnc_record"
|
|
}
|
|
|
|
start_cmd=vpnc_start
|
|
stop_cmd=vpnc_stop
|
|
|
|
load_rc_config $name
|
|
run_rc_command "$1"
|