FreeNAS Code
This project has moved to github - see https://github.com/freenas
Brought to you by:
cochard,
mattolander
#!/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