freebsd-ports/net/ucarp/files/ucarp.in
Doug Barton 83eb2c3700 In the rc.d scripts, change assignments to rcvar to use the
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.
2012-01-14 08:57:23 +00:00

151 lines
4.3 KiB
Bash

#!/bin/sh
# $FreeBSD$
# PROVIDE: ucarp
# REQUIRE: DAEMON
# KEYWORD: shutdown
# Add the following lines to /etc/rc.conf to enable & configure ucarp:
#
# Mandatory options:
#
# ucarp_enable (bool): Set it to "YES" to enable ucarp.
# Default is "NO".
# ucarp_addr (str): Set virtual shared IP address.
# ucarp_if (str): Set interface to use for ucarp checks.
# ucarp_src (str): Set source (real) IP address of that host.
# ucarp_passfile (str): Set file to read password from. The file must
# not be readable by 'others'. Unset by default.
# ucarp_pass (str): Set password. No defaults set and you are
# strongly encouraged to use ${ucarp_passfile}
# variable instead.
# Optional tunes:
#
# ucarp_vhid (int): Set virtual IP identifier (1-255). Default is "1".
# ucarp_preempt (bool): Set it to "YES" to become a master as soon as
# possible. Default is "NO".
# ucarp_advbase (int): Set advertisement frequency (seconds).
# ucarp_advskew (int): Set advertisement skew (0-255).
# ucarp_upscript (str): Run <file> to become a master. You may want to
# use %%PREFIX%%/sbin/ucarp-up script for this
# purpose.
# ucarp_downscript (str): Run <file> to become a backup. You may want to
# use %%PREFIX%%/sbin/ucarp-down script for this
# purpose.
# ucarp_deadratio (int): Set ratio to consider a host as dead.
# ucarp_shutdown (bool): Set it to "YES" to call shutdown script at exit.
# Default is "YES".
# ucarp_facility (str): Set syslog facility. Default is "daemon".
# ucarp_xparam (str): Extra parameter to send to up/down scripts. No
# defaults set.
. /etc/rc.subr
name="ucarp"
rcvar=ucarp_enable
load_rc_config $name
: ${ucarp_enable="NO"}
: ${ucarp_vhid="1"}
: ${ucarp_preempt="NO"}
: ${ucarp_shutdown="YES"}
: ${ucarp_facility="daemon"}
command=%%PREFIX%%/sbin/ucarp
command_args="-i ${ucarp_if} -f ${ucarp_facility} -B "
start_precmd="build_command_args"
build_command_args()
{
# Check for mandatory arguments are set.
for _var in ucarp_src ucarp_addr ucarp_if; do
eval "_val=\$${_var}"
if [ -z "${_val}" ]; then
err 255 "\${${_var}} parameter required to start."
fi
done
# ${ucarp_passfile} or ${ucarp_pass} must also be set,
if [ -z "${ucarp_passfile}" -a -z "${ucarp_pass}" ]; then
str="You need to set one of \${ucarp_passfile} or"
str=" \${ucarp_pass} variable to run ucarp."
err 255 "${str}"
fi
# but not both.
if [ ! -z "${ucarp_passfile}" -a ! -z "${ucarp_pass}" ]; then
str="You should not set both \${ucarp_passfile} and"
str="${str} \${ucarp_pass} variables. "
str="${str} Will try to use \${ucarp_passfile} instead."
warn "${str}"
fi
# Set password source.
if [ ! -z "${ucarp_passfile}" ]; then
# The variable should point to a file resource.
if [ ! -f "${ucarp_passfile}" ]; then
str="\${ucarp_passfile} variable is set,"
str="${str} but the value is not a file."
err 255 "${str}"
else
# Check permissions: password file must not be world
# readable. First, take the file permissions mode as a
# shell variable.
eval `stat -s ${ucarp_passfile}`
# Yeld the last digit and check if `r' bit is set.
if [ $((${st_mode##${st_mode%%?}} & 4)) -ne 0 ]; then
err 255 "Password file is readable by others."
fi
# Set the passfile argument.
command_args="${command_args} \
--passfile=${ucarp_passfile}"
fi
else
# Set the password with command line argument.
command_args="${command_args} -p ${ucarp_pass}"
fi
# Check and set optional args if any.
if checkyesno ucarp_preempt; then
command_args="${command_args} -P"
fi
if checkyesno ucarp_shutdown; then
command_args="${command_args} -z"
fi
if [ ! -z "${ucarp_xparam}" ]; then
command_args="${command_args} -x \"${ucarp_xparam}\""
fi
if ! [ -z ${ucarp_upscript} ]; then
command_args="${command_args} -u ${ucarp_upscript}"
fi
if ! [ -z ${ucarp_downscript} ]; then
command_args="${command_args} -d ${ucarp_downscript}"
fi
if ! [ -z ${ucarp_deadratio} ]; then
command_args="${command_args} -r ${ucarp_deadratio}"
fi
if ! [ -z ${ucarp_advbase} ]; then
command_args="${command_args} -b ${ucarp_advbase}"
fi
if ! [ -z ${ucarp_advskew} ]; then
command_args="${command_args} -k ${ucarp_advskew}"
fi
command_args="${command_args} -s ${ucarp_src} -a ${ucarp_addr}"
command_args="${command_args} -i ${ucarp_if} -v ${ucarp_vhid}"
}
run_rc_command "$1"