kern_securelevel revision 252987
1250003Sadrian#!/bin/sh
2250003Sadrian#-
3250003Sadrian# Copyright (c) 2012-2013 Devin Teske
4250003Sadrian# All rights reserved.
5250003Sadrian#
6250003Sadrian# Redistribution and use in source and binary forms, with or without
7250003Sadrian# modification, are permitted provided that the following conditions
8250003Sadrian# are met:
9250003Sadrian# 1. Redistributions of source code must retain the above copyright
10250003Sadrian#    notice, this list of conditions and the following disclaimer.
11250003Sadrian# 2. Redistributions in binary form must reproduce the above copyright
12250003Sadrian#    notice, this list of conditions and the following disclaimer in the
13250003Sadrian#    documentation and/or other materials provided with the distribution.
14250003Sadrian#
15250003Sadrian# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16250003Sadrian# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17250003Sadrian# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18250003Sadrian# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19250003Sadrian# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20250003Sadrian# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21250003Sadrian# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22250003Sadrian# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23250003Sadrian# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24250003Sadrian# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25250003Sadrian# SUCH DAMAGE.
26250003Sadrian#
27250003Sadrian# $FreeBSD: head/usr.sbin/bsdconfig/security/kern_securelevel 252987 2013-07-07 18:51:44Z dteske $
28250003Sadrian#
29250003Sadrian############################################################ INCLUDES
30250003Sadrian
31250003SadrianBSDCFG_SHARE="/usr/share/bsdconfig"
32250003Sadrian. $BSDCFG_SHARE/common.subr || exit 1
33250003Sadrianf_dprintf "%s: loading includes..." "$0"
34250003Sadrianf_include $BSDCFG_SHARE/dialog.subr
35250003Sadrianf_include $BSDCFG_SHARE/mustberoot.subr
36250003Sadrianf_include $BSDCFG_SHARE/sysrc.subr
37250003Sadrian
38250003SadrianBSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="130.security"
39250003Sadrianf_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr
40250003Sadrian
41250003SadrianSECURELEVEL_HELPFILE=$BSDCFG_LIBE/$APP_DIR/include/securelevel.hlp
42250003Sadrian
43250003Sadrianipgm=$( f_index_menusel_keyword $BSDCFG_LIBE/$APP_DIR/INDEX "$pgm" )
44250003Sadrian[ $? -eq $SUCCESS -a "$ipgm" ] && pgm="$ipgm"
45250003Sadrian
46250003Sadrian############################################################ FUNCTIONS
47250003Sadrian
48250003Sadrian# dialog_menu_main
49250003Sadrian#
50250003Sadrian# Display the dialog(1)-based application main menu.
51250003Sadrian#
52250003Sadriandialog_menu_main()
53250003Sadrian{
54250003Sadrian	local prompt="$msg_securelevels_menu_text"
55250003Sadrian	local menu_list="
56250003Sadrian		'$msg_disabled'       '$msg_disable_securelevels'
57250003Sadrian		'$msg_secure'         '$msg_secure_mode'
58250003Sadrian		'$msg_highly_secure'  '$msg_highly_secure_mode'
59250003Sadrian		'$msg_network_secure' '$msg_network_secure_mode'
60250003Sadrian	" # END-QUOTE
61250003Sadrian	local defaultitem= # Calculated below
62250003Sadrian	local hline="$hline_select_securelevel_to_operate_at"
63250003Sadrian
64250003Sadrian	local height width rows
65250003Sadrian	eval f_dialog_menu_size height width rows \
66250003Sadrian	                        \"\$DIALOG_TITLE\"     \
67250003Sadrian	                        \"\$DIALOG_BACKTITLE\" \
68250003Sadrian	                        \"\$prompt\"           \
69250003Sadrian	                        \"\$hline\"            \
70250003Sadrian	                        $menu_list
71250003Sadrian
72250003Sadrian	case "$( f_sysrc_get kern_securelevel_enable )" in
73250003Sadrian	[Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1)
74250003Sadrian		case "$( f_sysrc_get kern_securelevel )" in
75250003Sadrian		1) defaultitem="$msg_secure"         ;;
76250003Sadrian		2) defaultitem="$msg_highly_secure"  ;;
77250003Sadrian		3) defaultitem="$msg_network_secure" ;;
78250003Sadrian		esac ;;
79250003Sadrian	*)
80250003Sadrian		defaultitem="$msg_disabled"
81250003Sadrian	esac
82250003Sadrian
83250003Sadrian	local menu_choice
84250003Sadrian	menu_choice=$( eval $DIALOG \
85250003Sadrian		--title \"\$DIALOG_TITLE\"         \
86250003Sadrian		--backtitle \"\$DIALOG_BACKTITLE\" \
87250003Sadrian		--hline \"\$hline\"                \
88250003Sadrian		--ok-label \"\$msg_ok\"            \
89250003Sadrian		--cancel-label \"\$msg_cancel\"    \
90250003Sadrian		--help-button                      \
91250003Sadrian		--help-label \"\$msg_help\"        \
92250003Sadrian		${USE_XDIALOG:+--help \"\"}        \
93250003Sadrian		--default-item \"\$defaultitem\"   \
94250003Sadrian		--menu \"\$prompt\"                \
95250003Sadrian		$height $width $rows               \
96250003Sadrian		$menu_list                         \
97250003Sadrian		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
98250003Sadrian	)
99250003Sadrian	local retval=$?
100250003Sadrian	f_dialog_menutag_store -s "$menu_choice"
101250003Sadrian	return $retval
102250003Sadrian}
103250003Sadrian
104250003Sadrian############################################################ MAIN
105250003Sadrian
106250003Sadrian# Incorporate rc-file if it exists
107250003Sadrian[ -f "$HOME/.bsdconfigrc" ] && f_include "$HOME/.bsdconfigrc"
108250003Sadrian
109250003Sadrian#
110250003Sadrian# Process command-line arguments
111250003Sadrian#
112250003Sadrianwhile getopts h$GETOPTS_STDARGS flag; do
113250003Sadrian	case "$flag" in
114250003Sadrian	h|\?) f_usage $BSDCFG_LIBE/$APP_DIR/USAGE "PROGRAM_NAME" "$pgm" ;;
115250003Sadrian	esac
116250003Sadriandone
117250003Sadrianshift $(( $OPTIND - 1 ))
118250003Sadrian
119250003Sadrian#
120250003Sadrian# Initialize
121250003Sadrian#
122250003Sadrianf_dialog_title "$msg_securelevels_menu_title"
123250003Sadrianf_dialog_backtitle "${ipgm:+bsdconfig }$pgm"
124250003Sadrianf_mustberoot_init
125250003Sadrian
126250003Sadrian#
127250003Sadrian# Launch application main menu (loop for additional `Help' button)
128250003Sadrian#
129250003Sadrianwhile :; do
130250003Sadrian	dialog_menu_main
131250003Sadrian	retval=$?
132250003Sadrian	f_dialog_menutag_fetch mtag
133250003Sadrian
134250003Sadrian	if [ $retval -eq 2 ]; then
135250003Sadrian		# The Help button was pressed
136250003Sadrian		f_show_help "$SECURELEVEL_HELPFILE"
137250003Sadrian		continue
138250003Sadrian	elif [ $retval -ne 0 ]; then
139250003Sadrian		f_die
140250003Sadrian	fi
141250003Sadrian
142250003Sadrian	break
143250003Sadriandone
144250003Sadrian
145250003Sadriancase "$mtag" in
146250003Sadrian"$msg_disabled")
147250003Sadrian	f_sysrc_set kern_securelevel_enable "NO"
148250003Sadrian	;;
149250003Sadrian"$msg_secure")
150250003Sadrian	f_sysrc_set kern_securelevel_enable "YES"
151250003Sadrian	f_sysrc_set kern_securelevel "1" 
152250003Sadrian	;;
153250003Sadrian"$msg_highly_secure")
154250003Sadrian	f_sysrc_set kern_securelevel_enable "YES"
155250003Sadrian	f_sysrc_set kern_securelevel "2" 
156250003Sadrian	;;
157250003Sadrian"$msg_network_secure")
158250003Sadrian	f_sysrc_set kern_securelevel_enable "YES"
159250003Sadrian	f_sysrc_set kern_securelevel "3" 
160250003Sadrian	;;
161250003Sadrian*)
162250003Sadrian	f_die 1 "$msg_unknown_kern_securelevel_selection"
163250003Sadrianesac
164250003Sadrian
165250003Sadrianexit $SUCCESS
166250003Sadrian
167250003Sadrian################################################################################
168250003Sadrian# END
169250003Sadrian################################################################################
170250003Sadrian