blob: 7d51a673521887d9c759ec570b100f94abc28ef9 [file] [log] [blame]
#!/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