Changeset View
Changeset View
Standalone View
Standalone View
head/sbin/init/rc.d/ftp-proxy
Property | Old Value | New Value |
---|---|---|
svn:executable | null | * \ No newline at end of property |
svn:keywords | null | FreeBSD=%H \ No newline at end of property |
#!/bin/sh | |||||
# | |||||
# $FreeBSD$ | |||||
# | |||||
# PROVIDE: ftp-proxy | |||||
# REQUIRE: DAEMON pf | |||||
# KEYWORD: shutdown | |||||
. /etc/rc.subr | |||||
name="ftpproxy" | |||||
desc="Internet File Transfer Protocol proxy daemon" | |||||
rcvar="ftpproxy_enable" | |||||
command="/usr/sbin/ftp-proxy" | |||||
load_rc_config $name | |||||
# | |||||
# manage_pid argument | |||||
# Create or remove a pidfile manually, for daemons that can't be bothered | |||||
# to do it themselves. Takes one argument, which is the argument provided | |||||
# to the rc script. The pidfile will be named /var/run/<$name>.pid, | |||||
# unless $pidfile is defined. | |||||
# | |||||
# The method used to determine the pid is rather hacky; grep ps output to | |||||
# find '$procname|$command', then grep for ${name}_flags. If at all | |||||
# possible, use another method if at all possible, to avoid that dirty- | |||||
# code feeling. | |||||
# | |||||
manage_pid() { | |||||
local search_string ps_pid | |||||
case $1 in | |||||
*start) | |||||
cmd_string=`basename ${procname:-${command}}` | |||||
eval flag_string=\"\$${name}_flags\" | |||||
# Determine the pid. | |||||
ps_pid=`ps ax -o pid= -o command= | grep $cmd_string | grep -e "$flag_string" | grep -v grep | awk '{ print $1 }'` | |||||
# Write the pidfile depending on $pidfile status. | |||||
echo $ps_pid > ${pidfile:-"/var/run/$name.pid"} | |||||
;; | |||||
stop) | |||||
rm $pidfile | |||||
;; | |||||
esac | |||||
} | |||||
# Allow ftp-proxy to start up in two different ways. The typical behavior | |||||
# is to start up one instance of ftp-proxy by setting ftpproxy_enable and | |||||
# ftpproxy_flags. The alternate behavior allows multiple instances of ftp- | |||||
# proxy to be started, allowing different types of proxy behavior. To use the | |||||
# new behavior, a list of instances must be defined, and a list of flags for | |||||
# each instance. For example, if we want to start two instances of ftp-proxy, | |||||
# foo and bar, we would set the following vars. | |||||
# ftpproxy_enable="YES" | |||||
# ftpproxy_instances="foo bar" | |||||
# ftpproxy_foo="<arguments for foo>" | |||||
# ftpproxy_bar="<arguments for bar>" | |||||
# | |||||
# Starting more than one ftp-proxy? | |||||
if [ "$ftpproxy_instances" ] && [ -n "${ftpproxy_instances}" ]; then | |||||
# Iterate through instance list. | |||||
for i in $ftpproxy_instances; do | |||||
#eval ftpproxy_${i}_flags=\$ftpproxy_${i} | |||||
#eval name=ftpproxy_${i} | |||||
# Set flags for this instance. | |||||
eval ftpproxy_flags=\$ftpproxy_${i} | |||||
# Define a unique pid file name. | |||||
pidfile="/var/run/ftp-proxy.$i.pid" | |||||
run_rc_command "$1" | |||||
manage_pid $1 | |||||
done | |||||
else | |||||
# Traditional single-instance behavior | |||||
run_rc_command "$1" | |||||
fi |