summaryrefslogtreecommitdiff
path: root/mk/pkginstall/usergroupfuncs.DragonFly
diff options
context:
space:
mode:
authorjlam <jlam@pkgsrc.org>2006-05-21 23:50:15 +0000
committerjlam <jlam@pkgsrc.org>2006-05-21 23:50:15 +0000
commit143b5f7d148dfa538bb18fb22a3bd3755f6f8c80 (patch)
tree0c523987180f677a1b6f7605da0f810de5df2349 /mk/pkginstall/usergroupfuncs.DragonFly
parent7bd087ae6e04e7c2d1c5e1ee2dcfedae70f0e0a2 (diff)
downloadpkgsrc-143b5f7d148dfa538bb18fb22a3bd3755f6f8c80.tar.gz
Move mk/install to mk/pkginstall to better reflect the contents (the
pkginstall framework).
Diffstat (limited to 'mk/pkginstall/usergroupfuncs.DragonFly')
-rw-r--r--mk/pkginstall/usergroupfuncs.DragonFly142
1 files changed, 142 insertions, 0 deletions
diff --git a/mk/pkginstall/usergroupfuncs.DragonFly b/mk/pkginstall/usergroupfuncs.DragonFly
new file mode 100644
index 00000000000..25ff3163103
--- /dev/null
+++ b/mk/pkginstall/usergroupfuncs.DragonFly
@@ -0,0 +1,142 @@
+# $NetBSD: usergroupfuncs.DragonFly,v 1.1 2006/05/21 23:50:15 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} "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} "Creating group: $group";
+ case $groupid in
+ "") ${PW} groupadd $group ;;
+ *) ${PW} groupadd $group -g $groupid ;;
+ esac
+ fi
+ return 0
+}