1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
|
#compdef useradd usermod groupadd groupmod
local -a args shells logindefs
local defex
# this handles solaris, netbsd, openbsd and linux
case ${service%???}:${(M)service%???}:$OSTYPE in
user:*)
if [[ -r /etc/shells ]]; then
shells=( ${${(f)"$(</etc/shells)"}:#\#*} )
else
shells=( ${(M)commands:#*/(|[abckz]|tc|ba)sh} )
fi
args+=(
'(-D -c --comment)'{-c+,--comment=}'[comment]:comment'
'(-D -d --home -b --base-dir)'{-d+,--home=}"[specify home directory]:home directory:_directories -W /"
'(-D -e --expiredate)'{-e+,--expiredate}'[specify expiration date]:expiration date (YYYY-MM-DD)'
'(-D -f --inactive)'{-f+,--inactive=}'[specify inactive days]:inactive days'
'(-D -g --gid)'{-g+,--gid=}'[specify primary group]:initial group:_groups'
'(-D -G --groups)'{-G+,--groups=}'[specify supplementary groups]:supplementary group:_sequence _groups'
'(-D -s --shell)'{-s+,--shell=}"[shell]:shell:( $shells /bin/false )"
'(-D -u --uid)'{-u+,--uid=}'[specify uid]:uid'
'(-D -o --non-unique)'{-o,--non-unique}'[allow non unique uid]'
)
;|
user:add:*)
[[ $OSTYPE = linux* ]] && defex=" -k -K -M -p -r -R -Z"
[[ $OSTYPE = (net|open)bsd* ]] && defex=" -p -v"
args+=(
"(-c -d -G -m -l -N -u -U -o -n -S$defex)"{-D,--defaults}'[show or modify defaults]'
'(-D -M -k --skel)'{-k,--skel}'[skeleton home directory]:skeleton directory:_directories -W /'
'(-D -M -m --create-home)'{-m,--create-home}'[create home directory]'
':username'
)
;|
user:add:linux*)
logindefs=( # see login.defs(5)
CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP
PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE SUB_GID_COUNT SUB_GID_MAX
SUB_GID_MIN SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX
SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
)
args+=(
'--btrfs-subvolume-home[use BTRFS subvolume for home directory]'
'(-F --add-subids-for-system)'{-F,--add-subids-for-system}'[add entries to sub[ud]id even when adding a system user]'
'(-l --no-log-init)'{-l,--no-log-init}"[don't add user to lastlog and faillog databases]"
'(-m --create-home -M --no-create-home)'{-M,--no-create-home}"[don't create user's home directory, regardless of /etc/login.defs]"
'(-N --no-user-group -U --user-group)'{-N,--no-user-group}"[don't create a group with the same name as the user]"
'(-N --no-user-group -U --user-group)'{-U,--user-group}"[create a group with the same name as the user]"
)
;|
user:add:(^solaris2.<-10>))
args+=(
'(-b --base-dir -d --home-dir)'{-b,--base-dir=}'[specify base directory for new home directory]:directory:_directories'
)
;|
user:*:(net|open)bsd*)
args+=(
'-L[specify login class]:login class:_login_classes'
'-p+[specify encrypted password]:encrypted password'
)
;|
user:add:(net|open)bsd*)
args+=( '-r[specify UID range]:low.high' )
;|
user:add:netbsd*)
args+=( '-M[specify home directory permissions]:permissions (octal)' )
;|
user:mod:netbsd*)
args+=( '-C[lock or unlock account]:locked:(yes no)' )
;|
user:*:netbsd*)
args+=(
'-F[force password change on first login]'
'-S[allow samba usernames with a trailing dollar]'
)
;|
user:mod:openbsd*)
args+=(
'(-G)-S+[set supplementary groups]:supplementary group:_sequence _groups'
"(-U)-Z[lock the account by adding \'-\' to password and shell]"
'(-Z)-U[unlock the account]'
)
;|
*:*:(net|open)bsd*)
args+=( '-v[verbose mode - explain commands as they are executed]' )
;|
*:*:solaris2.<11->)
args+=( '-S[specify repository]:repository:(files ldap)' )
;|
user:*:solaris2.<11->)
args+=(
'-A[specify authorizations]:authorization'
\*{-K,--key=}'[set user attributes]:user attribute'
'-P[specify execution profiles]:profile'
'-R[specify roles]:role'
'-p[specify projects]:project'
)
;|
user:mod:solaris2.<11->)
args+=(
'-q[specify host or netgroup to qualify extended attributes]:host or netgroup:_hosts'
)
;|
user:mod:linux*)
args+=(
'(-a --append)'{-a,--append}'[add user to supplementary groups without removing from other groups]'
'(-r --remove)'{-r,--remove}'[remove user from supplementary groups without removing from other groups]'
\*{-v,--add-subuids}'[add a range of subordinate uids]:uids (first-last)'
\*{-V,--del-subuids}'[remove a range of subordinate uids]:uids (first-last)'
\*{-w,--add-subgids}'[add a range of subordinate gids]:gids (first-last)'
\*{-W,--del-subgids}'[remove a range of subordinate gids]:gids (first-last)'
)
;|
user:mod:*)
args+=(
'(-l --no-log-init)'{-l,--no-log-init}'[specify new user name]:new username'
'(-m --move-home)'{-m,--move-home}'[move home directory contents to new location]'
':username:_users'
)
;|
user:*:linux*)
args+=(
'(-b --badname)'{-b,--badname}"[don't check for bad names]"
'(-U --unlock --lock -L -p)'{-L,--lock}"[lock user's password]"
'(-U --unlock --lock -L -p)'{-U,--unlock}"[unlock user's password]"
'(-Z --selinux-user)'{-Z,--selinux-user}"[specify SELinux user for the user's login]:user:_selinux_users"
"--selinux-range[specify SELinux MLS range for the user's login]:range"
)
;|
group:*:linux*)
args+=(
'(-U --users)'{-U+,--users=}'[specify users to add as members of the group]:user:_sequence _users'
)
;|
group:*)
args+=(
'(-g --gid)'{-g+,--gid=}'[specify gid]:gid'
'(-o --non-unique)'{-o,--non-unique}'[allow non unique gid]'
)
;|
group:add:linux*)
logindefs=( GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN )
args+=(
'(-r --system)'{-r,--system}'[create a system account]'
'(-f --force)'{-f,--force}'[exit successfully if group already exists; cancel -g if GID in use]'
)
;|
group:*:solaris2.<11->)
args+=( '-U[add users to the group]:user:_sequence _users' )
;|
*:add:linux*)
args+=(
\*{-K,--key=}'[override /etc/login.defs defaults]:key: _values 'key' ${^logindefs}\:value'
)
;|
group:add:netbsd*)
args+=( '-r[specify GID range]:low.high' )
;|
*:*:linux*)
args+=(
'(-R --root)'{-R,--root=}'[specify directory to chroot into]:directory:_directories'
'(-P --prefix)'{-P,--prefix=}"[specify root directory to apply changes in but don't chroot]:directory:_directories"
'(-D -U -L -p --password)'{-p+,--password=}'[specify encrypted password]:encrypted password'
'(-)'{-h,--help}'[display help information]'
)
;|
group:add:*)
args+=( ':group name' )
;|
group:mod:*)
args+=(
'(-n --new-name)'{-n,--new-name}'[specify new group name]:new group name'
':group:_groups'
)
;|
group:mod:linux*)
args+=( '(-a --append)'{-a,--append}'[append the users mentioned by -U without removing existing members]' )
;|
^*:linux*)
args=( ${(R)args:#(|\*)(|\(*\))--*} ) # remove long options
;|
esac
_arguments -A "-*" -s $args[@]
|