1ab2043b8SDevin Teskeif [ ! "$_USERMGMT_GROUP_INPUT_SUBR" ]; then _USERMGMT_GROUP_INPUT_SUBR=1 2ab2043b8SDevin Teske# 3ab2043b8SDevin Teske# Copyright (c) 2012 Ron McDowell 427c43fe1SDevin 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{ 5127c43fe1SDevin Teske local funcname=f_input_group 5227c43fe1SDevin Teske local group="$1" 5327c43fe1SDevin Teske 5427c43fe1SDevin Teske f_dprintf "$funcname: Getting info for group \`%s'" "$group" 5527c43fe1SDevin Teske eval "$( pw groupshow "$group" 2> /dev/null | awk -F: ' 56*b00c7d1aSDevin Teske function set_value(var, value) { 57*b00c7d1aSDevin Teske gsub(/'\''/, "'\''\\'\'\''", value) 58*b00c7d1aSDevin Teske printf "group_%s='\'%s\''\n", var, value 59*b00c7d1aSDevin Teske } 60ab2043b8SDevin Teske { 6127c43fe1SDevin Teske found = $1 != "" 62*b00c7d1aSDevin Teske set_value("name", $1) 63*b00c7d1aSDevin Teske set_value("password", "") 64*b00c7d1aSDevin Teske set_value("gid", $3) 65*b00c7d1aSDevin Teske set_value("members", $4) 66ab2043b8SDevin Teske exit 6727c43fe1SDevin Teske } 6827c43fe1SDevin Teske END { if (!found) print "false" }' )" 69ab2043b8SDevin Teske} 70ab2043b8SDevin Teske 71d3a0f918SDevin Teske# f_dialog_menu_group_list [$default] 72ab2043b8SDevin Teske# 73d3a0f918SDevin Teske# Allows the user to select a group from a list. Optionally, if present and 74d3a0f918SDevin Teske# non-NULL, initially highlight $default group. 75ab2043b8SDevin Teske# 76ab2043b8SDevin Teskef_dialog_menu_group_list() 77ab2043b8SDevin Teske{ 78052f8969SDevin Teske local prompt= 79052f8969SDevin Teske local menu_list=" 80ab2043b8SDevin Teske 'X $msg_exit' '' 81ab2043b8SDevin Teske " # END-QUOTE 82052f8969SDevin Teske local defaultitem="$1" 83052f8969SDevin Teske local hline="$hline_alnum_punc_tab_enter" 84ab2043b8SDevin Teske 85ab2043b8SDevin Teske # Add groups from group(5) 86ab2043b8SDevin Teske menu_list="$menu_list $( pw groupshow -a | awk -F: ' 87*b00c7d1aSDevin Teske function mprint(tag, item) { 88*b00c7d1aSDevin Teske gsub(/'\''/, "'\''\\'\'\''", tag) 89*b00c7d1aSDevin Teske gsub(/'\''/, "'\''\\'\'\''", item) 90*b00c7d1aSDevin Teske printf "'\'%s\'\ \'%s\''\n", tag, item 91*b00c7d1aSDevin Teske } 92*b00c7d1aSDevin Teske !/^[[:space:]]*(#|$)/ { mprint($1, $1) } 93*b00c7d1aSDevin Teske ' )" 94ab2043b8SDevin Teske 9574036c4dSDevin Teske local height width rows 9674036c4dSDevin Teske eval f_dialog_menu_size height width rows \ 97ab2043b8SDevin Teske \"\$DIALOG_TITLE\" \ 98ab2043b8SDevin Teske \"\$DIALOG_BACKTITLE\" \ 99052f8969SDevin Teske \"\$prompt\" \ 100ab2043b8SDevin Teske \"\$hline\" \ 10174036c4dSDevin Teske $menu_list 102ab2043b8SDevin Teske 103fd962ac6SDevin Teske local menu_choice 104fd962ac6SDevin Teske menu_choice=$( eval $DIALOG \ 105d3a0f918SDevin Teske --title \"\$DIALOG_TITLE\" \ 106ab2043b8SDevin Teske --backtitle \"\$DIALOG_BACKTITLE\" \ 107ab2043b8SDevin Teske --hline \"\$hline\" \ 108ab2043b8SDevin Teske --ok-label \"\$msg_ok\" \ 109ab2043b8SDevin Teske --cancel-label \"\$msg_cancel\" \ 110d3a0f918SDevin Teske --default-item \"\$defaultitem\" \ 111052f8969SDevin Teske --menu \"\$prompt\" \ 11274036c4dSDevin Teske $height $width $rows \ 11374036c4dSDevin Teske $menu_list \ 11489498fdfSDevin Teske 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD 11589498fdfSDevin Teske ) 11689498fdfSDevin Teske local retval=$? 117fd962ac6SDevin Teske f_dialog_menutag_store -s "$menu_choice" 11889498fdfSDevin Teske return $retval 119ab2043b8SDevin Teske} 120ab2043b8SDevin Teske 12127c43fe1SDevin Teske# f_dialog_input_group_name $var_to_set [$group_name] 122ab2043b8SDevin Teske# 12327c43fe1SDevin Teske# Allows the user to enter a name for a new group. If the user does not cancel 12427c43fe1SDevin Teske# or press ESC, the $var_to_set variable will hold the newly-configured value 12527c43fe1SDevin Teske# upon return. 126ab2043b8SDevin Teske# 127ab2043b8SDevin Teskef_dialog_input_group_name() 128ab2043b8SDevin Teske{ 12927c43fe1SDevin Teske local __var_to_set="$1" __name="$2" 13027c43fe1SDevin Teske 131ab2043b8SDevin Teske # 132ab2043b8SDevin Teske # Loop until the user provides taint-free/valid input 133ab2043b8SDevin Teske # 13427c43fe1SDevin Teske local __input="$__name" 135ab2043b8SDevin Teske while :; do 136ab2043b8SDevin Teske # Return if user has either pressed ESC or chosen Cancel/No 13727c43fe1SDevin Teske f_dialog_input __input "$msg_group" "$__input" \ 138f677a9e2SDevin Teske "$hline_alnum_tab_enter" || return $? 139ab2043b8SDevin Teske 140ab2043b8SDevin Teske # Check for no-change 14127c43fe1SDevin Teske if [ "$__input" = "$__name" ]; then 14227c43fe1SDevin Teske setvar "$__var_to_set" "$__input" 143f677a9e2SDevin Teske return $DIALOG_OK 144ab2043b8SDevin Teske fi 145ab2043b8SDevin Teske 146ab2043b8SDevin Teske # Check for NULL entry 14727c43fe1SDevin Teske if [ ! "$__input" ]; then 1487079fc4eSDevin Teske f_show_msg "$msg_group_is_empty" 149ab2043b8SDevin Teske continue 150ab2043b8SDevin Teske fi 151ab2043b8SDevin Teske 152ab2043b8SDevin Teske # Check for invalid entry 15327c43fe1SDevin Teske case "$__input" in [!a-zA-Z]*) 1547079fc4eSDevin Teske f_show_msg "$msg_group_must_start_with_letter" 155ab2043b8SDevin Teske continue 15627c43fe1SDevin Teske esac 157ab2043b8SDevin Teske 158ab2043b8SDevin Teske # Check for duplicate entry 15927c43fe1SDevin Teske if f_quietly pw groupshow -n "$__input"; then 16027c43fe1SDevin Teske f_show_msg "$msg_group_already_used" "$__input" 161ab2043b8SDevin Teske continue 162ab2043b8SDevin Teske fi 163ab2043b8SDevin Teske 16427c43fe1SDevin Teske setvar "$__var_to_set" "$__input" 165ab2043b8SDevin Teske break 166ab2043b8SDevin Teske done 167ab2043b8SDevin Teske 168f677a9e2SDevin Teske return $DIALOG_OK 169ab2043b8SDevin Teske} 170ab2043b8SDevin Teske 17127c43fe1SDevin Teske# f_dialog_input_group_password $var_to_set $dvar_to_set 172ab2043b8SDevin Teske# 17327c43fe1SDevin Teske# Prompt the user to enter a password (twice). If the user does not cancel or 17427c43fe1SDevin Teske# press ESC, $var_to_set will hold the confirmed user entry. Otherwise, if the 17527c43fe1SDevin Teske# user cancels or enters a NULL password (twice), they are given the choice to 17627c43fe1SDevin Teske# disable password authentication for the given group, wherein $dvar_to_set has 17727c43fe1SDevin Teske# a value of 1 to indicate password authentication should be disabled. 178ab2043b8SDevin Teske# 179ab2043b8SDevin Teskef_dialog_input_group_password() 180ab2043b8SDevin Teske{ 18127c43fe1SDevin Teske local __var_to_set="$1" __dvar_to_set="$2" 18227c43fe1SDevin Teske local __prompt1="$msg_group_password" 18327c43fe1SDevin Teske local __prompt2="$msg_reenter_group_password" 18427c43fe1SDevin Teske local __hline="$hline_alnum_punc_tab_enter" 185ab2043b8SDevin Teske 18627c43fe1SDevin Teske local __height1 __width1 18727c43fe1SDevin Teske f_dialog_inputbox_size __height1 __width1 \ 188ab2043b8SDevin Teske "$DIALOG_TITLE" \ 189ab2043b8SDevin Teske "$DIALOG_BACKTITLE" \ 19027c43fe1SDevin Teske "$__prompt1" \ 191ab2043b8SDevin Teske "" \ 19227c43fe1SDevin Teske "$__hline" 193ab2043b8SDevin Teske 19427c43fe1SDevin Teske local __height2 __width2 19527c43fe1SDevin Teske f_dialog_inputbox_size __height2 __width2 \ 196ab2043b8SDevin Teske "$DIALOG_TITLE" \ 197ab2043b8SDevin Teske "$DIALOG_BACKTITLE" \ 19827c43fe1SDevin Teske "$__prompt2" \ 199ab2043b8SDevin Teske "" \ 20027c43fe1SDevin Teske "$__hline" 201ab2043b8SDevin Teske 202ab2043b8SDevin Teske # 203ab2043b8SDevin Teske # Loop until the user provides taint-free/valid input 204ab2043b8SDevin Teske # 20527c43fe1SDevin Teske local __retval __password1 __password2 206ab2043b8SDevin Teske while :; do 20727c43fe1SDevin Teske __password1=$( $DIALOG \ 20874036c4dSDevin Teske --title "$DIALOG_TITLE" \ 20974036c4dSDevin Teske --backtitle "$DIALOG_BACKTITLE" \ 21027c43fe1SDevin Teske --hline "$__hline" \ 21174036c4dSDevin Teske --ok-label "$msg_ok" \ 21274036c4dSDevin Teske --cancel-label "$msg_cancel" \ 213ab2043b8SDevin Teske --insecure \ 21427c43fe1SDevin Teske --passwordbox "$__prompt1" \ 21527c43fe1SDevin Teske $__height1 $__width1 \ 21689498fdfSDevin Teske 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD 21789498fdfSDevin Teske ) 21827c43fe1SDevin Teske __retval=$? 21927c43fe1SDevin Teske debug= f_dialog_line_sanitize __password1 220ab2043b8SDevin Teske 221ab2043b8SDevin Teske # Return if user has either pressed ESC or chosen Cancel/No 22227c43fe1SDevin Teske [ $__retval -eq $DIALOG_OK ] || return $__retval 223ab2043b8SDevin Teske 22427c43fe1SDevin Teske __password2=$( $DIALOG \ 22574036c4dSDevin Teske --title "$DIALOG_TITLE" \ 22674036c4dSDevin Teske --backtitle "$DIALOG_BACKTITLE" \ 22727c43fe1SDevin Teske --hline "$__hline" \ 22874036c4dSDevin Teske --ok-label "$msg_ok" \ 22974036c4dSDevin Teske --cancel-label "$msg_cancel" \ 230ab2043b8SDevin Teske --insecure \ 23127c43fe1SDevin Teske --passwordbox "$__prompt2" \ 23227c43fe1SDevin Teske $__height2 $__width2 \ 23389498fdfSDevin Teske 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD 23489498fdfSDevin Teske ) 23527c43fe1SDevin Teske __retval=$? 23627c43fe1SDevin Teske debug= f_dialog_line_sanitize __password2 237ab2043b8SDevin Teske 238ab2043b8SDevin Teske # Return if user has either pressed ESC or chosen Cancel/No 23927c43fe1SDevin Teske [ $__retval -eq $DIALOG_OK ] || return $__retval 240ab2043b8SDevin Teske 241ab2043b8SDevin Teske # Check for password mismatch 24227c43fe1SDevin Teske if [ "$__password1" != "$__password2" ]; then 2437079fc4eSDevin Teske f_show_msg "$msg_group_passwords_do_not_match" 244ab2043b8SDevin Teske continue 245ab2043b8SDevin Teske fi 246ab2043b8SDevin Teske 247ab2043b8SDevin Teske # Check for NULL entry 24827c43fe1SDevin Teske if [ ! "$__password1" ]; then 2497ca5c4cbSDevin Teske f_dialog_yesno "$msg_disable_password_auth_for_group" 25027c43fe1SDevin Teske __retval=$? 25127c43fe1SDevin Teske if [ $__retval -eq $DIALOG_ESC ]; then 25227c43fe1SDevin Teske return $__retval 25327c43fe1SDevin Teske elif [ $__retval -eq $DIALOG_OK ]; then 25427c43fe1SDevin Teske setvar "$__dvar_to_set" 1 255528318aeSDevin Teske else 256350db065SDevin Teske continue # back to password prompt 257528318aeSDevin Teske fi 258ab2043b8SDevin Teske else 25927c43fe1SDevin Teske setvar "$__dvar_to_set" "" 260ab2043b8SDevin Teske fi 261ab2043b8SDevin Teske 26227c43fe1SDevin Teske setvar "$__var_to_set" "$__password1" 263ab2043b8SDevin Teske break 264ab2043b8SDevin Teske done 265ab2043b8SDevin Teske 266f677a9e2SDevin Teske return $DIALOG_OK 267ab2043b8SDevin Teske} 268ab2043b8SDevin Teske 26927c43fe1SDevin Teske# f_dialog_input_group_gid $var_to_set [$group_gid] 270ab2043b8SDevin Teske# 271ab2043b8SDevin Teske# Allow the user to enter a new GID for a given group. If the user does not 27227c43fe1SDevin Teske# cancel or press ESC, the $var_to_set variable will hold the newly-configured 273ab2043b8SDevin Teske# value upon return. 274ab2043b8SDevin Teske# 275ab2043b8SDevin Teskef_dialog_input_group_gid() 276ab2043b8SDevin Teske{ 27727c43fe1SDevin Teske local __var_to_set="$1" __input="$2" 278ab2043b8SDevin Teske 279ab2043b8SDevin Teske # Return if user has either pressed ESC or chosen Cancel/No 28027c43fe1SDevin Teske f_dialog_input __input "$msg_group_id_leave_empty_for_default" \ 28127c43fe1SDevin Teske "$__input" "$hline_num_tab_enter" || return $? 282ab2043b8SDevin Teske 28327c43fe1SDevin Teske setvar "$__var_to_set" "$__input" 284f677a9e2SDevin Teske return $DIALOG_OK 285ab2043b8SDevin Teske} 286ab2043b8SDevin Teske 28727c43fe1SDevin Teske# f_dialog_input_group_members $var_to_set [$group_members] 288ab2043b8SDevin Teske# 289f4844f65SDevin Teske# Allow the user to modify a list of members for a given group. If the user 29027c43fe1SDevin Teske# does not cancel or press ESC, the $var_to_set variable will hold the newly- 29127c43fe1SDevin Teske# configured value upon return. 292ab2043b8SDevin Teske# 293ab2043b8SDevin Teskef_dialog_input_group_members() 294ab2043b8SDevin Teske{ 29527c43fe1SDevin Teske local __var_to_set="$1" __input="$2" 29627c43fe1SDevin Teske local __prompt="$msg_group_members:" 29727c43fe1SDevin Teske local __menu_list=" 298ab2043b8SDevin Teske 'X' '$msg_continue' 299ab2043b8SDevin Teske '1' '$msg_select_group_members_from_list' 300ab2043b8SDevin Teske '2' '$msg_enter_group_members_manually' 301ab2043b8SDevin Teske " # END-QUOTE 30227c43fe1SDevin Teske local __defaultitem= 30327c43fe1SDevin Teske local __hline="$hline_num_arrows_tab_enter" 304ab2043b8SDevin Teske 30527c43fe1SDevin Teske local __mheight __mwidth __mrows 30627c43fe1SDevin Teske eval f_dialog_menu_size __mheight __mwidth __mrows \ 30727c43fe1SDevin Teske \"\$DIALOG_TITLE\" \ 30827c43fe1SDevin Teske \"\$DIALOG_BACKTITLE\" \ 30927c43fe1SDevin Teske \"\$__prompt\" \ 31027c43fe1SDevin Teske \"\$__hline\" \ 311072b47f3SDevin Teske $__menu_list 31227c43fe1SDevin Teske 31327c43fe1SDevin Teske local __menu_choice __retval 31427c43fe1SDevin Teske while :; do 31527c43fe1SDevin Teske __menu_choice=$( eval $DIALOG \ 31627c43fe1SDevin Teske --title \"\$DIALOG_TITLE\" \ 31727c43fe1SDevin Teske --backtitle \"\$DIALOG_BACKTITLE\" \ 31827c43fe1SDevin Teske --hline \"\$__hline\" \ 31927c43fe1SDevin Teske --ok-label \"\$msg_ok\" \ 32027c43fe1SDevin Teske --cancel-label \"\$msg_cancel\" \ 32127c43fe1SDevin Teske --default-item \"\$__defaultitem\" \ 32227c43fe1SDevin Teske --menu \"\$__prompt\" \ 32327c43fe1SDevin Teske $__mheight $__mwidth $__mrows \ 32427c43fe1SDevin Teske $__menu_list \ 32527c43fe1SDevin Teske 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD 32627c43fe1SDevin Teske ) 32727c43fe1SDevin Teske __retval=$? 32827c43fe1SDevin Teske f_dialog_data_sanitize __menu_choice 32927c43fe1SDevin Teske __defaultitem="$__menu_choice" 33027c43fe1SDevin Teske f_dprintf "retval=%u menu_choice=[%s]" \ 33127c43fe1SDevin Teske $__retval "$__menu_choice" 33227c43fe1SDevin Teske 33327c43fe1SDevin Teske # Return if user has either pressed ESC or chosen Cancel/No 33427c43fe1SDevin Teske [ $__retval -eq $DIALOG_OK ] || return $__retval 33527c43fe1SDevin Teske 33627c43fe1SDevin Teske local __group_members 33727c43fe1SDevin Teske case "$__menu_choice" in 33827c43fe1SDevin Teske X) # Exit 33927c43fe1SDevin Teske break ;; 34027c43fe1SDevin Teske 1) # Select Group Members from a list 341*b00c7d1aSDevin Teske local __check_list= # Calculated below 342*b00c7d1aSDevin Teske local __user_list __u __user __length=0 34327c43fe1SDevin Teske __user_list=$( pw usershow -a | 34427c43fe1SDevin Teske awk -F: '!/^[[:space:]]*(#|$)/{print $1}' ) 34527c43fe1SDevin Teske while [ $__length -ne ${#__user_list} ]; do 346*b00c7d1aSDevin Teske __u="${__user_list%%$NL*}" # First line 347*b00c7d1aSDevin Teske f_shell_escape "$__u" __user 34827c43fe1SDevin Teske 34927c43fe1SDevin Teske # Format of a checklist entry: tag item status 35027c43fe1SDevin Teske __check_list="$__check_list '$__user' ''" 35127c43fe1SDevin Teske case "$__input" in 352*b00c7d1aSDevin Teske "$__u"|"$__u",*|*,"$__u",*|*,"$__u") 35327c43fe1SDevin Teske __check_list="$__check_list on" ;; 35427c43fe1SDevin Teske *) 35527c43fe1SDevin Teske __check_list="$__check_list off" 35627c43fe1SDevin Teske esac 35727c43fe1SDevin Teske 35827c43fe1SDevin Teske __length=${#__user_list} 35927c43fe1SDevin Teske __user_list="${__user_list#*$NL}" # Kill line 36027c43fe1SDevin Teske done 36127c43fe1SDevin Teske 36227c43fe1SDevin Teske local __cheight __cwidth __crows 36327c43fe1SDevin Teske eval f_dialog_checklist_size \ 36427c43fe1SDevin Teske __cheight __cwidth __crows \ 36527c43fe1SDevin Teske \"\$DIALOG_TITLE\" \ 36627c43fe1SDevin Teske \"\$DIALOG_BACKTITLE\" \ 36727c43fe1SDevin Teske \"\$__prompt\" \ 36827c43fe1SDevin Teske \"\$__hline\" \ 36927c43fe1SDevin Teske $__check_list 37027c43fe1SDevin Teske __group_members=$( eval $DIALOG \ 37127c43fe1SDevin Teske --title \"\$DIALOG_TITLE\" \ 37227c43fe1SDevin Teske --backtitle \"\$DIALOG_BACKTITLE\" \ 37327c43fe1SDevin Teske --separate-output \ 37427c43fe1SDevin Teske --hline \"\$__hline\" \ 37527c43fe1SDevin Teske --ok-label \"\$msg_ok\" \ 37627c43fe1SDevin Teske --cancel-label \"\$msg_cancel\" \ 37727c43fe1SDevin Teske --checklist \"\$__prompt\" \ 37827c43fe1SDevin Teske $__cheight $__cwidth $__crows \ 37927c43fe1SDevin Teske $__check_list \ 38027c43fe1SDevin Teske 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD 38127c43fe1SDevin Teske ) || continue 38227c43fe1SDevin Teske # Return to previous menu if user either 38327c43fe1SDevin Teske # pressed ESC or chose Cancel/No 38427c43fe1SDevin Teske f_dialog_data_sanitize __group_members 38527c43fe1SDevin Teske 38627c43fe1SDevin Teske # 38727c43fe1SDevin Teske # Convert the newline separated list into a comma- 38827c43fe1SDevin Teske # separated one so that if the user switches over to 38927c43fe1SDevin Teske # manual editing, list reflects checklist selections 39027c43fe1SDevin Teske # 39127c43fe1SDevin Teske f_replaceall "$__group_members" "[$NL]" "," __input 39227c43fe1SDevin Teske ;; 39327c43fe1SDevin Teske 2) # Enter Group Members manually 39427c43fe1SDevin Teske local __prompt2="$msg_group_members" 39527c43fe1SDevin Teske __prompt2="$__prompt2 ($msg_separated_by_commas)" 39627c43fe1SDevin Teske 39727c43fe1SDevin Teske f_dialog_input __group_members \ 39827c43fe1SDevin Teske "$__prompt2" "$__input" \ 39927c43fe1SDevin Teske "$hline_num_tab_enter" || continue 40027c43fe1SDevin Teske # Return to previous menu if user either 40127c43fe1SDevin Teske # pressed ESC or chose Cancel/No 40227c43fe1SDevin Teske 40327c43fe1SDevin Teske __input="$__group_members" 40427c43fe1SDevin Teske ;; 40527c43fe1SDevin Teske esac 40627c43fe1SDevin Teske done 40727c43fe1SDevin Teske 40827c43fe1SDevin Teske setvar "$__var_to_set" "$__input" 40927c43fe1SDevin Teske return $DIALOG_OK 41027c43fe1SDevin Teske} 41127c43fe1SDevin Teske 41227c43fe1SDevin Teske# f_dialog_menu_group_add [$defaultitem] 41327c43fe1SDevin Teske# 41427c43fe1SDevin Teske# Present a menu detailing the properties of a group that is about to be added. 41527c43fe1SDevin Teske# The user's menu choice is available using f_dialog_menutag_fetch(). Returns 41627c43fe1SDevin Teske# success unless the user chose Cancel or pressed ESC. Data to display is taken 41727c43fe1SDevin Teske# from environment variables group_name, group_gid, and group_members. If 41827c43fe1SDevin Teske# $defaultitem is present and non-NULL, initially highlight the item in the 41927c43fe1SDevin Teske# menu. 42027c43fe1SDevin Teske# 42127c43fe1SDevin Teskef_dialog_menu_group_add() 42227c43fe1SDevin Teske{ 42327c43fe1SDevin Teske local prompt="$msg_save_exit_or_cancel" 42427c43fe1SDevin Teske local menu_list # Calculated below 42527c43fe1SDevin Teske local defaultitem="$1" 42627c43fe1SDevin Teske local hline="$hline_arrows_tab_enter" 42727c43fe1SDevin Teske 428*b00c7d1aSDevin Teske # Localize potentially hostile variables and escape their values 429*b00c7d1aSDevin Teske # to the local variable (see f_shell_escape() of `strings.subr') 430*b00c7d1aSDevin Teske local var 431*b00c7d1aSDevin Teske for var in gid members name; do 432*b00c7d1aSDevin Teske local _group_$var 433*b00c7d1aSDevin Teske eval f_shell_escape \"\$group_$var\" _group_$var 434*b00c7d1aSDevin Teske done 435*b00c7d1aSDevin Teske 43627c43fe1SDevin Teske menu_list=" 43727c43fe1SDevin Teske 'X' '$msg_add/$msg_exit' 438*b00c7d1aSDevin Teske '1' '$msg_group: $_group_name' 43927c43fe1SDevin Teske '2' '$msg_password: -----' 440*b00c7d1aSDevin Teske '3' '$msg_group_id: $_group_gid' 441*b00c7d1aSDevin Teske '4' '$msg_group_members: $_group_members' 44227c43fe1SDevin Teske " # END-QUOTE 44327c43fe1SDevin Teske 44427c43fe1SDevin Teske local height width rows 44527c43fe1SDevin Teske eval f_dialog_menu_size height width rows \ 446ab2043b8SDevin Teske \"\$DIALOG_TITLE\" \ 447ab2043b8SDevin Teske \"\$DIALOG_BACKTITLE\" \ 448052f8969SDevin Teske \"\$prompt\" \ 449ab2043b8SDevin Teske \"\$hline\" \ 45074036c4dSDevin Teske $menu_list 45174036c4dSDevin Teske 45227c43fe1SDevin Teske local menu_choice 453fd962ac6SDevin Teske menu_choice=$( eval $DIALOG \ 454ab2043b8SDevin Teske --title \"\$DIALOG_TITLE\" \ 455ab2043b8SDevin Teske --backtitle \"\$DIALOG_BACKTITLE\" \ 456ab2043b8SDevin Teske --hline \"\$hline\" \ 457ab2043b8SDevin Teske --ok-label \"\$msg_ok\" \ 458ab2043b8SDevin Teske --cancel-label \"\$msg_cancel\" \ 459d3a0f918SDevin Teske --default-item \"\$defaultitem\" \ 460052f8969SDevin Teske --menu \"\$prompt\" \ 46127c43fe1SDevin Teske $height $width $rows \ 462ab2043b8SDevin Teske $menu_list \ 46389498fdfSDevin Teske 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD 46489498fdfSDevin Teske ) 46527c43fe1SDevin Teske local retval=$? 466fd962ac6SDevin Teske f_dialog_data_sanitize menu_choice 46727c43fe1SDevin Teske f_dialog_menutag_store "$menu_choice" 46827c43fe1SDevin Teske return $retval 46927c43fe1SDevin Teske} 470ab2043b8SDevin Teske 47127c43fe1SDevin Teske# f_dialog_menu_group_delete $group [$defaultitem] 47227c43fe1SDevin Teske# 47327c43fe1SDevin Teske# Present a menu detailing the properties of a group that is about to be 47427c43fe1SDevin Teske# deleted. The user's menu choice is available using f_dialog_menutag_fetch(). 47527c43fe1SDevin Teske# Returns success unless the user chose Cancel or pressed ESC. Data to display 47627c43fe1SDevin Teske# is populated automatically from the system accounting database for the given 47727c43fe1SDevin Teske# $group argument. If $defaultitem is present and non-NULL, initially highlight 47827c43fe1SDevin Teske# the item in the menu. 47927c43fe1SDevin Teske# 48027c43fe1SDevin Teskef_dialog_menu_group_delete() 48127c43fe1SDevin Teske{ 48227c43fe1SDevin Teske local prompt="$msg_delete_exit_or_cancel" 48327c43fe1SDevin Teske local menu_list # Calculated below 48427c43fe1SDevin Teske local defaultitem="$2" 48527c43fe1SDevin Teske local hline="$hline_arrows_tab_enter" 486ab2043b8SDevin Teske 48727c43fe1SDevin Teske local group_name group_password group_gid group_members 48827c43fe1SDevin Teske f_input_group "$1" 489ab2043b8SDevin Teske 490*b00c7d1aSDevin Teske # Localize potentially hostile variables and escape their values 491*b00c7d1aSDevin Teske # to the local variable (see f_shell_escape() of `strings.subr') 492*b00c7d1aSDevin Teske local var 493*b00c7d1aSDevin Teske for var in gid members name; do 494*b00c7d1aSDevin Teske local _group_$var 495*b00c7d1aSDevin Teske eval f_shell_escape \"\$group_$var\" _group_$var 496*b00c7d1aSDevin Teske done 497*b00c7d1aSDevin Teske 49827c43fe1SDevin Teske menu_list=" 49927c43fe1SDevin Teske 'X' '$msg_delete/$msg_exit' 500*b00c7d1aSDevin Teske '1' '$msg_group: $_group_name' 50127c43fe1SDevin Teske '-' '$msg_password: -----' 502*b00c7d1aSDevin Teske '-' '$msg_group_id: $_group_gid' 503*b00c7d1aSDevin Teske '-' '$msg_group_members: $_group_members' 50427c43fe1SDevin Teske " # END-QUOTE 50527c43fe1SDevin Teske 50627c43fe1SDevin Teske local height width rows 50727c43fe1SDevin Teske eval f_dialog_menu_size height width rows \ 508ab2043b8SDevin Teske \"\$DIALOG_TITLE\" \ 509ab2043b8SDevin Teske \"\$DIALOG_BACKTITLE\" \ 510052f8969SDevin Teske \"\$prompt\" \ 511ab2043b8SDevin Teske \"\$hline\" \ 51227c43fe1SDevin Teske $menu_list 51327c43fe1SDevin Teske 51427c43fe1SDevin Teske local menu_choice 51527c43fe1SDevin Teske menu_choice=$( eval $DIALOG \ 516ab2043b8SDevin Teske --title \"\$DIALOG_TITLE\" \ 517ab2043b8SDevin Teske --backtitle \"\$DIALOG_BACKTITLE\" \ 518ab2043b8SDevin Teske --hline \"\$hline\" \ 519ab2043b8SDevin Teske --ok-label \"\$msg_ok\" \ 520ab2043b8SDevin Teske --cancel-label \"\$msg_cancel\" \ 52127c43fe1SDevin Teske --default-item \"\$defaultitem\" \ 52227c43fe1SDevin Teske --menu \"\$prompt\" \ 52327c43fe1SDevin Teske $height $width $rows \ 52427c43fe1SDevin Teske $menu_list \ 52589498fdfSDevin Teske 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD 52627c43fe1SDevin Teske ) 52727c43fe1SDevin Teske local retval=$? 52827c43fe1SDevin Teske f_dialog_data_sanitize menu_choice 52927c43fe1SDevin Teske f_dialog_menutag_store "$menu_choice" 53027c43fe1SDevin Teske return $retval 53127c43fe1SDevin Teske} 532ab2043b8SDevin Teske 53327c43fe1SDevin Teske# f_dialog_menu_group_edit [$defaultitem] 534d4ae33f0SDevin Teske# 53527c43fe1SDevin Teske# Present a menu detailing the properties of a group that is about to be 53627c43fe1SDevin Teske# modified. The user's menu choice is available using f_dialog_menutag_fetch(). 53727c43fe1SDevin Teske# Returns success unless the user chose Cancel or pressed ESC. Data to display 53827c43fe1SDevin Teske# is taken from environment variables group_name, group_gid, and group_members. 53927c43fe1SDevin Teske# If $defaultitem is present and non-NULL, initially highlight the item in the 54027c43fe1SDevin Teske# menu. 541d4ae33f0SDevin Teske# 54227c43fe1SDevin Teskef_dialog_menu_group_edit() 54327c43fe1SDevin Teske{ 54427c43fe1SDevin Teske local prompt="$msg_save_exit_or_cancel" 54527c43fe1SDevin Teske local menu_list # Calculated below 54627c43fe1SDevin Teske local defaultitem="$1" 54727c43fe1SDevin Teske local hline="$hline_arrows_tab_enter" 548ab2043b8SDevin Teske 549*b00c7d1aSDevin Teske # Localize potentially hostile variables and escape their values 550*b00c7d1aSDevin Teske # to the local variable (see f_shell_escape() of `strings.subr') 551*b00c7d1aSDevin Teske local var 552*b00c7d1aSDevin Teske for var in gid members name; do 553*b00c7d1aSDevin Teske local _group_$var 554*b00c7d1aSDevin Teske eval f_shell_escape \"\$group_$var\" _group_$var 555*b00c7d1aSDevin Teske done 556*b00c7d1aSDevin Teske 55727c43fe1SDevin Teske menu_list=" 55827c43fe1SDevin Teske 'X' '$msg_save/$msg_exit' 559*b00c7d1aSDevin Teske '1' '$msg_group: $_group_name' 56027c43fe1SDevin Teske '2' '$msg_password: -----' 561*b00c7d1aSDevin Teske '3' '$msg_group_id: $_group_gid' 562*b00c7d1aSDevin Teske '4' '$msg_group_members: $_group_members' 56327c43fe1SDevin Teske " # END-QUOTE 564ab2043b8SDevin Teske 56527c43fe1SDevin Teske local height width rows 56627c43fe1SDevin Teske eval f_dialog_menu_size height width rows \ 56727c43fe1SDevin Teske \"\$DIALOG_TITLE\" \ 56827c43fe1SDevin Teske \"\$DIALOG_BACKTITLE\" \ 56927c43fe1SDevin Teske \"\$prompt\" \ 57027c43fe1SDevin Teske \"\$hline\" \ 57127c43fe1SDevin Teske $menu_list 572ab2043b8SDevin Teske 57327c43fe1SDevin Teske local menu_choice 57427c43fe1SDevin Teske menu_choice=$( eval $DIALOG \ 57527c43fe1SDevin Teske --title \"\$DIALOG_TITLE\" \ 57627c43fe1SDevin Teske --backtitle \"\$DIALOG_BACKTITLE\" \ 57727c43fe1SDevin Teske --hline \"\$hline\" \ 57827c43fe1SDevin Teske --ok-label \"\$msg_ok\" \ 57927c43fe1SDevin Teske --cancel-label \"\$msg_cancel\" \ 58027c43fe1SDevin Teske --default-item \"\$defaultitem\" \ 58127c43fe1SDevin Teske --menu \"\$prompt\" \ 58227c43fe1SDevin Teske $height $width $rows \ 58327c43fe1SDevin Teske $menu_list \ 58427c43fe1SDevin Teske 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD 58527c43fe1SDevin Teske ) 58627c43fe1SDevin Teske local retval=$? 58727c43fe1SDevin Teske f_dialog_data_sanitize menu_choice 58827c43fe1SDevin Teske f_dialog_menutag_store "$menu_choice" 58927c43fe1SDevin Teske return $retval 590ab2043b8SDevin Teske} 591ab2043b8SDevin Teske 59256961fd7SDevin Teske############################################################ MAIN 59356961fd7SDevin Teske 59456961fd7SDevin Teskef_dprintf "%s: Successfully loaded." usermgmt/group_input.subr 59556961fd7SDevin Teske 596ab2043b8SDevin Teskefi # ! $_USERMGMT_GROUP_INPUT_SUBR 597