v-add-dns-domain 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. #!/bin/bash
  2. # info: add dns domain
  3. # options: USER DOMAIN IP [NS1] [NS2] [NS3] [..] [NS8] [RESTART]
  4. #
  5. # The function adds DNS zone with records defined in the template. If the exp
  6. # argument isn't stated, the expiration date value will be set to next year.
  7. # The soa argument is responsible for the relevant record. By default the first
  8. # user's NS server is used. TTL is set as common for the zone and for all of
  9. # its records with a default value of 14400 seconds.
  10. #----------------------------------------------------------#
  11. # Variable&Function #
  12. #----------------------------------------------------------#
  13. # Argument definition
  14. user=$1
  15. domain=$(idn -t --quiet -u "$2" )
  16. domain=$(echo $domain | sed -e 's/\.*$//g' -e 's/^\.*//g')
  17. if [[ "$domain" =~ [[:upper:]] ]]; then
  18. domain=$(echo "$domain" |tr '[:upper:]' '[:lower:]')
  19. fi
  20. domain_idn="$domain"
  21. if [[ "$domain" = *[![:ascii:]]* ]]; then
  22. domain_idn=$(idn -t --quiet -a $domain)
  23. fi
  24. ip=$3
  25. ns1=$4
  26. ns2=$5
  27. ns3=$6
  28. ns4=$7
  29. ns5=$8
  30. ns6=$9
  31. ns7=${10}
  32. ns8=${11}
  33. restart=${12}
  34. # Includes
  35. source $VESTA/func/main.sh
  36. source $VESTA/func/domain.sh
  37. source $VESTA/conf/vesta.conf
  38. #----------------------------------------------------------#
  39. # Verifications #
  40. #----------------------------------------------------------#
  41. check_args '3' "$#" 'USER DOMAIN IP [NS1] [NS2] [NS3] [..] [NS8] [RESTART]'
  42. is_format_valid 'user' 'domain' 'ip'
  43. is_system_enabled "$DNS_SYSTEM" 'DNS_SYSTEM'
  44. is_object_valid 'user' 'USER' "$user"
  45. is_object_unsuspended 'user' 'USER' "$user"
  46. is_domain_new 'dns' "$domain"
  47. is_package_full 'DNS_DOMAINS'
  48. template=$(get_user_value '$DNS_TEMPLATE')
  49. is_dns_template_valid $template
  50. if [ ! -z "$ns1" ]; then
  51. ns1=$(echo $4 | sed -e 's/\.*$//g' -e 's/^\.*//g')
  52. is_format_valid 'ns1'
  53. fi
  54. if [ ! -z "$ns2" ]; then
  55. ns2=$(echo $5 | sed -e 's/\.*$//g' -e 's/^\.*//g')
  56. is_format_valid 'ns2'
  57. fi
  58. if [ ! -z "$ns3" ]; then
  59. ns3=$(echo $6 | sed -e 's/\.*$//g' -e 's/^\.*//g')
  60. is_format_valid 'ns3'
  61. fi
  62. if [ ! -z "$ns4" ]; then
  63. ns4=$(echo $7 | sed -e 's/\.*$//g' -e 's/^\.*//g')
  64. is_format_valid 'ns4'
  65. fi
  66. if [ ! -z "$ns5" ]; then
  67. ns5=$(echo $8 | sed -e 's/\.*$//g' -e 's/^\.*//g')
  68. is_format_valid 'ns5'
  69. fi
  70. if [ ! -z "$ns6" ]; then
  71. ns6=$(echo $9 | sed -e 's/\.*$//g' -e 's/^\.*//g')
  72. is_format_valid 'ns6'
  73. fi
  74. if [ ! -z "$ns7" ]; then
  75. ns7=$(echo ${10} | sed -e 's/\.*$//g' -e 's/^\.*//g')
  76. is_format_valid 'ns7'
  77. fi
  78. if [ ! -z "$ns8" ]; then
  79. ns8=$(echo ${11} | sed -e 's/\.*$//g' -e 's/^\.*//g')
  80. is_format_valid 'ns8'
  81. fi
  82. #----------------------------------------------------------#
  83. # Action #
  84. #----------------------------------------------------------#
  85. # Defining NS variables
  86. if [ -z $ns2 ]; then
  87. i=1
  88. ns=$(get_user_value '$NS')
  89. for nameserver in ${ns//,/ };do
  90. eval ns$i=$nameserver
  91. (( ++i))
  92. done
  93. fi
  94. soa="$ns1"
  95. exp=$(date +%F -d "+ 1 year")
  96. serial=$(date +'%Y%m%d01')
  97. ttl=14400
  98. # Reading template
  99. template_data=$(cat $DNSTPL/$template.tpl)
  100. # Deleting unused nameservers
  101. if [ -z "$ns3" ]; then
  102. template_data=$(echo "$template_data" |grep -v %ns3%)
  103. fi
  104. if [ -z "$ns4" ]; then
  105. template_data=$(echo "$template_data" |grep -v %ns4%)
  106. fi
  107. if [ -z "$ns5" ]; then
  108. template_data=$(echo "$template_data" |grep -v %ns5%)
  109. fi
  110. if [ -z "$ns6" ]; then
  111. template_data=$(echo "$template_data" |grep -v %ns6%)
  112. fi
  113. if [ -z "$ns7" ]; then
  114. template_data=$(echo "$template_data" |grep -v %ns7%)
  115. fi
  116. if [ -z "$ns8" ]; then
  117. template_data=$(echo "$template_data" |grep -v %ns8%)
  118. fi
  119. # Generating timestamp
  120. time_n_date=$(date +'%T %F')
  121. time=$(echo "$time_n_date" |cut -f 1 -d \ )
  122. date=$(echo "$time_n_date" |cut -f 2 -d \ )
  123. # Adding dns zone to the user config
  124. echo "$template_data" |\
  125. sed -e "s/%ip%/$ip/g" \
  126. -e "s/%domain_idn%/$domain_idn/g" \
  127. -e "s/%domain%/$domain/g" \
  128. -e "s/%ns1%/$ns1/g" \
  129. -e "s/%ns2%/$ns2/g" \
  130. -e "s/%ns3%/$ns3/g" \
  131. -e "s/%ns4%/$ns4/g" \
  132. -e "s/%ns5%/$ns5/g" \
  133. -e "s/%ns6%/$ns6/g" \
  134. -e "s/%ns7%/$ns7/g" \
  135. -e "s/%ns8%/$ns8/g" \
  136. -e "s/%time%/$time/g" \
  137. -e "s/%date%/$date/g" > $USER_DATA/dns/$domain.conf
  138. chmod 660 $USER_DATA/dns/$domain.conf
  139. records="$(wc -l $USER_DATA/dns/$domain.conf |cut -f 1 -d ' ')"
  140. # Adding dns.conf record
  141. dns_rec="DOMAIN='$domain' IP='$ip' TPL='$template' TTL='$ttl' EXP='$exp'"
  142. dns_rec="$dns_rec SOA='$soa' SERIAL='$serial' SRC='' RECORDS='$records'"
  143. dns_rec="$dns_rec SUSPENDED='no' TIME='$time' DATE='$date'"
  144. echo "$dns_rec" >> $USER_DATA/dns.conf
  145. chmod 660 $USER_DATA/dns.conf
  146. # Creating system configs
  147. if [[ "$DNS_SYSTEM" =~ named|bind ]]; then
  148. if [ -e '/etc/named.conf' ]; then
  149. dns_conf='/etc/named.conf'
  150. dns_group='named'
  151. else
  152. dns_conf='/etc/bind/named.conf'
  153. dns_group='bind'
  154. fi
  155. # Adding zone in named.conf
  156. named="zone \"$domain_idn\" {type master; file"
  157. named="$named \"$HOMEDIR/$user/conf/dns/$domain.db\";};"
  158. echo "$named" >> $dns_conf
  159. # Updating domain dns zone
  160. update_domain_zone
  161. # Changing permissions
  162. chmod 640 $HOMEDIR/$user/conf/dns/$domain.db
  163. chown root:$dns_group $HOMEDIR/$user/conf/dns/$domain.db
  164. fi
  165. # Updating dns-cluster queue
  166. if [ ! -z "$DNS_CLUSTER" ]; then
  167. cmd="$BIN/v-add-remote-dns-domain $user $domain yes"
  168. echo "$cmd" >> $VESTA/data/queue/dns-cluster.pipe
  169. fi
  170. #----------------------------------------------------------#
  171. # Vesta #
  172. #----------------------------------------------------------#
  173. # Increasing domain value
  174. increase_user_value "$user" '$U_DNS_DOMAINS'
  175. increase_user_value "$user" '$U_DNS_RECORDS' "$records"
  176. # Restart named
  177. if [ "$restart" != 'no' ]; then
  178. $BIN/v-restart-dns
  179. check_result $? "DNS restart failed"
  180. fi
  181. # Logging
  182. log_history "added dns domain $domain"
  183. log_event "$OK" "$ARGUMENTS"
  184. exit