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