#!/bin/bash
### BEGIN INIT INFO
# Provides:          ofr
# Required-Start:    $syslog $time $local_fs
# Required-Stop:     $syslog $time $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Vyatta Router
# Description:       Debian init script for the Vyatta Router
### END INIT INFO
# **** License ****
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
# 
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# A copy of the GNU General Public License is available as
# `/usr/share/common-licenses/GPL' in the Debian GNU/Linux distribution
# or on the World Wide Web at `http://www.gnu.org/copyleft/gpl.html'.
# You can also obtain it by writing to the Free Software Foundation,
# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
# MA 02110-1301, USA.
#
# Author:	Tom Grennan <tgrennan@vyatta.com>
# **** End License ****

. /lib/lsb/init-functions

: ${vyatta_env:=/etc/default/vyatta}
source $vyatta_env

declare progname=${0##*/}
declare action=$1; shift

declare -x BOOTFILE=$vyatta_sysconfdir/config/config.boot

declare -a subinit
declare -a all_subinits=(
    rl-system
    firewall )

if [ $# -gt 0 ] ; then
    for s in $@ ; do
	[ -x ${vyatta_sbindir}/${s}.init ] && subinit[${#subinit}]=$s
    done
else
    for s in ${all_subinits[@]} ; do
	[ -x ${vyatta_sbindir}/${s}.init ] && subinit[${#subinit}]=$s
    done
    if [ -x ${vyatta_sbindir}/rtrmgr.init ] ; then
	subinit+=( rtrmgr )
	GROUP=xorp
    else
	GROUP=vyattacfg
    fi
fi


have_rl_system () {
    test -x $vyatta_sbindir/rl-system.init
}

# if necessary, provide initial config
init_bootfile () {
    if [ -f $BOOTFILE ] && grep -q '/\*XORP Configuration File, v1.0\*/' \
			    $BOOTFILE >&/dev/null; then
	CURTIME=$(date +%F-%H%M%S)
	mv $BOOTFILE $BOOTFILE.pre-glendale.$CURTIME
    fi
    if [ ! -f $BOOTFILE ] ; then
	if [ -f $vyatta_sysconfdir/config.boot.default ]; then
	  cp $vyatta_sysconfdir/config.boot.default $BOOTFILE
        else
          $vyatta_sbindir/vyatta_current_conf_ver.pl > $BOOTFILE
        fi
    fi
    chgrp ${GROUP} $BOOTFILE 
    chmod 660 $BOOTFILE
    ## remove the unnecessary and potentially conflicting
    ## config-directory statement (i.e. /mnt/floppy vs. /media/floppy
    sed -i '/^rtrmgr {$/,/^}$/d' $BOOTFILE
}

# if necessary, migrate initial config
migrate_bootfile ()
{
    if [ -x $vyatta_sbindir/vyatta_config_migrate.pl ]; then
        log_progress_msg migrate
        $vyatta_sbindir/vyatta_config_migrate.pl $BOOTFILE
    fi
}

# load the initial config
load_bootfile ()
{
  if [ -x $vyatta_sbindir/vyatta-config-loader.pl ]; then
    log_progress_msg configure
    sg ${GROUP} -c "$vyatta_sbindir/vyatta-config-loader.pl $BOOTFILE"
  fi
}

start ()
{
    log_action_begin_msg "Mounting Vyatta Config"
    mount -o nosuid,nodev,mode=775 -t tmpfs none ${vyatta_configdir} && \
	chgrp ${GROUP} ${vyatta_configdir}
    log_action_end_msg $?
    init_bootfile
    log_daemon_msg "Starting Vyatta Router"
    migrate_bootfile
    for s in ${subinit[@]} ; do
	log_progress_msg $s
	${vyatta_sbindir}/${s}.init start || (log_end_msg $? && return)
    done
    load_bootfile
    chmod g-w,o-w /

    (   [ -s /boot/grub/menu.lst ] &&
	upgrade-from-grub-legacy &&
	rm -f /boot/grub/menu.lst*
    ) || true

    log_end_msg $?
}

stop()
{
    local -i status=0
    log_daemon_msg "Stopping Vyatta Router"
    for ((i=${#sub_inits[@]} - 1; i >= 0; i--)) ; do
	s=${subinit[$i]}
	log_progress_msg $s
	${vyatta_sbindir}/${s}.init stop
	let status\|=$?
    done
    log_end_msg $status
    log_action_begin_msg "Un-mounting Vyatta Config"
    umount ${vyatta_configdir}
    log_action_end_msg $?
}

case "$action" in
    start) start ;;
    stop)  stop ;;
    restart|force-reload) stop && start ;;
    *)	log_failure_msg "usage: $progname [ start|stop|restart ] [ subinit ... ]" ;
	false ;;
esac

exit $?

# Local Variables:
# mode: shell-script
# sh-indentation: 4
# End: