#!/bin/sh
#
# Apache control script designed to allow an easy command line interface
# to controlling Apache.  Written by Marc Slemko, 1997/08/23
# 
# The exit codes returned are:
#	0 - operation completed successfully
#	1 - 
#	2 - usage error
#	3 - httpd could not be started
#	4 - httpd could not be stopped
#	5 - httpd could not be started during a restart
#	6 - httpd could not be restarted during a restart
#	7 - httpd could not be restarted during a graceful restart
#	8 - configuration syntax error
#
# When multiple arguments are given, only the error from the _last_
# one is reported.  Run "apachectl help" for usage info
#
### BEGIN INIT INFO
# Provides:       httpd
# Required-Start: 
# Required-Stop:
# Default-Start:  3 5
# Default-Stop:   
# Description:    Start the Apache master daemon
# chkconfig: 345 85 15
### END INIT INFO
#
# For our custom script to run we need to determine a few things
# HTTPD_ROOT
if [ "$EUID" = "0" ]; then
	HTTPD_ROOT=/usr/local/apache
	HTTP_PORT=80
	HTTPS_PORT=443
else 
	HTTPD_ROOT=~/apache
	HTTP_PORT="${EUID}80"
	HTTPS_PORT="${EUID}43"
fi

# check to make sure we can find a conf.pl file
if [ ! -f "$HTTPD_ROOT/conf/conf.pl" ]; then
	echo "Can not locate $HTTPD_ROOT/conf/conf.pl"
	exit 1
fi

# export some things we will need
export HTTPD_ROOT HTTP_PORT HTTPS_PORT EUID

PERL5LIB=/code; export PERL5LIB

#echo "HTTPD_ROOT=$HTTPD_ROOT"
#echo "HTTP_PORT=$HTTP_PORT"
#echo "HTTPS_PORT=$HTTPS_PORT"
#echo "EUID=$EUID"

# |||||||||||||||||||| START CONFIGURATION SECTION  ||||||||||||||||||||
# --------------------                              --------------------
# 
# the path to your PID file
PIDFILE=$HTTPD_ROOT/logs/httpd.pid
#
# the path to your httpd binary, including options if necessary
HTTPD="/usr/local/apache/bin/httpd -f $HTTPD_ROOT/conf/httpd.conf"
#
# a command that outputs a formatted text version of the HTML at the
# url given on the command line.  Designed for lynx, however other
# programs may work.  
LYNX="lynx -dump"
#
# the URL to your server's mod_status status page.  If you do not
# have one, then status and fullstatus will not work.
STATUSURL="http://localhost/server-status"
#
# --------------------                              --------------------
# ||||||||||||||||||||   END CONFIGURATION SECTION  ||||||||||||||||||||

ERROR=0
ARGV="$@"
if [ "x$ARGV" = "x" ] ; then 
    ARGS="help"
fi

for ARG in $@ $ARGS
do
    # check for pidfile
    if [ -f $PIDFILE ] ; then
	PID=`cat $PIDFILE`
	if [ "x$PID" != "x" ] && kill -0 $PID 2>/dev/null ; then
	    STATUS="httpd (pid $PID) running"
	    RUNNING=1
	else
	    STATUS="httpd (pid $PID?) not running"
	    RUNNING=0
	fi
    else
	STATUS="httpd (no pid file) not running"
	RUNNING=0
    fi

    case $ARG in
    start)
	if [ $RUNNING -eq 1 ]; then
	    echo "$0 $ARG: httpd (pid $PID) already running"
	    continue
	fi
	# create the httpd.conf file
	#echo "Creating httpd.conf file"
	if ! $HTTPD_ROOT/conf/conf.pl > $HTTPD_ROOT/conf/httpd.conf; then
		echo "Error creating $HTTPD_ROOT/conf/httpd.conf"
		exit 1
	fi
	#echo "Starting $HTTPD"
	if $HTTPD ; then
	    echo "$0 $ARG: httpd started"
	else
	    echo "$0 $ARG: httpd could not be started"
	    ERROR=3
	fi
	;;
    stop)
	if [ $RUNNING -eq 0 ]; then
	    echo "$0 $ARG: $STATUS"
	    continue
	fi
	if kill $PID ; then
	    echo "$0 $ARG: httpd stopped"
	else
	    echo "$0 $ARG: httpd could not be stopped"
	    ERROR=4
	fi
	;;
    restart)
	if [ $RUNNING -eq 0 ]; then
	    echo "$0 $ARG: httpd not running, trying to start"
		# create the httpd.conf file
		#echo "Creating httpd.conf file"
		if ! $HTTPD_ROOT/conf/conf.pl > $HTTPD_ROOT/conf/httpd.conf; then
			echo "Error creating $HTTPD_ROOT/conf/httpd.conf"
			exit 1
		fi
		#echo "Starting $HTTPD"
	    if $HTTPD ; then
		echo "$0 $ARG: httpd started"
	    else
		echo "$0 $ARG: httpd could not be started"
		ERROR=5
	    fi
	else
	    if $HTTPD -t >/dev/null 2>&1; then
			#echo "Stopping $HTTPD"
			if kill $PID ; then
				#echo "Creating httpd.conf file"
				# create the httpd.conf file
				if ! $HTTPD_ROOT/conf/conf.pl > $HTTPD_ROOT/conf/httpd.conf; then
					echo "Error creating $HTTPD_ROOT/conf/httpd.conf"
					exit 1
				fi
				#echo "Starting $HTTPD"
	    		if $HTTPD ; then
					echo "$0 $ARG: httpd restarted"
	    		else
					echo "$0 $ARG: httpd could not be started"
					ERROR=5
	    		fi
			else
			    echo "$0 $ARG: httpd could not be stopped"
			    ERROR=4
			fi
	    else
		echo "$0 $ARG: configuration broken, ignoring restart"
		echo "$0 $ARG: (run 'apachectl configtest' for details)"
		ERROR=6
	    fi
	fi
	;;
    *)
	echo "usage: $0 (start|stop|restart|help)"
	cat <<EOF

start      - start httpd
stop       - stop httpd
restart    - stop then start httpd 
help       - this screen

EOF
	ERROR=2
    ;;

    esac

done

exit $ERROR

## ====================================================================
## The Apache Software License, Version 1.1
##
## Copyright (c) 2000-2003 The Apache Software Foundation.  All rights
## reserved.
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted provided that the following conditions
## are met:
##
## 1. Redistributions of source code must retain the above copyright
##    notice, this list of conditions and the following disclaimer.
##
## 2. Redistributions in binary form must reproduce the above copyright
##    notice, this list of conditions and the following disclaimer in
##    the documentation and/or other materials provided with the
##    distribution.
##
## 3. The end-user documentation included with the redistribution,
##    if any, must include the following acknowledgment:
##       "This product includes software developed by the
##        Apache Software Foundation (http://www.apache.org/)."
##    Alternately, this acknowledgment may appear in the software itself,
##    if and wherever such third-party acknowledgments normally appear.
##
## 4. The names "Apache" and "Apache Software Foundation" must
##    not be used to endorse or promote products derived from this
##    software without prior written permission. For written
##    permission, please contact apache@apache.org.
##
## 5. Products derived from this software may not be called "Apache",
##    nor may "Apache" appear in their name, without prior written
##    permission of the Apache Software Foundation.
##
## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
## OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
## DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
## ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
## SUCH DAMAGE.
## ====================================================================
##
## This software consists of voluntary contributions made by many
## individuals on behalf of the Apache Software Foundation.  For more
## information on the Apache Software Foundation, please see
## <http://www.apache.org/>.
##
## Portions of this software are based upon public domain software
## originally written at the National Center for Supercomputing Applications,
## University of Illinois, Urbana-Champaign.
##
# 
