xref: /freebsd/usr.sbin/bsdconfig/usermgmt/share/group_input.subr (revision 27c43fe1f3795622c5bd4bbfc465a29a800c0799)
1ab2043b8SDevin Teskeif [ ! "$_USERMGMT_GROUP_INPUT_SUBR" ]; then _USERMGMT_GROUP_INPUT_SUBR=1
2ab2043b8SDevin Teske#
3ab2043b8SDevin Teske# Copyright (c) 2012 Ron McDowell
4*27c43fe1SDevin 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{
51*27c43fe1SDevin Teske	local funcname=f_input_group
52*27c43fe1SDevin Teske	local group="$1"
53*27c43fe1SDevin Teske
54*27c43fe1SDevin Teske	f_dprintf "$funcname: Getting info for group \`%s'" "$group"
55*27c43fe1SDevin Teske	eval "$( pw groupshow "$group" 2> /dev/null | awk -F: '
56ab2043b8SDevin Teske	{
57*27c43fe1SDevin 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
63*27c43fe1SDevin Teske	}
64*27c43fe1SDevin 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
114*27c43fe1SDevin Teske# f_dialog_input_group_name $var_to_set [$group_name]
115ab2043b8SDevin Teske#
116*27c43fe1SDevin Teske# Allows the user to enter a name for a new group. If the user does not cancel
117*27c43fe1SDevin Teske# or press ESC, the $var_to_set variable will hold the newly-configured value
118*27c43fe1SDevin Teske# upon return.
119ab2043b8SDevin Teske#
120ab2043b8SDevin Teskef_dialog_input_group_name()
121ab2043b8SDevin Teske{
122*27c43fe1SDevin Teske	local __var_to_set="$1" __name="$2"
123*27c43fe1SDevin Teske
124ab2043b8SDevin Teske	#
125ab2043b8SDevin Teske	# Loop until the user provides taint-free/valid input
126ab2043b8SDevin Teske	#
127*27c43fe1SDevin Teske	local __input="$__name"
128ab2043b8SDevin Teske	while :; do
129ab2043b8SDevin Teske		# Return if user has either pressed ESC or chosen Cancel/No
130*27c43fe1SDevin Teske		f_dialog_input __input "$msg_group" "$__input" \
131f677a9e2SDevin Teske		               "$hline_alnum_tab_enter" || return $?
132ab2043b8SDevin Teske
133ab2043b8SDevin Teske		# Check for no-change
134*27c43fe1SDevin Teske		if [ "$__input" = "$__name" ]; then
135*27c43fe1SDevin Teske			setvar "$__var_to_set" "$__input"
136f677a9e2SDevin Teske			return $DIALOG_OK
137ab2043b8SDevin Teske		fi
138ab2043b8SDevin Teske
139ab2043b8SDevin Teske		# Check for NULL entry
140*27c43fe1SDevin 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
146*27c43fe1SDevin Teske		case "$__input" in [!a-zA-Z]*)
1477079fc4eSDevin Teske			f_show_msg "$msg_group_must_start_with_letter"
148ab2043b8SDevin Teske			continue
149*27c43fe1SDevin Teske		esac
150ab2043b8SDevin Teske
151ab2043b8SDevin Teske		# Check for duplicate entry
152*27c43fe1SDevin Teske		if f_quietly pw groupshow -n "$__input"; then
153*27c43fe1SDevin Teske			f_show_msg "$msg_group_already_used" "$__input"
154ab2043b8SDevin Teske			continue
155ab2043b8SDevin Teske		fi
156ab2043b8SDevin Teske
157*27c43fe1SDevin Teske		setvar "$__var_to_set" "$__input"
158ab2043b8SDevin Teske		break
159ab2043b8SDevin Teske	done
160ab2043b8SDevin Teske	save_flag=1
161ab2043b8SDevin Teske
162f677a9e2SDevin Teske	return $DIALOG_OK
163ab2043b8SDevin Teske}
164ab2043b8SDevin Teske
165*27c43fe1SDevin Teske# f_dialog_input_group_password $var_to_set $dvar_to_set
166ab2043b8SDevin Teske#
167*27c43fe1SDevin Teske# Prompt the user to enter a password (twice). If the user does not cancel or
168*27c43fe1SDevin Teske# press ESC, $var_to_set will hold the confirmed user entry. Otherwise, if the
169*27c43fe1SDevin Teske# user cancels or enters a NULL password (twice), they are given the choice to
170*27c43fe1SDevin Teske# disable password authentication for the given group, wherein $dvar_to_set has
171*27c43fe1SDevin Teske# a value of 1 to indicate password authentication should be disabled.
172ab2043b8SDevin Teske#
173ab2043b8SDevin Teskef_dialog_input_group_password()
174ab2043b8SDevin Teske{
175*27c43fe1SDevin Teske	local __var_to_set="$1" __dvar_to_set="$2"
176*27c43fe1SDevin Teske	local __prompt1="$msg_group_password"
177*27c43fe1SDevin Teske	local __prompt2="$msg_reenter_group_password"
178*27c43fe1SDevin Teske	local __hline="$hline_alnum_punc_tab_enter"
179ab2043b8SDevin Teske
180*27c43fe1SDevin Teske	local __height1 __width1
181*27c43fe1SDevin Teske	f_dialog_inputbox_size __height1 __width1 \
182ab2043b8SDevin Teske	        	"$DIALOG_TITLE"     \
183ab2043b8SDevin Teske	        	"$DIALOG_BACKTITLE" \
184*27c43fe1SDevin Teske	        	"$__prompt1"        \
185ab2043b8SDevin Teske	        	""                  \
186*27c43fe1SDevin Teske	        	"$__hline"
187ab2043b8SDevin Teske
188*27c43fe1SDevin Teske	local __height2 __width2
189*27c43fe1SDevin Teske	f_dialog_inputbox_size __height2 __width2 \
190ab2043b8SDevin Teske	        	"$DIALOG_TITLE"     \
191ab2043b8SDevin Teske	        	"$DIALOG_BACKTITLE" \
192*27c43fe1SDevin Teske	        	"$__prompt2"        \
193ab2043b8SDevin Teske	        	""                  \
194*27c43fe1SDevin Teske	        	"$__hline"
195ab2043b8SDevin Teske
196ab2043b8SDevin Teske	#
197ab2043b8SDevin Teske	# Loop until the user provides taint-free/valid input
198ab2043b8SDevin Teske	#
199*27c43fe1SDevin Teske	local __retval __password1 __password2
200ab2043b8SDevin Teske	while :; do
201*27c43fe1SDevin Teske		__password1=$( $DIALOG \
20274036c4dSDevin Teske			--title "$DIALOG_TITLE"         \
20374036c4dSDevin Teske			--backtitle "$DIALOG_BACKTITLE" \
204*27c43fe1SDevin Teske			--hline "$__hline"              \
20574036c4dSDevin Teske			--ok-label "$msg_ok"            \
20674036c4dSDevin Teske			--cancel-label "$msg_cancel"    \
207ab2043b8SDevin Teske			--insecure                      \
208*27c43fe1SDevin Teske			--passwordbox "$__prompt1"      \
209*27c43fe1SDevin Teske			$__height1 $__width1            \
21089498fdfSDevin Teske			2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
21189498fdfSDevin Teske		)
212*27c43fe1SDevin Teske		__retval=$?
213*27c43fe1SDevin Teske		debug= f_dialog_line_sanitize __password1
214ab2043b8SDevin Teske
215ab2043b8SDevin Teske		# Return if user has either pressed ESC or chosen Cancel/No
216*27c43fe1SDevin Teske		[ $__retval -eq $DIALOG_OK ] || return $__retval
217ab2043b8SDevin Teske
218*27c43fe1SDevin Teske		__password2=$( $DIALOG \
21974036c4dSDevin Teske			--title "$DIALOG_TITLE"         \
22074036c4dSDevin Teske			--backtitle "$DIALOG_BACKTITLE" \
221*27c43fe1SDevin Teske			--hline "$__hline"              \
22274036c4dSDevin Teske			--ok-label "$msg_ok"            \
22374036c4dSDevin Teske			--cancel-label "$msg_cancel"    \
224ab2043b8SDevin Teske			--insecure                      \
225*27c43fe1SDevin Teske			--passwordbox "$__prompt2"      \
226*27c43fe1SDevin Teske			$__height2 $__width2            \
22789498fdfSDevin Teske			2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
22889498fdfSDevin Teske		)
229*27c43fe1SDevin Teske		__retval=$?
230*27c43fe1SDevin Teske		debug= f_dialog_line_sanitize __password2
231ab2043b8SDevin Teske
232ab2043b8SDevin Teske		# Return if user has either pressed ESC or chosen Cancel/No
233*27c43fe1SDevin Teske		[ $__retval -eq $DIALOG_OK ] || return $__retval
234ab2043b8SDevin Teske
235ab2043b8SDevin Teske		# Check for password mismatch
236*27c43fe1SDevin Teske		if [ "$__password1" != "$__password2" ]; then
2377079fc4eSDevin Teske			f_show_msg "$msg_group_passwords_do_not_match"
238ab2043b8SDevin Teske			continue
239ab2043b8SDevin Teske		fi
240ab2043b8SDevin Teske
241ab2043b8SDevin Teske		# Check for NULL entry
242*27c43fe1SDevin Teske		if [ ! "$__password1" ]; then
2437ca5c4cbSDevin Teske			f_dialog_yesno "$msg_disable_password_auth_for_group"
244*27c43fe1SDevin Teske			__retval=$?
245*27c43fe1SDevin Teske			if [ $__retval -eq $DIALOG_ESC ]; then
246*27c43fe1SDevin Teske				return $__retval
247*27c43fe1SDevin Teske			elif [ $__retval -eq $DIALOG_OK ]; then
248*27c43fe1SDevin Teske				setvar "$__dvar_to_set" 1
249528318aeSDevin Teske			else
250350db065SDevin Teske				continue # back to password prompt
251528318aeSDevin Teske			fi
252ab2043b8SDevin Teske		else
253*27c43fe1SDevin Teske			setvar "$__dvar_to_set" ""
254ab2043b8SDevin Teske		fi
255ab2043b8SDevin Teske
256*27c43fe1SDevin Teske		setvar "$__var_to_set" "$__password1"
257ab2043b8SDevin Teske		break
258ab2043b8SDevin Teske	done
259ab2043b8SDevin Teske	save_flag=1
260ab2043b8SDevin Teske
261f677a9e2SDevin Teske	return $DIALOG_OK
262ab2043b8SDevin Teske}
263ab2043b8SDevin Teske
264*27c43fe1SDevin Teske# f_dialog_input_group_gid $var_to_set [$group_gid]
265ab2043b8SDevin Teske#
266ab2043b8SDevin Teske# Allow the user to enter a new GID for a given group. If the user does not
267*27c43fe1SDevin Teske# cancel or press ESC, the $var_to_set variable will hold the newly-configured
268ab2043b8SDevin Teske# value upon return.
269ab2043b8SDevin Teske#
270ab2043b8SDevin Teskef_dialog_input_group_gid()
271ab2043b8SDevin Teske{
272*27c43fe1SDevin Teske	local __var_to_set="$1" __input="$2"
273ab2043b8SDevin Teske
274ab2043b8SDevin Teske	# Return if user has either pressed ESC or chosen Cancel/No
275*27c43fe1SDevin Teske	f_dialog_input __input "$msg_group_id_leave_empty_for_default" \
276*27c43fe1SDevin Teske	               "$__input" "$hline_num_tab_enter" || return $?
277ab2043b8SDevin Teske
278*27c43fe1SDevin Teske	setvar "$__var_to_set" "$__input"
279ab2043b8SDevin Teske	save_flag=1
280ab2043b8SDevin Teske
281f677a9e2SDevin Teske	return $DIALOG_OK
282ab2043b8SDevin Teske}
283ab2043b8SDevin Teske
284*27c43fe1SDevin Teske# f_dialog_input_group_members $var_to_set [$group_members]
285ab2043b8SDevin Teske#
286f4844f65SDevin Teske# Allow the user to modify a list of members for a given group. If the user
287*27c43fe1SDevin Teske# does not cancel or press ESC, the $var_to_set variable will hold the newly-
288*27c43fe1SDevin Teske# configured value upon return.
289ab2043b8SDevin Teske#
290ab2043b8SDevin Teskef_dialog_input_group_members()
291ab2043b8SDevin Teske{
292*27c43fe1SDevin Teske	local __var_to_set="$1" __input="$2"
293*27c43fe1SDevin Teske	local __prompt="$msg_group_members:"
294*27c43fe1SDevin Teske	local __menu_list="
295ab2043b8SDevin Teske		'X' '$msg_continue'
296ab2043b8SDevin Teske		'1' '$msg_select_group_members_from_list'
297ab2043b8SDevin Teske		'2' '$msg_enter_group_members_manually'
298ab2043b8SDevin Teske	" # END-QUOTE
299*27c43fe1SDevin Teske	local __defaultitem=
300*27c43fe1SDevin Teske	local __hline="$hline_num_arrows_tab_enter"
301ab2043b8SDevin Teske
302*27c43fe1SDevin Teske	local __mheight __mwidth __mrows
303*27c43fe1SDevin Teske	eval f_dialog_menu_size __mheight __mwidth __mrows \
304*27c43fe1SDevin Teske	                        \"\$DIALOG_TITLE\"     \
305*27c43fe1SDevin Teske	                        \"\$DIALOG_BACKTITLE\" \
306*27c43fe1SDevin Teske	                        \"\$__prompt\"         \
307*27c43fe1SDevin Teske	                        \"\$__hline\"          \
308*27c43fe1SDevin Teske	                        $menu_list
309*27c43fe1SDevin Teske
310*27c43fe1SDevin Teske	local __menu_choice __retval
311*27c43fe1SDevin Teske	while :; do
312*27c43fe1SDevin Teske		__menu_choice=$( eval $DIALOG \
313*27c43fe1SDevin Teske			--title \"\$DIALOG_TITLE\"         \
314*27c43fe1SDevin Teske			--backtitle \"\$DIALOG_BACKTITLE\" \
315*27c43fe1SDevin Teske			--hline \"\$__hline\"              \
316*27c43fe1SDevin Teske			--ok-label \"\$msg_ok\"            \
317*27c43fe1SDevin Teske			--cancel-label \"\$msg_cancel\"    \
318*27c43fe1SDevin Teske			--default-item \"\$__defaultitem\" \
319*27c43fe1SDevin Teske			--menu \"\$__prompt\"              \
320*27c43fe1SDevin Teske			$__mheight $__mwidth $__mrows      \
321*27c43fe1SDevin Teske			$__menu_list                       \
322*27c43fe1SDevin Teske			2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
323*27c43fe1SDevin Teske		)
324*27c43fe1SDevin Teske		__retval=$?
325*27c43fe1SDevin Teske		f_dialog_data_sanitize __menu_choice
326*27c43fe1SDevin Teske		__defaultitem="$__menu_choice"
327*27c43fe1SDevin Teske		f_dprintf "retval=%u menu_choice=[%s]" \
328*27c43fe1SDevin Teske		          $__retval "$__menu_choice"
329*27c43fe1SDevin Teske
330*27c43fe1SDevin Teske		# Return if user has either pressed ESC or chosen Cancel/No
331*27c43fe1SDevin Teske		[ $__retval -eq $DIALOG_OK ] || return $__retval
332*27c43fe1SDevin Teske
333*27c43fe1SDevin Teske		local __group_members
334*27c43fe1SDevin Teske		case "$__menu_choice" in
335*27c43fe1SDevin Teske		X) # Exit
336*27c43fe1SDevin Teske			break ;;
337*27c43fe1SDevin Teske		1) # Select Group Members from a list
338*27c43fe1SDevin Teske			local __user_list __length=0 __user __check_list=
339*27c43fe1SDevin Teske			__user_list=$( pw usershow -a |
340*27c43fe1SDevin Teske				awk -F: '!/^[[:space:]]*(#|$)/{print $1}' )
341*27c43fe1SDevin Teske			while [ $__length -ne ${#__user_list} ]; do
342*27c43fe1SDevin Teske				__user="${__user_list%%$NL*}" # First line
343*27c43fe1SDevin Teske
344*27c43fe1SDevin Teske				# Format of a checklist entry: tag item status
345*27c43fe1SDevin Teske				__check_list="$__check_list '$__user' ''"
346*27c43fe1SDevin Teske				case "$__input" in
347*27c43fe1SDevin Teske				"$__user"|"$__user",*|*,"$__user",*|*,"$__user")
348*27c43fe1SDevin Teske					__check_list="$__check_list on" ;;
349*27c43fe1SDevin Teske				*)
350*27c43fe1SDevin Teske					__check_list="$__check_list off"
351*27c43fe1SDevin Teske				esac
352*27c43fe1SDevin Teske
353*27c43fe1SDevin Teske				__length=${#__user_list}
354*27c43fe1SDevin Teske				__user_list="${__user_list#*$NL}" # Kill line
355*27c43fe1SDevin Teske			done
356*27c43fe1SDevin Teske
357*27c43fe1SDevin Teske			local __cheight __cwidth __crows
358*27c43fe1SDevin Teske			eval f_dialog_checklist_size \
359*27c43fe1SDevin Teske				__cheight __cwidth __crows \
360*27c43fe1SDevin Teske				\"\$DIALOG_TITLE\"     \
361*27c43fe1SDevin Teske				\"\$DIALOG_BACKTITLE\" \
362*27c43fe1SDevin Teske				\"\$__prompt\"         \
363*27c43fe1SDevin Teske				\"\$__hline\"          \
364*27c43fe1SDevin Teske				$__check_list
365*27c43fe1SDevin Teske			__group_members=$( eval $DIALOG \
366*27c43fe1SDevin Teske				--title \"\$DIALOG_TITLE\"         \
367*27c43fe1SDevin Teske				--backtitle \"\$DIALOG_BACKTITLE\" \
368*27c43fe1SDevin Teske				--separate-output                  \
369*27c43fe1SDevin Teske				--hline \"\$__hline\"              \
370*27c43fe1SDevin Teske				--ok-label \"\$msg_ok\"            \
371*27c43fe1SDevin Teske				--cancel-label \"\$msg_cancel\"    \
372*27c43fe1SDevin Teske				--checklist \"\$__prompt\"         \
373*27c43fe1SDevin Teske				$__cheight $__cwidth $__crows      \
374*27c43fe1SDevin Teske				$__check_list                      \
375*27c43fe1SDevin Teske				2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
376*27c43fe1SDevin Teske			) || continue
377*27c43fe1SDevin Teske				# Return to previous menu if user either
378*27c43fe1SDevin Teske				# pressed ESC or chose Cancel/No
379*27c43fe1SDevin Teske			f_dialog_data_sanitize __group_members
380*27c43fe1SDevin Teske
381*27c43fe1SDevin Teske			#
382*27c43fe1SDevin Teske			# Convert the newline separated list into a comma-
383*27c43fe1SDevin Teske			# separated one so that if the user switches over to
384*27c43fe1SDevin Teske			# manual editing, list reflects checklist selections
385*27c43fe1SDevin Teske			#
386*27c43fe1SDevin Teske			f_replaceall "$__group_members" "[$NL]" "," __input
387*27c43fe1SDevin Teske			;;
388*27c43fe1SDevin Teske		2) # Enter Group Members manually
389*27c43fe1SDevin Teske			local __prompt2="$msg_group_members"
390*27c43fe1SDevin Teske			__prompt2="$__prompt2 ($msg_separated_by_commas)"
391*27c43fe1SDevin Teske
392*27c43fe1SDevin Teske			f_dialog_input __group_members \
393*27c43fe1SDevin Teske			               "$__prompt2" "$__input" \
394*27c43fe1SDevin Teske			               "$hline_num_tab_enter" || continue
395*27c43fe1SDevin Teske				# Return to previous menu if user either
396*27c43fe1SDevin Teske				# pressed ESC or chose Cancel/No
397*27c43fe1SDevin Teske
398*27c43fe1SDevin Teske			__input="$__group_members"
399*27c43fe1SDevin Teske			;;
400*27c43fe1SDevin Teske		esac
401*27c43fe1SDevin Teske	done
402*27c43fe1SDevin Teske
403*27c43fe1SDevin Teske	setvar "$__var_to_set" "$__input"
404*27c43fe1SDevin Teske	save_flag=1
405*27c43fe1SDevin Teske
406*27c43fe1SDevin Teske	return $DIALOG_OK
407*27c43fe1SDevin Teske}
408*27c43fe1SDevin Teske
409*27c43fe1SDevin Teske# f_dialog_menu_group_add [$defaultitem]
410*27c43fe1SDevin Teske#
411*27c43fe1SDevin Teske# Present a menu detailing the properties of a group that is about to be added.
412*27c43fe1SDevin Teske# The user's menu choice is available using f_dialog_menutag_fetch(). Returns
413*27c43fe1SDevin Teske# success unless the user chose Cancel or pressed ESC. Data to display is taken
414*27c43fe1SDevin Teske# from environment variables group_name, group_gid, and group_members. If
415*27c43fe1SDevin Teske# $defaultitem is present and non-NULL, initially highlight the item in the
416*27c43fe1SDevin Teske# menu.
417*27c43fe1SDevin Teske#
418*27c43fe1SDevin Teskef_dialog_menu_group_add()
419*27c43fe1SDevin Teske{
420*27c43fe1SDevin Teske	local prompt="$msg_save_exit_or_cancel"
421*27c43fe1SDevin Teske	local menu_list # Calculated below
422*27c43fe1SDevin Teske	local defaultitem="$1"
423*27c43fe1SDevin Teske	local hline="$hline_arrows_tab_enter"
424*27c43fe1SDevin Teske
425*27c43fe1SDevin Teske	menu_list="
426*27c43fe1SDevin Teske		'X' '$msg_add/$msg_exit'
427*27c43fe1SDevin Teske		'1' '$msg_group: $group_name'
428*27c43fe1SDevin Teske		'2' '$msg_password: -----'
429*27c43fe1SDevin Teske		'3' '$msg_group_id: $group_gid'
430*27c43fe1SDevin Teske		'4' '$msg_group_members: $group_members'
431*27c43fe1SDevin Teske	" # END-QUOTE
432*27c43fe1SDevin Teske
433*27c43fe1SDevin Teske	local height width rows
434*27c43fe1SDevin Teske	eval f_dialog_menu_size height width rows \
435ab2043b8SDevin Teske	                        \"\$DIALOG_TITLE\"     \
436ab2043b8SDevin Teske	                        \"\$DIALOG_BACKTITLE\" \
437052f8969SDevin Teske	                        \"\$prompt\"           \
438ab2043b8SDevin Teske	                        \"\$hline\"            \
43974036c4dSDevin Teske	                        $menu_list
44074036c4dSDevin Teske
441*27c43fe1SDevin Teske	local menu_choice
442fd962ac6SDevin Teske	menu_choice=$( eval $DIALOG \
443ab2043b8SDevin Teske		--title \"\$DIALOG_TITLE\"         \
444ab2043b8SDevin Teske		--backtitle \"\$DIALOG_BACKTITLE\" \
445ab2043b8SDevin Teske		--hline \"\$hline\"                \
446ab2043b8SDevin Teske		--ok-label \"\$msg_ok\"            \
447ab2043b8SDevin Teske		--cancel-label \"\$msg_cancel\"    \
448d3a0f918SDevin Teske		--default-item \"\$defaultitem\"   \
449052f8969SDevin Teske		--menu \"\$prompt\"                \
450*27c43fe1SDevin Teske		$height $width $rows               \
451ab2043b8SDevin Teske		$menu_list                         \
45289498fdfSDevin Teske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
45389498fdfSDevin Teske	)
454*27c43fe1SDevin Teske	local retval=$?
455fd962ac6SDevin Teske	f_dialog_data_sanitize menu_choice
456*27c43fe1SDevin Teske	f_dialog_menutag_store "$menu_choice"
457*27c43fe1SDevin Teske	return $retval
458*27c43fe1SDevin Teske}
459ab2043b8SDevin Teske
460*27c43fe1SDevin Teske# f_dialog_menu_group_delete $group [$defaultitem]
461*27c43fe1SDevin Teske#
462*27c43fe1SDevin Teske# Present a menu detailing the properties of a group that is about to be
463*27c43fe1SDevin Teske# deleted. The user's menu choice is available using f_dialog_menutag_fetch().
464*27c43fe1SDevin Teske# Returns success unless the user chose Cancel or pressed ESC. Data to display
465*27c43fe1SDevin Teske# is populated automatically from the system accounting database for the given
466*27c43fe1SDevin Teske# $group argument. If $defaultitem is present and non-NULL, initially highlight
467*27c43fe1SDevin Teske# the item in the menu.
468*27c43fe1SDevin Teske#
469*27c43fe1SDevin Teskef_dialog_menu_group_delete()
470*27c43fe1SDevin Teske{
471*27c43fe1SDevin Teske	local prompt="$msg_delete_exit_or_cancel"
472*27c43fe1SDevin Teske	local menu_list # Calculated below
473*27c43fe1SDevin Teske	local defaultitem="$2"
474*27c43fe1SDevin Teske	local hline="$hline_arrows_tab_enter"
475ab2043b8SDevin Teske
476*27c43fe1SDevin Teske	local group_name group_password group_gid group_members
477*27c43fe1SDevin Teske	f_input_group "$1"
478ab2043b8SDevin Teske
479*27c43fe1SDevin Teske	menu_list="
480*27c43fe1SDevin Teske		'X' '$msg_delete/$msg_exit'
481*27c43fe1SDevin Teske		'1' '$msg_group: $group_name'
482*27c43fe1SDevin Teske		'-' '$msg_password: -----'
483*27c43fe1SDevin Teske		'-' '$msg_group_id: $group_gid'
484*27c43fe1SDevin Teske		'-' '$msg_group_members: $group_members'
485*27c43fe1SDevin Teske	" # END-QUOTE
486*27c43fe1SDevin Teske
487*27c43fe1SDevin Teske	local height width rows
488*27c43fe1SDevin Teske	eval f_dialog_menu_size height width rows \
489ab2043b8SDevin Teske	                        \"\$DIALOG_TITLE\"     \
490ab2043b8SDevin Teske	                        \"\$DIALOG_BACKTITLE\" \
491052f8969SDevin Teske	                        \"\$prompt\"           \
492ab2043b8SDevin Teske	                        \"\$hline\"            \
493*27c43fe1SDevin Teske	                        $menu_list
494*27c43fe1SDevin Teske
495*27c43fe1SDevin Teske	local menu_choice
496*27c43fe1SDevin Teske	menu_choice=$( eval $DIALOG \
497ab2043b8SDevin Teske		--title \"\$DIALOG_TITLE\"         \
498ab2043b8SDevin Teske		--backtitle \"\$DIALOG_BACKTITLE\" \
499ab2043b8SDevin Teske		--hline \"\$hline\"                \
500ab2043b8SDevin Teske		--ok-label \"\$msg_ok\"            \
501ab2043b8SDevin Teske		--cancel-label \"\$msg_cancel\"    \
502*27c43fe1SDevin Teske		--default-item \"\$defaultitem\"   \
503*27c43fe1SDevin Teske		--menu \"\$prompt\"                \
504*27c43fe1SDevin Teske		$height $width $rows               \
505*27c43fe1SDevin Teske		$menu_list                         \
50689498fdfSDevin Teske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
507*27c43fe1SDevin Teske	)
508*27c43fe1SDevin Teske	local retval=$?
509*27c43fe1SDevin Teske	f_dialog_data_sanitize menu_choice
510*27c43fe1SDevin Teske	f_dialog_menutag_store "$menu_choice"
511*27c43fe1SDevin Teske	return $retval
512*27c43fe1SDevin Teske}
513ab2043b8SDevin Teske
514*27c43fe1SDevin Teske# f_dialog_menu_group_edit [$defaultitem]
515d4ae33f0SDevin Teske#
516*27c43fe1SDevin Teske# Present a menu detailing the properties of a group that is about to be
517*27c43fe1SDevin Teske# modified. The user's menu choice is available using f_dialog_menutag_fetch().
518*27c43fe1SDevin Teske# Returns success unless the user chose Cancel or pressed ESC. Data to display
519*27c43fe1SDevin Teske# is taken from environment variables group_name, group_gid, and group_members.
520*27c43fe1SDevin Teske# If $defaultitem is present and non-NULL, initially highlight the item in the
521*27c43fe1SDevin Teske# menu.
522d4ae33f0SDevin Teske#
523*27c43fe1SDevin Teskef_dialog_menu_group_edit()
524*27c43fe1SDevin Teske{
525*27c43fe1SDevin Teske	local prompt="$msg_save_exit_or_cancel"
526*27c43fe1SDevin Teske	local menu_list # Calculated below
527*27c43fe1SDevin Teske	local defaultitem="$1"
528*27c43fe1SDevin Teske	local hline="$hline_arrows_tab_enter"
529ab2043b8SDevin Teske
530*27c43fe1SDevin Teske	menu_list="
531*27c43fe1SDevin Teske		'X' '$msg_save/$msg_exit'
532*27c43fe1SDevin Teske		'1' '$msg_group: $group_name'
533*27c43fe1SDevin Teske		'2' '$msg_password: -----'
534*27c43fe1SDevin Teske		'3' '$msg_group_id: $group_gid'
535*27c43fe1SDevin Teske		'4' '$msg_group_members: $group_members'
536*27c43fe1SDevin Teske	" # END-QUOTE
537ab2043b8SDevin Teske
538*27c43fe1SDevin Teske	local height width rows
539*27c43fe1SDevin Teske	eval f_dialog_menu_size height width rows \
540*27c43fe1SDevin Teske	                        \"\$DIALOG_TITLE\"     \
541*27c43fe1SDevin Teske	                        \"\$DIALOG_BACKTITLE\" \
542*27c43fe1SDevin Teske	                        \"\$prompt\"           \
543*27c43fe1SDevin Teske	                        \"\$hline\"            \
544*27c43fe1SDevin Teske	                        $menu_list
545ab2043b8SDevin Teske
546*27c43fe1SDevin Teske	local menu_choice
547*27c43fe1SDevin Teske	menu_choice=$( eval $DIALOG \
548*27c43fe1SDevin Teske		--title \"\$DIALOG_TITLE\"         \
549*27c43fe1SDevin Teske		--backtitle \"\$DIALOG_BACKTITLE\" \
550*27c43fe1SDevin Teske		--hline \"\$hline\"                \
551*27c43fe1SDevin Teske		--ok-label \"\$msg_ok\"            \
552*27c43fe1SDevin Teske		--cancel-label \"\$msg_cancel\"    \
553*27c43fe1SDevin Teske		--default-item \"\$defaultitem\"   \
554*27c43fe1SDevin Teske		--menu \"\$prompt\"                \
555*27c43fe1SDevin Teske		$height $width $rows               \
556*27c43fe1SDevin Teske		$menu_list                         \
557*27c43fe1SDevin Teske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
558*27c43fe1SDevin Teske	)
559*27c43fe1SDevin Teske	local retval=$?
560*27c43fe1SDevin Teske	f_dialog_data_sanitize menu_choice
561*27c43fe1SDevin Teske	f_dialog_menutag_store "$menu_choice"
562*27c43fe1SDevin Teske	return $retval
563ab2043b8SDevin Teske}
564ab2043b8SDevin Teske
56556961fd7SDevin Teske############################################################ MAIN
56656961fd7SDevin Teske
56756961fd7SDevin Teskef_dprintf "%s: Successfully loaded." usermgmt/group_input.subr
56856961fd7SDevin Teske
569ab2043b8SDevin Teskefi # ! $_USERMGMT_GROUP_INPUT_SUBR
570