#! /bin/sh

### BEGIN INIT INFO
# Provides:        apport
# Required-Start:  $local_fs $remote_fs
# Required-Stop:   $local_fs $remote_fs
# Default-Start:   2 3 4 5
# Default-Stop:
# Short-Description: automatic crash report generation
### END INIT INFO

setvar DESC = ""automatic crash report generation""
setvar NAME = 'apport'
setvar AGENT = "/usr/share/apport/apport"
setvar SCRIPTNAME = "/etc/init.d/$NAME"

# Exit if the package is not installed
test -x $AGENT || exit 0

# read default file
setvar enabled = '1'
test -e /etc/default/$NAME && source /etc/default/$NAME || true

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
source /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
proc do_start {
	# Return
	#   0 if daemon has been started
	#   1 if daemon was already running
	#   2 if daemon could not be started

	test -e /var/crash || mkdir -p /var/crash
	chmod 1777 /var/crash

	# check for kernel crash dump, convert it to apport report
	if test -e /var/crash/vmcore || test -n $(ls /var/crash | egrep ^[0-9]{12}$){
	    /usr/share/apport/kernel_crashdump || true
	}

	# check for incomplete suspend/resume or hibernate
	if test -e /var/lib/pm-utils/status {
		/usr/share/apport/apportcheckresume || true
		rm -f /var/lib/pm-utils/status
		rm -f /var/lib/pm-utils/resume-hang.log
	}

	echo "|$AGENT %p %s %c %d %P" > /proc/sys/kernel/core_pattern
	echo 2 > /proc/sys/fs/suid_dumpable
}

#
# Function that stops the daemon/service
#
proc do_stop {
	# Return
	#   0 if daemon has been stopped
	#   1 if daemon was already stopped
	#   2 if daemon could not be stopped
	#   other if a failure occurred

	echo 0 > /proc/sys/fs/suid_dumpable

	# Check for a hung resume.  If we find one try and grab everything
	# we can to aid in its discovery.
	if test -e /var/lib/pm-utils/status {
		ps -wwef >/var/lib/pm-utils/resume-hang.log
	}

	if test $(dd if=/proc/sys/kernel/core_pattern count=1 bs=1 ) != "|" {
	    return 1
	} else {
	    echo "core" > /proc/sys/kernel/core_pattern
	}
}

case (1) {
  start {
	# don't start in containers
	grep -zqs '^container=' /proc/1/environ && exit 0

	test $enabled = "1" || test $force_start = "1" || exit 0
	test $VERBOSE != no && log_daemon_msg "Starting $DESC:" $NAME
	do_start
	case ($?) {
		0|1 { test $VERBOSE != no && log_end_msg 0 }
		2 { test $VERBOSE != no && log_end_msg 1 }
	}
	}
  stop {
	# don't stop in containers
	grep -zqs '^container=' /proc/1/environ && exit 0

	test $VERBOSE != no && log_daemon_msg "Stopping $DESC:" $NAME
	do_stop
	case ($?) {
		0|1 { test $VERBOSE != no && log_end_msg 0 }
		2 { test $VERBOSE != no && log_end_msg 1 }
	}
	}
  restart|force-reload {
	$0 stop || true
	$0 start
	}
  * {
	echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
	exit 3
	}
}

: