group_input.subr revision 263144
1238438Sdteskeif [ ! "$_USERMGMT_GROUP_INPUT_SUBR" ]; then _USERMGMT_GROUP_INPUT_SUBR=1
2238438Sdteske#
3238438Sdteske# Copyright (c) 2012 Ron McDowell
4262904Sdteske# Copyright (c) 2012-2014 Devin Teske
5238438Sdteske# All rights reserved.
6238438Sdteske#
7238438Sdteske# Redistribution and use in source and binary forms, with or without
8238438Sdteske# modification, are permitted provided that the following conditions
9238438Sdteske# are met:
10238438Sdteske# 1. Redistributions of source code must retain the above copyright
11238438Sdteske#    notice, this list of conditions and the following disclaimer.
12238438Sdteske# 2. Redistributions in binary form must reproduce the above copyright
13238438Sdteske#    notice, this list of conditions and the following disclaimer in the
14238438Sdteske#    documentation and/or other materials provided with the distribution.
15238438Sdteske#
16238438Sdteske# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17238438Sdteske# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18238438Sdteske# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19238438Sdteske# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20238438Sdteske# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21238438Sdteske# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22238438Sdteske# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23238438Sdteske# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24238438Sdteske# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25238438Sdteske# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26238438Sdteske# SUCH DAMAGE.
27238438Sdteske#
28238438Sdteske# $FreeBSD: head/usr.sbin/bsdconfig/usermgmt/share/group_input.subr 263144 2014-03-14 03:15:02Z dteske $
29238438Sdteske#
30238438Sdteske############################################################ INCLUDES
31238438Sdteske
32240684SdteskeBSDCFG_SHARE="/usr/share/bsdconfig"
33240684Sdteske. $BSDCFG_SHARE/common.subr || exit 1
34244675Sdteskef_dprintf "%s: loading includes..." usermgmt/group_input.subr
35240684Sdteskef_include $BSDCFG_SHARE/dialog.subr
36240684Sdteskef_include $BSDCFG_SHARE/strings.subr
37240684Sdteske
38240684SdteskeBSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="070.usermgmt"
39238438Sdteskef_include_lang $BSDCFG_LIBE/include/messages.subr
40238438Sdteskef_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr
41238438Sdteske
42238438Sdteske############################################################ FUNCTIONS
43238438Sdteske
44238438Sdteske# f_input_group $group
45238438Sdteske#
46238438Sdteske# Given $group name or id, create the environment variables group_name,
47238438Sdteske# group_gid, and group_members (and group_password is reset to NULL).
48238438Sdteske#
49238438Sdteskef_input_group()
50238438Sdteske{
51262904Sdteske	local funcname=f_input_group
52262904Sdteske	local group="$1"
53262904Sdteske
54262904Sdteske	f_dprintf "$funcname: Getting info for group \`%s'" "$group"
55262904Sdteske	eval "$( pw groupshow "$group" 2> /dev/null | awk -F: '
56238438Sdteske	{
57262904Sdteske		found = $1 != ""
58262982Sdteske		printf "group_name='\'%s\''\n",    $1
59238438Sdteske		printf "group_password=\n"
60262982Sdteske		printf "group_gid='\'%s\''\n",     $3
61238438Sdteske		printf "group_members='\'%s\''\n", $4
62238438Sdteske		exit
63262904Sdteske	}
64262904Sdteske	END { if (!found) print "false" }' )"
65238438Sdteske}
66238438Sdteske
67249751Sdteske# f_dialog_menu_group_list [$default]
68238438Sdteske#
69249751Sdteske# Allows the user to select a group from a list. Optionally, if present and
70249751Sdteske# non-NULL, initially highlight $default group.
71238438Sdteske#
72238438Sdteskef_dialog_menu_group_list()
73238438Sdteske{
74251264Sdteske	local prompt=
75251264Sdteske	local menu_list="
76251264Sdteske		'X $msg_exit' ''
77251264Sdteske	" # END-QUOTE
78249751Sdteske	local defaultitem="$1"
79238438Sdteske	local hline="$hline_alnum_punc_tab_enter"
80238438Sdteske
81238438Sdteske	# Add groups from group(5)
82238438Sdteske	menu_list="$menu_list $( pw groupshow -a | awk -F: '
83238438Sdteske		!/^[[:space:]]*(#|$)/ {
84238438Sdteske			printf "'\'%s\'\ \'%s\''\n", $1, $1
85238438Sdteske		}'
86238438Sdteske	)"
87238438Sdteske
88251190Sdteske	local height width rows
89251190Sdteske	eval f_dialog_menu_size height width rows \
90251190Sdteske	                        \"\$DIALOG_TITLE\"     \
91251190Sdteske	                        \"\$DIALOG_BACKTITLE\" \
92251264Sdteske	                        \"\$prompt\"           \
93251190Sdteske	                        \"\$hline\"            \
94251190Sdteske	                        $menu_list
95238438Sdteske
96251236Sdteske	local menu_choice
97251236Sdteske	menu_choice=$( eval $DIALOG \
98249751Sdteske		--title \"\$DIALOG_TITLE\"         \
99238438Sdteske		--backtitle \"\$DIALOG_BACKTITLE\" \
100238438Sdteske		--hline \"\$hline\"                \
101238438Sdteske		--ok-label \"\$msg_ok\"            \
102238438Sdteske		--cancel-label \"\$msg_cancel\"    \
103249751Sdteske		--default-item \"\$defaultitem\"   \
104251264Sdteske		--menu \"\$prompt\"                \
105251190Sdteske		$height $width $rows               \
106251190Sdteske		$menu_list                         \
107240768Sdteske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
108240768Sdteske	)
109240768Sdteske	local retval=$?
110251236Sdteske	f_dialog_menutag_store -s "$menu_choice"
111240768Sdteske	return $retval
112238438Sdteske}
113238438Sdteske
114262904Sdteske# f_dialog_input_group_name $var_to_set [$group_name]
115238438Sdteske#
116262904Sdteske# Allows the user to enter a name for a new group. If the user does not cancel
117262904Sdteske# or press ESC, the $var_to_set variable will hold the newly-configured value
118262904Sdteske# upon return.
119238438Sdteske#
120238438Sdteskef_dialog_input_group_name()
121238438Sdteske{
122262904Sdteske	local __var_to_set="$1" __name="$2"
123262904Sdteske
124238438Sdteske	#
125238438Sdteske	# Loop until the user provides taint-free/valid input
126238438Sdteske	#
127262904Sdteske	local __input="$__name"
128238438Sdteske	while :; do
129238438Sdteske		# Return if user has either pressed ESC or chosen Cancel/No
130262904Sdteske		f_dialog_input __input "$msg_group" "$__input" \
131256181Sdteske		               "$hline_alnum_tab_enter" || return $?
132238438Sdteske
133238438Sdteske		# Check for no-change
134262904Sdteske		if [ "$__input" = "$__name" ]; then
135262904Sdteske			setvar "$__var_to_set" "$__input"
136256181Sdteske			return $DIALOG_OK
137238438Sdteske		fi
138238438Sdteske
139238438Sdteske		# Check for NULL entry
140262904Sdteske		if [ ! "$__input" ]; then
141252795Sdteske			f_show_msg "$msg_group_is_empty"
142238438Sdteske			continue
143238438Sdteske		fi
144238438Sdteske
145238438Sdteske		# Check for invalid entry
146262904Sdteske		case "$__input" in [!a-zA-Z]*)
147252795Sdteske			f_show_msg "$msg_group_must_start_with_letter"
148238438Sdteske			continue
149262904Sdteske		esac
150238438Sdteske
151238438Sdteske		# Check for duplicate entry
152262904Sdteske		if f_quietly pw groupshow -n "$__input"; then
153262904Sdteske			f_show_msg "$msg_group_already_used" "$__input"
154238438Sdteske			continue
155238438Sdteske		fi
156238438Sdteske
157262904Sdteske		setvar "$__var_to_set" "$__input"
158238438Sdteske		break
159238438Sdteske	done
160238438Sdteske
161256181Sdteske	return $DIALOG_OK
162238438Sdteske}
163238438Sdteske
164262904Sdteske# f_dialog_input_group_password $var_to_set $dvar_to_set
165238438Sdteske#
166262904Sdteske# Prompt the user to enter a password (twice). If the user does not cancel or
167262904Sdteske# press ESC, $var_to_set will hold the confirmed user entry. Otherwise, if the
168262904Sdteske# user cancels or enters a NULL password (twice), they are given the choice to
169262904Sdteske# disable password authentication for the given group, wherein $dvar_to_set has
170262904Sdteske# a value of 1 to indicate password authentication should be disabled.
171238438Sdteske#
172238438Sdteskef_dialog_input_group_password()
173238438Sdteske{
174262904Sdteske	local __var_to_set="$1" __dvar_to_set="$2"
175262904Sdteske	local __prompt1="$msg_group_password"
176262904Sdteske	local __prompt2="$msg_reenter_group_password"
177262904Sdteske	local __hline="$hline_alnum_punc_tab_enter"
178238438Sdteske
179262904Sdteske	local __height1 __width1
180262904Sdteske	f_dialog_inputbox_size __height1 __width1 \
181238438Sdteske	        	"$DIALOG_TITLE"     \
182238438Sdteske	        	"$DIALOG_BACKTITLE" \
183262904Sdteske	        	"$__prompt1"        \
184238438Sdteske	        	""                  \
185262904Sdteske	        	"$__hline"
186238438Sdteske
187262904Sdteske	local __height2 __width2
188262904Sdteske	f_dialog_inputbox_size __height2 __width2 \
189238438Sdteske	        	"$DIALOG_TITLE"     \
190238438Sdteske	        	"$DIALOG_BACKTITLE" \
191262904Sdteske	        	"$__prompt2"        \
192238438Sdteske	        	""                  \
193262904Sdteske	        	"$__hline"
194238438Sdteske
195238438Sdteske	#
196238438Sdteske	# Loop until the user provides taint-free/valid input
197238438Sdteske	#
198262904Sdteske	local __retval __password1 __password2
199238438Sdteske	while :; do
200262904Sdteske		__password1=$( $DIALOG \
201251190Sdteske			--title "$DIALOG_TITLE"         \
202251190Sdteske			--backtitle "$DIALOG_BACKTITLE" \
203262904Sdteske			--hline "$__hline"              \
204251190Sdteske			--ok-label "$msg_ok"            \
205251190Sdteske			--cancel-label "$msg_cancel"    \
206251190Sdteske			--insecure                      \
207262904Sdteske			--passwordbox "$__prompt1"      \
208262904Sdteske			$__height1 $__width1            \
209240768Sdteske			2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
210240768Sdteske		)
211262904Sdteske		__retval=$?
212262904Sdteske		debug= f_dialog_line_sanitize __password1
213238438Sdteske
214238438Sdteske		# Return if user has either pressed ESC or chosen Cancel/No
215262904Sdteske		[ $__retval -eq $DIALOG_OK ] || return $__retval
216238438Sdteske
217262904Sdteske		__password2=$( $DIALOG \
218251190Sdteske			--title "$DIALOG_TITLE"         \
219251190Sdteske			--backtitle "$DIALOG_BACKTITLE" \
220262904Sdteske			--hline "$__hline"              \
221251190Sdteske			--ok-label "$msg_ok"            \
222251190Sdteske			--cancel-label "$msg_cancel"    \
223251190Sdteske			--insecure                      \
224262904Sdteske			--passwordbox "$__prompt2"      \
225262904Sdteske			$__height2 $__width2            \
226240768Sdteske			2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
227240768Sdteske		)
228262904Sdteske		__retval=$?
229262904Sdteske		debug= f_dialog_line_sanitize __password2
230238438Sdteske
231238438Sdteske		# Return if user has either pressed ESC or chosen Cancel/No
232262904Sdteske		[ $__retval -eq $DIALOG_OK ] || return $__retval
233238438Sdteske
234238438Sdteske		# Check for password mismatch
235262904Sdteske		if [ "$__password1" != "$__password2" ]; then
236252795Sdteske			f_show_msg "$msg_group_passwords_do_not_match"
237238438Sdteske			continue
238238438Sdteske		fi
239238438Sdteske
240238438Sdteske		# Check for NULL entry
241262904Sdteske		if [ ! "$__password1" ]; then
242251544Sdteske			f_dialog_yesno "$msg_disable_password_auth_for_group"
243262904Sdteske			__retval=$?
244262904Sdteske			if [ $__retval -eq $DIALOG_ESC ]; then
245262904Sdteske				return $__retval
246262904Sdteske			elif [ $__retval -eq $DIALOG_OK ]; then
247262904Sdteske				setvar "$__dvar_to_set" 1
248251547Sdteske			else
249251547Sdteske				continue # back to password prompt
250251547Sdteske			fi
251238438Sdteske		else
252262904Sdteske			setvar "$__dvar_to_set" ""
253238438Sdteske		fi
254238438Sdteske
255262904Sdteske		setvar "$__var_to_set" "$__password1"
256238438Sdteske		break
257238438Sdteske	done
258238438Sdteske
259256181Sdteske	return $DIALOG_OK
260238438Sdteske}
261238438Sdteske
262262904Sdteske# f_dialog_input_group_gid $var_to_set [$group_gid]
263238438Sdteske#
264238438Sdteske# Allow the user to enter a new GID for a given group. If the user does not
265262904Sdteske# cancel or press ESC, the $var_to_set variable will hold the newly-configured
266238438Sdteske# value upon return.
267238438Sdteske#
268238438Sdteskef_dialog_input_group_gid()
269238438Sdteske{
270262904Sdteske	local __var_to_set="$1" __input="$2"
271238438Sdteske
272238438Sdteske	# Return if user has either pressed ESC or chosen Cancel/No
273262904Sdteske	f_dialog_input __input "$msg_group_id_leave_empty_for_default" \
274262904Sdteske	               "$__input" "$hline_num_tab_enter" || return $?
275238438Sdteske
276262904Sdteske	setvar "$__var_to_set" "$__input"
277256181Sdteske	return $DIALOG_OK
278238438Sdteske}
279238438Sdteske
280262904Sdteske# f_dialog_input_group_members $var_to_set [$group_members]
281238438Sdteske#
282251266Sdteske# Allow the user to modify a list of members for a given group. If the user
283262904Sdteske# does not cancel or press ESC, the $var_to_set variable will hold the newly-
284262904Sdteske# configured value upon return.
285238438Sdteske#
286238438Sdteskef_dialog_input_group_members()
287238438Sdteske{
288262904Sdteske	local __var_to_set="$1" __input="$2"
289262904Sdteske	local __prompt="$msg_group_members:"
290262904Sdteske	local __menu_list="
291238438Sdteske		'X' '$msg_continue'
292238438Sdteske		'1' '$msg_select_group_members_from_list'
293238438Sdteske		'2' '$msg_enter_group_members_manually'
294238438Sdteske	" # END-QUOTE
295262904Sdteske	local __defaultitem=
296262904Sdteske	local __hline="$hline_num_arrows_tab_enter"
297238438Sdteske
298262904Sdteske	local __mheight __mwidth __mrows
299262904Sdteske	eval f_dialog_menu_size __mheight __mwidth __mrows \
300251190Sdteske	                        \"\$DIALOG_TITLE\"     \
301251190Sdteske	                        \"\$DIALOG_BACKTITLE\" \
302262904Sdteske	                        \"\$__prompt\"         \
303262904Sdteske	                        \"\$__hline\"          \
304263144Sdteske	                        $__menu_list
305251190Sdteske
306262904Sdteske	local __menu_choice __retval
307238438Sdteske	while :; do
308262904Sdteske		__menu_choice=$( eval $DIALOG \
309238438Sdteske			--title \"\$DIALOG_TITLE\"         \
310238438Sdteske			--backtitle \"\$DIALOG_BACKTITLE\" \
311262904Sdteske			--hline \"\$__hline\"              \
312238438Sdteske			--ok-label \"\$msg_ok\"            \
313238438Sdteske			--cancel-label \"\$msg_cancel\"    \
314262904Sdteske			--default-item \"\$__defaultitem\" \
315262904Sdteske			--menu \"\$__prompt\"              \
316262904Sdteske			$__mheight $__mwidth $__mrows      \
317262904Sdteske			$__menu_list                       \
318240768Sdteske			2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
319240768Sdteske		)
320262904Sdteske		__retval=$?
321262904Sdteske		f_dialog_data_sanitize __menu_choice
322262904Sdteske		__defaultitem="$__menu_choice"
323262904Sdteske		f_dprintf "retval=%u menu_choice=[%s]" \
324262904Sdteske		          $__retval "$__menu_choice"
325238438Sdteske
326238438Sdteske		# Return if user has either pressed ESC or chosen Cancel/No
327262904Sdteske		[ $__retval -eq $DIALOG_OK ] || return $__retval
328238438Sdteske
329262904Sdteske		local __group_members
330262904Sdteske		case "$__menu_choice" in
331238438Sdteske		X) # Exit
332238438Sdteske			break ;;
333238438Sdteske		1) # Select Group Members from a list
334262904Sdteske			local __user_list __length=0 __user __check_list=
335262904Sdteske			__user_list=$( pw usershow -a |
336262904Sdteske				awk -F: '!/^[[:space:]]*(#|$)/{print $1}' )
337262904Sdteske			while [ $__length -ne ${#__user_list} ]; do
338262904Sdteske				__user="${__user_list%%$NL*}" # First line
339262904Sdteske
340251264Sdteske				# Format of a checklist entry: tag item status
341262904Sdteske				__check_list="$__check_list '$__user' ''"
342262904Sdteske				case "$__input" in
343262904Sdteske				"$__user"|"$__user",*|*,"$__user",*|*,"$__user")
344262904Sdteske					__check_list="$__check_list on" ;;
345262904Sdteske				*)
346262904Sdteske					__check_list="$__check_list off"
347262904Sdteske				esac
348262904Sdteske
349262904Sdteske				__length=${#__user_list}
350262904Sdteske				__user_list="${__user_list#*$NL}" # Kill line
351238438Sdteske			done
352238438Sdteske
353262904Sdteske			local __cheight __cwidth __crows
354262904Sdteske			eval f_dialog_checklist_size \
355262904Sdteske				__cheight __cwidth __crows \
356262904Sdteske				\"\$DIALOG_TITLE\"     \
357262904Sdteske				\"\$DIALOG_BACKTITLE\" \
358262904Sdteske				\"\$__prompt\"         \
359262904Sdteske				\"\$__hline\"          \
360262904Sdteske				$__check_list
361262904Sdteske			__group_members=$( eval $DIALOG \
362238438Sdteske				--title \"\$DIALOG_TITLE\"         \
363238438Sdteske				--backtitle \"\$DIALOG_BACKTITLE\" \
364238438Sdteske				--separate-output                  \
365262904Sdteske				--hline \"\$__hline\"              \
366238438Sdteske				--ok-label \"\$msg_ok\"            \
367238438Sdteske				--cancel-label \"\$msg_cancel\"    \
368262904Sdteske				--checklist \"\$__prompt\"         \
369262904Sdteske				$__cheight $__cwidth $__crows      \
370262904Sdteske				$__check_list                      \
371240768Sdteske				2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
372251236Sdteske			) || continue
373251236Sdteske				# Return to previous menu if user either
374251236Sdteske				# pressed ESC or chose Cancel/No
375262904Sdteske			f_dialog_data_sanitize __group_members
376251236Sdteske
377259054Sdteske			#
378251236Sdteske			# Convert the newline separated list into a comma-
379251236Sdteske			# separated one so that if the user switches over to
380251236Sdteske			# manual editing, list reflects checklist selections
381259054Sdteske			#
382262904Sdteske			f_replaceall "$__group_members" "[$NL]" "," __input
383238438Sdteske			;;
384238438Sdteske		2) # Enter Group Members manually
385262904Sdteske			local __prompt2="$msg_group_members"
386262904Sdteske			__prompt2="$__prompt2 ($msg_separated_by_commas)"
387238438Sdteske
388262904Sdteske			f_dialog_input __group_members \
389262904Sdteske			               "$__prompt2" "$__input" \
390251242Sdteske			               "$hline_num_tab_enter" || continue
391251242Sdteske				# Return to previous menu if user either
392251242Sdteske				# pressed ESC or chose Cancel/No
393238438Sdteske
394262904Sdteske			__input="$__group_members"
395238438Sdteske			;;
396238438Sdteske		esac
397238438Sdteske	done
398238438Sdteske
399262904Sdteske	setvar "$__var_to_set" "$__input"
400256181Sdteske	return $DIALOG_OK
401238438Sdteske}
402238438Sdteske
403262904Sdteske# f_dialog_menu_group_add [$defaultitem]
404262904Sdteske#
405262904Sdteske# Present a menu detailing the properties of a group that is about to be added.
406262904Sdteske# The user's menu choice is available using f_dialog_menutag_fetch(). Returns
407262904Sdteske# success unless the user chose Cancel or pressed ESC. Data to display is taken
408262904Sdteske# from environment variables group_name, group_gid, and group_members. If
409262904Sdteske# $defaultitem is present and non-NULL, initially highlight the item in the
410262904Sdteske# menu.
411262904Sdteske#
412262904Sdteskef_dialog_menu_group_add()
413262904Sdteske{
414262904Sdteske	local prompt="$msg_save_exit_or_cancel"
415262904Sdteske	local menu_list # Calculated below
416262904Sdteske	local defaultitem="$1"
417262904Sdteske	local hline="$hline_arrows_tab_enter"
418262904Sdteske
419262904Sdteske	menu_list="
420262904Sdteske		'X' '$msg_add/$msg_exit'
421262904Sdteske		'1' '$msg_group: $group_name'
422262904Sdteske		'2' '$msg_password: -----'
423262904Sdteske		'3' '$msg_group_id: $group_gid'
424262904Sdteske		'4' '$msg_group_members: $group_members'
425262904Sdteske	" # END-QUOTE
426262904Sdteske
427262904Sdteske	local height width rows
428262904Sdteske	eval f_dialog_menu_size height width rows \
429262904Sdteske	                        \"\$DIALOG_TITLE\"     \
430262904Sdteske	                        \"\$DIALOG_BACKTITLE\" \
431262904Sdteske	                        \"\$prompt\"           \
432262904Sdteske	                        \"\$hline\"            \
433262904Sdteske	                        $menu_list
434262904Sdteske
435262904Sdteske	local menu_choice
436262904Sdteske	menu_choice=$( eval $DIALOG \
437262904Sdteske		--title \"\$DIALOG_TITLE\"         \
438262904Sdteske		--backtitle \"\$DIALOG_BACKTITLE\" \
439262904Sdteske		--hline \"\$hline\"                \
440262904Sdteske		--ok-label \"\$msg_ok\"            \
441262904Sdteske		--cancel-label \"\$msg_cancel\"    \
442262904Sdteske		--default-item \"\$defaultitem\"   \
443262904Sdteske		--menu \"\$prompt\"                \
444262904Sdteske		$height $width $rows               \
445262904Sdteske		$menu_list                         \
446262904Sdteske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
447262904Sdteske	)
448262904Sdteske	local retval=$?
449262904Sdteske	f_dialog_data_sanitize menu_choice
450262904Sdteske	f_dialog_menutag_store "$menu_choice"
451262904Sdteske	return $retval
452262904Sdteske}
453262904Sdteske
454262904Sdteske# f_dialog_menu_group_delete $group [$defaultitem]
455262904Sdteske#
456262904Sdteske# Present a menu detailing the properties of a group that is about to be
457262904Sdteske# deleted. The user's menu choice is available using f_dialog_menutag_fetch().
458262904Sdteske# Returns success unless the user chose Cancel or pressed ESC. Data to display
459262904Sdteske# is populated automatically from the system accounting database for the given
460262904Sdteske# $group argument. If $defaultitem is present and non-NULL, initially highlight
461262904Sdteske# the item in the menu.
462262904Sdteske#
463262904Sdteskef_dialog_menu_group_delete()
464262904Sdteske{
465262904Sdteske	local prompt="$msg_delete_exit_or_cancel"
466262904Sdteske	local menu_list # Calculated below
467262904Sdteske	local defaultitem="$2"
468262904Sdteske	local hline="$hline_arrows_tab_enter"
469262904Sdteske
470262904Sdteske	local group_name group_password group_gid group_members
471262904Sdteske	f_input_group "$1"
472262904Sdteske
473262904Sdteske	menu_list="
474262904Sdteske		'X' '$msg_delete/$msg_exit'
475262904Sdteske		'1' '$msg_group: $group_name'
476262904Sdteske		'-' '$msg_password: -----'
477262904Sdteske		'-' '$msg_group_id: $group_gid'
478262904Sdteske		'-' '$msg_group_members: $group_members'
479262904Sdteske	" # END-QUOTE
480262904Sdteske
481262904Sdteske	local height width rows
482262904Sdteske	eval f_dialog_menu_size height width rows \
483262904Sdteske	                        \"\$DIALOG_TITLE\"     \
484262904Sdteske	                        \"\$DIALOG_BACKTITLE\" \
485262904Sdteske	                        \"\$prompt\"           \
486262904Sdteske	                        \"\$hline\"            \
487262904Sdteske	                        $menu_list
488262904Sdteske
489262904Sdteske	local menu_choice
490262904Sdteske	menu_choice=$( eval $DIALOG \
491262904Sdteske		--title \"\$DIALOG_TITLE\"         \
492262904Sdteske		--backtitle \"\$DIALOG_BACKTITLE\" \
493262904Sdteske		--hline \"\$hline\"                \
494262904Sdteske		--ok-label \"\$msg_ok\"            \
495262904Sdteske		--cancel-label \"\$msg_cancel\"    \
496262904Sdteske		--default-item \"\$defaultitem\"   \
497262904Sdteske		--menu \"\$prompt\"                \
498262904Sdteske		$height $width $rows               \
499262904Sdteske		$menu_list                         \
500262904Sdteske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
501262904Sdteske	)
502262904Sdteske	local retval=$?
503262904Sdteske	f_dialog_data_sanitize menu_choice
504262904Sdteske	f_dialog_menutag_store "$menu_choice"
505262904Sdteske	return $retval
506262904Sdteske}
507262904Sdteske
508262904Sdteske# f_dialog_menu_group_edit [$defaultitem]
509262904Sdteske#
510262904Sdteske# Present a menu detailing the properties of a group that is about to be
511262904Sdteske# modified. The user's menu choice is available using f_dialog_menutag_fetch().
512262904Sdteske# Returns success unless the user chose Cancel or pressed ESC. Data to display
513262904Sdteske# is taken from environment variables group_name, group_gid, and group_members.
514262904Sdteske# If $defaultitem is present and non-NULL, initially highlight the item in the
515262904Sdteske# menu.
516262904Sdteske#
517262904Sdteskef_dialog_menu_group_edit()
518262904Sdteske{
519262904Sdteske	local prompt="$msg_save_exit_or_cancel"
520262904Sdteske	local menu_list # Calculated below
521262904Sdteske	local defaultitem="$1"
522262904Sdteske	local hline="$hline_arrows_tab_enter"
523262904Sdteske
524262904Sdteske	menu_list="
525262904Sdteske		'X' '$msg_save/$msg_exit'
526262904Sdteske		'1' '$msg_group: $group_name'
527262904Sdteske		'2' '$msg_password: -----'
528262904Sdteske		'3' '$msg_group_id: $group_gid'
529262904Sdteske		'4' '$msg_group_members: $group_members'
530262904Sdteske	" # END-QUOTE
531262904Sdteske
532262904Sdteske	local height width rows
533262904Sdteske	eval f_dialog_menu_size height width rows \
534262904Sdteske	                        \"\$DIALOG_TITLE\"     \
535262904Sdteske	                        \"\$DIALOG_BACKTITLE\" \
536262904Sdteske	                        \"\$prompt\"           \
537262904Sdteske	                        \"\$hline\"            \
538262904Sdteske	                        $menu_list
539262904Sdteske
540262904Sdteske	local menu_choice
541262904Sdteske	menu_choice=$( eval $DIALOG \
542262904Sdteske		--title \"\$DIALOG_TITLE\"         \
543262904Sdteske		--backtitle \"\$DIALOG_BACKTITLE\" \
544262904Sdteske		--hline \"\$hline\"                \
545262904Sdteske		--ok-label \"\$msg_ok\"            \
546262904Sdteske		--cancel-label \"\$msg_cancel\"    \
547262904Sdteske		--default-item \"\$defaultitem\"   \
548262904Sdteske		--menu \"\$prompt\"                \
549262904Sdteske		$height $width $rows               \
550262904Sdteske		$menu_list                         \
551262904Sdteske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
552262904Sdteske	)
553262904Sdteske	local retval=$?
554262904Sdteske	f_dialog_data_sanitize menu_choice
555262904Sdteske	f_dialog_menutag_store "$menu_choice"
556262904Sdteske	return $retval
557262904Sdteske}
558262904Sdteske
559244675Sdteske############################################################ MAIN
560244675Sdteske
561244675Sdteskef_dprintf "%s: Successfully loaded." usermgmt/group_input.subr
562244675Sdteske
563238438Sdteskefi # ! $_USERMGMT_GROUP_INPUT_SUBR
564