summaryrefslogtreecommitdiff
path: root/pkgtools/pkgtasks/files/usergroup_Linux.subr
diff options
context:
space:
mode:
authorjlam <jlam>2017-06-01 01:58:34 +0000
committerjlam <jlam>2017-06-01 01:58:34 +0000
commitb2aec356a8946b5a73651529ecf7aa2e37df821e (patch)
tree225d4eff4233dd023a43fe700c212d7e14b08efc /pkgtools/pkgtasks/files/usergroup_Linux.subr
parent96ce810bb7271243316a3e1aba6b7f28c740cfb3 (diff)
downloadpkgsrc-b2aec356a8946b5a73651529ecf7aa2e37df821e.tar.gz
Import pkgtasks-1-1.9 as pkgsrc/pkgtools/pkgtasks.
pkgtasks is a shell script library to ease writing POSIX-compliant shell scripts to handle common tasks during installation or removal of a package, e.g., * creating groups and users needed by the package * creating and removing directories with special permissions and ownership, * copying example config files to their final locations during package installation, and removing them during package removal if they don't differ from the example ones, * reminding the user of files that may be customized after package installation.
Diffstat (limited to 'pkgtools/pkgtasks/files/usergroup_Linux.subr')
-rw-r--r--pkgtools/pkgtasks/files/usergroup_Linux.subr141
1 files changed, 141 insertions, 0 deletions
diff --git a/pkgtools/pkgtasks/files/usergroup_Linux.subr b/pkgtools/pkgtasks/files/usergroup_Linux.subr
new file mode 100644
index 00000000000..e3857d3d67e
--- /dev/null
+++ b/pkgtools/pkgtasks/files/usergroup_Linux.subr
@@ -0,0 +1,141 @@
+# Copyright (c) 2017 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Johnny C. Lam.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# NAME
+# usergroup_Linux -- usergroup implementation for Linux
+#
+# SYNOPSIS
+# platform_groupadd [-g <gid>] <group>
+#
+# platform_useradd [-c <descr>] [-d <home>] [-g <group>]
+# [-s <shell>] [-u <uid>] <user>
+#
+# DESCRIPTION
+# The functions implement a NetBSD/Solaris-compatible groupadd and
+# useradd.
+#
+# RETURN VALUES
+# All functions return 0 on success, and return non-zero otherwise.
+#
+# ENVIRONMENT
+# The following variables are used if they are set:
+#
+# GROUPADD
+# The name or path to the groupadd(8) utility.
+#
+# USERADD
+# The name or path to the useradd(8) utility.
+#
+# NOTES
+# The useradd(8) utility on Linux is a complete mess. At least Red
+# Hat derivatives want to create home directories by default. They
+# have support for -M, but no --help. Other Linux distributions lack
+# -M support, but some at least have --help. LSB just wants
+# useradd(8), but doesn't specify any behavior, so it is useless for
+# writing portable scripts.
+#
+
+__task_usergroup_Linux__="yes"
+
+task_load match
+task_load quote
+
+platform_groupadd()
+{
+ : ${GROUPADD:=groupadd}
+
+ local gid=
+ local groupadd_args=
+ local arg quoted
+ local OPTIND=1
+ while getopts ":g:" arg "$@"; do
+ case $arg in
+ g) task_quote "${OPTARG}"
+ groupadd_args="$groupadd_args -$arg $quoted" ;;
+ *) return 127 ;;
+ esac
+ done
+ shift $(( ${OPTIND} - 1 ))
+ # A <group> argument is required.
+ [ $# -eq 1 ] || return 127
+ local group="$1"; shift
+
+ [ -n "$group" ] || return 1
+
+ # If no GID is specified, then use a GID from the system GID range.
+ if [ -z "$gid" ]; then
+ groupadd_args="$groupadd_args -r"
+ fi
+ task_quote "$group"
+ groupadd_args="$groupadd_args $quoted"
+
+ eval ${GROUPADD} $groupadd_args
+}
+
+platform_useradd()
+{
+ : ${USERADD:=useradd}
+
+ : ${LOGIN_DEFS:=/etc/login.defs}
+
+ local uid=
+ local useradd_args=
+ local arg quoted
+ local OPTIND=1
+ while getopts ":c:d:g:s:u:" arg "$@"; do
+ case $arg in
+ [cdgsu])
+ # valid useradd options for useradd(8)
+ case $arg in u) uid=${OPTARG} ;; esac
+ task_quote "${OPTARG}"
+ useradd_args="$useradd_args -$arg $quoted" ;;
+ *) return 127 ;;
+ esac
+ done
+ shift $(( ${OPTIND} - 1 ))
+ # A <user> argument is required.
+ [ $# -eq 1 ] || return 127
+ local user="$1"; shift
+
+ [ -n "$user" ] || return 1
+
+ # Don't create the home directory, even if CREATE_HOME is "yes" in
+ # /etc/login.defs.
+ #
+ if [ -f "${LOGIN_DEFS}" ] &&
+ task_match -qw "CREATE_HOME*[yY][eE][sS]" < ${LOGIN_DEFS}; then
+ useradd_args="$useradd_args -M"
+ fi
+ # If no UID is specified, then use a UID from the system UID range.
+ if [ -z "$uid" ]; then
+ useradd_args="$useradd_args -r"
+ fi
+ task_quote "$user"
+ useradd_args="$useradd_args $quoted"
+
+ eval ${USERADD} $useradd_args
+}