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$ 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: ' 56263149Sdteske function set_value(var, value) { 57263149Sdteske gsub(/'\''/, "'\''\\'\'\''", value) 58263149Sdteske printf "group_%s='\'%s\''\n", var, value 59263149Sdteske } 60238438Sdteske { 61262904Sdteske found = $1 != "" 62263149Sdteske set_value("name", $1) 63263149Sdteske set_value("password", "") 64263149Sdteske set_value("gid", $3) 65263149Sdteske set_value("members", $4) 66238438Sdteske exit 67262904Sdteske } 68262904Sdteske END { if (!found) print "false" }' )" 69238438Sdteske} 70238438Sdteske 71249751Sdteske# f_dialog_menu_group_list [$default] 72238438Sdteske# 73249751Sdteske# Allows the user to select a group from a list. Optionally, if present and 74249751Sdteske# non-NULL, initially highlight $default group. 75238438Sdteske# 76238438Sdteskef_dialog_menu_group_list() 77238438Sdteske{ 78251264Sdteske local prompt= 79251264Sdteske local menu_list=" 80251264Sdteske 'X $msg_exit' '' 81251264Sdteske " # END-QUOTE 82249751Sdteske local defaultitem="$1" 83238438Sdteske local hline="$hline_alnum_punc_tab_enter" 84238438Sdteske 85238438Sdteske # Add groups from group(5) 86238438Sdteske menu_list="$menu_list $( pw groupshow -a | awk -F: ' 87263149Sdteske function mprint(tag, item) { 88263149Sdteske gsub(/'\''/, "'\''\\'\'\''", tag) 89263149Sdteske gsub(/'\''/, "'\''\\'\'\''", item) 90263149Sdteske printf "'\'%s\'\ \'%s\''\n", tag, item 91263149Sdteske } 92263149Sdteske !/^[[:space:]]*(#|$)/ { mprint($1, $1) } 93263149Sdteske ' )" 94238438Sdteske 95251190Sdteske local height width rows 96251190Sdteske eval f_dialog_menu_size height width rows \ 97251190Sdteske \"\$DIALOG_TITLE\" \ 98251190Sdteske \"\$DIALOG_BACKTITLE\" \ 99251264Sdteske \"\$prompt\" \ 100251190Sdteske \"\$hline\" \ 101251190Sdteske $menu_list 102238438Sdteske 103251236Sdteske local menu_choice 104251236Sdteske menu_choice=$( eval $DIALOG \ 105249751Sdteske --title \"\$DIALOG_TITLE\" \ 106238438Sdteske --backtitle \"\$DIALOG_BACKTITLE\" \ 107238438Sdteske --hline \"\$hline\" \ 108238438Sdteske --ok-label \"\$msg_ok\" \ 109238438Sdteske --cancel-label \"\$msg_cancel\" \ 110249751Sdteske --default-item \"\$defaultitem\" \ 111251264Sdteske --menu \"\$prompt\" \ 112251190Sdteske $height $width $rows \ 113251190Sdteske $menu_list \ 114240768Sdteske 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD 115240768Sdteske ) 116240768Sdteske local retval=$? 117251236Sdteske f_dialog_menutag_store -s "$menu_choice" 118240768Sdteske return $retval 119238438Sdteske} 120238438Sdteske 121262904Sdteske# f_dialog_input_group_name $var_to_set [$group_name] 122238438Sdteske# 123262904Sdteske# Allows the user to enter a name for a new group. If the user does not cancel 124262904Sdteske# or press ESC, the $var_to_set variable will hold the newly-configured value 125262904Sdteske# upon return. 126238438Sdteske# 127238438Sdteskef_dialog_input_group_name() 128238438Sdteske{ 129262904Sdteske local __var_to_set="$1" __name="$2" 130262904Sdteske 131238438Sdteske # 132238438Sdteske # Loop until the user provides taint-free/valid input 133238438Sdteske # 134262904Sdteske local __input="$__name" 135238438Sdteske while :; do 136238438Sdteske # Return if user has either pressed ESC or chosen Cancel/No 137262904Sdteske f_dialog_input __input "$msg_group" "$__input" \ 138256181Sdteske "$hline_alnum_tab_enter" || return $? 139238438Sdteske 140238438Sdteske # Check for no-change 141262904Sdteske if [ "$__input" = "$__name" ]; then 142262904Sdteske setvar "$__var_to_set" "$__input" 143256181Sdteske return $DIALOG_OK 144238438Sdteske fi 145238438Sdteske 146238438Sdteske # Check for NULL entry 147262904Sdteske if [ ! "$__input" ]; then 148252795Sdteske f_show_msg "$msg_group_is_empty" 149238438Sdteske continue 150238438Sdteske fi 151238438Sdteske 152238438Sdteske # Check for invalid entry 153262904Sdteske case "$__input" in [!a-zA-Z]*) 154252795Sdteske f_show_msg "$msg_group_must_start_with_letter" 155238438Sdteske continue 156262904Sdteske esac 157238438Sdteske 158238438Sdteske # Check for duplicate entry 159262904Sdteske if f_quietly pw groupshow -n "$__input"; then 160262904Sdteske f_show_msg "$msg_group_already_used" "$__input" 161238438Sdteske continue 162238438Sdteske fi 163238438Sdteske 164262904Sdteske setvar "$__var_to_set" "$__input" 165238438Sdteske break 166238438Sdteske done 167238438Sdteske 168256181Sdteske return $DIALOG_OK 169238438Sdteske} 170238438Sdteske 171262904Sdteske# f_dialog_input_group_password $var_to_set $dvar_to_set 172238438Sdteske# 173262904Sdteske# Prompt the user to enter a password (twice). If the user does not cancel or 174262904Sdteske# press ESC, $var_to_set will hold the confirmed user entry. Otherwise, if the 175262904Sdteske# user cancels or enters a NULL password (twice), they are given the choice to 176262904Sdteske# disable password authentication for the given group, wherein $dvar_to_set has 177262904Sdteske# a value of 1 to indicate password authentication should be disabled. 178238438Sdteske# 179238438Sdteskef_dialog_input_group_password() 180238438Sdteske{ 181262904Sdteske local __var_to_set="$1" __dvar_to_set="$2" 182262904Sdteske local __prompt1="$msg_group_password" 183262904Sdteske local __prompt2="$msg_reenter_group_password" 184262904Sdteske local __hline="$hline_alnum_punc_tab_enter" 185238438Sdteske 186262904Sdteske local __height1 __width1 187262904Sdteske f_dialog_inputbox_size __height1 __width1 \ 188238438Sdteske "$DIALOG_TITLE" \ 189238438Sdteske "$DIALOG_BACKTITLE" \ 190262904Sdteske "$__prompt1" \ 191238438Sdteske "" \ 192262904Sdteske "$__hline" 193238438Sdteske 194262904Sdteske local __height2 __width2 195262904Sdteske f_dialog_inputbox_size __height2 __width2 \ 196238438Sdteske "$DIALOG_TITLE" \ 197238438Sdteske "$DIALOG_BACKTITLE" \ 198262904Sdteske "$__prompt2" \ 199238438Sdteske "" \ 200262904Sdteske "$__hline" 201238438Sdteske 202238438Sdteske # 203238438Sdteske # Loop until the user provides taint-free/valid input 204238438Sdteske # 205262904Sdteske local __retval __password1 __password2 206238438Sdteske while :; do 207262904Sdteske __password1=$( $DIALOG \ 208251190Sdteske --title "$DIALOG_TITLE" \ 209251190Sdteske --backtitle "$DIALOG_BACKTITLE" \ 210262904Sdteske --hline "$__hline" \ 211251190Sdteske --ok-label "$msg_ok" \ 212251190Sdteske --cancel-label "$msg_cancel" \ 213251190Sdteske --insecure \ 214262904Sdteske --passwordbox "$__prompt1" \ 215262904Sdteske $__height1 $__width1 \ 216240768Sdteske 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD 217240768Sdteske ) 218262904Sdteske __retval=$? 219262904Sdteske debug= f_dialog_line_sanitize __password1 220238438Sdteske 221238438Sdteske # Return if user has either pressed ESC or chosen Cancel/No 222262904Sdteske [ $__retval -eq $DIALOG_OK ] || return $__retval 223238438Sdteske 224262904Sdteske __password2=$( $DIALOG \ 225251190Sdteske --title "$DIALOG_TITLE" \ 226251190Sdteske --backtitle "$DIALOG_BACKTITLE" \ 227262904Sdteske --hline "$__hline" \ 228251190Sdteske --ok-label "$msg_ok" \ 229251190Sdteske --cancel-label "$msg_cancel" \ 230251190Sdteske --insecure \ 231262904Sdteske --passwordbox "$__prompt2" \ 232262904Sdteske $__height2 $__width2 \ 233240768Sdteske 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD 234240768Sdteske ) 235262904Sdteske __retval=$? 236262904Sdteske debug= f_dialog_line_sanitize __password2 237238438Sdteske 238238438Sdteske # Return if user has either pressed ESC or chosen Cancel/No 239262904Sdteske [ $__retval -eq $DIALOG_OK ] || return $__retval 240238438Sdteske 241238438Sdteske # Check for password mismatch 242262904Sdteske if [ "$__password1" != "$__password2" ]; then 243252795Sdteske f_show_msg "$msg_group_passwords_do_not_match" 244238438Sdteske continue 245238438Sdteske fi 246238438Sdteske 247238438Sdteske # Check for NULL entry 248262904Sdteske if [ ! "$__password1" ]; then 249251544Sdteske f_dialog_yesno "$msg_disable_password_auth_for_group" 250262904Sdteske __retval=$? 251262904Sdteske if [ $__retval -eq $DIALOG_ESC ]; then 252262904Sdteske return $__retval 253262904Sdteske elif [ $__retval -eq $DIALOG_OK ]; then 254262904Sdteske setvar "$__dvar_to_set" 1 255251547Sdteske else 256251547Sdteske continue # back to password prompt 257251547Sdteske fi 258238438Sdteske else 259262904Sdteske setvar "$__dvar_to_set" "" 260238438Sdteske fi 261238438Sdteske 262262904Sdteske setvar "$__var_to_set" "$__password1" 263238438Sdteske break 264238438Sdteske done 265238438Sdteske 266256181Sdteske return $DIALOG_OK 267238438Sdteske} 268238438Sdteske 269262904Sdteske# f_dialog_input_group_gid $var_to_set [$group_gid] 270238438Sdteske# 271238438Sdteske# Allow the user to enter a new GID for a given group. If the user does not 272262904Sdteske# cancel or press ESC, the $var_to_set variable will hold the newly-configured 273238438Sdteske# value upon return. 274238438Sdteske# 275238438Sdteskef_dialog_input_group_gid() 276238438Sdteske{ 277262904Sdteske local __var_to_set="$1" __input="$2" 278238438Sdteske 279238438Sdteske # Return if user has either pressed ESC or chosen Cancel/No 280262904Sdteske f_dialog_input __input "$msg_group_id_leave_empty_for_default" \ 281262904Sdteske "$__input" "$hline_num_tab_enter" || return $? 282238438Sdteske 283262904Sdteske setvar "$__var_to_set" "$__input" 284256181Sdteske return $DIALOG_OK 285238438Sdteske} 286238438Sdteske 287262904Sdteske# f_dialog_input_group_members $var_to_set [$group_members] 288238438Sdteske# 289251266Sdteske# Allow the user to modify a list of members for a given group. If the user 290262904Sdteske# does not cancel or press ESC, the $var_to_set variable will hold the newly- 291262904Sdteske# configured value upon return. 292238438Sdteske# 293238438Sdteskef_dialog_input_group_members() 294238438Sdteske{ 295262904Sdteske local __var_to_set="$1" __input="$2" 296262904Sdteske local __prompt="$msg_group_members:" 297262904Sdteske local __menu_list=" 298238438Sdteske 'X' '$msg_continue' 299238438Sdteske '1' '$msg_select_group_members_from_list' 300238438Sdteske '2' '$msg_enter_group_members_manually' 301238438Sdteske " # END-QUOTE 302262904Sdteske local __defaultitem= 303262904Sdteske local __hline="$hline_num_arrows_tab_enter" 304238438Sdteske 305262904Sdteske local __mheight __mwidth __mrows 306262904Sdteske eval f_dialog_menu_size __mheight __mwidth __mrows \ 307251190Sdteske \"\$DIALOG_TITLE\" \ 308251190Sdteske \"\$DIALOG_BACKTITLE\" \ 309262904Sdteske \"\$__prompt\" \ 310262904Sdteske \"\$__hline\" \ 311263144Sdteske $__menu_list 312251190Sdteske 313262904Sdteske local __menu_choice __retval 314238438Sdteske while :; do 315262904Sdteske __menu_choice=$( eval $DIALOG \ 316238438Sdteske --title \"\$DIALOG_TITLE\" \ 317238438Sdteske --backtitle \"\$DIALOG_BACKTITLE\" \ 318262904Sdteske --hline \"\$__hline\" \ 319238438Sdteske --ok-label \"\$msg_ok\" \ 320238438Sdteske --cancel-label \"\$msg_cancel\" \ 321262904Sdteske --default-item \"\$__defaultitem\" \ 322262904Sdteske --menu \"\$__prompt\" \ 323262904Sdteske $__mheight $__mwidth $__mrows \ 324262904Sdteske $__menu_list \ 325240768Sdteske 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD 326240768Sdteske ) 327262904Sdteske __retval=$? 328262904Sdteske f_dialog_data_sanitize __menu_choice 329262904Sdteske __defaultitem="$__menu_choice" 330262904Sdteske f_dprintf "retval=%u menu_choice=[%s]" \ 331262904Sdteske $__retval "$__menu_choice" 332238438Sdteske 333238438Sdteske # Return if user has either pressed ESC or chosen Cancel/No 334262904Sdteske [ $__retval -eq $DIALOG_OK ] || return $__retval 335238438Sdteske 336262904Sdteske local __group_members 337262904Sdteske case "$__menu_choice" in 338238438Sdteske X) # Exit 339238438Sdteske break ;; 340238438Sdteske 1) # Select Group Members from a list 341263149Sdteske local __check_list= # Calculated below 342263149Sdteske local __user_list __u __user __length=0 343262904Sdteske __user_list=$( pw usershow -a | 344262904Sdteske awk -F: '!/^[[:space:]]*(#|$)/{print $1}' ) 345262904Sdteske while [ $__length -ne ${#__user_list} ]; do 346263149Sdteske __u="${__user_list%%$NL*}" # First line 347263149Sdteske f_shell_escape "$__u" __user 348262904Sdteske 349251264Sdteske # Format of a checklist entry: tag item status 350262904Sdteske __check_list="$__check_list '$__user' ''" 351262904Sdteske case "$__input" in 352263149Sdteske "$__u"|"$__u",*|*,"$__u",*|*,"$__u") 353262904Sdteske __check_list="$__check_list on" ;; 354262904Sdteske *) 355262904Sdteske __check_list="$__check_list off" 356262904Sdteske esac 357262904Sdteske 358262904Sdteske __length=${#__user_list} 359262904Sdteske __user_list="${__user_list#*$NL}" # Kill line 360238438Sdteske done 361238438Sdteske 362262904Sdteske local __cheight __cwidth __crows 363262904Sdteske eval f_dialog_checklist_size \ 364262904Sdteske __cheight __cwidth __crows \ 365262904Sdteske \"\$DIALOG_TITLE\" \ 366262904Sdteske \"\$DIALOG_BACKTITLE\" \ 367262904Sdteske \"\$__prompt\" \ 368262904Sdteske \"\$__hline\" \ 369262904Sdteske $__check_list 370262904Sdteske __group_members=$( eval $DIALOG \ 371238438Sdteske --title \"\$DIALOG_TITLE\" \ 372238438Sdteske --backtitle \"\$DIALOG_BACKTITLE\" \ 373238438Sdteske --separate-output \ 374262904Sdteske --hline \"\$__hline\" \ 375238438Sdteske --ok-label \"\$msg_ok\" \ 376238438Sdteske --cancel-label \"\$msg_cancel\" \ 377262904Sdteske --checklist \"\$__prompt\" \ 378262904Sdteske $__cheight $__cwidth $__crows \ 379262904Sdteske $__check_list \ 380240768Sdteske 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD 381251236Sdteske ) || continue 382251236Sdteske # Return to previous menu if user either 383251236Sdteske # pressed ESC or chose Cancel/No 384262904Sdteske f_dialog_data_sanitize __group_members 385251236Sdteske 386259054Sdteske # 387251236Sdteske # Convert the newline separated list into a comma- 388251236Sdteske # separated one so that if the user switches over to 389251236Sdteske # manual editing, list reflects checklist selections 390259054Sdteske # 391262904Sdteske f_replaceall "$__group_members" "[$NL]" "," __input 392238438Sdteske ;; 393238438Sdteske 2) # Enter Group Members manually 394262904Sdteske local __prompt2="$msg_group_members" 395262904Sdteske __prompt2="$__prompt2 ($msg_separated_by_commas)" 396238438Sdteske 397262904Sdteske f_dialog_input __group_members \ 398262904Sdteske "$__prompt2" "$__input" \ 399251242Sdteske "$hline_num_tab_enter" || continue 400251242Sdteske # Return to previous menu if user either 401251242Sdteske # pressed ESC or chose Cancel/No 402238438Sdteske 403262904Sdteske __input="$__group_members" 404238438Sdteske ;; 405238438Sdteske esac 406238438Sdteske done 407238438Sdteske 408262904Sdteske setvar "$__var_to_set" "$__input" 409256181Sdteske return $DIALOG_OK 410238438Sdteske} 411238438Sdteske 412262904Sdteske# f_dialog_menu_group_add [$defaultitem] 413262904Sdteske# 414262904Sdteske# Present a menu detailing the properties of a group that is about to be added. 415262904Sdteske# The user's menu choice is available using f_dialog_menutag_fetch(). Returns 416262904Sdteske# success unless the user chose Cancel or pressed ESC. Data to display is taken 417262904Sdteske# from environment variables group_name, group_gid, and group_members. If 418262904Sdteske# $defaultitem is present and non-NULL, initially highlight the item in the 419262904Sdteske# menu. 420262904Sdteske# 421262904Sdteskef_dialog_menu_group_add() 422262904Sdteske{ 423262904Sdteske local prompt="$msg_save_exit_or_cancel" 424262904Sdteske local menu_list # Calculated below 425262904Sdteske local defaultitem="$1" 426262904Sdteske local hline="$hline_arrows_tab_enter" 427262904Sdteske 428263149Sdteske # Localize potentially hostile variables and escape their values 429263149Sdteske # to the local variable (see f_shell_escape() of `strings.subr') 430263149Sdteske local var 431263149Sdteske for var in gid members name; do 432263149Sdteske local _group_$var 433263149Sdteske eval f_shell_escape \"\$group_$var\" _group_$var 434263149Sdteske done 435263149Sdteske 436262904Sdteske menu_list=" 437262904Sdteske 'X' '$msg_add/$msg_exit' 438263149Sdteske '1' '$msg_group: $_group_name' 439262904Sdteske '2' '$msg_password: -----' 440263149Sdteske '3' '$msg_group_id: $_group_gid' 441263149Sdteske '4' '$msg_group_members: $_group_members' 442262904Sdteske " # END-QUOTE 443262904Sdteske 444262904Sdteske local height width rows 445262904Sdteske eval f_dialog_menu_size height width rows \ 446262904Sdteske \"\$DIALOG_TITLE\" \ 447262904Sdteske \"\$DIALOG_BACKTITLE\" \ 448262904Sdteske \"\$prompt\" \ 449262904Sdteske \"\$hline\" \ 450262904Sdteske $menu_list 451262904Sdteske 452262904Sdteske local menu_choice 453262904Sdteske menu_choice=$( eval $DIALOG \ 454262904Sdteske --title \"\$DIALOG_TITLE\" \ 455262904Sdteske --backtitle \"\$DIALOG_BACKTITLE\" \ 456262904Sdteske --hline \"\$hline\" \ 457262904Sdteske --ok-label \"\$msg_ok\" \ 458262904Sdteske --cancel-label \"\$msg_cancel\" \ 459262904Sdteske --default-item \"\$defaultitem\" \ 460262904Sdteske --menu \"\$prompt\" \ 461262904Sdteske $height $width $rows \ 462262904Sdteske $menu_list \ 463262904Sdteske 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD 464262904Sdteske ) 465262904Sdteske local retval=$? 466262904Sdteske f_dialog_data_sanitize menu_choice 467262904Sdteske f_dialog_menutag_store "$menu_choice" 468262904Sdteske return $retval 469262904Sdteske} 470262904Sdteske 471262904Sdteske# f_dialog_menu_group_delete $group [$defaultitem] 472262904Sdteske# 473262904Sdteske# Present a menu detailing the properties of a group that is about to be 474262904Sdteske# deleted. The user's menu choice is available using f_dialog_menutag_fetch(). 475262904Sdteske# Returns success unless the user chose Cancel or pressed ESC. Data to display 476262904Sdteske# is populated automatically from the system accounting database for the given 477262904Sdteske# $group argument. If $defaultitem is present and non-NULL, initially highlight 478262904Sdteske# the item in the menu. 479262904Sdteske# 480262904Sdteskef_dialog_menu_group_delete() 481262904Sdteske{ 482262904Sdteske local prompt="$msg_delete_exit_or_cancel" 483262904Sdteske local menu_list # Calculated below 484262904Sdteske local defaultitem="$2" 485262904Sdteske local hline="$hline_arrows_tab_enter" 486262904Sdteske 487262904Sdteske local group_name group_password group_gid group_members 488262904Sdteske f_input_group "$1" 489262904Sdteske 490263149Sdteske # Localize potentially hostile variables and escape their values 491263149Sdteske # to the local variable (see f_shell_escape() of `strings.subr') 492263149Sdteske local var 493263149Sdteske for var in gid members name; do 494263149Sdteske local _group_$var 495263149Sdteske eval f_shell_escape \"\$group_$var\" _group_$var 496263149Sdteske done 497263149Sdteske 498262904Sdteske menu_list=" 499262904Sdteske 'X' '$msg_delete/$msg_exit' 500263149Sdteske '1' '$msg_group: $_group_name' 501262904Sdteske '-' '$msg_password: -----' 502263149Sdteske '-' '$msg_group_id: $_group_gid' 503263149Sdteske '-' '$msg_group_members: $_group_members' 504262904Sdteske " # END-QUOTE 505262904Sdteske 506262904Sdteske local height width rows 507262904Sdteske eval f_dialog_menu_size height width rows \ 508262904Sdteske \"\$DIALOG_TITLE\" \ 509262904Sdteske \"\$DIALOG_BACKTITLE\" \ 510262904Sdteske \"\$prompt\" \ 511262904Sdteske \"\$hline\" \ 512262904Sdteske $menu_list 513262904Sdteske 514262904Sdteske local menu_choice 515262904Sdteske menu_choice=$( eval $DIALOG \ 516262904Sdteske --title \"\$DIALOG_TITLE\" \ 517262904Sdteske --backtitle \"\$DIALOG_BACKTITLE\" \ 518262904Sdteske --hline \"\$hline\" \ 519262904Sdteske --ok-label \"\$msg_ok\" \ 520262904Sdteske --cancel-label \"\$msg_cancel\" \ 521262904Sdteske --default-item \"\$defaultitem\" \ 522262904Sdteske --menu \"\$prompt\" \ 523262904Sdteske $height $width $rows \ 524262904Sdteske $menu_list \ 525262904Sdteske 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD 526262904Sdteske ) 527262904Sdteske local retval=$? 528262904Sdteske f_dialog_data_sanitize menu_choice 529262904Sdteske f_dialog_menutag_store "$menu_choice" 530262904Sdteske return $retval 531262904Sdteske} 532262904Sdteske 533262904Sdteske# f_dialog_menu_group_edit [$defaultitem] 534262904Sdteske# 535262904Sdteske# Present a menu detailing the properties of a group that is about to be 536262904Sdteske# modified. The user's menu choice is available using f_dialog_menutag_fetch(). 537262904Sdteske# Returns success unless the user chose Cancel or pressed ESC. Data to display 538262904Sdteske# is taken from environment variables group_name, group_gid, and group_members. 539262904Sdteske# If $defaultitem is present and non-NULL, initially highlight the item in the 540262904Sdteske# menu. 541262904Sdteske# 542262904Sdteskef_dialog_menu_group_edit() 543262904Sdteske{ 544262904Sdteske local prompt="$msg_save_exit_or_cancel" 545262904Sdteske local menu_list # Calculated below 546262904Sdteske local defaultitem="$1" 547262904Sdteske local hline="$hline_arrows_tab_enter" 548262904Sdteske 549263149Sdteske # Localize potentially hostile variables and escape their values 550263149Sdteske # to the local variable (see f_shell_escape() of `strings.subr') 551263149Sdteske local var 552263149Sdteske for var in gid members name; do 553263149Sdteske local _group_$var 554263149Sdteske eval f_shell_escape \"\$group_$var\" _group_$var 555263149Sdteske done 556263149Sdteske 557262904Sdteske menu_list=" 558262904Sdteske 'X' '$msg_save/$msg_exit' 559263149Sdteske '1' '$msg_group: $_group_name' 560262904Sdteske '2' '$msg_password: -----' 561263149Sdteske '3' '$msg_group_id: $_group_gid' 562263149Sdteske '4' '$msg_group_members: $_group_members' 563262904Sdteske " # END-QUOTE 564262904Sdteske 565262904Sdteske local height width rows 566262904Sdteske eval f_dialog_menu_size height width rows \ 567262904Sdteske \"\$DIALOG_TITLE\" \ 568262904Sdteske \"\$DIALOG_BACKTITLE\" \ 569262904Sdteske \"\$prompt\" \ 570262904Sdteske \"\$hline\" \ 571262904Sdteske $menu_list 572262904Sdteske 573262904Sdteske local menu_choice 574262904Sdteske menu_choice=$( eval $DIALOG \ 575262904Sdteske --title \"\$DIALOG_TITLE\" \ 576262904Sdteske --backtitle \"\$DIALOG_BACKTITLE\" \ 577262904Sdteske --hline \"\$hline\" \ 578262904Sdteske --ok-label \"\$msg_ok\" \ 579262904Sdteske --cancel-label \"\$msg_cancel\" \ 580262904Sdteske --default-item \"\$defaultitem\" \ 581262904Sdteske --menu \"\$prompt\" \ 582262904Sdteske $height $width $rows \ 583262904Sdteske $menu_list \ 584262904Sdteske 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD 585262904Sdteske ) 586262904Sdteske local retval=$? 587262904Sdteske f_dialog_data_sanitize menu_choice 588262904Sdteske f_dialog_menutag_store "$menu_choice" 589262904Sdteske return $retval 590262904Sdteske} 591262904Sdteske 592244675Sdteske############################################################ MAIN 593244675Sdteske 594244675Sdteskef_dprintf "%s: Successfully loaded." usermgmt/group_input.subr 595244675Sdteske 596238438Sdteskefi # ! $_USERMGMT_GROUP_INPUT_SUBR 597