[BACK]Return to usergroupfuncs.DragonFly CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / pkgsrc / mk / pkginstall

File: [cvs.NetBSD.org] / pkgsrc / mk / pkginstall / usergroupfuncs.DragonFly (download)

Revision 1.3, Thu Jul 12 19:41:46 2007 UTC (16 years, 8 months ago) by jlam
Branch: MAIN
CVS Tags: pkgsrc-2023Q4-base, pkgsrc-2023Q4, pkgsrc-2023Q3-base, pkgsrc-2023Q3, pkgsrc-2023Q2-base, pkgsrc-2023Q2, pkgsrc-2023Q1-base, pkgsrc-2023Q1, pkgsrc-2022Q4-base, pkgsrc-2022Q4, pkgsrc-2022Q3-base, pkgsrc-2022Q3, pkgsrc-2022Q2-base, pkgsrc-2022Q2, pkgsrc-2022Q1-base, pkgsrc-2022Q1, pkgsrc-2021Q4-base, pkgsrc-2021Q4, pkgsrc-2021Q3-base, pkgsrc-2021Q3, pkgsrc-2021Q2-base, pkgsrc-2021Q2, pkgsrc-2021Q1-base, pkgsrc-2021Q1, pkgsrc-2020Q4-base, pkgsrc-2020Q4, pkgsrc-2020Q3-base, pkgsrc-2020Q3, pkgsrc-2020Q2-base, pkgsrc-2020Q2, pkgsrc-2020Q1-base, pkgsrc-2020Q1, pkgsrc-2019Q4-base, pkgsrc-2019Q4, pkgsrc-2019Q3-base, pkgsrc-2019Q3, pkgsrc-2019Q2-base, pkgsrc-2019Q2, pkgsrc-2019Q1-base, pkgsrc-2019Q1, pkgsrc-2018Q4-base, pkgsrc-2018Q4, pkgsrc-2018Q3-base, pkgsrc-2018Q3, pkgsrc-2018Q2-base, pkgsrc-2018Q2, pkgsrc-2018Q1-base, pkgsrc-2018Q1, pkgsrc-2017Q4-base, pkgsrc-2017Q4, pkgsrc-2017Q3-base, pkgsrc-2017Q3, pkgsrc-2017Q2-base, pkgsrc-2017Q2, pkgsrc-2017Q1-base, pkgsrc-2017Q1, pkgsrc-2016Q4-base, pkgsrc-2016Q4, pkgsrc-2016Q3-base, pkgsrc-2016Q3, pkgsrc-2016Q2-base, pkgsrc-2016Q2, pkgsrc-2016Q1-base, pkgsrc-2016Q1, pkgsrc-2015Q4-base, pkgsrc-2015Q4, pkgsrc-2015Q3-base, pkgsrc-2015Q3, pkgsrc-2015Q2-base, pkgsrc-2015Q2, pkgsrc-2015Q1-base, pkgsrc-2015Q1, pkgsrc-2014Q4-base, pkgsrc-2014Q4, pkgsrc-2014Q3-base, pkgsrc-2014Q3, pkgsrc-2014Q2-base, pkgsrc-2014Q2, pkgsrc-2014Q1-base, pkgsrc-2014Q1, pkgsrc-2013Q4-base, pkgsrc-2013Q4, pkgsrc-2013Q3-base, pkgsrc-2013Q3, pkgsrc-2013Q2-base, pkgsrc-2013Q2, pkgsrc-2013Q1-base, pkgsrc-2013Q1, pkgsrc-2012Q4-base, pkgsrc-2012Q4, pkgsrc-2012Q3-base, pkgsrc-2012Q3, pkgsrc-2012Q2-base, pkgsrc-2012Q2, pkgsrc-2012Q1-base, pkgsrc-2012Q1, pkgsrc-2011Q4-base, pkgsrc-2011Q4, pkgsrc-2011Q3-base, pkgsrc-2011Q3, pkgsrc-2011Q2-base, pkgsrc-2011Q2, pkgsrc-2011Q1-base, pkgsrc-2011Q1, pkgsrc-2010Q4-base, pkgsrc-2010Q4, pkgsrc-2010Q3-base, pkgsrc-2010Q3, pkgsrc-2010Q2-base, pkgsrc-2010Q2, pkgsrc-2010Q1-base, pkgsrc-2010Q1, pkgsrc-2009Q4-base, pkgsrc-2009Q4, pkgsrc-2009Q3-base, pkgsrc-2009Q3, pkgsrc-2009Q2-base, pkgsrc-2009Q2, pkgsrc-2009Q1-base, pkgsrc-2009Q1, pkgsrc-2008Q4-base, pkgsrc-2008Q4, pkgsrc-2008Q3-base, pkgsrc-2008Q3, pkgsrc-2008Q2-base, pkgsrc-2008Q2, pkgsrc-2008Q1-base, pkgsrc-2008Q1, pkgsrc-2007Q4-base, pkgsrc-2007Q4, pkgsrc-2007Q3-base, pkgsrc-2007Q3, cwrapper, cube-native-xorg-base, cube-native-xorg, HEAD
Changes since 1.2: +3 -3 lines

* Add a user-settable variable to tune the default verbosity of the
  +INSTALL and +DEINSTALL scripts:

  PKGINSTALL_VERBOSE
	A list of scriptlets that will be verbose and output a message
	noting the actions taken.

	* "all" is a special value that implies all of the other items
	* "fonts" for +FONTS
	* "info-files" for +INFO_FILES

	Default value: "all" for PKG_DEVELOPERs, empty otherwise.

