]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - usr.sbin/bsdconfig/usermgmt/usermgmt
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / usr.sbin / bsdconfig / usermgmt / usermgmt
1 #!/bin/sh
2 #-
3 # Copyright (c) 2012 Ron McDowell
4 # Copyright (c) 2012-2013 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
9 # are met:
10 # 1. Redistributions of source code must retain the above copyright
11 #    notice, this list of conditions and the following disclaimer.
12 # 2. Redistributions in binary form must reproduce the above copyright
13 #    notice, this list of conditions and the following disclaimer in the
14 #    documentation and/or other materials provided with the distribution.
15 #
16 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 # ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
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$
29 #
30 ############################################################ INCLUDES
31
32 BSDCFG_SHARE="/usr/share/bsdconfig"
33 . $BSDCFG_SHARE/common.subr || exit 1
34 f_dprintf "%s: loading includes..." "$0"
35 f_include $BSDCFG_SHARE/dialog.subr
36 f_include $BSDCFG_SHARE/mustberoot.subr
37
38 BSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="070.usermgmt"
39 f_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr
40
41 USERMGMT_HELPFILE=$BSDCFG_LIBE/$APP_DIR/include/usermgmt.hlp
42
43 ipgm=$( f_index_menusel_keyword $BSDCFG_LIBE/$APP_DIR/INDEX "$pgm" )
44 [ $? -eq $SUCCESS -a "$ipgm" ] && pgm="$ipgm"
45
46 ############################################################ FUNCTIONS
47
48 # dialog_menu_main
49 #
50 # Display the dialog(1)-based application main menu.
51 #
52 dialog_menu_main()
53 {
54         local prompt=
55         local menu_list="
56                 'X' '$msg_exit'
57                 '1' '$msg_add_login'
58                 '2' '$msg_edit_login'
59                 '3' '$msg_delete_login'
60                 '-' '-'
61                 '4' '$msg_add_group'
62                 '5' '$msg_edit_group'
63                 '6' '$msg_delete_group'
64         " # END-QUOTE
65         local defaultitem= # Calculated below
66         local hline="$hline_arrows_tab_enter"
67
68         local height width rows
69         eval f_dialog_menu_size height width rows \
70                                 \"\$DIALOG_TITLE\"     \
71                                 \"\$DIALOG_BACKTITLE\" \
72                                 \"\$prompt\"           \
73                                 \"\$hline\"            \
74                                 $menu_list
75
76         # When using Xdialog(1) we need to bump the width for the buttons
77         [ "$USE_XDIALOG" ] && width=40
78
79         # Obtain default-item from previously stored selection
80         f_dialog_default_fetch defaultitem
81
82         local menu_choice
83         menu_choice=$( eval $DIALOG \
84                 --title \"\$DIALOG_TITLE\"  \
85                 --backtitle \"\$DIALOG_BACKTITLE\" \
86                 --hline \"\$hline\"                \
87                 --ok-label \"\$msg_ok\"            \
88                 --cancel-label \"\$msg_cancel\"    \
89                 --help-button                      \
90                 --help-label \"\$msg_help\"        \
91                 ${USE_XDIALOG:+--help \"\"}        \
92                 --default-item \"\$defaultitem\"   \
93                 --menu \"\$prompt\"                \
94                 $height $width $rows               \
95                 $menu_list                         \
96                 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
97         )
98         local retval=$?
99         f_dialog_data_sanitize menu_choice
100         f_dialog_menutag_store "$menu_choice"
101
102         # Only update default-item on success
103         [ $retval -eq $DIALOG_OK ] && f_dialog_default_store "$menu_choice"
104
105         return $retval
106 }
107
108 ############################################################ MAIN
109
110 # Incorporate rc-file if it exists
111 [ -f "$HOME/.bsdconfigrc" ] && f_include "$HOME/.bsdconfigrc"
112
113 #
114 # Process command-line arguments
115 #
116 while getopts h$GETOPTS_STDARGS flag; do
117         case "$flag" in
118         h|\?) f_usage $BSDCFG_LIBE/$APP_DIR/USAGE "PROGRAM_NAME" "$pgm" ;;
119         esac
120 done
121 shift $(( $OPTIND - 1 ))
122
123 #
124 # Initialize
125 #
126 f_dialog_title "$msg_login_management"
127 f_dialog_backtitle "${ipgm:+bsdconfig }$pgm"
128 f_mustberoot_init
129
130 #
131 # Launch application main menu
132 #
133 while :; do
134         dialog_menu_main
135         retval=$?
136         f_dialog_menutag_fetch mtag
137         f_dprintf "retval=%u mtag=[%s]" $retval "$mtag"
138
139         if [ $retval -eq $DIALOG_HELP ]; then
140                 f_show_help "$USERMGMT_HELPFILE"
141                 continue
142         elif [ $retval -ne $DIALOG_OK ]; then
143                 f_die
144         fi
145
146         command=
147         case "$mtag" in
148         X) break ;;
149         1) command=useradd   ;; # Add User
150         2) command=useredit  ;; # Edit/View User
151         3) command=userdel   ;; # Delete User
152         4) command=groupadd  ;; # Add Group
153         5) command=groupedit ;; # Edit/View Group
154         6) command=groupdel  ;; # Delete Group
155         esac
156
157         if [ "$command" ]; then
158                 $BSDCFG_LIBE/$APP_DIR/$command ${USE_XDIALOG:+-X}
159         else
160                 f_die 1 "$msg_unknown_user_management_menu_selection"
161         fi
162 done
163
164 exit $SUCCESS
165
166 ################################################################################
167 # END
168 ################################################################################