| #!/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 |