src/util/distro-import/89/svc-coreadm
author David.Comay@Sun.COM
Thu, 22 May 2008 17:41:33 -0700
changeset 377 90c02a011a3a
parent 358 src/util/distro-import/86/svc-coreadm@c4384faec98d
permissions -rw-r--r--
1740 beadm needs to be in an RBAC profile 1877 SUNWckr delivering boot/solaris/filelist.ramdisk in non-global zones 1993 supplied versions of ksh.1 and rksh.1 are incorrect 1995 resync repository to snv_89 1996 PostgreSQL root packages can be combined into their bases

#!/sbin/sh
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#
# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
# ident	"@(#)svc-coreadm	1.4	08/04/25 SMI"
#
# Start/refresh method script for the coreadm service.
#

. /lib/svc/share/smf_include.sh

FMRI=${SMF_FMRI:-svc:/system/coreadm:default}

read_conf() {
	preamble="svccfg -s $FMRI setprop config_params/"

	< /etc/coreadm.conf sed -n -e "
	/^COREADM/!d
	s/^\([^=]*_ENABLED=\)yes/\1true/
	s/^\([^=]*_ENABLED=\)no/\1false/
	s,^,$preamble,
	s/COREADM_GLOB_PATTERN=\(.*\)$/global_pattern = astring: '\"\1\"'/p
	s/COREADM_GLOB_CONTENT=\(.*\)$/global_content = astring: '\"\1\"'/p
	s/COREADM_INIT_PATTERN=\(.*\)$/init_pattern = astring: '\"\1\"'/p
	s/COREADM_INIT_CONTENT=\(.*\)$/init_content = astring: '\"\1\"'/p
	s/COREADM_GLOB_ENABLED=/global_enabled = boolean: /p
	s/COREADM_PROC_ENABLED=/process_enabled = boolean: /p
	s/COREADM_GLOB_SETID_ENABLED=/global_setid_enabled = boolean: /p
	s/COREADM_PROC_SETID_ENABLED=/process_setid_enabled = boolean: /p
	s/COREADM_GLOB_LOG_ENABLED=/global_log_enabled = boolean: /p" | sh
	svcadm refresh $FMRI
}

getprop() {
	svcprop -p config_params/$1 $FMRI
}

error() {
	echo "Error reading property \"$1\"" 1>&2
	exit $SMF_EXIT_ERR_CONFIG
}

set_string() {
	value="`getprop $1`"
	[ $? -ne 0 ] && error $1
	[ "$value" = "\"\"" ] && value=""
	coreadm $2 "$value"
}

set_boolean() {
	enabled="`getprop $1`"
	[ $? -ne 0 ] && error $1
	if [ "$enabled" = "true" ]; then
		coreadm -e $2
	else
		coreadm -d $2
	fi
}

apply_conf() {
	set_string global_content -G
	set_string init_content -I
	set_string global_pattern -g
	set_string init_pattern -i

	set_boolean global_log_enabled log
	set_boolean global_enabled global
	set_boolean global_setid_enabled global-setid
	set_boolean process_enabled process
	set_boolean process_setid_enabled proc-setid
}

case $1 in
"start")
	# By virtue of using coreadm to effect coreadm changes,
	# coreadm.conf should always be up-to-date.  Treat it as
	# authoritative on boot to a) handle upgrade, and b)
	# handle the situation where administrators are using
	# the command to make customizations.
	#
	# In the off chance there is no coreadm.conf, apply the
	# the SMF configuration.

	if [ -f /etc/coreadm.conf ]; then
		read_conf
		coreadm -u
	else
		apply_conf
	fi
	;;
"refresh")
	# Refresh implies someone wants to apply the configuration
	# stored in the service.  Do so.
	#
	# It is possible for someone to use coreadm directly and
	# subsequently issue a refresh, resulting in the initial
	# changes being lost.  Given that a refresh will either be
	# issued explicitly by the administrator or by a
	# configuration activity that has made changes to the SMF
	# configuration and expects those changes to be applied,
	# this shouldn't be a big problem.

	apply_conf
	;;
esac

exit $SMF_EXIT_OK