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