#!/sbin/openrc-run # Copyright 1999-2014 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ depend() { use logger net } parse_opts() { local milter_opt milter_flag= for milter_opt in ${HASHCASH_MILTER_OPTS}; do case "${milter_flag}" in -u) milter_user=${milter_opt} ;; -P) milter_pid=${milter_opt} ;; esac [ -n "${milter_user}" -a -n "${milter_pid}" ] && break milter_flag=${milter_opt} done if [ -z "${milter_user}" ]; then milter_user=milter HASHCASH_MILTER_OPTS="${HASHCASH_MILTER_OPTS} -u ${milter_user}" fi if [ -z "${milter_pid}" ]; then milter_pid="/var/run/hashcash-milter.pid" HASHCASH_MILTER_OPTS="${HASHCASH_MILTER_OPTS} -P ${milter_pid}" fi } clean_socket() { local socket_file= svc_pid= socket_file="$(echo ${HASHCASH_MILTER_OPTS} | sed -e 's/.*local:\(.*\) .*/\1/' | awk '{print $1}')" svc_pid="$(ps -C hashcash-milter -o pid=)" if [ -z "${svc_pid}" ] && [ ! -z "${socket_file}" ] && [ -S "${socket_file}" ]; then ewarn "Strange, the socket file already exist in \"${socket_file}\"" ewarn "it will be removed now and re-created by the hashcash-milter server" ewarn "BUT please make your checks." rm -f "${socket_file}" fi } check_socketdir() { local socket_dir case "${SOCKETSPEC}" in local:*) socket_dir="$(echo ${SOCKETSPEC} | sed -e 's~^local:\(.*\)/.*$~\1~')" if [ ! -d ${socket_dir} ]; then checkpath -q -d -o ${milter_user}:${milter_user} -m 0755 ${socket_dir} || return 1 fi ;; inet:*) ;; inet6:*) ;; *) eerror "Unknown socket spec. Please check your /etc/conf.d/hashcash-milter file." return 1 ;; esac } start() { local milter_user= milter_pid= clean_socket parse_opts check_socketdir || return 1 if ! (touch ${milter_pid} && chown ${milter_user} ${milter_pid}) ; then eerror "Failed to create pidfile" return 1 fi ebegin "Starting Hashcash Milter" start-stop-daemon --start --exec /usr/bin/hashcash-milter -- ${HASHCASH_MILTER_OPTS} eend $? } stop() { local milter_user= milter_pid= parse_opts ebegin "Stopping Hashcash Milter" start-stop-daemon --stop --quiet --name hashcash-milter --pidfile ${milter_pid} eend $? if [ $? = 0 -a -f "${milter_pid}" ]; then rm ${milter_pid} fi }