xref: /freebsd/usr.sbin/bsdconfig/usermgmt/share/group_input.subr (revision 072b47f31c4f9b331ccc09113ea77bc2ba849c05)
1ab2043b8SDevin Teskeif [ ! "$_USERMGMT_GROUP_INPUT_SUBR" ]; then _USERMGMT_GROUP_INPUT_SUBR=1
2ab2043b8SDevin Teske#
3ab2043b8SDevin Teske# Copyright (c) 2012 Ron McDowell
427c43fe1SDevin Teske# Copyright (c) 2012-2014 Devin Teske
5ab2043b8SDevin Teske# All rights reserved.
6ab2043b8SDevin Teske#
7ab2043b8SDevin Teske# Redistribution and use in source and binary forms, with or without
8ab2043b8SDevin Teske# modification, are permitted provided that the following conditions
9ab2043b8SDevin Teske# are met:
10ab2043b8SDevin Teske# 1. Redistributions of source code must retain the above copyright
11ab2043b8SDevin Teske#    notice, this list of conditions and the following disclaimer.
12ab2043b8SDevin Teske# 2. Redistributions in binary form must reproduce the above copyright
13ab2043b8SDevin Teske#    notice, this list of conditions and the following disclaimer in the
14ab2043b8SDevin Teske#    documentation and/or other materials provided with the distribution.
15ab2043b8SDevin Teske#
16ab2043b8SDevin Teske# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17ab2043b8SDevin Teske# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18ab2043b8SDevin Teske# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19ab2043b8SDevin Teske# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20ab2043b8SDevin Teske# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21ab2043b8SDevin Teske# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22ab2043b8SDevin Teske# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23ab2043b8SDevin Teske# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24ab2043b8SDevin Teske# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25ab2043b8SDevin Teske# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26ab2043b8SDevin Teske# SUCH DAMAGE.
27ab2043b8SDevin Teske#
28ab2043b8SDevin Teske# $FreeBSD$
29ab2043b8SDevin Teske#
30ab2043b8SDevin Teske############################################################ INCLUDES
31ab2043b8SDevin Teske
32ab2043b8SDevin TeskeBSDCFG_SHARE="/usr/share/bsdconfig"
33ab2043b8SDevin Teske. $BSDCFG_SHARE/common.subr || exit 1
3456961fd7SDevin Teskef_dprintf "%s: loading includes..." usermgmt/group_input.subr
35ab2043b8SDevin Teskef_include $BSDCFG_SHARE/dialog.subr
36ab2043b8SDevin Teskef_include $BSDCFG_SHARE/strings.subr
37ab2043b8SDevin Teske
38ab2043b8SDevin TeskeBSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="070.usermgmt"
39ab2043b8SDevin Teskef_include_lang $BSDCFG_LIBE/include/messages.subr
40ab2043b8SDevin Teskef_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr
41ab2043b8SDevin Teske
42ab2043b8SDevin Teske############################################################ FUNCTIONS
43ab2043b8SDevin Teske
44ab2043b8SDevin Teske# f_input_group $group
45ab2043b8SDevin Teske#
46ab2043b8SDevin Teske# Given $group name or id, create the environment variables group_name,
47ab2043b8SDevin Teske# group_gid, and group_members (and group_password is reset to NULL).
48ab2043b8SDevin Teske#
49ab2043b8SDevin Teskef_input_group()
50ab2043b8SDevin Teske{
5127c43fe1SDevin Teske	local funcname=f_input_group
5227c43fe1SDevin Teske	local group="$1"
5327c43fe1SDevin Teske
5427c43fe1SDevin Teske	f_dprintf "$funcname: Getting info for group \`%s'" "$group"
5527c43fe1SDevin Teske	eval "$( pw groupshow "$group" 2> /dev/null | awk -F: '
56ab2043b8SDevin Teske	{
5727c43fe1SDevin Teske		found = $1 != ""
58ab2043b8SDevin Teske		printf "group_name='\'%s\''\n",    $1
59ab2043b8SDevin Teske		printf "group_password=\n"
60ab2043b8SDevin Teske		printf "group_gid='\'%s\''\n",     $3
61ab2043b8SDevin Teske		printf "group_members='\'%s\''\n", $4
62ab2043b8SDevin Teske		exit
6327c43fe1SDevin Teske	}
6427c43fe1SDevin Teske	END { if (!found) print "false" }' )"
65ab2043b8SDevin Teske}
66ab2043b8SDevin Teske
67d3a0f918SDevin Teske# f_dialog_menu_group_list [$default]
68ab2043b8SDevin Teske#
69d3a0f918SDevin Teske# Allows the user to select a group from a list. Optionally, if present and
70d3a0f918SDevin Teske# non-NULL, initially highlight $default group.
71ab2043b8SDevin Teske#
72ab2043b8SDevin Teskef_dialog_menu_group_list()
73ab2043b8SDevin Teske{
74052f8969SDevin Teske	local prompt=
75052f8969SDevin Teske	local menu_list="
76ab2043b8SDevin Teske		'X $msg_exit' ''
77ab2043b8SDevin Teske	" # END-QUOTE
78052f8969SDevin Teske	local defaultitem="$1"
79052f8969SDevin Teske	local hline="$hline_alnum_punc_tab_enter"
80ab2043b8SDevin Teske
81ab2043b8SDevin Teske	# Add groups from group(5)
82ab2043b8SDevin Teske	menu_list="$menu_list $( pw groupshow -a | awk -F: '
83ab2043b8SDevin Teske		!/^[[:space:]]*(#|$)/ {
84ab2043b8SDevin Teske			printf "'\'%s\'\ \'%s\''\n", $1, $1
85ab2043b8SDevin Teske		}'
86ab2043b8SDevin Teske	)"
87ab2043b8SDevin Teske
8874036c4dSDevin Teske	local height width rows
8974036c4dSDevin Teske	eval f_dialog_menu_size height width rows \
90ab2043b8SDevin Teske	                        \"\$DIALOG_TITLE\"     \
91ab2043b8SDevin Teske	                        \"\$DIALOG_BACKTITLE\" \
92052f8969SDevin Teske	                        \"\$prompt\"           \
93ab2043b8SDevin Teske	                        \"\$hline\"            \
9474036c4dSDevin Teske	                        $menu_list
95ab2043b8SDevin Teske
96fd962ac6SDevin Teske	local menu_choice
97fd962ac6SDevin Teske	menu_choice=$( eval $DIALOG \
98d3a0f918SDevin Teske		--title \"\$DIALOG_TITLE\"         \
99ab2043b8SDevin Teske		--backtitle \"\$DIALOG_BACKTITLE\" \
100ab2043b8SDevin Teske		--hline \"\$hline\"                \
101ab2043b8SDevin Teske		--ok-label \"\$msg_ok\"            \
102ab2043b8SDevin Teske		--cancel-label \"\$msg_cancel\"    \
103d3a0f918SDevin Teske		--default-item \"\$defaultitem\"   \
104052f8969SDevin Teske		--menu \"\$prompt\"                \
10574036c4dSDevin Teske		$height $width $rows               \
10674036c4dSDevin Teske		$menu_list                         \
10789498fdfSDevin Teske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
10889498fdfSDevin Teske	)
10989498fdfSDevin Teske	local retval=$?
110fd962ac6SDevin Teske	f_dialog_menutag_store -s "$menu_choice"
11189498fdfSDevin Teske	return $retval
112ab2043b8SDevin Teske}
113ab2043b8SDevin Teske
11427c43fe1SDevin Teske# f_dialog_input_group_name $var_to_set [$group_name]
115ab2043b8SDevin Teske#
11627c43fe1SDevin Teske# Allows the user to enter a name for a new group. If the user does not cancel
11727c43fe1SDevin Teske# or press ESC, the $var_to_set variable will hold the newly-configured value
11827c43fe1SDevin Teske# upon return.
119ab2043b8SDevin Teske#
120ab2043b8SDevin Teskef_dialog_input_group_name()
121ab2043b8SDevin Teske{
12227c43fe1SDevin Teske	local __var_to_set="$1" __name="$2"
12327c43fe1SDevin Teske
124ab2043b8SDevin Teske	#
125ab2043b8SDevin Teske	# Loop until the user provides taint-free/valid input
126ab2043b8SDevin Teske	#
12727c43fe1SDevin Teske	local __input="$__name"
128ab2043b8SDevin Teske	while :; do
129ab2043b8SDevin Teske		# Return if user has either pressed ESC or chosen Cancel/No
13027c43fe1SDevin Teske		f_dialog_input __input "$msg_group" "$__input" \
131f677a9e2SDevin Teske		               "$hline_alnum_tab_enter" || return $?
132ab2043b8SDevin Teske
133ab2043b8SDevin Teske		# Check for no-change
13427c43fe1SDevin Teske		if [ "$__input" = "$__name" ]; then
13527c43fe1SDevin Teske			setvar "$__var_to_set" "$__input"
136f677a9e2SDevin Teske			return $DIALOG_OK
137ab2043b8SDevin Teske		fi
138ab2043b8SDevin Teske
139ab2043b8SDevin Teske		# Check for NULL entry
14027c43fe1SDevin Teske		if [ ! "$__input" ]; then
1417079fc4eSDevin Teske			f_show_msg "$msg_group_is_empty"
142ab2043b8SDevin Teske			continue
143ab2043b8SDevin Teske		fi
144ab2043b8SDevin Teske
145ab2043b8SDevin Teske		# Check for invalid entry
14627c43fe1SDevin Teske		case "$__input" in [!a-zA-Z]*)
1477079fc4eSDevin Teske			f_show_msg "$msg_group_must_start_with_letter"
148ab2043b8SDevin Teske			continue
14927c43fe1SDevin Teske		esac
150ab2043b8SDevin Teske
151ab2043b8SDevin Teske		# Check for duplicate entry
15227c43fe1SDevin Teske		if f_quietly pw groupshow -n "$__input"; then
15327c43fe1SDevin Teske			f_show_msg "$msg_group_already_used" "$__input"
154ab2043b8SDevin Teske			continue
155ab2043b8SDevin Teske		fi
156ab2043b8SDevin Teske
15727c43fe1SDevin Teske		setvar "$__var_to_set" "$__input"
158ab2043b8SDevin Teske		break
159ab2043b8SDevin Teske	done
160ab2043b8SDevin Teske
161f677a9e2SDevin Teske	return $DIALOG_OK
162ab2043b8SDevin Teske}
163ab2043b8SDevin Teske
16427c43fe1SDevin Teske# f_dialog_input_group_password $var_to_set $dvar_to_set
165ab2043b8SDevin Teske#
16627c43fe1SDevin Teske# Prompt the user to enter a password (twice). If the user does not cancel or
16727c43fe1SDevin Teske# press ESC, $var_to_set will hold the confirmed user entry. Otherwise, if the
16827c43fe1SDevin Teske# user cancels or enters a NULL password (twice), they are given the choice to
16927c43fe1SDevin Teske# disable password authentication for the given group, wherein $dvar_to_set has
17027c43fe1SDevin Teske# a value of 1 to indicate password authentication should be disabled.
171ab2043b8SDevin Teske#
172ab2043b8SDevin Teskef_dialog_input_group_password()
173ab2043b8SDevin Teske{
17427c43fe1SDevin Teske	local __var_to_set="$1" __dvar_to_set="$2"
17527c43fe1SDevin Teske	local __prompt1="$msg_group_password"
17627c43fe1SDevin Teske	local __prompt2="$msg_reenter_group_password"
17727c43fe1SDevin Teske	local __hline="$hline_alnum_punc_tab_enter"
178ab2043b8SDevin Teske
17927c43fe1SDevin Teske	local __height1 __width1
18027c43fe1SDevin Teske	f_dialog_inputbox_size __height1 __width1 \
181ab2043b8SDevin Teske	        	"$DIALOG_TITLE"     \
182ab2043b8SDevin Teske	        	"$DIALOG_BACKTITLE" \
18327c43fe1SDevin Teske	        	"$__prompt1"        \
184ab2043b8SDevin Teske	        	""                  \
18527c43fe1SDevin Teske	        	"$__hline"
186ab2043b8SDevin Teske
18727c43fe1SDevin Teske	local __height2 __width2
18827c43fe1SDevin Teske	f_dialog_inputbox_size __height2 __width2 \
189ab2043b8SDevin Teske	        	"$DIALOG_TITLE"     \
190ab2043b8SDevin Teske	        	"$DIALOG_BACKTITLE" \
19127c43fe1SDevin Teske	        	"$__prompt2"        \
192ab2043b8SDevin Teske	        	""                  \
19327c43fe1SDevin Teske	        	"$__hline"
194ab2043b8SDevin Teske
195ab2043b8SDevin Teske	#
196ab2043b8SDevin Teske	# Loop until the user provides taint-free/valid input
197ab2043b8SDevin Teske	#
19827c43fe1SDevin Teske	local __retval __password1 __password2
199ab2043b8SDevin Teske	while :; do
20027c43fe1SDevin Teske		__password1=$( $DIALOG \
20174036c4dSDevin Teske			--title "$DIALOG_TITLE"         \
20274036c4dSDevin Teske			--backtitle "$DIALOG_BACKTITLE" \
20327c43fe1SDevin Teske			--hline "$__hline"              \
20474036c4dSDevin Teske			--ok-label "$msg_ok"            \
20574036c4dSDevin Teske			--cancel-label "$msg_cancel"    \
206ab2043b8SDevin Teske			--insecure                      \
20727c43fe1SDevin Teske			--passwordbox "$__prompt1"      \
20827c43fe1SDevin Teske			$__height1 $__width1            \
20989498fdfSDevin Teske			2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
21089498fdfSDevin Teske		)
21127c43fe1SDevin Teske		__retval=$?
21227c43fe1SDevin Teske		debug= f_dialog_line_sanitize __password1
213ab2043b8SDevin Teske
214ab2043b8SDevin Teske		# Return if user has either pressed ESC or chosen Cancel/No
21527c43fe1SDevin Teske		[ $__retval -eq $DIALOG_OK ] || return $__retval
216ab2043b8SDevin Teske
21727c43fe1SDevin Teske		__password2=$( $DIALOG \
21874036c4dSDevin Teske			--title "$DIALOG_TITLE"         \
21974036c4dSDevin Teske			--backtitle "$DIALOG_BACKTITLE" \
22027c43fe1SDevin Teske			--hline "$__hline"              \
22174036c4dSDevin Teske			--ok-label "$msg_ok"            \
22274036c4dSDevin Teske			--cancel-label "$msg_cancel"    \
223ab2043b8SDevin Teske			--insecure                      \
22427c43fe1SDevin Teske			--passwordbox "$__prompt2"      \
22527c43fe1SDevin Teske			$__height2 $__width2            \
22689498fdfSDevin Teske			2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
22789498fdfSDevin Teske		)
22827c43fe1SDevin Teske		__retval=$?
22927c43fe1SDevin Teske		debug= f_dialog_line_sanitize __password2
230ab2043b8SDevin Teske
231ab2043b8SDevin Teske		# Return if user has either pressed ESC or chosen Cancel/No
23227c43fe1SDevin Teske		[ $__retval -eq $DIALOG_OK ] || return $__retval
233ab2043b8SDevin Teske
234ab2043b8SDevin Teske		# Check for password mismatch
23527c43fe1SDevin Teske		if [ "$__password1" != "$__password2" ]; then
2367079fc4eSDevin Teske			f_show_msg "$msg_group_passwords_do_not_match"
237ab2043b8SDevin Teske			continue
238ab2043b8SDevin Teske		fi
239ab2043b8SDevin Teske
240ab2043b8SDevin Teske		# Check for NULL entry
24127c43fe1SDevin Teske		if [ ! "$__password1" ]; then
2427ca5c4cbSDevin Teske			f_dialog_yesno "$msg_disable_password_auth_for_group"
24327c43fe1SDevin Teske			__retval=$?
24427c43fe1SDevin Teske			if [ $__retval -eq $DIALOG_ESC ]; then
24527c43fe1SDevin Teske				return $__retval
24627c43fe1SDevin Teske			elif [ $__retval -eq $DIALOG_OK ]; then
24727c43fe1SDevin Teske				setvar "$__dvar_to_set" 1
248528318aeSDevin Teske			else
249350db065SDevin Teske				continue # back to password prompt
250528318aeSDevin Teske			fi
251ab2043b8SDevin Teske		else
25227c43fe1SDevin Teske			setvar "$__dvar_to_set" ""
253ab2043b8SDevin Teske		fi
254ab2043b8SDevin Teske
25527c43fe1SDevin Teske		setvar "$__var_to_set" "$__password1"
256ab2043b8SDevin Teske		break
257ab2043b8SDevin Teske	done
258ab2043b8SDevin Teske
259f677a9e2SDevin Teske	return $DIALOG_OK
260ab2043b8SDevin Teske}
261ab2043b8SDevin Teske
26227c43fe1SDevin Teske# f_dialog_input_group_gid $var_to_set [$group_gid]
263ab2043b8SDevin Teske#
264ab2043b8SDevin Teske# Allow the user to enter a new GID for a given group. If the user does not
26527c43fe1SDevin Teske# cancel or press ESC, the $var_to_set variable will hold the newly-configured
266ab2043b8SDevin Teske# value upon return.
267ab2043b8SDevin Teske#
268ab2043b8SDevin Teskef_dialog_input_group_gid()
269ab2043b8SDevin Teske{
27027c43fe1SDevin Teske	local __var_to_set="$1" __input="$2"
271ab2043b8SDevin Teske
272ab2043b8SDevin Teske	# Return if user has either pressed ESC or chosen Cancel/No
27327c43fe1SDevin Teske	f_dialog_input __input "$msg_group_id_leave_empty_for_default" \
27427c43fe1SDevin Teske	               "$__input" "$hline_num_tab_enter" || return $?
275ab2043b8SDevin Teske
27627c43fe1SDevin Teske	setvar "$__var_to_set" "$__input"
277f677a9e2SDevin Teske	return $DIALOG_OK
278ab2043b8SDevin Teske}
279ab2043b8SDevin Teske
28027c43fe1SDevin Teske# f_dialog_input_group_members $var_to_set [$group_members]
281ab2043b8SDevin Teske#
282f4844f65SDevin Teske# Allow the user to modify a list of members for a given group. If the user
28327c43fe1SDevin Teske# does not cancel or press ESC, the $var_to_set variable will hold the newly-
28427c43fe1SDevin Teske# configured value upon return.
285ab2043b8SDevin Teske#
286ab2043b8SDevin Teskef_dialog_input_group_members()
287ab2043b8SDevin Teske{
28827c43fe1SDevin Teske	local __var_to_set="$1" __input="$2"
28927c43fe1SDevin Teske	local __prompt="$msg_group_members:"
29027c43fe1SDevin Teske	local __menu_list="
291ab2043b8SDevin Teske		'X' '$msg_continue'
292ab2043b8SDevin Teske		'1' '$msg_select_group_members_from_list'
293ab2043b8SDevin Teske		'2' '$msg_enter_group_members_manually'
294ab2043b8SDevin Teske	" # END-QUOTE
29527c43fe1SDevin Teske	local __defaultitem=
29627c43fe1SDevin Teske	local __hline="$hline_num_arrows_tab_enter"
297ab2043b8SDevin Teske
29827c43fe1SDevin Teske	local __mheight __mwidth __mrows
29927c43fe1SDevin Teske	eval f_dialog_menu_size __mheight __mwidth __mrows \
30027c43fe1SDevin Teske	                        \"\$DIALOG_TITLE\"     \
30127c43fe1SDevin Teske	                        \"\$DIALOG_BACKTITLE\" \
30227c43fe1SDevin Teske	                        \"\$__prompt\"         \
30327c43fe1SDevin Teske	                        \"\$__hline\"          \
304*072b47f3SDevin Teske	                        $__menu_list
30527c43fe1SDevin Teske
30627c43fe1SDevin Teske	local __menu_choice __retval
30727c43fe1SDevin Teske	while :; do
30827c43fe1SDevin Teske		__menu_choice=$( eval $DIALOG \
30927c43fe1SDevin Teske			--title \"\$DIALOG_TITLE\"         \
31027c43fe1SDevin Teske			--backtitle \"\$DIALOG_BACKTITLE\" \
31127c43fe1SDevin Teske			--hline \"\$__hline\"              \
31227c43fe1SDevin Teske			--ok-label \"\$msg_ok\"            \
31327c43fe1SDevin Teske			--cancel-label \"\$msg_cancel\"    \
31427c43fe1SDevin Teske			--default-item \"\$__defaultitem\" \
31527c43fe1SDevin Teske			--menu \"\$__prompt\"              \
31627c43fe1SDevin Teske			$__mheight $__mwidth $__mrows      \
31727c43fe1SDevin Teske			$__menu_list                       \
31827c43fe1SDevin Teske			2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
31927c43fe1SDevin Teske		)
32027c43fe1SDevin Teske		__retval=$?
32127c43fe1SDevin Teske		f_dialog_data_sanitize __menu_choice
32227c43fe1SDevin Teske		__defaultitem="$__menu_choice"
32327c43fe1SDevin Teske		f_dprintf "retval=%u menu_choice=[%s]" \
32427c43fe1SDevin Teske		          $__retval "$__menu_choice"
32527c43fe1SDevin Teske
32627c43fe1SDevin Teske		# Return if user has either pressed ESC or chosen Cancel/No
32727c43fe1SDevin Teske		[ $__retval -eq $DIALOG_OK ] || return $__retval
32827c43fe1SDevin Teske
32927c43fe1SDevin Teske		local __group_members
33027c43fe1SDevin Teske		case "$__menu_choice" in
33127c43fe1SDevin Teske		X) # Exit
33227c43fe1SDevin Teske			break ;;
33327c43fe1SDevin Teske		1) # Select Group Members from a list
33427c43fe1SDevin Teske			local __user_list __length=0 __user __check_list=
33527c43fe1SDevin Teske			__user_list=$( pw usershow -a |
33627c43fe1SDevin Teske				awk -F: '!/^[[:space:]]*(#|$)/{print $1}' )
33727c43fe1SDevin Teske			while [ $__length -ne ${#__user_list} ]; do
33827c43fe1SDevin Teske				__user="${__user_list%%$NL*}" # First line
33927c43fe1SDevin Teske
34027c43fe1SDevin Teske				# Format of a checklist entry: tag item status
34127c43fe1SDevin Teske				__check_list="$__check_list '$__user' ''"
34227c43fe1SDevin Teske				case "$__input" in
34327c43fe1SDevin Teske				"$__user"|"$__user",*|*,"$__user",*|*,"$__user")
34427c43fe1SDevin Teske					__check_list="$__check_list on" ;;
34527c43fe1SDevin Teske				*)
34627c43fe1SDevin Teske					__check_list="$__check_list off"
34727c43fe1SDevin Teske				esac
34827c43fe1SDevin Teske
34927c43fe1SDevin Teske				__length=${#__user_list}
35027c43fe1SDevin Teske				__user_list="${__user_list#*$NL}" # Kill line
35127c43fe1SDevin Teske			done
35227c43fe1SDevin Teske
35327c43fe1SDevin Teske			local __cheight __cwidth __crows
35427c43fe1SDevin Teske			eval f_dialog_checklist_size \
35527c43fe1SDevin Teske				__cheight __cwidth __crows \
35627c43fe1SDevin Teske				\"\$DIALOG_TITLE\"     \
35727c43fe1SDevin Teske				\"\$DIALOG_BACKTITLE\" \
35827c43fe1SDevin Teske				\"\$__prompt\"         \
35927c43fe1SDevin Teske				\"\$__hline\"          \
36027c43fe1SDevin Teske				$__check_list
36127c43fe1SDevin Teske			__group_members=$( eval $DIALOG \
36227c43fe1SDevin Teske				--title \"\$DIALOG_TITLE\"         \
36327c43fe1SDevin Teske				--backtitle \"\$DIALOG_BACKTITLE\" \
36427c43fe1SDevin Teske				--separate-output                  \
36527c43fe1SDevin Teske				--hline \"\$__hline\"              \
36627c43fe1SDevin Teske				--ok-label \"\$msg_ok\"            \
36727c43fe1SDevin Teske				--cancel-label \"\$msg_cancel\"    \
36827c43fe1SDevin Teske				--checklist \"\$__prompt\"         \
36927c43fe1SDevin Teske				$__cheight $__cwidth $__crows      \
37027c43fe1SDevin Teske				$__check_list                      \
37127c43fe1SDevin Teske				2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
37227c43fe1SDevin Teske			) || continue
37327c43fe1SDevin Teske				# Return to previous menu if user either
37427c43fe1SDevin Teske				# pressed ESC or chose Cancel/No
37527c43fe1SDevin Teske			f_dialog_data_sanitize __group_members
37627c43fe1SDevin Teske
37727c43fe1SDevin Teske			#
37827c43fe1SDevin Teske			# Convert the newline separated list into a comma-
37927c43fe1SDevin Teske			# separated one so that if the user switches over to
38027c43fe1SDevin Teske			# manual editing, list reflects checklist selections
38127c43fe1SDevin Teske			#
38227c43fe1SDevin Teske			f_replaceall "$__group_members" "[$NL]" "," __input
38327c43fe1SDevin Teske			;;
38427c43fe1SDevin Teske		2) # Enter Group Members manually
38527c43fe1SDevin Teske			local __prompt2="$msg_group_members"
38627c43fe1SDevin Teske			__prompt2="$__prompt2 ($msg_separated_by_commas)"
38727c43fe1SDevin Teske
38827c43fe1SDevin Teske			f_dialog_input __group_members \
38927c43fe1SDevin Teske			               "$__prompt2" "$__input" \
39027c43fe1SDevin Teske			               "$hline_num_tab_enter" || continue
39127c43fe1SDevin Teske				# Return to previous menu if user either
39227c43fe1SDevin Teske				# pressed ESC or chose Cancel/No
39327c43fe1SDevin Teske
39427c43fe1SDevin Teske			__input="$__group_members"
39527c43fe1SDevin Teske			;;
39627c43fe1SDevin Teske		esac
39727c43fe1SDevin Teske	done
39827c43fe1SDevin Teske
39927c43fe1SDevin Teske	setvar "$__var_to_set" "$__input"
40027c43fe1SDevin Teske	return $DIALOG_OK
40127c43fe1SDevin Teske}
40227c43fe1SDevin Teske
40327c43fe1SDevin Teske# f_dialog_menu_group_add [$defaultitem]
40427c43fe1SDevin Teske#
40527c43fe1SDevin Teske# Present a menu detailing the properties of a group that is about to be added.
40627c43fe1SDevin Teske# The user's menu choice is available using f_dialog_menutag_fetch(). Returns
40727c43fe1SDevin Teske# success unless the user chose Cancel or pressed ESC. Data to display is taken
40827c43fe1SDevin Teske# from environment variables group_name, group_gid, and group_members. If
40927c43fe1SDevin Teske# $defaultitem is present and non-NULL, initially highlight the item in the
41027c43fe1SDevin Teske# menu.
41127c43fe1SDevin Teske#
41227c43fe1SDevin Teskef_dialog_menu_group_add()
41327c43fe1SDevin Teske{
41427c43fe1SDevin Teske	local prompt="$msg_save_exit_or_cancel"
41527c43fe1SDevin Teske	local menu_list # Calculated below
41627c43fe1SDevin Teske	local defaultitem="$1"
41727c43fe1SDevin Teske	local hline="$hline_arrows_tab_enter"
41827c43fe1SDevin Teske
41927c43fe1SDevin Teske	menu_list="
42027c43fe1SDevin Teske		'X' '$msg_add/$msg_exit'
42127c43fe1SDevin Teske		'1' '$msg_group: $group_name'
42227c43fe1SDevin Teske		'2' '$msg_password: -----'
42327c43fe1SDevin Teske		'3' '$msg_group_id: $group_gid'
42427c43fe1SDevin Teske		'4' '$msg_group_members: $group_members'
42527c43fe1SDevin Teske	" # END-QUOTE
42627c43fe1SDevin Teske
42727c43fe1SDevin Teske	local height width rows
42827c43fe1SDevin Teske	eval f_dialog_menu_size height width rows \
429ab2043b8SDevin Teske	                        \"\$DIALOG_TITLE\"     \
430ab2043b8SDevin Teske	                        \"\$DIALOG_BACKTITLE\" \
431052f8969SDevin Teske	                        \"\$prompt\"           \
432ab2043b8SDevin Teske	                        \"\$hline\"            \
43374036c4dSDevin Teske	                        $menu_list
43474036c4dSDevin Teske
43527c43fe1SDevin Teske	local menu_choice
436fd962ac6SDevin Teske	menu_choice=$( eval $DIALOG \
437ab2043b8SDevin Teske		--title \"\$DIALOG_TITLE\"         \
438ab2043b8SDevin Teske		--backtitle \"\$DIALOG_BACKTITLE\" \
439ab2043b8SDevin Teske		--hline \"\$hline\"                \
440ab2043b8SDevin Teske		--ok-label \"\$msg_ok\"            \
441ab2043b8SDevin Teske		--cancel-label \"\$msg_cancel\"    \
442d3a0f918SDevin Teske		--default-item \"\$defaultitem\"   \
443052f8969SDevin Teske		--menu \"\$prompt\"                \
44427c43fe1SDevin Teske		$height $width $rows               \
445ab2043b8SDevin Teske		$menu_list                         \
44689498fdfSDevin Teske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
44789498fdfSDevin Teske	)
44827c43fe1SDevin Teske	local retval=$?
449fd962ac6SDevin Teske	f_dialog_data_sanitize menu_choice
45027c43fe1SDevin Teske	f_dialog_menutag_store "$menu_choice"
45127c43fe1SDevin Teske	return $retval
45227c43fe1SDevin Teske}
453ab2043b8SDevin Teske
45427c43fe1SDevin Teske# f_dialog_menu_group_delete $group [$defaultitem]
45527c43fe1SDevin Teske#
45627c43fe1SDevin Teske# Present a menu detailing the properties of a group that is about to be
45727c43fe1SDevin Teske# deleted. The user's menu choice is available using f_dialog_menutag_fetch().
45827c43fe1SDevin Teske# Returns success unless the user chose Cancel or pressed ESC. Data to display
45927c43fe1SDevin Teske# is populated automatically from the system accounting database for the given
46027c43fe1SDevin Teske# $group argument. If $defaultitem is present and non-NULL, initially highlight
46127c43fe1SDevin Teske# the item in the menu.
46227c43fe1SDevin Teske#
46327c43fe1SDevin Teskef_dialog_menu_group_delete()
46427c43fe1SDevin Teske{
46527c43fe1SDevin Teske	local prompt="$msg_delete_exit_or_cancel"
46627c43fe1SDevin Teske	local menu_list # Calculated below
46727c43fe1SDevin Teske	local defaultitem="$2"
46827c43fe1SDevin Teske	local hline="$hline_arrows_tab_enter"
469ab2043b8SDevin Teske
47027c43fe1SDevin Teske	local group_name group_password group_gid group_members
47127c43fe1SDevin Teske	f_input_group "$1"
472ab2043b8SDevin Teske
47327c43fe1SDevin Teske	menu_list="
47427c43fe1SDevin Teske		'X' '$msg_delete/$msg_exit'
47527c43fe1SDevin Teske		'1' '$msg_group: $group_name'
47627c43fe1SDevin Teske		'-' '$msg_password: -----'
47727c43fe1SDevin Teske		'-' '$msg_group_id: $group_gid'
47827c43fe1SDevin Teske		'-' '$msg_group_members: $group_members'
47927c43fe1SDevin Teske	" # END-QUOTE
48027c43fe1SDevin Teske
48127c43fe1SDevin Teske	local height width rows
48227c43fe1SDevin Teske	eval f_dialog_menu_size height width rows \
483ab2043b8SDevin Teske	                        \"\$DIALOG_TITLE\"     \
484ab2043b8SDevin Teske	                        \"\$DIALOG_BACKTITLE\" \
485052f8969SDevin Teske	                        \"\$prompt\"           \
486ab2043b8SDevin Teske	                        \"\$hline\"            \
48727c43fe1SDevin Teske	                        $menu_list
48827c43fe1SDevin Teske
48927c43fe1SDevin Teske	local menu_choice
49027c43fe1SDevin Teske	menu_choice=$( eval $DIALOG \
491ab2043b8SDevin Teske		--title \"\$DIALOG_TITLE\"         \
492ab2043b8SDevin Teske		--backtitle \"\$DIALOG_BACKTITLE\" \
493ab2043b8SDevin Teske		--hline \"\$hline\"                \
494ab2043b8SDevin Teske		--ok-label \"\$msg_ok\"            \
495ab2043b8SDevin Teske		--cancel-label \"\$msg_cancel\"    \
49627c43fe1SDevin Teske		--default-item \"\$defaultitem\"   \
49727c43fe1SDevin Teske		--menu \"\$prompt\"                \
49827c43fe1SDevin Teske		$height $width $rows               \
49927c43fe1SDevin Teske		$menu_list                         \
50089498fdfSDevin Teske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
50127c43fe1SDevin Teske	)
50227c43fe1SDevin Teske	local retval=$?
50327c43fe1SDevin Teske	f_dialog_data_sanitize menu_choice
50427c43fe1SDevin Teske	f_dialog_menutag_store "$menu_choice"
50527c43fe1SDevin Teske	return $retval
50627c43fe1SDevin Teske}
507ab2043b8SDevin Teske
50827c43fe1SDevin Teske# f_dialog_menu_group_edit [$defaultitem]
509d4ae33f0SDevin Teske#
51027c43fe1SDevin Teske# Present a menu detailing the properties of a group that is about to be
51127c43fe1SDevin Teske# modified. The user's menu choice is available using f_dialog_menutag_fetch().
51227c43fe1SDevin Teske# Returns success unless the user chose Cancel or pressed ESC. Data to display
51327c43fe1SDevin Teske# is taken from environment variables group_name, group_gid, and group_members.
51427c43fe1SDevin Teske# If $defaultitem is present and non-NULL, initially highlight the item in the
51527c43fe1SDevin Teske# menu.
516d4ae33f0SDevin Teske#
51727c43fe1SDevin Teskef_dialog_menu_group_edit()
51827c43fe1SDevin Teske{
51927c43fe1SDevin Teske	local prompt="$msg_save_exit_or_cancel"
52027c43fe1SDevin Teske	local menu_list # Calculated below
52127c43fe1SDevin Teske	local defaultitem="$1"
52227c43fe1SDevin Teske	local hline="$hline_arrows_tab_enter"
523ab2043b8SDevin Teske
52427c43fe1SDevin Teske	menu_list="
52527c43fe1SDevin Teske		'X' '$msg_save/$msg_exit'
52627c43fe1SDevin Teske		'1' '$msg_group: $group_name'
52727c43fe1SDevin Teske		'2' '$msg_password: -----'
52827c43fe1SDevin Teske		'3' '$msg_group_id: $group_gid'
52927c43fe1SDevin Teske		'4' '$msg_group_members: $group_members'
53027c43fe1SDevin Teske	" # END-QUOTE
531ab2043b8SDevin Teske
53227c43fe1SDevin Teske	local height width rows
53327c43fe1SDevin Teske	eval f_dialog_menu_size height width rows \
53427c43fe1SDevin Teske	                        \"\$DIALOG_TITLE\"     \
53527c43fe1SDevin Teske	                        \"\$DIALOG_BACKTITLE\" \
53627c43fe1SDevin Teske	                        \"\$prompt\"           \
53727c43fe1SDevin Teske	                        \"\$hline\"            \
53827c43fe1SDevin Teske	                        $menu_list
539ab2043b8SDevin Teske
54027c43fe1SDevin Teske	local menu_choice
54127c43fe1SDevin Teske	menu_choice=$( eval $DIALOG \
54227c43fe1SDevin Teske		--title \"\$DIALOG_TITLE\"         \
54327c43fe1SDevin Teske		--backtitle \"\$DIALOG_BACKTITLE\" \
54427c43fe1SDevin Teske		--hline \"\$hline\"                \
54527c43fe1SDevin Teske		--ok-label \"\$msg_ok\"            \
54627c43fe1SDevin Teske		--cancel-label \"\$msg_cancel\"    \
54727c43fe1SDevin Teske		--default-item \"\$defaultitem\"   \
54827c43fe1SDevin Teske		--menu \"\$prompt\"                \
54927c43fe1SDevin Teske		$height $width $rows               \
55027c43fe1SDevin Teske		$menu_list                         \
55127c43fe1SDevin Teske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
55227c43fe1SDevin Teske	)
55327c43fe1SDevin Teske	local retval=$?
55427c43fe1SDevin Teske	f_dialog_data_sanitize menu_choice
55527c43fe1SDevin Teske	f_dialog_menutag_store "$menu_choice"
55627c43fe1SDevin Teske	return $retval
557ab2043b8SDevin Teske}
558ab2043b8SDevin Teske
55956961fd7SDevin Teske############################################################ MAIN
56056961fd7SDevin Teske
56156961fd7SDevin Teskef_dprintf "%s: Successfully loaded." usermgmt/group_input.subr
56256961fd7SDevin Teske
563ab2043b8SDevin Teskefi # ! $_USERMGMT_GROUP_INPUT_SUBR
564