@@ -22,12 +22,16 @@ add_group() {
2222}
2323
2424add_user () {
25- # add_user <name> <id > <gecos> <home>
25+ # add_user <name> <uid> <gid > <gecos> <home>
2626 if ! id " $1 " > /dev/null 2>&1 ; then
2727 if [ " $2 " = ' -' ]; then
28- useradd --prefix " $root " -rc " $3 " -g " $1 " -d " $4 " -s ' /sbin/nologin' " $1 "
28+ if [ " $3 " = ' -' ]; then
29+ useradd --prefix " $root " -rc " $4 " -g " $1 " -d " $5 " -s ' /sbin/nologin' " $1 "
30+ else
31+ useradd --prefix " $root " -rc " $4 " -g " $3 " -d " $5 " -s ' /sbin/nologin' " $1 "
32+ fi
2933 else
30- useradd --prefix " $root " -rc " $3 " -u " $2 " -g " $1 " -d " $4 " -s ' /sbin/nologin' " $1 "
34+ useradd --prefix " $root " -rc " $4 " -u " $2 " -g " $3 " -d " $5 " -s ' /sbin/nologin' " $1 "
3135 fi
3236 passwd --prefix " $root " -l " $1 " > /dev/null 2>&1
3337 fi
@@ -91,13 +95,22 @@ parse_string() {
9195 fi
9296
9397 case " ${type} " in
94- [gu])
95- case " ${id} " in 65535|4294967295) warninvalid; return ; esac
98+ u)
99+ uid=${id%%:* }
100+ gid=${id##*: }
101+ case " ${uid} " in 65535|4294967295) warninvalid; return ; esac
102+ case " ${gid} " in 65535|4294967295) warninvalid; return ; esac
103+ if [ " ${uid} " != ' -' ] && [ " ${gid} " = ' -' ]; then warninvalid; return ; fi
96104 [ " ${home:- -} " = ' -' ] && home=' /'
97- add_group " ${name } " " ${id} "
98- if [ " ${type} " = u ] ; then
99- add_user " ${name} " " ${id} " " ${gecos} " " ${home }"
105+ if [ " ${uid } " = " ${id} " ] ; then
106+ # No specific gid, create group for this user
107+ add_group " ${name} " " ${id} "
100108 fi
109+ add_user " ${name} " " ${uid} " " ${gid} " " ${gecos} " " ${home} "
110+ ;;
111+ g)
112+ case " ${id} " in 65535|4294967295) warninvalid; return ; esac
113+ add_group " ${name} " " ${id} "
101114 ;;
102115 m)
103116 add_group " ${id} " ' -'
0 commit comments