]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - etc/rc.d/ftp-proxy
Merge branch 'releng/11.3' into releng-CDN/11.3
[FreeBSD/FreeBSD.git] / etc / rc.d / ftp-proxy
1 #!/bin/sh
2 #
3 # $FreeBSD$
4 #
5
6 # PROVIDE: ftp-proxy
7 # REQUIRE: DAEMON pf
8 # KEYWORD: shutdown
9
10 . /etc/rc.subr
11
12 name="ftpproxy"
13 desc="Internet File Transfer Protocol proxy daemon"
14 rcvar="ftpproxy_enable"
15 command="/usr/sbin/ftp-proxy"
16
17 load_rc_config $name
18
19 #
20 # manage_pid argument
21 #       Create or remove a pidfile manually, for daemons that can't be bothered
22 #       to do it themselves. Takes one argument, which is the argument provided
23 #       to the rc script. The pidfile will be named /var/run/<$name>.pid,
24 #       unless $pidfile is defined.
25 #
26 #       The method used to determine the pid is rather hacky; grep ps output to
27 #       find '$procname|$command', then grep for ${name}_flags. If at all
28 #       possible, use another method if at all possible, to avoid that dirty-
29 #       code feeling.
30 #
31 manage_pid() {
32         local search_string ps_pid
33         case $1 in
34                 *start)
35                         cmd_string=`basename ${procname:-${command}}`
36                         eval flag_string=\"\$${name}_flags\"
37                         # Determine the pid.
38                         ps_pid=`ps ax -o pid= -o command= | grep $cmd_string | grep -e "$flag_string" | grep -v grep | awk '{ print $1 }'`
39                         # Write the pidfile depending on $pidfile status.
40                         echo $ps_pid > ${pidfile:-"/var/run/$name.pid"}
41                         ;;
42                 stop)
43                         rm $pidfile
44                         ;;
45         esac
46 }
47
48 # Allow ftp-proxy to start up in two different ways. The typical behavior
49 # is to start up one instance of ftp-proxy by setting ftpproxy_enable and
50 # ftpproxy_flags. The alternate behavior allows multiple instances of ftp-
51 # proxy to be started, allowing different types of proxy behavior. To use the
52 # new behavior, a list of instances must be defined, and a list of flags for
53 # each instance. For example, if we want to start two instances of ftp-proxy,
54 # foo and bar, we would set the following vars.
55 #       ftpproxy_enable="YES"
56 #       ftpproxy_instances="foo bar"
57 #       ftpproxy_foo="<arguments for foo>"
58 #       ftpproxy_bar="<arguments for bar>"
59 #
60 # Starting more than one ftp-proxy?
61 if [ "$ftpproxy_instances" ] && [ -n "${ftpproxy_instances}" ]; then
62         # Iterate through instance list.
63         for i in $ftpproxy_instances; do
64                 #eval ftpproxy_${i}_flags=\$ftpproxy_${i}
65                 #eval name=ftpproxy_${i}
66                 # Set flags for this instance.
67                 eval ftpproxy_flags=\$ftpproxy_${i}
68                 # Define a unique pid file name.
69                 pidfile="/var/run/ftp-proxy.$i.pid"
70                 run_rc_command "$1"
71                 manage_pid $1
72         done
73 else
74         # Traditional single-instance behavior
75         run_rc_command "$1"
76 fi