1if [ ! "$_USERMGMT_GROUP_SUBR" ]; then _USERMGMT_GROUP_SUBR=1 2# 3# Copyright (c) 2012 Ron McDowell 4# Copyright (c) 2012-2014 Devin Teske 5# All rights reserved. 6# 7# Redistribution and use in source and binary forms, with or without 8# modification, are permitted provided that the following conditions --- 11 unchanged lines hidden (view full) --- 20# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26# SUCH DAMAGE. 27# |
28# $FreeBSD: stable/10/usr.sbin/bsdconfig/usermgmt/share/group.subr 263980 2014-04-01 00:19:13Z dteske $ |
29# 30############################################################ INCLUDES 31 32BSDCFG_SHARE="/usr/share/bsdconfig" 33. $BSDCFG_SHARE/common.subr || exit 1 34f_dprintf "%s: loading includes..." usermgmt/group.subr 35f_include $BSDCFG_SHARE/dialog.subr 36f_include $BSDCFG_SHARE/usermgmt/group_input.subr --- 54 unchanged lines hidden (view full) --- 91 92 local group_name="$input" 93 while f_interactive && [ ! "$group_name" ]; do 94 f_dialog_input_group_name group_name "$group_name" || 95 return $SUCCESS 96 [ "$group_name" ] || 97 f_show_err "$msg_please_enter_a_group_name" 98 done |
99 if [ ! "$group_name" ]; then 100 f_show_err "$msg_no_group_specified" 101 return $FAILURE 102 fi |
103 104 local group_password group_gid group_members 105 f_getvar $VAR_GROUP_PASSWORD group_password 106 f_getvar $VAR_GROUP_GID group_gid 107 f_getvar $VAR_GROUP_MEMBERS group_members 108 109 local group_password_disable= 110 f_interactive || [ "$group_password" ] || group_password_disable=1 --- 40 unchanged lines hidden (view full) --- 151 f_dprintf "retval=%u mtag=[%s]" $retval "$mtag" 152 defaultitem="$mtag" 153 154 # Return if user either pressed ESC or chose Cancel/No 155 [ $retval -eq $DIALOG_OK ] || return $FAILURE 156 157 case "$mtag" in 158 X) # Add/Exit |
159 local var 160 for var in gid members name; do 161 local _group_$var 162 eval f_shell_escape \ 163 \"\$group_$var\" _group_$var 164 done 165 166 local cmd="pw groupadd -n '$_group_name'" 167 [ "$group_gid" ] && cmd="$cmd -g '$_group_gid'" |
168 [ "$group_members" ] && |
169 cmd="$cmd -M '$_group_members'" |
170 171 # Execute the command (break on success) 172 if [ "$group_password_disable" ]; then 173 f_eval_catch $funcname pw '%s -h -' "$cmd" 174 elif [ "$group_password" ]; then 175 echo "$group_password" | 176 f_eval_catch $funcname \ |
177 pw '%s -h 0' "$cmd" |
178 else 179 f_eval_catch $funcname pw '%s' "$cmd" 180 fi && break 181 ;; 182 1) # Group Name (prompt for new group name) 183 f_dialog_input_group_name input "$group_name" || 184 continue 185 if f_quietly pw groupshow -n "$input" -g -1; then --- 12 unchanged lines hidden (view full) --- 198 ;; 199 4) # Group Members 200 f_dialog_input_group_members group_members \ 201 "$group_members" 202 ;; 203 esac 204 done 205 else |
206 local var 207 for var in gid members name; do 208 local _group_$var 209 eval f_shell_escape \"\$group_$var\" _group_$var 210 done 211 |
212 # Form the command |
213 local cmd="pw groupadd -n '$_group_name'" 214 [ "$group_gid" ] && cmd="$cmd -g '$_group_gid'" 215 [ "$group_members" ] && cmd="$cmd -M '$_group_members'" |
216 217 # Execute the command 218 local retval err 219 if [ "$group_password_disable" ]; then 220 f_eval_catch -k err $funcname pw '%s -h -' "$cmd" 221 elif [ "$group_password" ]; then |
222 err=$( echo "$group_password" | f_eval_catch -de \ 223 $funcname pw '%s -h 0' "$cmd" 2>&1 ) |
224 else 225 f_eval_catch -k err $funcname pw '%s' "$cmd" 226 fi 227 retval=$? 228 if [ $retval -ne $SUCCESS ]; then 229 f_show_err "%s" "$err" 230 return $retval 231 fi 232 fi 233 234 f_dialog_title "$title" 235 $alert "$msg_group_added" 236 f_dialog_title_restore |
237 [ "$no_confirm" -a "$USE_DIALOG" ] && sleep 1 |
238 239 return $SUCCESS 240} 241 242# f_group_delete [$group] 243# 244# Delete a group. If both $group (as a first argument) and $VAR_GROUP are unset 245# or NULL and we are running interactively, prompt the user to select a group --- 38 unchanged lines hidden (view full) --- 284 f_dprintf "retval=%u mtag=[%s]" $retval "$mtag" 285 defaultitem="$mtag" 286 287 # Return if user either pressed ESC or chose Cancel/No 288 [ $retval -eq $DIALOG_OK ] || return $FAILURE 289 290 case "$mtag" in 291 X) # Delete/Exit |
292 local _group_name 293 f_shell_escape "$group_name" _group_name |
294 f_eval_catch $funcname pw 'pw groupdel "%s"' \ |
295 "$_group_name" && break |
296 ;; 297 1) # Group Name (select different group from list) 298 f_dialog_menu_group_list "$group_name" || continue 299 f_dialog_menutag_fetch mtag 300 301 [ "$mtag" = "X $msg_exit" ] && continue 302 303 if ! f_input_group "$mtag"; then 304 f_show_err "$msg_group_not_found" "$mtag" 305 # Attempt to fall back to previous selection 306 f_input_group "$input" || return $FAILURE 307 else 308 input="$mtag" 309 fi 310 ;; 311 esac 312 done 313 else |
314 local retval err _group_name 315 f_shell_escape "$group_name" _group_name |
316 f_eval_catch -k err $funcname pw \ |
317 "pw groupdel '%s'" "$_group_name" |
318 retval=$? 319 if [ $retval -ne $SUCCESS ]; then 320 f_show_err "%s" "$err" 321 return $retval 322 fi 323 fi 324 325 f_dialog_title "$title" 326 $alert "$msg_group_deleted" 327 f_dialog_title_restore |
328 [ "$no_confirm" -a "$USE_DIALOG" ] && sleep 1 |
329 330 return $SUCCESS 331} 332 333# f_group_edit [$group] 334# 335# Modify a group. If both $group (as a first argument) and $VAR_GROUP are unset 336# or NULL and we are running interactively, prompt the user to select a group 337# from a list of available groups. Variables that can be used to script user 338# input: 339# 340# VAR_GROUP [Optional if running interactively] 341# The group to modify. Ignored if given non-NULL first-argument. 342# VAR_GROUP_GID [Optional] 343# Numerical group ID to set. If NULL or unset, the group ID is 344# unchanged. 345# VAR_GROUP_MEMBERS [Optional] 346# Comma separated list of users that are a member of this group. |
347# If set but NULL, group memberships are reset (no users will be 348# a member of this group). If unset, group membership is 349# unmodified. |
350# VAR_GROUP_PASSWORD [Optional] 351# newgrp(1) password to set for the group. If unset, the password 352# is unmodified. If NULL, the newgrp(1) password is disabled. 353# 354# Returns success if the group was successfully modified. 355# 356f_group_edit() 357{ --- 59 unchanged lines hidden (view full) --- 417 f_dprintf "retval=%u mtag=[%s]" $retval "$mtag" 418 defaultitem="$mtag" 419 420 # Return if user either pressed ESC or chose Cancel/No 421 [ $retval -eq $DIALOG_OK ] || return $FAILURE 422 423 case "$mtag" in 424 X) # Save/Exit |
425 local var 426 for var in gid members name; do 427 local _group_$var 428 eval f_shell_escape \ 429 \"\$group_$var\" _group_$var 430 done 431 432 local cmd="pw groupmod -n '$_group_name'" 433 [ "$group_gid" ] && cmd="$cmd -g '$_group_gid'" |
434 [ "$group_members" -o "$null_members" ] && |
435 cmd="$cmd -M '$_group_members'" |
436 437 # Execute the command (break on success) 438 if [ "$group_password_disable" ]; then 439 f_eval_catch $funcname pw '%s -h -' "$cmd" 440 elif [ "$group_password" ]; then |
441 echo "$group_password" | f_eval_catch \ 442 $funcname pw '%s -h 0' "$cmd" |
443 else 444 f_eval_catch $funcname pw '%s' "$cmd" 445 fi && break 446 ;; 447 1) # Group Name (select different group from list) 448 f_dialog_menu_group_list "$group_name" || continue 449 f_dialog_menutag_fetch mtag 450 451 [ "$mtag" = "X $msg_exit" ] && continue 452 453 if ! f_input_group "$mtag"; then 454 f_show_err "$msg_group_not_found" "$mtag" |
455 # Attempt to fall back to previous selection |
456 f_input_group "$input" || return $FAILURE 457 else 458 input="$mtag" 459 fi 460 title="$msg_edit_view $msg_group: $group_name" 461 ;; 462 2) # Password 463 f_dialog_input_group_password group_password \ --- 5 unchanged lines hidden (view full) --- 469 4) # Group Members 470 f_dialog_input_group_members group_members \ 471 "$group_members" && [ ! "$group_members" ] && 472 null_members=1 473 ;; 474 esac 475 done 476 else |
477 local var 478 for var in gid members name; do 479 local _group_$var 480 eval f_shell_escape \"\$group_$var\" _group_$var 481 done 482 |
483 # Form the command |
484 local cmd="pw groupmod -n '$_group_name'" 485 [ "$group_gid" ] && cmd="$cmd -g '$_group_gid'" |
486 [ "$group_members" -o "$null_members" ] && |
487 cmd="$cmd -M '$_group_members'" |
488 489 # Execute the command 490 local retval err 491 if [ "$group_password_disable" ]; then 492 f_eval_catch -k err $funcname pw '%s -h -' "$cmd" 493 elif [ "$group_password" -o "$null_password" ]; then |
494 err=$( echo "$group_password" | f_eval_catch -de \ 495 $funcname pw '%s -h 0' "$cmd" 2>&1 ) |
496 else 497 f_eval_catch -k err $funcname pw '%s' "$cmd" 498 fi 499 retval=$? 500 if [ $retval -ne $SUCCESS ]; then 501 f_show_err "%s" "$err" 502 return $retval 503 fi 504 fi 505 506 f_dialog_title "$title" 507 $alert "$msg_group_updated" 508 f_dialog_title_restore |
509 [ "$no_confirm" -a "$USE_DIALOG" ] && sleep 1 |
510 511 return $SUCCESS 512} 513 514############################################################ MAIN 515 516f_dprintf "%s: Successfully loaded." usermgmt/group.subr 517 518fi # ! $_USERMGMT_GROUP_SUBR |