Menu

[r3313]: / trunk / etc / rc.d / userdb  Maximize  Restore  History

Download this file

93 lines (79 with data), 3.0 kB

#!/bin/sh
# Copyright (c) 2007-2008 Volker Theile (votdev@gmx.de)
# All rights reserved.

# PROVIDE: userdb
# BEFORE: CONFIG
# REQUIRE: SYSTEMINIT

. /etc/rc.subr
. /etc/configxml.subr

# Defaults
group=${group:-"/var/etc/group"}
passwd=${passwd:-"/var/etc/passwd"}
masterpasswd=${masterpasswd:-"/var/etc/master.passwd"}

echo "Generating user database(s)."

# Create the /var/etc/group file
/usr/local/bin/xml sel -t \
	-o "wheel:*:0:root" -n \
	-o "daemon:*:1:" -n \
	-o "kmem:*:2:" -n \
	-o "sys:*:3:" -n \
	-o "tty:*:4:" -n \
	-o "operator:*:5:root" -n \
	-o "bin:*:7:" -n \
	-o "staff:*:20:" -n \
	-o "man:*:9:" -n \
	-o "sshd:*:22:" -n \
	-o "guest:*:31:" -n \
	-o "ftp:*:50:" -n \
	-o "_pflogd:*:64:" -n \
	-o "_dhcp:*:65:" -n \
	-o "network:*:69:" -n \
	-o "www:*:80:" -n \
	-o "nogroup:*:65533:" -n \
	-o "nobody:*:65534:" -n \
	-o "admin:*:1000:" -n \
	-m "//access/group" \
		-v "concat(name,':*:',id,':')" -n \
	-b \
	 ${configxml_file} | /usr/local/bin/xml unesc > ${group}

# Clean /var/etc/passwd file
cat /dev/null > ${passwd}

# Create the /var/etc/master.passwd file
_systempasswd=`configxml_get "//system/password"`

echo "root:${_systempasswd}:0:0::0:0:Charlie &:/root:/bin/tcsh
toor:*:0:0::0:0:Bourne-again Superuser:/root:
daemon:*:1:1::0:0:Owner of many system processes:/root:/usr/sbin/nologin
operator:*:2:5::0:0:System &:/:/usr/sbin/nologin
bin:*:3:7::0:0:Binaries Commands and Source:/:/usr/sbin/nologin
tty:*:4:65533::0:0:Tty Sandbox:/:/usr/sbin/nologin
kmem:*:5:65533::0:0:KMem Sandbox:/:/usr/sbin/nologin
www:*:80:80::0:0:World Wide Web Owner:/nonexistent:/usr/sbin/nologin
nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/usr/sbin/nologin
ftp:*:21:50::0:0:FTP user:/mnt:/sbin/nologin
man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/usr/sbin/nologin
sshd:*:22:22::0:0:Secure Shell Daemon:/var/empty:/usr/sbin/nologin
_dhcp:*:65:65::0:0:dhcp programs:/var/empty:/usr/sbin/nologin" > ${masterpasswd}

# Generate the /var/etc/passwd, pwd.db and spwd.db files
/usr/sbin/pwd_mkdb -p -d /var/etc ${masterpasswd} > /dev/null 2>&1

# Iterate over all configured users
_index=`configxml_get_count "//access/user"`
while [ ${_index} -gt 0 ]
do
	_cmdarg=`/usr/local/bin/xml sel -t -m "//access/user[${_index}]" \
		-v "concat('-n ',login,' -u ',id,' -g ',primarygroup,' -c "',fullname,'"')" \
		-i "count(group) > 0" -o " -G " -b \
		-m "group" \
			-i "position() > 1" -o "," -b \
			-v "." \
		-b \
		-i "count(fullshell) > 0" -o " -s /bin/tcsh" -b \
		-i "count(fullshell) = 0" -o " -s /usr/local/bin/scponly" -b \
		-i "string-length(homedir) = 0" -o " -d /mnt" -b \
		-i "string-length(homedir) > 0" -v "concat(' -d ',homedir)" -b \
		-i "string-length(password) > 0" -o " -h 0" -b \
		${configxml_file} | /usr/local/bin/xml unesc`

	_userpasswd=`configxml_get "//access/user[${_index}]/password"`

	# Add user.
	eval "(/bin/echo '${_userpasswd}') | /usr/sbin/pw add user -q -V /var/etc ${_cmdarg}"

	_index=$(( ${_index} - 1 ))
done
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.