#!/bin/sh # # Make passwd.db, group.db, etc. # VAR_DB=/var/db # Use make if available if [ -x /usr/bin/make -o -x /bin/make ]; then make -C $VAR_DB exit 0 fi # No make available, do it in hard way # passwd.db if [ -e /etc/passwd ]; then target=$VAR_DB/passwd.db echo -n "passwd... " awk 'BEGIN { FS=":"; OFS=":" } \ /^[ \t]*$$/ { next } \ /^[ \t]*#/ { next } \ /^[^#]/ { printf ".%s ", $$1; print; \ printf "=%s ", $$3; print }' /etc/passwd | \ makedb --quiet -o $target - echo "done." fi # group.db if [ -e /etc/group ]; then target=$VAR_DB/group.db echo -n "group... " awk 'BEGIN { FS=":"; OFS=":" } \ /^[ \t]*$$/ { next } \ /^[ \t]*#/ { next } \ /^[^#]/ { printf ".%s ", $$1; print; \ printf "=%s ", $$3; print; \ if ($$4 != "") { \ split($$4, grmems, ","); \ for (memidx in grmems) { \ mem=grmems[memidx]; \ if (members[mem] == "") \ members[mem]=$$3; \ else \ members[mem]=members[mem] "," $$3; \ } \ delete grmems; } } \ END { for (mem in members) \ printf ":%s %s %s\n", mem, mem, members[mem]; }' /etc/group | \ makedb --quiet -o $target - echo "done." fi # ethers.db if [ -e /etc/ethers ]; then target=$VAR_DB/ethers.db echo -n "ethers... " awk '/^[ \t]*$$/ { next } \ /^[ \t]*#/ { next } \ /^[^#]/ { printf ".%s ", $$1; print; \ printf "=%s ", $$2; print }' /etc/ethers | \ makedb --quiet -o $target - echo "done." fi # protocols.db if [ -e /etc/protocols ]; then target=$VAR_DB/protocols.db echo -n "protocols... " awk '/^[ \t]*$$/ { next } \ /^[ \t]*#/ { next } \ /^[^#]/ { printf ".%s ", $$1; print; \ printf "=%s ", $$2; print; \ for (i = 3; i <= NF && !($$i ~ /^#/); ++i) \ { printf ".%s ", $$i; print } }' /etc/protocols | \ makedb --quiet -o $target - echo "done." fi # rpc.db if [ -e /etc/rpc ]; then target=$VAR_DB/rpc.db echo -n "rpc... " awk '/^[ \t]*$$/ { next } \ /^[ \t]*#/ { next } \ /^[^#]/ { printf ".%s ", $$1; print; \ printf "=%s ", $$2; print; \ for (i = 3; i <= NF && !($$i ~ /^#/); ++i) \ { printf ".%s ", $$i; print } }' /etc/rpc | \ makedb --quiet -o $target - echo "done." fi # services.db if [ -e /etc/services ]; then target=$VAR_DB/services.db echo -n "services... " awk 'BEGIN { FS="[ \t/]+" } \ /^[ \t]*$$/ { next } \ /^[ \t]*#/ { next } \ /^[^#]/ { sub(/[ \t]*#.*$$/, "");\ printf ":%s/%s ", $$1, $$3; print; \ printf ":%s/ ", $$1; print; \ printf "=%s/%s ", $$2, $$3; print; \ printf "=%s/ ", $$2; print; \ for (i = 4; i <= NF && !($$i ~ /^#/); ++i) \ { printf ":%s/%s ", $$i, $$3; print; \ printf ":%s/ ", $$i; print } }' /etc/services | \ makedb --quiet -o $target - echo "done." fi # shadow.db if [ -e /etc/shadow ]; then target=$VAR_DB/shadow.db echo -n "shadow... " awk 'BEGIN { FS=":"; OFS=":" } \ /^[ \t]*$$/ { next } \ /^[ \t]*#/ { next } \ /^[^#]/ { printf ".%s ", $$1; print }' /etc/shadow | \ (umask 077 && makedb --quiet -o $target -) echo "done." if chgrp shadow $target 2>/dev/null; then chmod g+r $target else chown 0 $target; chgrp 0 $target; chmod 600 $target; echo echo "Warning: The shadow password database $target" echo "has been set to be readable only by root. You may want" echo "to make it readable by the \`shadow' group depending" echo "on your configuration." echo fi fi # gshadow.db if [ -e /etc/gshadow ]; then target=$VAR_DB/gshadow.db echo -n "gshadow... " awk 'BEGIN { FS=":"; OFS=":" } \ /^[ \t]*$$/ { next } \ /^[ \t]*#/ { next } \ /^[^#]/ { printf ".%s ", $$1; print }' /etc/gshadow | \ (umask 077 && makedb --quiet -o $target -) echo "done." if chgrp shadow $target 2>/dev/null; then chmod g+r $target else chown 0 $target; chgrp 0 $target; chmod 600 $target echo echo "Warning: The shadow group database $target" echo "has been set to be readable only by root. You may want" echo "to make it readable by the \`shadow' group depending" echo "on your configuration." echo fi fi # netgroup.db if [ -e /etc/netgroup ]; then target=$VAR_DB/netgroup.db echo -n "netgroup... " awk 'BEGIN { ini=1 } \ /^[ \t]*$$/ { next } \ /^[ \t]*#/ { next } \ /^[^#]/ { if (sub(/[ \t]*\\$$/, " ") == 0) end="\n"; \ else end=""; \ gsub(/[ \t]+/, " "); \ sub(/^[ \t]*/, ""); \ if (ini == 0) printf "%s%s", $$0, end; \ else printf ".%s %s%s", $$1, $$0, end; \ ini=end == "" ? 0 : 1; } \ END { if (ini==0) printf "\n" }' /etc/netgroup | \ makedb --quiet -o $target echo "done." fi