Advertisement
GoodiesHQ

msfdb

Aug 12th, 2015
516
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.22 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. METASPLOIT_BASEDIR=/usr/share/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 -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