diff options
author | Michał Górny <mgorny@gentoo.org> | 2019-05-29 20:06:02 +0200 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2019-06-20 10:16:41 +0200 |
commit | 1b07b37054d93efc0f450b89e5bfd10d8c8705f9 (patch) | |
tree | 188e17c8aaa632ff8f4a2012a930b0ed3b298688 /eclass | |
parent | user.eclass: Support disabling home directory creation (diff) | |
download | gentoo-1b07b37054d93efc0f450b89e5bfd10d8c8705f9.tar.gz gentoo-1b07b37054d93efc0f450b89e5bfd10d8c8705f9.tar.bz2 gentoo-1b07b37054d93efc0f450b89e5bfd10d8c8705f9.zip |
user.eclass: Support forcing specified UID/GID
Signed-off-by: Michał Górny <mgorny@gentoo.org>
Diffstat (limited to 'eclass')
-rw-r--r-- | eclass/user.eclass | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/eclass/user.eclass b/eclass/user.eclass index 0577df81ae78..92a07bb6b41b 100644 --- a/eclass/user.eclass +++ b/eclass/user.eclass @@ -71,13 +71,15 @@ egetent() { } # @FUNCTION: enewuser -# @USAGE: <user> [-M] [uid] [shell] [homedir] [groups] +# @USAGE: <user> [-F] [-M] [uid] [shell] [homedir] [groups] # @DESCRIPTION: # Same as enewgroup, you are not required to understand how to properly add # a user to the system. The only required parameter is the username. # Default uid is (pass -1 for this) next available, default shell is # /bin/false, default homedir is /dev/null, and there are no default groups. # +# If -F is passed, enewuser will always enforce specified UID and fail if it +# can not be assigned. # If -M is passed, enewuser does not create the home directory if it does not # exist. enewuser() { @@ -87,9 +89,10 @@ enewuser() { fi _assert_pkg_ebuild_phase ${FUNCNAME} - local create_home=1 + local create_home=1 force_uid= while [[ $1 == -* ]]; do case $1 in + -F) force_uid=1;; -M) create_home=;; *) die "${FUNCNAME}: invalid option ${1}";; esac @@ -117,6 +120,7 @@ enewuser() { if [[ -n ${euid} && ${euid} != -1 ]] ; then if [[ ${euid} -gt 0 ]] ; then if [[ -n $(egetent passwd ${euid}) ]] ; then + [[ -n ${force_uid} ]] && die "${FUNCNAME}: UID ${euid} already taken" euid="next" fi else @@ -124,6 +128,7 @@ enewuser() { die "${euid} is not a valid UID" fi else + [[ -n ${force_uid} ]] && die "${FUNCNAME}: -F with uid==-1 makes no sense" euid="next" fi if [[ ${euid} == "next" ]] ; then @@ -240,6 +245,9 @@ enewuser() { # group to the system. Just give it a group name to add and enewgroup will # do the rest. You may specify the gid for the group or allow the group to # allocate the next available one. +# +# If -F is passed, enewgroup will always enforce specified GID and fail if it +# can not be assigned. enewgroup() { if [[ ${EUID} != 0 ]] ; then einfo "Insufficient privileges to execute ${FUNCNAME[0]}" @@ -247,6 +255,15 @@ enewgroup() { fi _assert_pkg_ebuild_phase ${FUNCNAME} + local force_gid= + while [[ $1 == -* ]]; do + case $1 in + -F) force_gid=1;; + *) die "${FUNCNAME}: invalid option ${1}";; + esac + shift + done + # get the group local egroup=$1; shift if [[ -z ${egroup} ]] ; then @@ -265,6 +282,7 @@ enewgroup() { if [[ ! -z ${egid} ]] ; then if [[ ${egid} -gt 0 ]] ; then if [[ -n $(egetent group ${egid}) ]] ; then + [[ -n ${force_gid} ]] && die "${FUNCNAME}: GID ${egid} already taken" egid="next available; requested gid taken" fi else @@ -272,6 +290,7 @@ enewgroup() { die "${egid} is not a valid GID" fi else + [[ -n ${force_gid} ]] && die "${FUNCNAME}: -F with gid==-1 makes no sense" egid="next available" fi einfo " - Groupid: ${egid}" |