makedbs.sh 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. #!/bin/sh
  2. #
  3. # Make passwd.db, group.db, etc.
  4. #
  5. VAR_DB=/var/db
  6. # Use make if available
  7. if [ -x /usr/bin/make -o -x /bin/make ]; then
  8. make -C $VAR_DB
  9. exit 0
  10. fi
  11. # No make available, do it in hard way
  12. # passwd.db
  13. if [ -e /etc/passwd ]; then
  14. target=$VAR_DB/passwd.db
  15. echo -n "passwd... "
  16. awk 'BEGIN { FS=":"; OFS=":" } \
  17. /^[ \t]*$$/ { next } \
  18. /^[ \t]*#/ { next } \
  19. /^[^#]/ { printf ".%s ", $$1; print; \
  20. printf "=%s ", $$3; print }' /etc/passwd | \
  21. makedb --quiet -o $target -
  22. echo "done."
  23. fi
  24. # group.db
  25. if [ -e /etc/group ]; then
  26. target=$VAR_DB/group.db
  27. echo -n "group... "
  28. awk 'BEGIN { FS=":"; OFS=":" } \
  29. /^[ \t]*$$/ { next } \
  30. /^[ \t]*#/ { next } \
  31. /^[^#]/ { printf ".%s ", $$1; print; \
  32. printf "=%s ", $$3; print; \
  33. if ($$4 != "") { \
  34. split($$4, grmems, ","); \
  35. for (memidx in grmems) { \
  36. mem=grmems[memidx]; \
  37. if (members[mem] == "") \
  38. members[mem]=$$3; \
  39. else \
  40. members[mem]=members[mem] "," $$3; \
  41. } \
  42. delete grmems; } } \
  43. END { for (mem in members) \
  44. printf ":%s %s %s\n", mem, mem, members[mem]; }' /etc/group | \
  45. makedb --quiet -o $target -
  46. echo "done."
  47. fi
  48. # ethers.db
  49. if [ -e /etc/ethers ]; then
  50. target=$VAR_DB/ethers.db
  51. echo -n "ethers... "
  52. awk '/^[ \t]*$$/ { next } \
  53. /^[ \t]*#/ { next } \
  54. /^[^#]/ { printf ".%s ", $$1; print; \
  55. printf "=%s ", $$2; print }' /etc/ethers | \
  56. makedb --quiet -o $target -
  57. echo "done."
  58. fi
  59. # protocols.db
  60. if [ -e /etc/protocols ]; then
  61. target=$VAR_DB/protocols.db
  62. echo -n "protocols... "
  63. awk '/^[ \t]*$$/ { next } \
  64. /^[ \t]*#/ { next } \
  65. /^[^#]/ { printf ".%s ", $$1; print; \
  66. printf "=%s ", $$2; print; \
  67. for (i = 3; i <= NF && !($$i ~ /^#/); ++i) \
  68. { printf ".%s ", $$i; print } }' /etc/protocols | \
  69. makedb --quiet -o $target -
  70. echo "done."
  71. fi
  72. # rpc.db
  73. if [ -e /etc/rpc ]; then
  74. target=$VAR_DB/rpc.db
  75. echo -n "rpc... "
  76. awk '/^[ \t]*$$/ { next } \
  77. /^[ \t]*#/ { next } \
  78. /^[^#]/ { printf ".%s ", $$1; print; \
  79. printf "=%s ", $$2; print; \
  80. for (i = 3; i <= NF && !($$i ~ /^#/); ++i) \
  81. { printf ".%s ", $$i; print } }' /etc/rpc | \
  82. makedb --quiet -o $target -
  83. echo "done."
  84. fi
  85. # services.db
  86. if [ -e /etc/services ]; then
  87. target=$VAR_DB/services.db
  88. echo -n "services... "
  89. awk 'BEGIN { FS="[ \t/]+" } \
  90. /^[ \t]*$$/ { next } \
  91. /^[ \t]*#/ { next } \
  92. /^[^#]/ { sub(/[ \t]*#.*$$/, "");\
  93. printf ":%s/%s ", $$1, $$3; print; \
  94. printf ":%s/ ", $$1; print; \
  95. printf "=%s/%s ", $$2, $$3; print; \
  96. printf "=%s/ ", $$2; print; \
  97. for (i = 4; i <= NF && !($$i ~ /^#/); ++i) \
  98. { printf ":%s/%s ", $$i, $$3; print; \
  99. printf ":%s/ ", $$i; print } }' /etc/services | \
  100. makedb --quiet -o $target -
  101. echo "done."
  102. fi
  103. # shadow.db
  104. if [ -e /etc/shadow ]; then
  105. target=$VAR_DB/shadow.db
  106. echo -n "shadow... "
  107. awk 'BEGIN { FS=":"; OFS=":" } \
  108. /^[ \t]*$$/ { next } \
  109. /^[ \t]*#/ { next } \
  110. /^[^#]/ { printf ".%s ", $$1; print }' /etc/shadow | \
  111. (umask 077 && makedb --quiet -o $target -)
  112. echo "done."
  113. if chgrp shadow $target 2>/dev/null; then
  114. chmod g+r $target
  115. else
  116. chown 0 $target; chgrp 0 $target; chmod 600 $target;
  117. echo
  118. echo "Warning: The shadow password database $target"
  119. echo "has been set to be readable only by root. You may want"
  120. echo "to make it readable by the \`shadow' group depending"
  121. echo "on your configuration."
  122. echo
  123. fi
  124. fi
  125. # gshadow.db
  126. if [ -e /etc/gshadow ]; then
  127. target=$VAR_DB/gshadow.db
  128. echo -n "gshadow... "
  129. awk 'BEGIN { FS=":"; OFS=":" } \
  130. /^[ \t]*$$/ { next } \
  131. /^[ \t]*#/ { next } \
  132. /^[^#]/ { printf ".%s ", $$1; print }' /etc/gshadow | \
  133. (umask 077 && makedb --quiet -o $target -)
  134. echo "done."
  135. if chgrp shadow $target 2>/dev/null; then
  136. chmod g+r $target
  137. else
  138. chown 0 $target; chgrp 0 $target; chmod 600 $target
  139. echo
  140. echo "Warning: The shadow group database $target"
  141. echo "has been set to be readable only by root. You may want"
  142. echo "to make it readable by the \`shadow' group depending"
  143. echo "on your configuration."
  144. echo
  145. fi
  146. fi
  147. # netgroup.db
  148. if [ -e /etc/netgroup ]; then
  149. target=$VAR_DB/netgroup.db
  150. echo -n "netgroup... "
  151. awk 'BEGIN { ini=1 } \
  152. /^[ \t]*$$/ { next } \
  153. /^[ \t]*#/ { next } \
  154. /^[^#]/ { if (sub(/[ \t]*\\$$/, " ") == 0) end="\n"; \
  155. else end=""; \
  156. gsub(/[ \t]+/, " "); \
  157. sub(/^[ \t]*/, ""); \
  158. if (ini == 0) printf "%s%s", $$0, end; \
  159. else printf ".%s %s%s", $$1, $$0, end; \
  160. ini=end == "" ? 0 : 1; } \
  161. END { if (ini==0) printf "\n" }' /etc/netgroup | \
  162. makedb --quiet -o $target
  163. echo "done."
  164. fi