1*ab2043b8SDevin Teskeif [ ! "$_USERMGMT_GROUP_INPUT_SUBR" ]; then _USERMGMT_GROUP_INPUT_SUBR=1 2*ab2043b8SDevin Teske# 3*ab2043b8SDevin Teske# Copyright (c) 2012 Ron McDowell 4*ab2043b8SDevin Teske# Copyright (c) 2012 Devin Teske 5*ab2043b8SDevin Teske# All rights reserved. 6*ab2043b8SDevin Teske# 7*ab2043b8SDevin Teske# Redistribution and use in source and binary forms, with or without 8*ab2043b8SDevin Teske# modification, are permitted provided that the following conditions 9*ab2043b8SDevin Teske# are met: 10*ab2043b8SDevin Teske# 1. Redistributions of source code must retain the above copyright 11*ab2043b8SDevin Teske# notice, this list of conditions and the following disclaimer. 12*ab2043b8SDevin Teske# 2. Redistributions in binary form must reproduce the above copyright 13*ab2043b8SDevin Teske# notice, this list of conditions and the following disclaimer in the 14*ab2043b8SDevin Teske# documentation and/or other materials provided with the distribution. 15*ab2043b8SDevin Teske# 16*ab2043b8SDevin Teske# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17*ab2043b8SDevin Teske# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18*ab2043b8SDevin Teske# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19*ab2043b8SDevin Teske# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20*ab2043b8SDevin Teske# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21*ab2043b8SDevin Teske# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22*ab2043b8SDevin Teske# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23*ab2043b8SDevin Teske# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24*ab2043b8SDevin Teske# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25*ab2043b8SDevin Teske# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26*ab2043b8SDevin Teske# SUCH DAMAGE. 27*ab2043b8SDevin Teske# 28*ab2043b8SDevin Teske# $FreeBSD$ 29*ab2043b8SDevin Teske# 30*ab2043b8SDevin Teske############################################################ INCLUDES 31*ab2043b8SDevin Teske 32*ab2043b8SDevin TeskeBSDCFG_SHARE="/usr/share/bsdconfig" 33*ab2043b8SDevin Teske. $BSDCFG_SHARE/common.subr || exit 1 34*ab2043b8SDevin Teskef_include $BSDCFG_SHARE/dialog.subr 35*ab2043b8SDevin Teskef_include $BSDCFG_SHARE/strings.subr 36*ab2043b8SDevin Teske 37*ab2043b8SDevin TeskeBSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="070.usermgmt" 38*ab2043b8SDevin Teskef_include_lang $BSDCFG_LIBE/include/messages.subr 39*ab2043b8SDevin Teskef_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr 40*ab2043b8SDevin Teske 41*ab2043b8SDevin Teske############################################################ FUNCTIONS 42*ab2043b8SDevin Teske 43*ab2043b8SDevin Teske# f_input_group $group 44*ab2043b8SDevin Teske# 45*ab2043b8SDevin Teske# Given $group name or id, create the environment variables group_name, 46*ab2043b8SDevin Teske# group_gid, and group_members (and group_password is reset to NULL). 47*ab2043b8SDevin Teske# 48*ab2043b8SDevin Teskef_input_group() 49*ab2043b8SDevin Teske{ 50*ab2043b8SDevin Teske eval $( pw groupshow "$1" | awk -F: ' 51*ab2043b8SDevin Teske { 52*ab2043b8SDevin Teske printf "group_name='\'%s\''\n", $1 53*ab2043b8SDevin Teske printf "group_password=\n" 54*ab2043b8SDevin Teske printf "group_gid='\'%s\''\n", $3 55*ab2043b8SDevin Teske printf "group_members='\'%s\''\n", $4 56*ab2043b8SDevin Teske exit 57*ab2043b8SDevin Teske }' ) 58*ab2043b8SDevin Teske} 59*ab2043b8SDevin Teske 60*ab2043b8SDevin Teske# f_dialog_menu_group_list 61*ab2043b8SDevin Teske# 62*ab2043b8SDevin Teske# Allows the user to select a group from a list. 63*ab2043b8SDevin Teske# 64*ab2043b8SDevin Teskef_dialog_menu_group_list() 65*ab2043b8SDevin Teske{ 66*ab2043b8SDevin Teske local menu_list size 67*ab2043b8SDevin Teske local hline="$hline_alnum_punc_tab_enter" 68*ab2043b8SDevin Teske 69*ab2043b8SDevin Teske menu_list=" 70*ab2043b8SDevin Teske 'X $msg_exit' '' 71*ab2043b8SDevin Teske " # END-QUOTE 72*ab2043b8SDevin Teske 73*ab2043b8SDevin Teske # Add groups from group(5) 74*ab2043b8SDevin Teske menu_list="$menu_list $( pw groupshow -a | awk -F: ' 75*ab2043b8SDevin Teske !/^[[:space:]]*(#|$)/ { 76*ab2043b8SDevin Teske printf "'\'%s\'\ \'%s\''\n", $1, $1 77*ab2043b8SDevin Teske }' 78*ab2043b8SDevin Teske )" 79*ab2043b8SDevin Teske 80*ab2043b8SDevin Teske size=$( eval f_dialog_menu_size \ 81*ab2043b8SDevin Teske \"\$DIALOG_TITLE\" \ 82*ab2043b8SDevin Teske \"\$DIALOG_BACKTITLE\" \ 83*ab2043b8SDevin Teske \"\" \ 84*ab2043b8SDevin Teske \"\$hline\" \ 85*ab2043b8SDevin Teske $menu_list ) 86*ab2043b8SDevin Teske 87*ab2043b8SDevin Teske eval $DIALOG \ 88*ab2043b8SDevin Teske --clear --title \"\$DIALOG_TITLE\" \ 89*ab2043b8SDevin Teske --backtitle \"\$DIALOG_BACKTITLE\" \ 90*ab2043b8SDevin Teske --hline \"\$hline\" \ 91*ab2043b8SDevin Teske --ok-label \"\$msg_ok\" \ 92*ab2043b8SDevin Teske --cancel-label \"\$msg_cancel\" \ 93*ab2043b8SDevin Teske --menu \"\" $size $menu_list \ 94*ab2043b8SDevin Teske 2> "$DIALOG_TMPDIR/dialog.menu.$$" 95*ab2043b8SDevin Teske} 96*ab2043b8SDevin Teske 97*ab2043b8SDevin Teske# f_dialog_input_group_name [$group_name] 98*ab2043b8SDevin Teske# 99*ab2043b8SDevin Teske# Allows the user to enter a new groupname for a given group. If the user does 100*ab2043b8SDevin Teske# not cancel or press ESC, the $group_name variable will hold the 101*ab2043b8SDevin Teske# newly-configured value upon return. 102*ab2043b8SDevin Teske# 103*ab2043b8SDevin Teske# If $cur_group_name is defined, the user can enter that and by-pass error- 104*ab2043b8SDevin Teske# checking (allowing the user to "revert" to an old value without, for example, 105*ab2043b8SDevin Teske# being told that the groupname already exists). 106*ab2043b8SDevin Teske# 107*ab2043b8SDevin Teskef_dialog_input_group_name() 108*ab2043b8SDevin Teske{ 109*ab2043b8SDevin Teske local msg="$( printf "$msg_group" )" 110*ab2043b8SDevin Teske local hline="$hline_alnum_tab_enter" 111*ab2043b8SDevin Teske 112*ab2043b8SDevin Teske # 113*ab2043b8SDevin Teske # Loop until the user provides taint-free/valid input 114*ab2043b8SDevin Teske # 115*ab2043b8SDevin Teske local size retval _name="$1" _input="$1" 116*ab2043b8SDevin Teske while :; do 117*ab2043b8SDevin Teske size=$( f_dialog_inputbox_size \ 118*ab2043b8SDevin Teske "$DIALOG_TITLE" \ 119*ab2043b8SDevin Teske "$DIALOG_BACKTITLE" \ 120*ab2043b8SDevin Teske "$msg" \ 121*ab2043b8SDevin Teske "$_input" \ 122*ab2043b8SDevin Teske "$hline" ) 123*ab2043b8SDevin Teske 124*ab2043b8SDevin Teske eval $DIALOG \ 125*ab2043b8SDevin Teske --title \"\$DIALOG_TITLE\" \ 126*ab2043b8SDevin Teske --backtitle \"\$DIALOG_BACKTITLE\" \ 127*ab2043b8SDevin Teske --hline \"\$hline\" \ 128*ab2043b8SDevin Teske --ok-label \"\$msg_ok\" \ 129*ab2043b8SDevin Teske --cancel-label \"\$msg_cancel\" \ 130*ab2043b8SDevin Teske --inputbox \"\$msg\" $size \ 131*ab2043b8SDevin Teske \"\$_input\" \ 132*ab2043b8SDevin Teske 2> $DIALOG_TMPDIR/dialog.inputbox.$$ 133*ab2043b8SDevin Teske 134*ab2043b8SDevin Teske retval=$? 135*ab2043b8SDevin Teske _input=$( f_dialog_inputstr ) 136*ab2043b8SDevin Teske 137*ab2043b8SDevin Teske # Return if user has either pressed ESC or chosen Cancel/No 138*ab2043b8SDevin Teske [ $retval -eq $SUCCESS ] || return $retval 139*ab2043b8SDevin Teske 140*ab2043b8SDevin Teske # Check for no-change 141*ab2043b8SDevin Teske [ "$_input" = "$_name" ] && return $SUCCESS 142*ab2043b8SDevin Teske 143*ab2043b8SDevin Teske # Check for reversion 144*ab2043b8SDevin Teske if [ "$_input" = "$cur_group_name" ]; then 145*ab2043b8SDevin Teske group_name="$cur_group_name" 146*ab2043b8SDevin Teske return $SUCCESS 147*ab2043b8SDevin Teske fi 148*ab2043b8SDevin Teske 149*ab2043b8SDevin Teske # Check for NULL entry 150*ab2043b8SDevin Teske if [ ! "$_input" ]; then 151*ab2043b8SDevin Teske f_show_msg "$msg_group_is_empty" 152*ab2043b8SDevin Teske continue 153*ab2043b8SDevin Teske fi 154*ab2043b8SDevin Teske 155*ab2043b8SDevin Teske # Check for invalid entry 156*ab2043b8SDevin Teske if ! echo "$_input" | grep -q "^[[:alpha:]]"; then 157*ab2043b8SDevin Teske f_show_msg "$msg_group_must_start_with_letter" 158*ab2043b8SDevin Teske continue 159*ab2043b8SDevin Teske fi 160*ab2043b8SDevin Teske 161*ab2043b8SDevin Teske # Check for duplicate entry 162*ab2043b8SDevin Teske if f_quietly pw groupshow -n "$_input"; then 163*ab2043b8SDevin Teske f_show_msg "$msg_group_already_used" "$_input" 164*ab2043b8SDevin Teske continue 165*ab2043b8SDevin Teske fi 166*ab2043b8SDevin Teske 167*ab2043b8SDevin Teske group_name="$_input" 168*ab2043b8SDevin Teske break 169*ab2043b8SDevin Teske done 170*ab2043b8SDevin Teske save_flag=1 171*ab2043b8SDevin Teske 172*ab2043b8SDevin Teske f_dprintf "group_name: [$cur_group_name]->[$group_name]" 173*ab2043b8SDevin Teske 174*ab2043b8SDevin Teske return $SUCCESS 175*ab2043b8SDevin Teske} 176*ab2043b8SDevin Teske 177*ab2043b8SDevin Teske# f_dialog_input_group_password 178*ab2043b8SDevin Teske# 179*ab2043b8SDevin Teske# Prompt the user to enter a password (twice). 180*ab2043b8SDevin Teske# 181*ab2043b8SDevin Teskef_dialog_input_group_password() 182*ab2043b8SDevin Teske{ 183*ab2043b8SDevin Teske local hline="$hline_alnum_punc_tab_enter" 184*ab2043b8SDevin Teske local msg size rmsg rsize 185*ab2043b8SDevin Teske 186*ab2043b8SDevin Teske msg=$( printf "$msg_group_password" ) 187*ab2043b8SDevin Teske size=$( f_dialog_inputbox_size \ 188*ab2043b8SDevin Teske "$DIALOG_TITLE" \ 189*ab2043b8SDevin Teske "$DIALOG_BACKTITLE" \ 190*ab2043b8SDevin Teske "$msg" \ 191*ab2043b8SDevin Teske "" \ 192*ab2043b8SDevin Teske "$hline" ) 193*ab2043b8SDevin Teske 194*ab2043b8SDevin Teske rmsg=$( printf "$msg_reenter_group_password" ) 195*ab2043b8SDevin Teske rsize=$( f_dialog_inputbox_size \ 196*ab2043b8SDevin Teske "$DIALOG_TITLE" \ 197*ab2043b8SDevin Teske "$DIALOG_BACKTITLE" \ 198*ab2043b8SDevin Teske "$rmsg" \ 199*ab2043b8SDevin Teske "" \ 200*ab2043b8SDevin Teske "$hline" ) 201*ab2043b8SDevin Teske 202*ab2043b8SDevin Teske # 203*ab2043b8SDevin Teske # Loop until the user provides taint-free/valid input 204*ab2043b8SDevin Teske # 205*ab2043b8SDevin Teske local retval _password1 _password2 206*ab2043b8SDevin Teske while :; do 207*ab2043b8SDevin Teske eval $DIALOG \ 208*ab2043b8SDevin Teske --title \"\$DIALOG_TITLE\" \ 209*ab2043b8SDevin Teske --backtitle \"\$DIALOG_BACKTITLE\" \ 210*ab2043b8SDevin Teske --hline \"\$hline\" \ 211*ab2043b8SDevin Teske --ok-label \"\$msg_ok\" \ 212*ab2043b8SDevin Teske --cancel-label \"\$msg_cancel\" \ 213*ab2043b8SDevin Teske --insecure \ 214*ab2043b8SDevin Teske --passwordbox \"\$msg\" $size \ 215*ab2043b8SDevin Teske 2> $DIALOG_TMPDIR/dialog.inputbox.$$ 216*ab2043b8SDevin Teske 217*ab2043b8SDevin Teske retval=$? 218*ab2043b8SDevin Teske _password1=$( f_dialog_inputstr ) 219*ab2043b8SDevin Teske 220*ab2043b8SDevin Teske # Return if user has either pressed ESC or chosen Cancel/No 221*ab2043b8SDevin Teske [ $retval -eq $SUCCESS ] || return $retval 222*ab2043b8SDevin Teske 223*ab2043b8SDevin Teske eval $DIALOG \ 224*ab2043b8SDevin Teske --title \"\$DIALOG_TITLE\" \ 225*ab2043b8SDevin Teske --backtitle \"\$DIALOG_BACKTITLE\" \ 226*ab2043b8SDevin Teske --hline \"\$hline\" \ 227*ab2043b8SDevin Teske --ok-label \"\$msg_ok\" \ 228*ab2043b8SDevin Teske --cancel-label \"\$msg_cancel\" \ 229*ab2043b8SDevin Teske --insecure \ 230*ab2043b8SDevin Teske --passwordbox \"\$rmsg\" $rsize \ 231*ab2043b8SDevin Teske 2> $DIALOG_TMPDIR/dialog.inputbox.$$ 232*ab2043b8SDevin Teske 233*ab2043b8SDevin Teske retval=$? 234*ab2043b8SDevin Teske _password2=$( f_dialog_inputstr ) 235*ab2043b8SDevin Teske 236*ab2043b8SDevin Teske # Return if user has either pressed ESC or chosen Cancel/No 237*ab2043b8SDevin Teske [ $retval -eq $SUCCESS ] || return $retval 238*ab2043b8SDevin Teske 239*ab2043b8SDevin Teske # Check for password mismatch 240*ab2043b8SDevin Teske if [ "$_password1" != "$_password2" ]; then 241*ab2043b8SDevin Teske f_show_msg "$msg_group_passwords_do_not_match" 242*ab2043b8SDevin Teske continue 243*ab2043b8SDevin Teske fi 244*ab2043b8SDevin Teske 245*ab2043b8SDevin Teske # Check for NULL entry 246*ab2043b8SDevin Teske if [ ! "$_password1" ]; then 247*ab2043b8SDevin Teske f_dialog_yesno \ 248*ab2043b8SDevin Teske "$msg_disable_password_auth_for_group" || 249*ab2043b8SDevin Teske continue 250*ab2043b8SDevin Teske pw_group_password_disable=1 251*ab2043b8SDevin Teske else 252*ab2043b8SDevin Teske pw_group_password_disable= 253*ab2043b8SDevin Teske fi 254*ab2043b8SDevin Teske 255*ab2043b8SDevin Teske group_password="$_password1" 256*ab2043b8SDevin Teske break 257*ab2043b8SDevin Teske done 258*ab2043b8SDevin Teske save_flag=1 259*ab2043b8SDevin Teske 260*ab2043b8SDevin Teske f_dprintf "group_password: [$cur_group_password]->[$group_password]" 261*ab2043b8SDevin Teske 262*ab2043b8SDevin Teske return $SUCCESS 263*ab2043b8SDevin Teske} 264*ab2043b8SDevin Teske 265*ab2043b8SDevin Teske# f_dialog_input_group_gid [$group_gid] 266*ab2043b8SDevin Teske# 267*ab2043b8SDevin Teske# Allow the user to enter a new GID for a given group. If the user does not 268*ab2043b8SDevin Teske# cancel or press ESC, the $group_gid variable will hold the newly-configured 269*ab2043b8SDevin Teske# value upon return. 270*ab2043b8SDevin Teske# 271*ab2043b8SDevin Teskef_dialog_input_group_gid() 272*ab2043b8SDevin Teske{ 273*ab2043b8SDevin Teske local msg size retval _input="$1" 274*ab2043b8SDevin Teske local hline="$hline_num_tab_enter" 275*ab2043b8SDevin Teske 276*ab2043b8SDevin Teske msg=$( printf "$msg_group_id_leave_empty_for_default" ) 277*ab2043b8SDevin Teske size=$( f_dialog_inputbox_size \ 278*ab2043b8SDevin Teske "$DIALOG_TITLE" \ 279*ab2043b8SDevin Teske "$DIALOG_BACKTITLE" \ 280*ab2043b8SDevin Teske "$msg" \ 281*ab2043b8SDevin Teske "$_input" \ 282*ab2043b8SDevin Teske "$hline" ) 283*ab2043b8SDevin Teske 284*ab2043b8SDevin Teske eval $DIALOG \ 285*ab2043b8SDevin Teske --title \"\$DIALOG_TITLE\" \ 286*ab2043b8SDevin Teske --backtitle \"\$DIALOG_BACKTITLE\" \ 287*ab2043b8SDevin Teske --hline \"\$hline\" \ 288*ab2043b8SDevin Teske --ok-label \"\$msg_ok\" \ 289*ab2043b8SDevin Teske --cancel-label \"\$msg_cancel\" \ 290*ab2043b8SDevin Teske --inputbox \"\$msg\" $size \ 291*ab2043b8SDevin Teske \"\$_input\" \ 292*ab2043b8SDevin Teske 2> $DIALOG_TMPDIR/dialog.inputbox.$$ 293*ab2043b8SDevin Teske 294*ab2043b8SDevin Teske retval=$? 295*ab2043b8SDevin Teske _input=$( f_dialog_inputstr ) 296*ab2043b8SDevin Teske 297*ab2043b8SDevin Teske # Return if user has either pressed ESC or chosen Cancel/No 298*ab2043b8SDevin Teske [ $retval -eq $SUCCESS ] || return $retval 299*ab2043b8SDevin Teske 300*ab2043b8SDevin Teske group_gid="$_input" 301*ab2043b8SDevin Teske save_flag=1 302*ab2043b8SDevin Teske 303*ab2043b8SDevin Teske f_dprintf "group_gid: [$cur_group_gid]->[$group_gid]" 304*ab2043b8SDevin Teske 305*ab2043b8SDevin Teske return $SUCCESS 306*ab2043b8SDevin Teske} 307*ab2043b8SDevin Teske 308*ab2043b8SDevin Teske# f_dialog_input_group_members [$group_members] 309*ab2043b8SDevin Teske# 310*ab2043b8SDevin Teske# Allow the user to modify a list of members for a given group. If the user does 311*ab2043b8SDevin Teske# not cancel or press ESC, the $group_members variable will hold the newly- 312*ab2043b8SDevin Teske# configured value upon return. 313*ab2043b8SDevin Teske# 314*ab2043b8SDevin Teskef_dialog_input_group_members() 315*ab2043b8SDevin Teske{ 316*ab2043b8SDevin Teske local menu_choice msg size retval _input="$1" 317*ab2043b8SDevin Teske local hline="$hline_num_arrows_tab_enter" 318*ab2043b8SDevin Teske local user 319*ab2043b8SDevin Teske local menu_list 320*ab2043b8SDevin Teske local all_users_valid 321*ab2043b8SDevin Teske local _group_members 322*ab2043b8SDevin Teske local checklist_users 323*ab2043b8SDevin Teske 324*ab2043b8SDevin Teske menu_list=" 325*ab2043b8SDevin Teske 'X' '$msg_continue' 326*ab2043b8SDevin Teske '1' '$msg_select_group_members_from_list' 327*ab2043b8SDevin Teske '2' '$msg_enter_group_members_manually' 328*ab2043b8SDevin Teske " # END-QUOTE 329*ab2043b8SDevin Teske 330*ab2043b8SDevin Teske while :; do 331*ab2043b8SDevin Teske msg="$msg_group_members:" 332*ab2043b8SDevin Teske menu_size=$( eval f_dialog_menu_size \ 333*ab2043b8SDevin Teske \"\$DIALOG_TITLE\" \ 334*ab2043b8SDevin Teske \"\$DIALOG_BACKTITLE\" \ 335*ab2043b8SDevin Teske \"\$msg\" \ 336*ab2043b8SDevin Teske \"\$hline\" \ 337*ab2043b8SDevin Teske $menu_list ) 338*ab2043b8SDevin Teske eval $DIALOG \ 339*ab2043b8SDevin Teske --title \"\$DIALOG_TITLE\" \ 340*ab2043b8SDevin Teske --backtitle \"\$DIALOG_BACKTITLE\" \ 341*ab2043b8SDevin Teske --hline \"\$hline\" \ 342*ab2043b8SDevin Teske --ok-label \"\$msg_ok\" \ 343*ab2043b8SDevin Teske --cancel-label \"\$msg_cancel\" \ 344*ab2043b8SDevin Teske --menu \"\$msg\" $menu_size \ 345*ab2043b8SDevin Teske $menu_list \ 346*ab2043b8SDevin Teske 2> $DIALOG_TMPDIR/dialog.menu.$$ 347*ab2043b8SDevin Teske retval=$? 348*ab2043b8SDevin Teske menu_choice=$( f_dialog_menutag ) 349*ab2043b8SDevin Teske f_dprintf "retval=$retval menu_choice=[$menu_choice]" 350*ab2043b8SDevin Teske 351*ab2043b8SDevin Teske # Return if user has either pressed ESC or chosen Cancel/No 352*ab2043b8SDevin Teske [ $retval -eq $SUCCESS ] || return $retval 353*ab2043b8SDevin Teske 354*ab2043b8SDevin Teske case "$menu_choice" in 355*ab2043b8SDevin Teske X) # Exit 356*ab2043b8SDevin Teske break ;; 357*ab2043b8SDevin Teske 1) # Select Group Members from a list 358*ab2043b8SDevin Teske user_list=$( pw usershow -a | awk -F: ' 359*ab2043b8SDevin Teske !/^[[:space:]]*(#|$)/ { printf "%s\n", $1 }' ) 360*ab2043b8SDevin Teske checklist_users= 361*ab2043b8SDevin Teske for user in $user_list; do 362*ab2043b8SDevin Teske checklist_users="$checklist_users $user \"\"" 363*ab2043b8SDevin Teske if echo "$_input" | grep -q "\<$user\>"; then 364*ab2043b8SDevin Teske checklist_users="$checklist_users on" 365*ab2043b8SDevin Teske else 366*ab2043b8SDevin Teske checklist_users="$checklist_users off" 367*ab2043b8SDevin Teske fi 368*ab2043b8SDevin Teske done 369*ab2043b8SDevin Teske 370*ab2043b8SDevin Teske size=$( eval f_dialog_radiolist_size \ 371*ab2043b8SDevin Teske \"\$DIALOG_TITLE\" \ 372*ab2043b8SDevin Teske \"\$DIALOG_BACKTITLE\" \ 373*ab2043b8SDevin Teske \"\" \ 374*ab2043b8SDevin Teske \"\$hline\" \ 375*ab2043b8SDevin Teske $checklist_users ) 376*ab2043b8SDevin Teske eval $DIALOG \ 377*ab2043b8SDevin Teske --title \"\$DIALOG_TITLE\" \ 378*ab2043b8SDevin Teske --backtitle \"\$DIALOG_BACKTITLE\" \ 379*ab2043b8SDevin Teske --separate-output \ 380*ab2043b8SDevin Teske --hline \"\$hline\" \ 381*ab2043b8SDevin Teske --ok-label \"\$msg_ok\" \ 382*ab2043b8SDevin Teske --cancel-label \"\$msg_cancel\" \ 383*ab2043b8SDevin Teske --checklist \"\$msg\" $size \ 384*ab2043b8SDevin Teske $checklist_users \ 385*ab2043b8SDevin Teske 2> $DIALOG_TMPDIR/dialog.inputbox.$$ 386*ab2043b8SDevin Teske retval=$? 387*ab2043b8SDevin Teske _group_members=$( f_dialog_inputstr | tr '\n' ' ' | 388*ab2043b8SDevin Teske sed -e 's/[[:space:]]\{1,\}/,/g;s/^,//;s/,$//' ) 389*ab2043b8SDevin Teske 390*ab2043b8SDevin Teske # Return to previous menu if user has either 391*ab2043b8SDevin Teske # pressed ESC or chosen Cancel/No 392*ab2043b8SDevin Teske [ $retval -eq $SUCCESS ] || continue 393*ab2043b8SDevin Teske 394*ab2043b8SDevin Teske _input="$_group_members" 395*ab2043b8SDevin Teske ;; 396*ab2043b8SDevin Teske 2) # Enter Group Members manually 397*ab2043b8SDevin Teske hline="$hline_num_tab_enter" 398*ab2043b8SDevin Teske msg=$( 399*ab2043b8SDevin Teske printf "$msg_group_members ($msg_separated_by_commas)" 400*ab2043b8SDevin Teske ) 401*ab2043b8SDevin Teske size=$( f_dialog_inputbox_size \ 402*ab2043b8SDevin Teske "$DIALOG_TITLE" \ 403*ab2043b8SDevin Teske "$DIALOG_BACKTITLE" \ 404*ab2043b8SDevin Teske "$msg" \ 405*ab2043b8SDevin Teske "$_input" \ 406*ab2043b8SDevin Teske "$hline" ) 407*ab2043b8SDevin Teske 408*ab2043b8SDevin Teske eval $DIALOG \ 409*ab2043b8SDevin Teske --title \"\$DIALOG_TITLE\" \ 410*ab2043b8SDevin Teske --backtitle \"\$DIALOG_BACKTITLE\" \ 411*ab2043b8SDevin Teske --hline \"\$hline\" \ 412*ab2043b8SDevin Teske --ok-label \"\$msg_ok\" \ 413*ab2043b8SDevin Teske --cancel-label \"\$msg_cancel\" \ 414*ab2043b8SDevin Teske --inputbox \"\$msg\" $size \ 415*ab2043b8SDevin Teske \"\$_input\" \ 416*ab2043b8SDevin Teske 2> $DIALOG_TMPDIR/dialog.inputbox.$$ 417*ab2043b8SDevin Teske 418*ab2043b8SDevin Teske retval=$? 419*ab2043b8SDevin Teske _group_members=$( f_dialog_inputstr ) 420*ab2043b8SDevin Teske 421*ab2043b8SDevin Teske # Return to previous menu if user has either 422*ab2043b8SDevin Teske # pressed ESC or chosen Cancel/No 423*ab2043b8SDevin Teske [ $retval -eq $SUCCESS ] || continue 424*ab2043b8SDevin Teske 425*ab2043b8SDevin Teske _input="$_group_members" 426*ab2043b8SDevin Teske ;; 427*ab2043b8SDevin Teske esac 428*ab2043b8SDevin Teske done 429*ab2043b8SDevin Teske 430*ab2043b8SDevin Teske group_members="$_input" 431*ab2043b8SDevin Teske save_flag=1 432*ab2043b8SDevin Teske f_dprintf "group_members: [$cur_group_members]->[$group_members]" 433*ab2043b8SDevin Teske 434*ab2043b8SDevin Teske return $SUCCESS 435*ab2043b8SDevin Teske} 436*ab2043b8SDevin Teske 437*ab2043b8SDevin Teskefi # ! $_USERMGMT_GROUP_INPUT_SUBR 438