powerdnssetup 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #!/bin/sh
  2. case "$1" in
  3. gmysql)
  4. dbtype=MySQL
  5. ;;
  6. gpgsql)
  7. dbtype=PostgreSQL
  8. ;;
  9. *)
  10. echo "usage: $0 [ gmysql | gpgsql ]"
  11. exit 1
  12. ;;
  13. esac
  14. while [ ".$db" = . ]; do
  15. echo "Please enter the name of the database to be created:"
  16. read db
  17. done
  18. while [ ".$root" = . ]; do
  19. echo "Please enter the name of the database administrator account:"
  20. read root
  21. done
  22. while [ ".$pdnsadm" = . ]; do
  23. echo "Please enter the name of the DNS administrator account:"
  24. read pdnsadm
  25. done
  26. while [ ".$pdns" = . ]; do
  27. echo "Please enter the name of the DNS user account:"
  28. read pdns
  29. done
  30. echo ""
  31. echo "The $dbtype database '$db' will be created by '$root'."
  32. echo "Access is granted to the DNS administrator '$pdnsadm'"
  33. echo "and the DNS user '$pdns'."
  34. echo ""
  35. case "$1" in
  36. gmysql)
  37. echo "Please log in as the $dbtype database administrator ($root)"
  38. mysql -u$root -p mysql <<EOFEOF
  39. DROP DATABASE $db;
  40. CREATE DATABASE $db;
  41. GRANT ALL ON $db TO $pdnsadm WITH GRANT OPTION
  42. EOFEOF
  43. if [ $? -gt 0 ]; then exit 1; fi
  44. echo "The database has been created"
  45. echo ""
  46. echo "Please log in as the $dbtype DNS administrator ($pdnsadm)"
  47. mysql -u$pdnsadm -p $db <<EOFEOF
  48. CREATE TABLE domains (
  49. id INT auto_increment,
  50. name VARCHAR(255) NOT NULL,
  51. master VARCHAR(20) DEFAULT NULL,
  52. last_check INT DEFAULT NULL,
  53. type VARCHAR(6) NOT NULL,
  54. notified_serial INT DEFAULT NULL,
  55. account VARCHAR(40) DEFAULT NULL,
  56. primary key (id)
  57. )type=InnoDB;
  58. CREATE UNIQUE INDEX name_index ON domains(name);
  59. CREATE TABLE records (
  60. id INT auto_increment,
  61. domain_id INT DEFAULT NULL,
  62. name VARCHAR(255) DEFAULT NULL,
  63. type VARCHAR(6) DEFAULT NULL,
  64. content VARCHAR(255) DEFAULT NULL,
  65. ttl INT DEFAULT NULL,
  66. prio INT DEFAULT NULL,
  67. change_date INT DEFAULT NULL,
  68. primary key(id)
  69. )type=InnoDB;
  70. CREATE INDEX rec_name_index ON records(name);
  71. CREATE INDEX nametype_index ON records(name,type);
  72. CREATE INDEX domain_id ON records(domain_id);
  73. CREATE TABLE supermasters (
  74. ip VARCHAR(25) NOT NULL,
  75. nameserver VARCHAR(255) NOT NULL,
  76. account VARCHAR(40) DEFAULT NULL
  77. );
  78. GRANT SELECT ON supermasters TO $pdns;
  79. GRANT ALL ON domains TO $pdns;
  80. EOFEOF
  81. if [ $? -gt 0 ]; then exit 1; fi
  82. echo "The database has been populated"
  83. echo ""
  84. ;;
  85. gpgsql)
  86. echo "Please log in as the $dbtype database administrator ($root)"
  87. psql -U $root $db <<EOFEOF
  88. DROP DATABASE $db;
  89. CREATE DATABASE $db;
  90. GRANT ALL ON $db TO $pdnsadm WITH GRANT OPTION;
  91. EOFEOF
  92. if [ $? -gt 0 ]; then exit 1; fi
  93. echo "The database has been created"
  94. echo ""
  95. echo "Please log in as the $dbtype DNS administrator ($pdnsadm)"
  96. psql -U $pdnsadm $db <<EOFEOF
  97. CREATE TABLE domains (
  98. id SERIAL PRIMARY KEY,
  99. name VARCHAR(255) NOT NULL,
  100. master VARCHAR(20) DEFAULT NULL,
  101. last_check INT DEFAULT NULL,
  102. type VARCHAR(6) NOT NULL,
  103. notified_serial INT DEFAULT NULL,
  104. account VARCHAR(40) DEFAULT NULL
  105. );
  106. CREATE UNIQUE INDEX name_index ON domains(name);
  107. CREATE TABLE records (
  108. id SERIAL PRIMARY KEY,
  109. domain_id INT DEFAULT NULL,
  110. name VARCHAR(255) DEFAULT NULL,
  111. type VARCHAR(6) DEFAULT NULL,
  112. content VARCHAR(255) DEFAULT NULL,
  113. ttl INT DEFAULT NULL,
  114. prio INT DEFAULT NULL,
  115. change_date INT DEFAULT NULL,
  116. CONSTRAINT domain_exists
  117. FOREIGN KEY(domain_id) REFERENCES domains(id)
  118. ON DELETE CASCADE
  119. );
  120. CREATE INDEX rec_name_index ON records(name);
  121. CREATE INDEX nametype_index ON records(name,type);
  122. CREATE INDEX domain_id ON records(domain_id);
  123. CREATE TABLE supermasters (
  124. ip VARCHAR(25) NOT NULL,
  125. nameserver VARCHAR(255) NOT NULL,
  126. account VARCHAR(40) DEFAULT NULL
  127. );
  128. GRANT SELECT ON supermasters TO $pdns;
  129. GRANT ALL ON domains TO $pdns;
  130. GRANT ALL ON domains_id_seq TO $pdns;
  131. GRANT ALL ON records TO $pdns;
  132. GRANT ALL ON records_id_seq TO $pdns;
  133. EOFEOF
  134. if [ $? -gt 0 ]; then exit 1; fi
  135. echo "The database has been populated"
  136. echo ""
  137. ;;
  138. esac