* Be "one-liner brief" when doing the default actions.  For example,
  the info files output now looks like:

	gmake-3.81: registering info file /usr/pkg/info/make.info

  We retain the current verbosity for the CHECK-* actions.

# $NetBSD: usergroupfuncs.DragonFly,v 1.3 2007/07/12 19:41:46 jlam Exp $
#
# Platform-specific adduser and addgroup functionality
# on top of pw(8).

# group_exists group [groupid]
#	Returns 0 if $group exists and has gid $groupid
#	Returns 1 if neither $group nor $groupid exist
#	Returns 2 if $group or $groupid exist but don't match
#	Returns 3 for all errors
#
group_exists()
{
	_group="$1"; _groupid="$2"
	${TEST} -n "$_group" || return 3

	# Check using chgrp to work properly in an NSS/NIS environment.
	_tmpdir="./.pkginstall.$$"
	${MKDIR} -p $_tmpdir 2>/dev/null || return 3
	${CHMOD} 0700 $_tmpdir
	_testpath="$_tmpdir/group_exists"
	${ECHO} > $_testpath
	if ${CHGRP} $_group $_testpath >/dev/null 2>&1; then
		# $_group exists
		_id=`${LS} -ln $_testpath 2>/dev/null | ${AWK} '{ print $4 }'`
		${TEST} -n "$_groupid" || _groupid=$_id
		if ${TEST} "$_groupid" = "$_id"; then
			${RM} -fr $_tmpdir; return 0
		fi
		${RM} -fr $_tmpdir; return 2
	elif ${TEST} -z "$_groupid"; then
		# $_group doesn't exist and $_groupid is not set
		${RM} -fr $_tmpdir; return 1
	elif ${CHGRP} $_groupid $_testpath >/dev/null 2>&1; then
		_name=`${LS} -l $_testpath 2>/dev/null | ${AWK} '{ print $4 }'`
		if ${TEST} "$_name" != "$_groupid"; then
			# $_group doesn't exist, but $_groupid exists
			${RM} -fr $_tmpdir; return 2
		fi
		# neither $_group nor $_groupid exist
		${RM} -fr $_tmpdir; return 1
	fi
	${RM} -fr $_tmpdir; return 3
}

# user_exists user [userid]
#	Returns 0 if $user exists and has uid $userid
#	Returns 1 if neither $user nor $userid exist
#	Returns 2 if $user or $userid exist but don't match
#	Returns 3 for all errors
#
user_exists()
{
	_user="$1"; _userid="$2"
	${TEST} -n "$_user" || return 3

	# Check using chown to work properly in an NSS/NIS environment.
	_tmpdir="./.pkginstall.$$"
	${MKDIR} -p $_tmpdir 2>/dev/null || return 3
	${CHMOD} 0700 $_tmpdir
	_testpath="$_tmpdir/user_exists"
	${ECHO} > $_testpath
	if ${CHOWN} $_user $_testpath >/dev/null 2>&1; then
		# $_user exists
		_id=`${LS} -ln $_testpath 2>/dev/null | ${AWK} '{ print $3 }'`
		${TEST} -n "$_userid" || _userid=$_id
		if ${TEST} "$_userid" = "$_id"; then
			${RM} -fr $_tmpdir; return 0
		fi
		${RM} -fr $_tmpdir; return 2
	elif ${TEST} -z "$_userid"; then
		# $_user doesn't exist and $_user is not set
		${RM} -fr $_tmpdir; return 1
	elif ${CHOWN} $_userid $_testpath >/dev/null 2>&1; then
		_name=`${LS} -l $_testpath 2>/dev/null | ${AWK} '{ print $3 }'`
		if ${TEST} "$_name" != "$_userid"; then
			# $_user doesn't exist, but $_userid exists
			${RM} -fr $_tmpdir; return 2
		fi
		# neither $_user nor $_userid exist
		${RM} -fr $_tmpdir; return 1
	fi
	${RM} -fr $_tmpdir; return 3
}

# adduser user group [userid] [descr] [home] [shell]
adduser()
{
	user="$1"; group="$2"; userid="$3"
	descr="$4"; home="$5" shell="$6"
	${TEST} $# -eq 6 || return 1
	${TEST} -n "$user" || return 2
	${TEST} -n "$group" || return 2

	PW="@PW@"

	case $user in
	${PKGNAME%-[0-9]*})	descr_dflt="$user user" ;;
	*)			descr_dflt="${PKGNAME%-[0-9]*} $user user" ;;
	esac
	: ${descr:="$descr_dflt"}
	: ${home:="@PKG_USER_HOME@"}
	: ${shell:="@PKG_USER_SHELL@"}

	if ${TEST} -n "${PW}" -a -x "${PW}"; then
		${ECHO} "${PKGNAME}: Creating user \`\`$user''"
		case $userid in
		"")
			${PW} useradd					\
				$user					\
				-c "$descr" -d "$home" -s "$shell"	\
				-g $group
			;;
		*)
			${PW} useradd					\
				$user					\
				-c "$descr" -d "$home" -s "$shell"	\
				-g $group -u $userid
			;;
		esac
	fi
	return 0
}

# adduser group [groupid]
addgroup()
{
	group="$1"; groupid="$2"
	${TEST} $# -eq 2 || return 1
	${TEST} -n "$group" || return 2

	PW="@PW@"

	if ${TEST} -n "${PW}" -a -x "${PW}"; then
		${ECHO} "${PKGNAME}: Creating group \`\`$group''"
		case $groupid in
		"")	${PW} groupadd $group ;;
		*)	${PW} groupadd $group -g $groupid ;;
		esac
	fi
	return 0
}