Annotation of /branches/mage-next/src/helper/museradd.in
Parent Directory | Revision Log
Revision 2722 -
(hide annotations)
(download)
Tue Jul 22 14:19:44 2014 UTC (9 years, 9 months ago) by niro
File size: 2769 byte(s)
Tue Jul 22 14:19:44 2014 UTC (9 years, 9 months ago) by niro
File size: 2769 byte(s)
-museradd: busybox does not support -l switch
1 | niro | 42 | #!/bin/bash |
2 | niro | 2268 | # $Id$ |
3 | niro | 42 | |
4 | niro | 1273 | # include all needed files |
5 | [ -f /etc/mage.rc.global ] && source /etc/mage.rc.global | ||
6 | [ -f ${MAGERC} ] && source ${MAGERC} | ||
7 | [ -f ${MLIBDIR}/mage4.functions.sh ] && source ${MLIBDIR}/mage4.functions.sh | ||
8 | |||
9 | niro | 42 | print_usage() |
10 | { | ||
11 | echo "$(basename $0 .sh) adds users to /etc/passwd." | ||
12 | echo " USAGE: $(basename $0 .sh) -o OPTIONS USER_NAME .." | ||
13 | echo | ||
14 | echo " OPTIONS: -o \"OPTS\"all options from /usr/sbin/useradd can be used." | ||
15 | echo | ||
16 | echo " Examples:" | ||
17 | echo " $(basename $0 .sh) -o \"-u 22 -g sshd -d /var/empty -s /bin/false\" sshd" | ||
18 | echo | ||
19 | } | ||
20 | |||
21 | niro | 1273 | busybox_fix_user_opts() |
22 | { | ||
23 | local i | ||
24 | local FIXED_USER_OPTS | ||
25 | |||
26 | for i in $* | ||
27 | do | ||
28 | case $1 in | ||
29 | -d) shift; FIXED_USER_OPTS+=" -h $1" ;; | ||
30 | -g) shift; FIXED_USER_OPTS+=" -G $1" ;; | ||
31 | -G) shift; shift; continue;; # will be parsed through fix_group_opts | ||
32 | -u) shift; [[ $1 -lt 100 ]] && FIXED_USER_OPTS+=" -S"; FIXED_USER_OPTS+=" -u $1" ;; | ||
33 | -r) FIXED_USER_OPTS+=" -S" ;; | ||
34 | niro | 2142 | -M) FIXED_USER_OPTS+=" -H" ;; |
35 | niro | 2722 | -l) continue ;; # just ignore this switch, adduser does not support it |
36 | niro | 1273 | *) FIXED_USER_OPTS+=" $1" ;; |
37 | esac | ||
38 | shift | ||
39 | done | ||
40 | |||
41 | echo "${FIXED_USER_OPTS}" | ||
42 | } | ||
43 | |||
44 | busybox_fix_group_opts() | ||
45 | { | ||
46 | local i | ||
47 | local FIXED_GROUP_OPTS | ||
48 | |||
49 | for i in $* | ||
50 | do | ||
51 | case $1 in | ||
52 | -G) shift; FIXED_GROUP_OPTS+="$(echo $1 | sed 's:,:\ :g')" ;; | ||
53 | esac | ||
54 | shift | ||
55 | done | ||
56 | |||
57 | echo "${FIXED_GROUP_OPTS}" | ||
58 | } | ||
59 | |||
60 | niro | 2142 | fix_usermod_opts() |
61 | { | ||
62 | local i | ||
63 | local FIXED_USERMOD_OPTS | ||
64 | |||
65 | for i in $* | ||
66 | do | ||
67 | case $1 in | ||
68 | niro | 2174 | -M) : ;; # usermod does not support the -M switch |
69 | niro | 2142 | *) FIXED_USERMOD_OPTS+=" $1" ;; |
70 | esac | ||
71 | shift | ||
72 | done | ||
73 | |||
74 | echo "${FIXED_USERMOD_OPTS}" | ||
75 | } | ||
76 | |||
77 | niro | 1500 | if [[ ! -z ${MROOT} ]] && [[ ${MROOT} != / ]] |
78 | then | ||
79 | chroot="chroot ${MROOT} " | ||
80 | else | ||
81 | chroot="" | ||
82 | fi | ||
83 | |||
84 | niro | 42 | while getopts "o:-" opt ; do |
85 | case "${opt}" in | ||
86 | o) | ||
87 | USER_OPTS="${OPTARG}" | ||
88 | ;; | ||
89 | |||
90 | -) break | ||
91 | ;; | ||
92 | |||
93 | *) | ||
94 | print_usage | ||
95 | exit 1 | ||
96 | ;; | ||
97 | esac | ||
98 | done | ||
99 | shift $(($OPTIND - 1)) | ||
100 | |||
101 | #exit if $1 is zero | ||
102 | if [ -z "$1" ] | ||
103 | then | ||
104 | print_usage | ||
105 | exit 1 | ||
106 | fi | ||
107 | |||
108 | USER_TO_ADD="$1" | ||
109 | |||
110 | niro | 1273 | # busybox support needed? |
111 | if need_busybox_support adduser | ||
112 | niro | 42 | then |
113 | niro | 1500 | echo -n " Adding user '${USER_TO_ADD}'" |
114 | [[ ! -z ${chroot} ]] && echo -n " into MROOT='${MROOT}'" | ||
115 | echo " ..." | ||
116 | niro | 1951 | ${chroot} adduser -S -D $(busybox_fix_user_opts ${USER_OPTS}) "${USER_TO_ADD}" |
117 | niro | 1273 | for grp in $(busybox_fix_group_opts ${USER_OPTS}) |
118 | do | ||
119 | niro | 1500 | ${chroot} addgroup "${USER_TO_ADD}" "${grp}" |
120 | niro | 1273 | done |
121 | |||
122 | # normal systems | ||
123 | niro | 42 | else |
124 | niro | 1273 | # get the info |
125 | niro | 1500 | my_user="$(${chroot} getent passwd ${USER_TO_ADD})" |
126 | niro | 1273 | |
127 | if [ -z "${my_user}" ] | ||
128 | then | ||
129 | niro | 1500 | echo -n " Adding user '${USER_TO_ADD}'" |
130 | [[ ! -z ${chroot} ]] && echo -n " into MROOT='${MROOT}'" | ||
131 | echo " ..." | ||
132 | niro | 1951 | ${chroot} useradd -r ${USER_OPTS} "${USER_TO_ADD}" |
133 | niro | 1273 | else |
134 | niro | 1500 | echo -n " Modifing user '${USER_TO_ADD}'" |
135 | [[ ! -z ${chroot} ]] && echo -n " in MROOT='${MROOT}'" | ||
136 | echo " ..." | ||
137 | niro | 2142 | ${chroot} usermod $(fix_usermod_opts ${USER_OPTS}) "${USER_TO_ADD}" |
138 | niro | 1273 | fi |
139 | niro | 42 | fi |