diff --git a/bin/v-add-dns-domain b/bin/v-add-dns-domain index 41038d61..5f18daa1 100755 --- a/bin/v-add-dns-domain +++ b/bin/v-add-dns-domain @@ -81,6 +81,7 @@ if [ -z $ns2 ]; then fi soa="$ns1" exp=$(date +%F -d "+ 1 year") +serial=$(date +'%Y%m%d01') ttl=14400 # Reading template @@ -111,8 +112,8 @@ records="$(wc -l $USER_DATA/dns/$domain.conf |cut -f 1 -d ' ')" # Adding dns.conf record dns_rec="DOMAIN='$domain' IP='$ip' TPL='$template' TTL='$ttl' EXP='$exp'" -dns_rec="$dns_rec SOA='$soa' RECORDS='$records' SUSPENDED='no' TIME='$TIME'" -dns_rec="$dns_rec DATE='$DATE'" +dns_rec="$dns_rec SOA='$soa' SERIAL='$serial' SRC='' RECORDS='$records'" +dns_rec="$dns_rec SUSPENDED='no' TIME='$TIME' DATE='$DATE'" echo "$dns_rec" >> $USER_DATA/dns.conf chmod 660 $USER_DATA/dns.conf diff --git a/bin/v-add-dns-record b/bin/v-add-dns-record index f145007d..928b5c48 100755 --- a/bin/v-add-dns-record +++ b/bin/v-add-dns-record @@ -82,6 +82,7 @@ sort_dns_records # Updating zone if [[ "$DNS_SYSTEM" =~ named|bind ]]; then + update_domain_serial update_domain_zone fi diff --git a/bin/v-add-remote-dns-domain b/bin/v-add-remote-dns-domain index 1b5609b4..e6a34048 100755 --- a/bin/v-add-remote-dns-domain +++ b/bin/v-add-remote-dns-domain @@ -111,7 +111,7 @@ for cluster_str in $search_str; do fi # Rebuild dns zone - $send_cmd v-rebuild-dns-domain $DNS_USER $domain 'scheduled' + $send_cmd v-rebuild-dns-domain $DNS_USER $domain 'scheduled' 'no' if [ $? -ne 0 ]; then echo "Error: $TYPE connection to $HOST failed" log_event "$E_CONNECT $EVENT" diff --git a/bin/v-add-remote-dns-record b/bin/v-add-remote-dns-record index ca9aaa0e..ecd81681 100755 --- a/bin/v-add-remote-dns-record +++ b/bin/v-add-remote-dns-record @@ -80,13 +80,16 @@ for cluster_str in $(grep "SUSPENDED='no'" $VESTA/conf/dns-cluster.conf); do DNS_CLUSTER_IGNORE='dns-cluster' fi + # Sync SOA + $send_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME 'domain' 'no' + # Sync record str=$(grep "ID='$id'" $USER_DATA/dns/$domain.conf) str=$(echo "$str" | sed 's/"/\\"/g') $send_cmd v-insert-dns-record $DNS_USER $domain "$str" 'no' if [ $? -eq 0 ]; then # Rebuild dns zone - $send_cmd v-rebuild-dns-domain $DNS_USER $domain 'scheduled' + $send_cmd v-rebuild-dns-domain $DNS_USER $domain 'scheduled' 'no' if [ $? -ne 0 ]; then echo "Error: $TYPE connection to $HOST failed (rebuild)" log_event "$E_CONNECT $EVENT" diff --git a/bin/v-change-dns-domain-ip b/bin/v-change-dns-domain-ip index f587a474..e2c9c24c 100755 --- a/bin/v-change-dns-domain-ip +++ b/bin/v-change-dns-domain-ip @@ -51,6 +51,7 @@ sed -i "s/$old/$ip/g" $USER_DATA/dns/$domain.conf # Updating zone if [[ "$DNS_SYSTEM" =~ named|bind ]]; then + update_domain_serial update_domain_zone fi @@ -59,7 +60,7 @@ if [ ! -z "$DNS_CLUSTER" ]; then # Check for first sync dlock=$(grep "domain $user $domain" $VESTA/data/queue/dns-cluster.pipe) if [ -z "$dlock" ]; then - cmd="$BIN/v-add-remote-dns-domain $user $domain domain" + cmd="$BIN/v-add-remote-dns-domain $user $domain domain yes" echo "$cmd" >> $VESTA/data/queue/dns-cluster.pipe fi fi diff --git a/bin/v-change-dns-domain-soa b/bin/v-change-dns-domain-soa index 0e454e68..9a819f20 100755 --- a/bin/v-change-dns-domain-soa +++ b/bin/v-change-dns-domain-soa @@ -45,6 +45,7 @@ update_object_value 'dns' 'DOMAIN' "$domain" '$SOA' "$soa" # Updating zone if [[ "$DNS_SYSTEM" =~ named|bind ]]; then + update_domain_serial update_domain_zone fi diff --git a/bin/v-change-dns-domain-tpl b/bin/v-change-dns-domain-tpl index 255c0a36..52e149e9 100755 --- a/bin/v-change-dns-domain-tpl +++ b/bin/v-change-dns-domain-tpl @@ -67,6 +67,7 @@ records="$(wc -l $USER_DATA/dns/$domain.conf |cut -f 1 -d ' ')" # Updating zone if [[ "$DNS_SYSTEM" =~ named|bind ]]; then + update_domain_serial update_domain_zone fi diff --git a/bin/v-change-dns-domain-ttl b/bin/v-change-dns-domain-ttl index 3f1bf5ff..109b243e 100755 --- a/bin/v-change-dns-domain-ttl +++ b/bin/v-change-dns-domain-ttl @@ -44,6 +44,7 @@ update_object_value 'dns' 'DOMAIN' "$domain" '$TTL' "$ttl" # Updating zone if [[ "$DNS_SYSTEM" =~ named|bind ]]; then + update_domain_serial update_domain_zone fi diff --git a/bin/v-change-dns-record b/bin/v-change-dns-record index 5fe16a07..6614f2e0 100755 --- a/bin/v-change-dns-record +++ b/bin/v-change-dns-record @@ -77,6 +77,7 @@ sort_dns_records # Updating zone if [[ "$DNS_SYSTEM" =~ named|bind ]]; then + update_domain_serial update_domain_zone fi diff --git a/bin/v-change-dns-record-id b/bin/v-change-dns-record-id index c9e128bd..4324524a 100755 --- a/bin/v-change-dns-record-id +++ b/bin/v-change-dns-record-id @@ -51,6 +51,7 @@ sort_dns_records # Updating zone if [[ "$DNS_SYSTEM" =~ named|bind ]]; then + update_domain_serial update_domain_zone fi diff --git a/bin/v-change-remote-dns-domain-soa b/bin/v-change-remote-dns-domain-soa index 596954a7..99734e75 100755 --- a/bin/v-change-remote-dns-domain-soa +++ b/bin/v-change-remote-dns-domain-soa @@ -85,7 +85,7 @@ for cluster_str in $(grep "SUSPENDED='no'" $VESTA/conf/dns-cluster.conf); do $send_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME 'no' # Rebuild dns zone - $send_cmd v-rebuild-dns-domain $DNS_USER $domain 'scheduled' + $send_cmd v-rebuild-dns-domain $DNS_USER $domain 'scheduled' 'no' if [ $? -ne 0 ]; then echo "Error: $TYPE connection to $HOST failed (rebuild)" log_event "$E_CONNECT $EVENT" diff --git a/bin/v-change-remote-dns-domain-ttl b/bin/v-change-remote-dns-domain-ttl index 390ac9ba..25ff0e6a 100755 --- a/bin/v-change-remote-dns-domain-ttl +++ b/bin/v-change-remote-dns-domain-ttl @@ -100,7 +100,7 @@ for cluster_str in $(grep "SUSPENDED='no'" $VESTA/conf/dns-cluster.conf); do $send_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME 'no' # Rebuild dns zone - $send_cmd v-rebuild-dns-domain $DNS_USER $domain 'scheduled' + $send_cmd v-rebuild-dns-domain $DNS_USER $domain 'scheduled' 'no' if [ $? -ne 0 ]; then echo "Error: $TYPE connection to $HOST failed (rebuild)" log_event "$E_CONNECT $EVENT" diff --git a/bin/v-delete-dns-record b/bin/v-delete-dns-record index d5749d19..6f8969b4 100755 --- a/bin/v-delete-dns-record +++ b/bin/v-delete-dns-record @@ -45,6 +45,7 @@ sed -i "/^ID='$id'/d" $USER_DATA/dns/$domain.conf # Updating zone if [[ "$DNS_SYSTEM" =~ named|bind ]]; then + update_domain_serial update_domain_zone fi diff --git a/bin/v-insert-dns-domain b/bin/v-insert-dns-domain index eb246f5d..be98ac3f 100755 --- a/bin/v-insert-dns-domain +++ b/bin/v-insert-dns-domain @@ -57,7 +57,7 @@ fi # Prepare values for the insert dns_rec="DOMAIN='$DOMAIN' IP='$IP' TPL='$TPL' TTL='$TTL' EXP='$EXP'" -dns_rec="$dns_rec SOA='$SOA' SRC='$src' RECORDS='$RECORDS'" +dns_rec="$dns_rec SOA='$SOA' SERIAL="$SERIAL" SRC='$src' RECORDS='$RECORDS'" dns_rec="$dns_rec SUSPENDED='$SUSPENDED' TIME='$TIME' DATE='$DATE'" echo "$dns_rec" >> $USER_DATA/dns.conf diff --git a/bin/v-list-dns-domain b/bin/v-list-dns-domain index 8f24a37c..5c6943aa 100755 --- a/bin/v-list-dns-domain +++ b/bin/v-list-dns-domain @@ -87,7 +87,8 @@ is_object_valid 'dns' 'DOMAIN' "$domain" # Defining config and fields to select conf=$USER_DATA/dns.conf -fields='$DOMAIN $IP $TPL $TTL $EXP $SOA $RECORDS $SUSPENDED $TIME $DATE' +fields='$DOMAIN $IP $TPL $TTL $EXP $SOA $SERIAL $SRC $RECORDS + $SUSPENDED $TIME $DATE' # Listing domains case $format in diff --git a/bin/v-list-dns-domains b/bin/v-list-dns-domains index e2645289..b5f2e5ca 100755 --- a/bin/v-list-dns-domains +++ b/bin/v-list-dns-domains @@ -32,7 +32,8 @@ is_object_valid 'user' 'USER' "$user" # Defining config and fields conf=$USER_DATA/dns.conf -fields='$DOMAIN $IP $TPL $TTL $EXP $SOA $SRC $RECORDS $SUSPENDED $TIME $DATE' +fields='$DOMAIN $IP $TPL $TTL $EXP $SOA $SERIAL $SRC $RECORDS + $SUSPENDED $TIME $DATE' # Listing domains case $format in diff --git a/bin/v-rebuild-dns-domain b/bin/v-rebuild-dns-domain index 7fdb0bd3..732e14ed 100755 --- a/bin/v-rebuild-dns-domain +++ b/bin/v-rebuild-dns-domain @@ -1,6 +1,6 @@ #!/bin/bash # info: rebuild dns domain -# options: USER DOMAIN [RESTART] +# options: USER DOMAIN [RESTART] [UPDATE_SERIAL] # # The function rebuilds DNS configuration files. @@ -13,6 +13,7 @@ user=$1 domain=$2 restart=$3 +update_serial=$4 # Includes source $VESTA/func/main.sh @@ -25,7 +26,7 @@ source $VESTA/conf/vesta.conf # Verifications # #----------------------------------------------------------# -check_args '2' "$#" 'USER DOMAIN [RESTART]' +check_args '2' "$#" 'USER DOMAIN [RESTART] [UPDATE_SERIAL]' validate_format 'user' 'domain' is_system_enabled "$DNS_SYSTEM" 'DNS_SYSTEM' is_object_valid 'user' 'USER' "$user" @@ -59,10 +60,15 @@ if [ -e '/etc/bind/named.conf' ]; then dns_conf='/etc/bind/named.conf' fi -# Remove old user's zone +# Deleting old user's zone sed -i "/\/$user\/conf\/dns\/$domain/d" $dns_conf -# Starting loop +# Updating zone serial +if [ "$update_serial" != 'no' ]; then + update_domain_serial +fi + +# Rebuiling zone config rebuild_dns_domain_conf diff --git a/bin/v-rebuild-dns-domains b/bin/v-rebuild-dns-domains index 971a99f4..b2c4aba3 100755 --- a/bin/v-rebuild-dns-domains +++ b/bin/v-rebuild-dns-domains @@ -1,6 +1,6 @@ #!/bin/bash # info: rebuild dns domains -# options: USER [RESTART] +# options: USER [RESTART] [UPDATE_SERIAL] # # The function rebuilds DNS configuration files. @@ -12,6 +12,7 @@ # Argument defenition user=$1 restart=$2 +update_serial=$3 # Includes source $VESTA/func/main.sh @@ -24,7 +25,7 @@ source $VESTA/conf/vesta.conf # Verifications # #----------------------------------------------------------# -check_args '1' "$#" 'USER [RESTART]' +check_args '1' "$#" 'USER [RESTART] [UPDATE_SERIAL]' validate_format 'user' is_system_enabled "$DNS_SYSTEM" 'DNS_SYSTEM' is_object_valid 'user' 'USER' "$user" @@ -65,6 +66,9 @@ sed -i "/\/$user\/conf\/dns/d" $dns_conf # Starting loop for domain in $(search_objects 'dns' 'DOMAIN' "*" 'DOMAIN'); do + if [ "$update_serial" != 'no' ]; then + update_domain_serial + fi rebuild_dns_domain_conf done diff --git a/bin/v-suspend-dns-record b/bin/v-suspend-dns-record index 5cc8f310..7ac0a309 100755 --- a/bin/v-suspend-dns-record +++ b/bin/v-suspend-dns-record @@ -54,6 +54,7 @@ sort_dns_records # Updating zone if [[ "$DNS_SYSTEM" =~ named|bind ]]; then + update_domain_serial update_domain_zone fi diff --git a/bin/v-unsuspend-dns-record b/bin/v-unsuspend-dns-record index 761581ef..52fb15fb 100755 --- a/bin/v-unsuspend-dns-record +++ b/bin/v-unsuspend-dns-record @@ -53,6 +53,7 @@ sort_dns_records # Updating zone if [[ "$DNS_SYSTEM" =~ named|bind ]]; then + update_domain_serial update_domain_zone fi diff --git a/func/domain.sh b/func/domain.sh index 43eae6c1..09371117 100644 --- a/func/domain.sh +++ b/func/domain.sh @@ -216,32 +216,13 @@ is_mail_new() { # Update domain zone update_domain_zone() { conf="$HOMEDIR/$user/conf/dns/$domain.db" - line=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf) + domain_param=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf) fields='$RECORD\t$TTL\tIN\t$TYPE\t$PRIORITY\t$VALUE' - if [ -e $conf ]; then - zn_serial=$(head $conf|grep 'SOA' -A1|tail -n 1|sed "s/ //g") - s_date=$(echo ${zn_serial:0:8}) - c_date=$(date +'%Y%m%d') - if [ "$s_date" == "$c_date" ]; then - cur_value=$(echo ${zn_serial:8} ) - new_value=$(expr $cur_value + 1 ) - len_value=$(expr length $new_value) - if [ 1 -eq "$len_value" ]; then - new_value='0'$new_value - fi - serial="$c_date""$new_value" - else - serial="$(date +'%Y%m%d01')" - fi - else - serial="$(date +'%Y%m%d01')" - fi - - eval $line + eval $domain_param SOA=$(idn --quiet -a -t "$SOA") echo "\$TTL $TTL @ IN SOA $SOA. root.$domain_idn. ( - $serial + $SERIAL 7200 3600 1209600 @@ -264,6 +245,31 @@ update_domain_zone() { done < $USER_DATA/dns/$domain.conf } +# Update zone serial +update_domain_serial() { + zn_conf="$HOMEDIR/$user/conf/dns/$domain.db" + if [ -e $zn_conf ]; then + zn_serial=$(head $zn_conf |grep 'SOA' -A1 |tail -n 1 |sed "s/ //g") + s_date=$(echo ${zn_serial:0:8}) + c_date=$(date +'%Y%m%d') + if [ "$s_date" == "$c_date" ]; then + cur_value=$(echo ${zn_serial:8} ) + new_value=$(expr $cur_value + 1 ) + len_value=$(expr length $new_value) + if [ 1 -eq "$len_value" ]; then + new_value='0'$new_value + fi + serial="$c_date""$new_value" + else + serial="$(date +'%Y%m%d01')" + fi + else + serial="$(date +'%Y%m%d01')" + fi + add_object_key "dns" 'DOMAIN' "$domain" 'SERIAL' 'RECORDS' + update_object_value 'dns' 'DOMAIN' "$domain" '$SERIAL' "$serial" +} + # Get next DNS record ID get_next_dnsrecord(){ if [ -z "$id" ]; then diff --git a/web/templates/admin/list_dns.html b/web/templates/admin/list_dns.html index 34fc39ef..53fba641 100644 --- a/web/templates/admin/list_dns.html +++ b/web/templates/admin/list_dns.html @@ -161,13 +161,20 @@ sort-expire="=strtotime($data[$key]['EXP'])?>" sort-records="=(int)$data[$ke