summaryrefslogtreecommitdiffstats
path: root/heartbeat/Pure-FTPd
diff options
context:
space:
mode:
Diffstat (limited to 'heartbeat/Pure-FTPd')
-rwxr-xr-xheartbeat/Pure-FTPd260
1 files changed, 260 insertions, 0 deletions
diff --git a/heartbeat/Pure-FTPd b/heartbeat/Pure-FTPd
new file mode 100755
index 0000000..1499ddd
--- /dev/null
+++ b/heartbeat/Pure-FTPd
@@ -0,0 +1,260 @@
+#!/bin/sh
+#
+# Resource script for Pure-FTPd
+#
+# Description: Manages Pure-FTPd as an OCF resource in
+# an Active-Passive High Availability setup.
+#
+# Author: Rajat Upadhyaya <urajat@novell.com> : Pure-FTPd script
+# Author: Raoul Bhatia <r.bhatia@ipax.at> : Minor Cleanup. Added Debian GNU/Linux Support
+# License: GNU General Public License (GPL)
+#
+#
+# usage: $0 {start|stop|status|monitor|validate-all|meta-data}
+#
+# The "start" arg starts Pure-FTPd.
+#
+# The "stop" arg stops it.
+#
+# OCF parameters:
+# OCF_RESKEY_script
+# OCF_RESKEY_conffile
+# OCF_RESKEY_daemon_type
+# OCF_RESKEY_pidfile
+#
+##########################################################################
+# Initialization:
+
+: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat}
+. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs
+
+# Parameter defaults
+
+OCF_RESKEY_script_default="/sbin/pure-config.pl"
+OCF_RESKEY_conffile_default="/etc/pure-ftpd/pure-ftpd.conf"
+OCF_RESKEY_daemon_type_default=""
+OCF_RESKEY_pidfile_default="${HA_RSCTMP}/pure-ftpd-${OCF_RESOURCE_INSTANCE}.pid"
+
+: ${OCF_RESKEY_script=${OCF_RESKEY_script_default}}
+: ${OCF_RESKEY_conffile=${OCF_RESKEY_conffile_default}}
+: ${OCF_RESKEY_daemon_type=${OCF_RESKEY_daemon_type_default}}
+: ${OCF_RESKEY_pidfile=${OCF_RESKEY_pidfile_default}}
+
+script_basename=`basename $OCF_RESKEY_script`
+
+USAGE="Usage: $0 {start|stop|status|monitor|validate-all|meta-data}";
+
+##########################################################################
+
+usage() {
+ echo $USAGE >&2
+}
+
+meta_data() {
+ cat <<END
+<?xml version="1.0"?>
+<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
+<resource-agent name="Pure-FTPd" version="1.0">
+<version>1.0</version>
+<longdesc lang="en">
+This script manages Pure-FTPd in an Active-Passive setup
+</longdesc>
+<shortdesc lang="en">Manages a Pure-FTPd FTP server instance</shortdesc>
+
+<parameters>
+
+<parameter name="script" unique="1" required="0">
+<longdesc lang="en">
+The full path to the Pure-FTPd startup script.
+For example, "/sbin/pure-config.pl"
+</longdesc>
+<shortdesc lang="en">Script name with full path</shortdesc>
+<content type="string" default="${OCF_RESKEY_script_default}" />
+</parameter>
+
+<parameter name="conffile" unique="1" required="0">
+<longdesc lang="en">
+The Pure-FTPd configuration file name with full path.
+For example, "/etc/pure-ftpd/pure-ftpd.conf"
+</longdesc>
+<shortdesc lang="en">Configuration file name with full path</shortdesc>
+<content type="string" default="${OCF_RESKEY_conffile_default}" />
+</parameter>
+
+<parameter name="daemon_type" unique="1" required="0">
+<longdesc lang="en">
+The Pure-FTPd daemon to be called by pure-ftpd-wrapper.
+Valid options are "" for pure-ftpd, "mysql" for pure-ftpd-mysql,
+"postgresql" for pure-ftpd-postgresql and "ldap" for pure-ftpd-ldap
+</longdesc>
+<shortdesc lang="en">Configuration file name with full path</shortdesc>
+<content type="string" default="${OCF_RESKEY_daemon_type_default}" />
+</parameter>
+
+<parameter name="pidfile" unique="0">
+<longdesc lang="en">PID file</longdesc>
+<shortdesc lang="en">PID file</shortdesc>
+<content type="string" default="${OCF_RESKEY_pidfile_default}" />
+</parameter>
+
+</parameters>
+
+<actions>
+<action name="start" timeout="20s" />
+<action name="stop" timeout="20s" />
+<action name="monitor" depth="0" timeout="20s" interval="60s" />
+<action name="validate-all" timeout="20s" />
+<action name="meta-data" timeout="5s" />
+</actions>
+</resource-agent>
+END
+ exit $OCF_SUCCESS
+}
+
+isRunning()
+{
+ kill -s 0 "$1" > /dev/null
+}
+
+PureFTPd_status()
+{
+ if [ -f $OCF_RESKEY_pidfile ]
+ then
+ # Pure-FTPd is probably running
+ PID=`head -n 1 $OCF_RESKEY_pidfile`
+ if [ ! -z $PID ] ; then
+ isRunning "$PID" && [ `ps -p $PID | grep pure-ftpd | wc -l` -eq 1 ]
+ return $?
+ fi
+ fi
+
+ # Pure-FTPd is not running
+ false
+}
+
+PureFTPd_start()
+{
+ local pid_dir
+
+ #
+ # make a few checks and start Pure-FTPd
+ #
+ if ocf_is_root ; then : ; else
+ ocf_log err "You must be root."
+ exit $OCF_ERR_PERM
+ fi
+
+ # if Pure-FTPd is running return success
+
+ if PureFTPd_status ; then
+ exit $OCF_SUCCESS
+ fi
+
+ # check that the Pure-FTPd script exists and can be executed
+ if [ ! -x "$OCF_RESKEY_script" ]; then
+ ocf_log err "Pure-FTPd script '$OCF_RESKEY_script' does not exist or cannot be executed"
+ exit $OCF_ERR_GENERIC
+ fi
+
+ # make sure that the pid directory exists
+ pid_dir=`dirname $OCF_RESKEY_pidfile`
+ if [ ! -d $pid_dir ] ; then
+ ocf_log info "Creating PID directory '$pid_dir'."
+ mkdir -p $pid_dir
+ fi
+
+ # test for pure-ftpd-wrapper (e.g. Debian GNU/Linux Systems)
+ if [ "$script_basename" = "pure-ftpd-wrapper" ]; then
+ # pure-ftpd-wrapper expects STANDALONE_OR_INETD to be set to standalone
+ STANDALONE_OR_INETD=standalone $OCF_RESKEY_script $OCF_RESKEY_daemon_type
+ else
+ # check that the Pure-FTPd config file exist
+ if [ ! -f "$OCF_RESKEY_conffile" ]; then
+ ocf_log err "Pure_FTPd config file '$OCF_RESKEY_conffile' does not exist"
+ exit $OCF_ERR_GENERIC
+ fi
+
+ $OCF_RESKEY_script $OCF_RESKEY_conffile -g $OCF_RESKEY_pidfile
+ fi
+
+ if [ $? -ne 0 ]; then
+ ocf_log info "Pure-FTPd returned error" $?
+ exit $OCF_ERR_GENERIC
+ fi
+
+ exit $OCF_SUCCESS
+}
+
+
+PureFTPd_stop()
+{
+ if PureFTPd_status ; then
+ PID=`head -n 1 $OCF_RESKEY_pidfile`
+ if [ ! -z $PID ] ; then
+ kill $PID
+ fi
+ fi
+
+ exit $OCF_SUCCESS
+}
+
+PureFTPd_monitor()
+{
+ if PureFTPd_status ; then
+ return $OCF_SUCCESS
+ fi
+
+ return $OCF_NOT_RUNNING
+}
+
+PureFTPd_validate_all()
+{
+ return $OCF_SUCCESS
+}
+
+#
+# Main
+#
+
+if [ $# -ne 1 ]
+then
+ usage
+ exit $OCF_ERR_ARGS
+fi
+
+case $1 in
+ start) PureFTPd_start
+ ;;
+
+ stop) PureFTPd_stop
+ ;;
+
+ status) if PureFTPd_status
+ then
+ ocf_log info "Pure-FTPd is running"
+ exit $OCF_SUCCESS
+ else
+ ocf_log info "Pure-FTPd is stopped"
+ exit $OCF_NOT_RUNNING
+ fi
+ ;;
+
+ monitor) PureFTPd_monitor
+ exit $?
+ ;;
+
+ validate-all) PureFTPd_validate_all
+ exit $?
+ ;;
+
+ meta-data) meta_data
+ ;;
+
+ usage) usage
+ exit $OCF_SUCCESS
+ ;;
+
+ *) usage
+ exit $OCF_ERR_UNIMPLEMENTED
+ ;;
+esac