Advertisement
Guest User

Untitled

a guest
Apr 2nd, 2016
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.05 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. METASPLOIT_BASEDIR=/opt/metasploit-framework
  4.  
  5. DB_CONF=$METASPLOIT_BASEDIR/config/database.yml
  6. DB_NAME=msf
  7. DB_USER=msf
  8. DB_PORT=5432
  9. PG_SERVICE=postgresql
  10.  
  11. pw_gen() {
  12. openssl rand -base64 32
  13. }
  14.  
  15. pg_cmd() {
  16. su - postgres -c "$*"
  17. }
  18.  
  19. start_db() {
  20. if ! service $PG_SERVICE status >/dev/null; then
  21. service $PG_SERVICE start
  22. fi
  23. }
  24.  
  25. stop_db() {
  26. if service $PG_SERVICE status >/dev/null; then
  27. service $PG_SERVICE stop
  28. fi
  29. }
  30.  
  31. db_exists() {
  32. if pg_cmd "psql -lqt" | cut -d \| -f 1 | grep -qw $1; then
  33. return 0
  34. fi
  35. return 1
  36. }
  37.  
  38. user_exists() {
  39. if echo "SELECT usename FROM pg_user;" | pg_cmd "psql -qt postgres" | grep -qw $1; then
  40. return 0
  41. fi
  42. return 1
  43. }
  44.  
  45. init_db() {
  46. start_db
  47. if [ -e $DB_CONF ]; then
  48. echo "A database appears to be already configured, skipping initialization"
  49. return
  50. fi
  51. DB_PASS=$(pw_gen)
  52. if user_exists $DB_USER; then
  53. echo "Resetting password of database user '$DB_USER'"
  54. printf "ALTER ROLE $DB_USER WITH PASSWORD '$DB_PASS';\n" | pg_cmd psql postgres >/dev/null
  55. else
  56. echo "Creating database user '$DB_USER'"
  57. printf "%s\n%s\n" "$DB_PASS" "$DB_PASS" | pg_cmd createuser -S -D -R -P $DB_USER >/dev/null
  58. fi
  59. echo "Creating databases '$DB_NAME' and '${DB_NAME}_test'"
  60. if ! db_exists $DB_NAME; then
  61. pg_cmd createdb $DB_NAME -O $DB_USER -T template0 -E UTF-8
  62. fi
  63. if ! db_exists ${DB_NAME}_test; then
  64. pg_cmd createdb ${DB_NAME}_test -O $DB_USER -T template0 -E UTF-8
  65. fi
  66. echo "Creating configuration file in $DB_CONF"
  67. cat > $DB_CONF <<-EOF
  68. development:
  69. adapter: postgresql
  70. database: $DB_NAME
  71. username: $DB_USER
  72. password: $DB_PASS
  73. host: localhost
  74. port: $DB_PORT
  75. pool: 5
  76. timeout: 5
  77.  
  78. production:
  79. adapter: postgresql
  80. database: $DB_NAME
  81. username: $DB_USER
  82. password: $DB_PASS
  83. host: localhost
  84. port: $DB_PORT
  85. pool: 5
  86. timeout: 5
  87.  
  88. test:
  89. adapter: postgresql
  90. database: ${DB_NAME}_test
  91. username: $DB_USER
  92. password: $DB_PASS
  93. host: localhost
  94. port: $DB_PORT
  95. pool: 5
  96. timeout: 5
  97. EOF
  98. echo "Creating initial database schema"
  99. cd $METASPLOIT_BASEDIR
  100. bundle exec rake db:migrate >/dev/null
  101. }
  102.  
  103. delete_db() {
  104. start_db
  105. if db_exists $DB_NAME; then
  106. pg_cmd dropdb $DB_NAME
  107. fi
  108. if db_exists ${DB_NAME}_test; then
  109. pg_cmd dropdb ${DB_NAME}_test
  110. fi
  111. if user_exists $DB_USER; then
  112. pg_cmd dropuser $DB_USER
  113. fi
  114. rm -f $DB_CONF
  115. }
  116.  
  117. reinit_db() {
  118. delete_db
  119. init_db
  120. }
  121.  
  122. usage() {
  123. PROG=`basename $0`
  124. echo
  125. echo "Manage a metasploit framework database"
  126. echo
  127. echo " $PROG init # initialize the database"
  128. echo " $PROG reinit # delete and reinitialize the database"
  129. echo " $PROG delete # delete database and stop using it"
  130. echo " $PROG start # start the database"
  131. echo " $PROG stop # stop the database"
  132. echo
  133. exit
  134. }
  135.  
  136. if [ "$#" -ne 1 ]; then
  137. usage
  138. fi
  139.  
  140. if [ $(id -u) -ne 0 ]; then
  141. echo "ERROR: $0: must be run as root"
  142. exit 1
  143. fi
  144.  
  145. case $1 in
  146. init) init_db ;;
  147. reinit) reinit_db ;;
  148. delete) delete_db ;;
  149. start) start_db ;;
  150. stop) stop_db ;;
  151. *) echo "Error: unrecognized action '${1}'"; usage ;;
  152. esac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement