[BACK]Return to adduser.sh CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / pkgsrc / net / samba30 / files

File: [cvs.NetBSD.org] / pkgsrc / net / samba30 / files / Attic / adduser.sh (download)

Revision 1.1.1.1 (vendor branch), Thu Dec 15 22:23:24 2011 UTC (11 years, 3 months ago) by asau
Branch: TNF
CVS Tags: pkgsrc-base
Changes since 1.1: +0 -0 lines

Reimport Samba 3.0.37 from net/samba as net/samba30 as part of Samba packages rotation.

#!@SH@
#
# $NetBSD: adduser.sh,v 1.1.1.1 2011/12/15 22:23:24 asau Exp $
#
# This is an adduser script for NetBSD systems whose useradd(8) doesn't
# accept "$" in the username.  This script may be used for the
# "add machine script" in smb.conf.

awkprog="@AWK@"
catprog="@CAT@"
mktempprog="@MKTEMP@"
pwdmkdbprog="@PWD_MKDB@"
rmprog="@RM@"

progname=adduser

usage() {
	echo "Usage: $progname [-c comment] [-d homedir] [-n] [-r low..high]"
	echo "		[-s shell] -g gid name"
	exit 1
}

isnum() {
	case "$1" in
	0[0-9]*|*[!0-9]*)
		return 1
		;;
	esac
	return 0
}

doit=""
gid=""
minuid=1000
maxuid=60000
comment=""
homedir=""
shell=/sbin/nologin

while getopts c:d:g:nr:s: flag; do
	case $flag in
	c)	comment="${OPTARG}" ;;
	d)	homedir="${OPTARG}" ;;
	g)	gid="${OPTARG}" ;;
	n)	doit=":" ;;
	r)	minuid=${OPTARG%%..*}; maxuid=${OPTARG##*..} ;;
	s)	shell="${OPTARG}" ;;
	esac
done
shift `expr $OPTIND - 1`

if [ $# -lt 1 ]; then
	usage
fi

name="$1"
if [ -z "$gid" ]; then
	echo "$progname: \`-g gid' is a required option" 1>&2
	exit 1
fi
if ! isnum "$gid"; then
	echo "$progname: \`$gid' is not a valid gid" 1>&2
	exit 1
fi
if ! isnum "$minuid"; then
	echo "$progname: \`$minuid' is not a valid minimum uid" 1>&2
	exit 1
fi
if ! isnum "$maxuid"; then
	echo "$progname: \`$maxuid' is not a valid maximum uid" 1>&2
	exit 1
fi
if [ $minuid -gt $maxuid ]; then
	echo "$progname: \`$minuid..$maxuid' is not a valid range" 1>&2
	exit 1
fi
case "$comment" in
*:*)
	echo "$progname: \`$comment' is not a valid comment" 1>&2
	exit 1
	;;
esac
case "$homedir" in
*:*)
	echo "$progname: \`$homedir' is not a valid home directory" 1>&2
	exit 1
	;;
%*)
	# This is an unsubstituted variable (probably %H in smbd).
	# Silently change this to a proper default.
	#
	homedir="/nonexistent"
	;;
esac
case "$shell" in
*:*)
	echo "$progname: \`$shell' is not a valid shell" 1>&2
	exit 1
	;;
esac
case "$name" in
*:*)
	echo "$progname: \`$name' is not a valid username" 1>&2
	exit 1
	;;
esac

ptmp=`$mktempprog -q /etc/ptmp`
case "$ptmp" in
/etc/ptmp)
	;;
*)
	echo "$progname: can't create /etc/ptmp" 1>&2
	exit 1
	;;
esac

if [ ! -f /etc/master.passwd ]; then
	echo "$progname: /etc/master.passwd not found" 1>&2
	$rmprog -f $ptmp
	exit 1
fi

$catprog /etc/master.passwd >> $ptmp

uid=`									\
	$awkprog -v minuid=$minuid -v maxuid=maxuid '			\
		BEGIN { FS = ":" }					\
		{ seen_uids[$3] = 1 }					\
		END {							\
			uid = minuid;					\
			while (uid <= maxuid) {				\
				if (uid in seen_uids) {			\
					uid++;				\
					continue;			\
				}					\
				print uid;				\
				exit;					\
			}						\
			print -1;					\
		}' $ptmp						\
`
if [ $uid -lt 0 ]; then
	echo "$progname: no uid can be allocated in $minuid..$maxuid" 1>&2
	$rmprog -f $ptmp
	exit 1
fi

case "${name}" in
*$)	: ${comment:=${name%%[$]*} samba machine account} ;;
*)	: ${comment:=${name} samba user} ;;
esac
entry="${name}:*:${uid}:${gid}::0:0:${comment}:${homedir}:${shell}"

echo "$entry" >> $ptmp

$doit $pwdmkdbprog -p -u "${name}" $ptmp
rc=$?

$rmprog -f $ptmp
exit $rc