소스 검색

refactoring: log_event(), is_format_valid()

Serghey Rodin 9 년 전
부모
커밋
5d30b67fb1
6개의 변경된 파일344개의 추가작업 그리고 92개의 파일을 삭제
  1. 5 6
      func/db.sh
  2. 18 27
      func/domain.sh
  3. 14 13
      func/ip.sh
  4. 292 35
      func/main.sh
  5. 14 10
      func/rebuild.sh
  6. 1 1
      func/remote.sh

+ 5 - 6
func/db.sh

@@ -30,7 +30,7 @@ mysql_connect() {
     if [ '0' -ne "$?" ]; then
     if [ '0' -ne "$?" ]; then
         if [ "$notify" != 'no' ]; then
         if [ "$notify" != 'no' ]; then
             echo -e "Can't connect to MySQL $HOST\n$(cat $err)" |\
             echo -e "Can't connect to MySQL $HOST\n$(cat $err)" |\
-                $send_mail -s "$subj" $email
+                $SENDMAIL -s "$subj" $email
         fi
         fi
         echo "Error: Connection to $HOST failed"
         echo "Error: Connection to $HOST failed"
         log_event  "$E_CONNECT" "$ARGUMENTS"
         log_event  "$E_CONNECT" "$ARGUMENTS"
@@ -49,7 +49,7 @@ mysql_dump() {
         rm -rf $tmpdir
         rm -rf $tmpdir
         if [ "$notify" != 'no' ]; then
         if [ "$notify" != 'no' ]; then
             echo -e "Can't dump database $database\n$(cat $err)" |\
             echo -e "Can't dump database $database\n$(cat $err)" |\
-                $send_mail -s "$subj" $email
+                $SENDMAIL -s "$subj" $email
         fi
         fi
         echo "Error: dump $database failed"
         echo "Error: dump $database failed"
         log_event  "$E_DB" "$ARGUMENTS"
         log_event  "$E_DB" "$ARGUMENTS"
@@ -72,7 +72,7 @@ psql_connect() {
     if [ '0' -ne "$?" ]; then
     if [ '0' -ne "$?" ]; then
         if [ "$notify" != 'no' ]; then
         if [ "$notify" != 'no' ]; then
             echo -e "Can't connect to PostgreSQL $HOST\n$(cat /tmp/e.psql)" |\
             echo -e "Can't connect to PostgreSQL $HOST\n$(cat /tmp/e.psql)" |\
-                $send_mail -s "$subj" $email
+                $SENDMAIL -s "$subj" $email
         fi
         fi
         echo "Error: Connection to $HOST failed"
         echo "Error: Connection to $HOST failed"
         log_event  "$E_CONNECT" "$ARGUMENTS"
         log_event  "$E_CONNECT" "$ARGUMENTS"
@@ -90,7 +90,7 @@ psql_dump() {
         rm -rf $tmpdir
         rm -rf $tmpdir
         if [ "$notify" != 'no' ]; then
         if [ "$notify" != 'no' ]; then
             echo -e "Can't dump database $database\n$(cat /tmp/e.psql)" |\
             echo -e "Can't dump database $database\n$(cat /tmp/e.psql)" |\
-                $send_mail -s "$subj" $email
+                $SENDMAIL -s "$subj" $email
         fi
         fi
         echo "Error: dump $database failed"
         echo "Error: dump $database failed"
         log_event  "$E_DB" "$ARGUMENTS"
         log_event  "$E_DB" "$ARGUMENTS"
@@ -243,8 +243,7 @@ is_dbhost_new() {
 
 
 # Get database values
 # Get database values
 get_database_values() {
 get_database_values() {
-    db_str=$(grep "DB='$database'" $USER_DATA/db.conf)
-    eval $db_str
+    eval $(grep "DB='$database'" $USER_DATA/db.conf)
 }
 }
 
 
 # Change MySQL database password
 # Change MySQL database password

+ 18 - 27
func/domain.sh

@@ -5,17 +5,10 @@
 # Web template check
 # Web template check
 is_web_template_valid() {
 is_web_template_valid() {
     if [ ! -z "$WEB_SYSTEM" ]; then
     if [ ! -z "$WEB_SYSTEM" ]; then
-        template=$1
-        if [ -z "$template" ]; then
-            template=$(grep WEB_TEMPLATE $USER_DATA/user.conf |cut -f2 -d \')
-            if [ -z "$template" ]; then
-                template="default"
-            fi
-        fi
-        tpl="$WEBTPL/$WEB_SYSTEM/$WEB_BACKEND/$template.tpl"
-        stpl="$WEBTPL/$WEB_SYSTEM/$WEB_BACKEND/$template.stpl"
+        tpl="$WEBTPL/$WEB_SYSTEM/$WEB_BACKEND/$1.tpl"
+        stpl="$WEBTPL/$WEB_SYSTEM/$WEB_BACKEND/$1.stpl"
         if [ ! -e "$tpl" ] || [ ! -e "$stpl" ]; then
         if [ ! -e "$tpl" ] || [ ! -e "$stpl" ]; then
-            check_result $E_NOTEXIST "$template web template doesn't exist"
+            check_result $E_NOTEXIST "$1 web template doesn't exist"
         fi
         fi
     fi
     fi
 }
 }
@@ -23,25 +16,20 @@ is_web_template_valid() {
 # Proxy template check
 # Proxy template check
 is_proxy_template_valid() {
 is_proxy_template_valid() {
     if [ ! -z "$PROXY_SYSTEM" ]; then
     if [ ! -z "$PROXY_SYSTEM" ]; then
-        proxy=$1
-        if [ -z "$proxy" ]; then
-            proxy=$(grep PROXY_TEMPLATE $USER_DATA/user.conf |cut -f2 -d \')
-            if [ -z "$proxy" ]; then
-                proxy="default"
-            fi
-        fi
-        tpl="$WEBTPL/$PROXY_SYSTEM/$proxy.tpl"
-        stpl="$WEBTPL/$PROXY_SYSTEM/$proxy.stpl"
+        tpl="$WEBTPL/$PROXY_SYSTEM/$1.tpl"
+        stpl="$WEBTPL/$PROXY_SYSTEM/$1.stpl"
         if [ ! -e "$tpl" ] || [ ! -e "$stpl" ]; then
         if [ ! -e "$tpl" ] || [ ! -e "$stpl" ]; then
-            check_result $E_NOTEXIST "$proxy proxy template doesn't exist"
+            check_result $E_NOTEXIST "$1 proxy template doesn't exist"
         fi
         fi
     fi
     fi
 }
 }
 
 
 # Backend template check
 # Backend template check
 is_backend_template_valid() {
 is_backend_template_valid() {
-    if [ ! -e "$WEBTPL/$WEB_BACKEND/$1.tpl" ]; then
-        check_result $E_NOTEXIST "$backend backend template doesn't exist"
+    if [ ! -z "$WEB_BACKEND" ]; then
+        if [ ! -e "$WEBTPL/$WEB_BACKEND/$1.tpl" ]; then
+            check_result $E_NOTEXIST "$1 backend template doesn't exist"
+        fi
     fi
     fi
 }
 }
 
 
@@ -210,7 +198,7 @@ add_web_config() {
             -e "s|%proxy_ssl_port%|$PROXY_SSL_PORT|g" \
             -e "s|%proxy_ssl_port%|$PROXY_SSL_PORT|g" \
             -e "s/%proxy_extentions%/${PROXY_EXT//,/|}/g" \
             -e "s/%proxy_extentions%/${PROXY_EXT//,/|}/g" \
             -e "s|%user%|$user|g" \
             -e "s|%user%|$user|g" \
-            -e "s|%group%|$group|g" \
+            -e "s|%group%|$user|g" \
             -e "s|%home%|$HOMEDIR|g" \
             -e "s|%home%|$HOMEDIR|g" \
             -e "s|%docroot%|$HOMEDIR/$user/web/$domain/public_html|g" \
             -e "s|%docroot%|$HOMEDIR/$user/web/$domain/public_html|g" \
             -e "s|%sdocroot%|$HOMEDIR/$user/web/$domain/public_html|g" \
             -e "s|%sdocroot%|$HOMEDIR/$user/web/$domain/public_html|g" \
@@ -225,7 +213,7 @@ add_web_config() {
     chmod 640 $conf
     chmod 640 $conf
 
 
     if [ -z "$(grep "$conf" /etc/$1/conf.d/vesta.conf)" ]; then
     if [ -z "$(grep "$conf" /etc/$1/conf.d/vesta.conf)" ]; then
-        if [ "$WEB_SYSTEM" != 'nginx' ]; then
+        if [ "$1" != 'nginx' ]; then
             echo "Include $conf" >> /etc/$1/conf.d/vesta.conf
             echo "Include $conf" >> /etc/$1/conf.d/vesta.conf
         else
         else
             echo "include $conf;" >> /etc/$1/conf.d/vesta.conf
             echo "include $conf;" >> /etc/$1/conf.d/vesta.conf
@@ -265,6 +253,10 @@ get_web_config_lines() {
 
 
 # Replace web config
 # Replace web config
 replace_web_config() {
 replace_web_config() {
+    conf="$HOMEDIR/$user/conf/web/$1.conf"
+    if [[ "$2" =~ stpl$ ]]; then
+        conf="$HOMEDIR/$user/conf/web/s$1.conf"
+    fi
     get_web_config_lines $WEBTPL/$1/$WEB_BACKEND/$2 $conf
     get_web_config_lines $WEBTPL/$1/$WEB_BACKEND/$2 $conf
     sed -i  "$top_line,$bottom_line s|$old|$new|g" $conf
     sed -i  "$top_line,$bottom_line s|$old|$new|g" $conf
 }
 }
@@ -355,9 +347,8 @@ is_web_domain_cert_valid() {
 
 
 # DNS template check
 # DNS template check
 is_dns_template_valid() {
 is_dns_template_valid() {
-    t="$DNSTPL/$template.tpl"
-    if [ ! -e $t ]; then
-        check_result $E_NOTEXIST "dns template $template doesn't exist"
+    if [ ! -e "$DNSTPL/$1.tpl" ]; then
+        check_result $E_NOTEXIST "$1 dns template doesn't exist"
     fi
     fi
 }
 }
 
 

+ 14 - 13
func/ip.sh

@@ -33,7 +33,8 @@ is_ip_key_empty() {
     eval $string
     eval $string
     eval value="$key"
     eval value="$key"
     if [ ! -z "$value" ] && [ "$value" != '0' ]; then
     if [ ! -z "$value" ] && [ "$value" != '0' ]; then
-        check_result $E_EXISTS "$key is not empty = $value"
+        key="$(echo $key|sed -e "s/\$U_//")"
+        check_result $E_EXISTS "IP is in use / $key = $value"
     fi
     fi
 }
 }
 
 
@@ -133,7 +134,6 @@ get_ip_value() {
 }
 }
 
 
 
 
-
 # Get real ip address
 # Get real ip address
 get_real_ip() {
 get_real_ip() {
     if [ -e "$VESTA/data/ips/$1" ]; then
     if [ -e "$VESTA/data/ips/$1" ]; then
@@ -142,8 +142,6 @@ get_real_ip() {
         nat=$(grep -H "^NAT='$1'" $VESTA/data/ips/*)
         nat=$(grep -H "^NAT='$1'" $VESTA/data/ips/*)
         if [ ! -z "$nat" ]; then
         if [ ! -z "$nat" ]; then
             echo "$nat" |cut -f 1 -d : |cut -f 7 -d /
             echo "$nat" |cut -f 1 -d : |cut -f 7 -d /
-        else
-            get_user_ip
         fi
         fi
     fi
     fi
 }
 }
@@ -222,17 +220,22 @@ get_user_ip() {
 
 
 # Validate ip address
 # Validate ip address
 is_ip_valid() {
 is_ip_valid() {
-    if [ ! -z $1 ]; then
-        if [ -e "$VESTA/data/ips/$1" ]; then
-            ip_data=$(cat $VESTA/data/ips/$1)
-            local_ip="$1"
+    local_ip="$1"
+    if [ ! -e "$VESTA/data/ips/$1" ]; then
+        nat=$(grep -H "^NAT='$1'" $VESTA/data/ips/*)
+        if [ -z "$nat" ]; then
+            check_result $E_NOTEXIST "IP $1 doesn't exist"
         else
         else
-            nat=$(grep -H "^NAT='$1'" $VESTA/data/ips/*)
-            check_result $? "IP $1 doesn't exist" $E_NOTEXIST
             nat=$(echo "$nat" |cut -f1 -d: |cut -f7 -d/)
             nat=$(echo "$nat" |cut -f1 -d: |cut -f7 -d/)
-            ip_data=$(cat $VESTA/data/ips/$nat)
             local_ip=$nat
             local_ip=$nat
         fi
         fi
+    fi
+    if [ ! -z $2 ]; then
+        if [ -z "$nat" ]; then
+            ip_data=$(cat $VESTA/data/ips/$1)
+        else
+            ip_data=$(cat $VESTA/data/ips/$nat)
+        fi
         ip_owner=$(echo "$ip_data" |grep OWNER= |cut -f2 -d \')
         ip_owner=$(echo "$ip_data" |grep OWNER= |cut -f2 -d \')
         ip_status=$(echo "$ip_data" |grep STATUS= |cut -f2 -d \')
         ip_status=$(echo "$ip_data" |grep STATUS= |cut -f2 -d \')
         if [ "$ip_owner" != "$user" ] && [ "$ip_status" = 'dedicated' ]; then
         if [ "$ip_owner" != "$user" ] && [ "$ip_status" = 'dedicated' ]; then
@@ -242,7 +245,5 @@ is_ip_valid() {
         if [ "$ip_owner" != "$user" ] && [ "$ip_owner" != "$owner" ]; then
         if [ "$ip_owner" != "$user" ] && [ "$ip_owner" != "$owner" ]; then
             check_result $E_FORBIDEN "$user user can't use IP $1"
             check_result $E_FORBIDEN "$user user can't use IP $1"
         fi
         fi
-    else
-        get_user_ip
     fi
     fi
 }
 }

+ 292 - 35
func/main.sh

@@ -112,17 +112,18 @@ is_system_enabled() {
 # User package check
 # User package check
 is_package_full() {
 is_package_full() {
     case "$1" in
     case "$1" in
-        WEB_DOMAINS) used=$(wc -l $USER_DATA/web.conf |cut -f1 -d \ );;
+        WEB_DOMAINS) used=$(wc -l $USER_DATA/web.conf);;
         WEB_ALIASES) used=$(echo $aliases |tr ',' '\n' |wc -l);;
         WEB_ALIASES) used=$(echo $aliases |tr ',' '\n' |wc -l);;
-        DNS_DOMAINS) used=$(wc -l $USER_DATA/dns.conf |cut -f1 -d \ );;
-        DNS_RECORDS) used=$(wc -l $USER_DATA/dns/$domain.conf|cut -f1 -d \ );;
-        MAIL_DOMAINS) used=$(wc -l $USER_DATA/mail.conf |cut -f1 -d \ );;
-        MAIL_USER) used=$(wc -l $USER_DATA/mail/$domain.conf |cut -f1 -d \ );;
-        DATABASES) used=$(wc -l $USER_DATA/db.conf |cut -f1 -d \ );;
-        CRON_JOBS) used=$(wc -l $USER_DATA/cron.conf |cut -f1 -d \ );;
+        DNS_DOMAINS) used=$(wc -l $USER_DATA/dns.conf);;
+        DNS_RECORDS) used=$(wc -l $USER_DATA/dns/$domain.conf);;
+        MAIL_DOMAINS) used=$(wc -l $USER_DATA/mail.conf);;
+        MAIL_ACCOUNTS) used=$(wc -l $USER_DATA/mail/$domain.conf);;
+        DATABASES) used=$(wc -l $USER_DATA/db.conf);;
+        CRON_JOBS) used=$(wc -l $USER_DATA/cron.conf);;
     esac
     esac
+    used=$(echo "$used"| cut -f 1 -d \ )
     limit=$(grep "^$1=" $USER_DATA/user.conf |cut -f 2 -d \')
     limit=$(grep "^$1=" $USER_DATA/user.conf |cut -f 2 -d \')
-    if [ "$limit" != 'unlimited' ] && [ "$used" -ge "$limit" ]; then
+    if [ "$limit" != 'unlimited' ] && [[ "$used" -ge "$limit" ]]; then
         check_result $E_LIMIT "$1 limit is reached :: upgrade user package"
         check_result $E_LIMIT "$1 limit is reached :: upgrade user package"
     fi
     fi
 }
 }
@@ -140,14 +141,19 @@ get_user_owner() {
 }
 }
 
 
 # Random password generator
 # Random password generator
-gen_password() {
-    PW_MATRIX='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
-    PW_LENGHT='10'
-    pw_matrix=${1-$PW_MATRIX}
-    pw_lenght=${2-$PW_LENGHT}
-    while [ ${n:=1} -le $pw_lenght ]; do
-        pass="$pass${pw_matrix:$(($RANDOM%${#pw_matrix})):1}"
-        let n+=1
+generate_password() {
+    matrix=$1
+    lenght=$2
+    if [ -z "$matrix" ]; then
+        matrix=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+    fi
+    if [ -z "$lenght" ]; then
+        lenght=10
+    fi
+    i=1
+    while [ $i -le $lenght ]; do
+        pass="$pass${matrix:$(($RANDOM%${#matrix})):1}"
+       ((i++))
     done
     done
     echo "$pass"
     echo "$pass"
 }
 }
@@ -169,15 +175,6 @@ is_type_valid() {
     fi
     fi
 }
 }
 
 
-# Check if backup is available for user
-is_backup_available() {
-    b_owner=$(echo $user |\
-        sed -e "s/\.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].tar//")
-    if [ "$user" != "$b_owner" ]; then
-        check_result $E_FORBIDEN "permission denied"
-    fi
-}
-
 # Check user backup settings
 # Check user backup settings
 is_backup_enabled() {
 is_backup_enabled() {
     BACKUPS=$(grep "^BACKUPS=" $USER_DATA/user.conf | cut -f2 -d \')
     BACKUPS=$(grep "^BACKUPS=" $USER_DATA/user.conf | cut -f2 -d \')
@@ -450,7 +447,7 @@ sync_cron_jobs() {
     fi
     fi
     rm -f $crontab
     rm -f $crontab
     if [ "$CRON_REPORTS" = 'yes' ]; then
     if [ "$CRON_REPORTS" = 'yes' ]; then
-        echo "MAILTO=$CONTACT" > $sys_cron
+        echo "MAILTO=$CONTACT" > $crontab
     fi
     fi
     while read line; do
     while read line; do
         eval $line
         eval $line
@@ -467,15 +464,16 @@ sync_cron_jobs() {
 # User format validator
 # User format validator
 is_user_format_valid() {
 is_user_format_valid() {
     if ! [[ "$1" =~ ^[a-zA-Z0-9][-|\.|_|a-zA-Z0-9]{0,28}[a-zA-Z0-9]$ ]]; then
     if ! [[ "$1" =~ ^[a-zA-Z0-9][-|\.|_|a-zA-Z0-9]{0,28}[a-zA-Z0-9]$ ]]; then
-        check_result $E_INVALID "invalid user format :: $1"
+        check_result $E_INVALID "invalid $2 format :: $1"
     fi
     fi
 }
 }
 
 
 # Domain format validator
 # Domain format validator
 is_domain_format_valid() {
 is_domain_format_valid() {
+    object_name=${2-domain}
     exclude="[!|@|#|$|^|&|*|(|)|+|=|{|}|:|,|<|>|?|_|/|\|\"|'|;|%|\`| ]"
     exclude="[!|@|#|$|^|&|*|(|)|+|=|{|}|:|,|<|>|?|_|/|\|\"|'|;|%|\`| ]"
     if [[ "$1" =~ $exclude ]]; then
     if [[ "$1" =~ $exclude ]]; then
-        check_result $E_INVALID "invalid domain format :: $1"
+        check_result $E_INVALID "invalid $object_name format :: $1"
     fi
     fi
 }
 }
 
 
@@ -494,9 +492,10 @@ is_alias_format_valid() {
 
 
 # IP format validator
 # IP format validator
 is_ip_format_valid() {
 is_ip_format_valid() {
+    object_name=${2-ip}
     ip_regex='([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])'
     ip_regex='([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])'
     if ! [[ $1 =~ ^$ip_regex\.$ip_regex\.$ip_regex\.$ip_regex$ ]]; then
     if ! [[ $1 =~ ^$ip_regex\.$ip_regex\.$ip_regex\.$ip_regex$ ]]; then
-        check_result $E_INVALID "invalid IP format :: $1"
+        check_result $E_INVALID "invalid $object_name format :: $1"
     fi
     fi
 }
 }
 
 
@@ -512,7 +511,203 @@ is_extention_format_valid() {
 is_number_format_valid() {
 is_number_format_valid() {
     object_name=${2-number}
     object_name=${2-number}
     if ! [[ "$1" =~ ^[0-9]+$ ]] ; then
     if ! [[ "$1" =~ ^[0-9]+$ ]] ; then
-       check_result $E_INVALID "invalid $object_name format :: $1"
+        check_result $E_INVALID "invalid $object_name format :: $1"
+    fi
+}
+
+# Autoreply format validator
+is_autoreply_format_valid() {
+    if [[ "$1" =~ [$|\`] ]] || [ 10240 -le ${#1} ]; then
+        check_result $E_INVALID "invalid autoreply format :: $1"
+    fi
+}
+
+# Boolean format validator
+is_boolean_format_valid() {
+    if [ "$1" != 'yes' ] && [ "$1" != 'no' ]; then
+        check_result $E_INVALID "invalid $2 format :: $1"
+    fi
+}
+
+# Common format validator
+is_common_format_valid() {
+    exclude="[!|#|$|^|&|(|)|+|=|{|}|:|<|>|?|/|\|\"|'|;|%|\`| ]"
+    if [[ "$1" =~ $exclude ]]; then
+        check_result $E_INVALID "invalid $2 format :: $1"
+    fi
+    if [ 400 -le ${#1} ]; then
+        check_result $E_INVALID "invalid $2 format :: $1"
+    fi
+    if [[ "$1" =~ @ ]] && [ ${#1} -gt 1 ] ; then
+        check_result $E_INVALID "invalid $2 format :: $1"
+    fi
+    if [[ $1 =~ \* ]]; then
+        if [ "$(echo $1 | grep -o '*'|wc -l)" -gt 1 ]; then
+            check_result $E_INVALID "invalid $2 format :: $1"
+        fi
+    fi
+}
+
+# Database format validator
+is_database_format_valid() {
+    exclude="[!|@|#|$|^|&|*|(|)|+|=|{|}|:|,|<|>|?|/|\|\"|'|;|%|\`| ]"
+    if [[ "$1" =~ $exclude ]] || [ 65 -le ${#1} ]; then
+        check_result $E_INVALID "invalid $2 format :: $1"
+    fi
+}
+
+# Date format validator
+is_date_format_valid() {
+    if ! [[ "$1" =~ ^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$ ]]; then
+        check_result $E_INVALID "invalid date format :: $1"
+    fi
+}
+
+# Database user validator
+is_dbuser_format_valid() {
+    exclude="[!|@|#|$|^|&|*|(|)|+|=|{|}|:|,|<|>|?|/|\|\"|'|;|%|\`| ]"
+    if [[ "$1" =~ $exclude ]] || [ 17 -le ${#1} ]; then
+        check_result $E_INVALID "invalid $2 format :: $1"
+    fi
+}
+
+# DNS record type validator
+is_dns_type_format_valid() {
+    known_dnstype='A,AAAA,NS,CNAME,MX,TXT,SRV,DNSKEY,KEY,IPSECKEY,PTR,SPF'
+    if [ -z "$(echo $known_dnstype |grep -w $1)" ]; then
+        check_result $E_INVALID "invalid dns record type format :: $1"
+    fi
+}
+
+# DNS record validator
+is_dns_record_format_valid() {
+    if [ "$rtype" = 'A' ]; then
+        is_ip_format_valid "$1"
+    fi
+    if [ "$rtype" = 'NS' ]; then
+        is_domain_format_valid "$1" 'ns_record'
+    fi
+    if [ "$rtype" = 'MX' ]; then
+        is_domain_format_valid "$1" 'mx_record'
+        is_int_format_valid "$priority" 'priority_record'
+    fi
+
+}
+
+# Email format validator
+is_email_format_valid() {
+    if [[ ! "$1" =~ "@" ]] ; then
+        check_result $E_INVALID "invalid email format :: $1"
+    fi
+}
+
+# Firewall action validator
+is_fw_action_format_valid() {
+    if [ "$1" != "ACCEPT" ] && [ "$1" != 'DROP' ] ; then
+        check_result $E_INVALID "invalid action format :: $1"
+    fi
+}
+
+# Firewall protocol validator
+is_fw_protocol_format_valid() {
+    if [ "$1" != "ICMP" ] && [ "$1" != 'UDP' ] && [ "$1" != 'TCP' ] ; then
+        check_result $E_INVALID "invalid protocol format :: $1"
+    fi
+}
+
+# Firewall port validator
+is_fw_port_format_valid() {
+    if [ "${#1}" -eq 1 ]; then
+        if ! [[ "$1" =~ [0-9] ]]; then
+            check_result $E_INVALID "invalid port format :: $1"
+        fi
+    else
+        if ! [[ "$1" =~ ^[0-9][-|,|:|0-9]{0,30}[0-9]$ ]]
+        then
+            check_result $E_INVALID "invalid port format :: $1"
+        fi
+    fi
+}
+
+# Integer validator
+is_int_format_valid() {
+    if ! [[ "$1" =~ ^[0-9]+$ ]] ; then 
+        check_result $E_INVALID "invalid $2 format :: $1"
+    fi
+}
+
+# Interface validator
+is_interface_format_valid() {
+    netdevices=$(cat /proc/net/dev |grep : |cut -f 1 -d : |tr -d ' ')
+    if [ -z $(echo "$netdevices" |grep -x $1) ]; then
+        check_result $E_INVALID "invalid interface format :: $1"
+    fi
+}
+
+# IP status validator
+is_ip_status_format_valid() {
+    if [ -z "$(echo shared,dedicated | grep -w $1 )" ]; then
+        check_result $E_INVALID "invalid status format :: $1"
+    fi
+}
+
+# Cron validator
+is_cron_format_valid() {
+    limit=60
+    check_format=''
+    if [ "$2" = 'day' ]; then
+        limit=31
+    fi
+    if [ "$2" = 'month' ]; then
+        limit=12
+    fi
+    if [ "$2" = 'wday' ]; then
+        limit=7
+    fi
+    if [ "$1" = '*' ]; then
+        check_format='ok'
+    fi
+    if [[ "$1" =~ ^[\*]+[/]+[0-9] ]]; then
+        if [ "$(echo $1 |cut -f 2 -d /)" -lt $limit ]; then
+            check_format='ok'
+        fi
+    fi
+    if [[ "$1" =~ ^[0-9][-|,|0-9]{0,28}[0-9]$ ]]; then
+        check_format='ok'
+        crn_values=${1//,/ }
+        crn_values=${crn_values//-/ }
+        for crn_vl in $crn_values; do
+            if [ "$crn_vl" -gt $limit ]; then
+                check_format='invalid'
+            fi
+        done
+    fi
+    if [[ "$1" =~ ^[0-9]+$ ]] && [ "$1" -lt $limit ]; then
+        check_format='ok'
+    fi
+    if [ "$check_format" != 'ok' ]; then
+        check_result $E_INVALID "invalid $2 format :: $1"
+    fi
+}
+
+# Name validator
+is_name_format_valid() {
+    if ! [[ "$1" =~ ^[[:alnum:]][-|\ |\.|_[:alnum:]]{0,28}[[:alnum:]]$ ]]; then
+        check_result $E_INVALID "invalid $2 format :: $1"
+    fi
+}
+
+# Object validator
+is_object_format_valid() {
+    if ! [[ "$1" =~ ^[[:alnum:]][-|\.|_[:alnum:]]{0,28}[[:alnum:]]$ ]]; then
+        check_result $E_INVALID "invalid $2 format :: $1"
+    fi
+}
+
+# Password validator
+is_password_format_valid() {
+    if [ "${#1}" -lt '6' ]; then
+        check_result $E_INVALID "invalid password format :: $1"
     fi
     fi
 }
 }
 
 
@@ -522,11 +717,73 @@ is_format_valid() {
         eval arg=\$$arg_name
         eval arg=\$$arg_name
         if [ !  -z "$arg" ]; then
         if [ !  -z "$arg" ]; then
             case $arg_name in
             case $arg_name in
-                aliases)            is_alias_format_valid "$arg" ;;
-                domain)             is_domain_format_valid "$arg" ;;
-                proxy_ext)          is_extention_format_valid "$arg" ;;
-                ip)                 is_ip_format_valid "$arg" ;;
-                user)               is_user_format_valid "$arg" ;;
+                account)        is_user_format_valid "$arg" "$arg_name";;
+                action)         is_fw_action_format_valid "$arg";;
+                aliases)        is_alias_format_valid "$arg" ;;
+                antispam)       is_boolean_format_valid "$arg" 'antispam' ;;
+                antivirus)      is_boolean_format_valid "$arg" 'antivirus' ;;
+                autoreply)      is_autoreply_format_valid "$arg" ;;
+                backup)         is_user_format_valid "$arg" 'backup' ;;
+                charset)        is_object_format_valid "$arg" "$arg_name" ;;
+                charsets)       is_common_format_valid "$arg" 'charsets' ;;
+                comment)        is_object_format_valid "$arg" 'comment' ;;
+                database)       is_database_format_valid "$arg" 'database';;
+                day)            is_cron_format_valid "$arg" $arg_name ;;
+                dbpass)         is_password_format_valid "$arg" ;;
+                dbuser)         is_dbuser_format_valid "$arg" 'dbuser';;
+                dkim)           is_boolean_format_valid "$arg" 'dkim' ;;
+                dkim_size)      is_int_format_valid "$arg" ;;
+                domain)         is_domain_format_valid "$arg" ;;
+                dvalue)         is_dns_record_format_valid "$arg";;
+                email)          is_email_format_valid "$arg" ;;
+                exp)            is_date_format_valid "$arg" ;;
+                extentions)     is_common_format_valid "$arg" 'extentions' ;;
+                fname)          is_name_format_valid "$arg" "first name" ;;
+                ftp_password)   is_password_format_valid "$arg" ;;
+                ftp_user)       is_user_format_valid "$arg" "$arg_name" ;;
+                host)           is_domain_format_valid "$arg" "$arg_name" ;;
+                hour)           is_cron_format_valid "$arg" $arg_name ;;
+                id)             is_int_format_valid "$arg" 'id' ;;
+                ip)             is_ip_format_valid "$arg" ;;
+                ip_name)        is_domain_format_valid "$arg" 'IP name';;
+                ip_status)      is_ip_status_format_valid "$arg" ;;
+                job)            is_int_format_valid "$arg" 'job' ;;
+                key)            is_user_format_valid "$arg" "$arg_name" ;;
+                lname)          is_name_format_valid "$arg" "last name" ;;
+                malias)         is_user_format_valid "$arg" "$arg_name" ;;
+                max_db)         is_int_format_valid "$arg" 'max db';;
+                min)            is_cron_format_valid "$arg" $arg_name ;;
+                month)          is_cron_format_valid "$arg" $arg_name ;;
+                nat_ip)         is_ip_format_valid "$arg" ;;
+                netmask)        is_ip_format_valid "$arg" 'netmask' ;;
+                newid)          is_int_format_valid "$arg" 'id' ;;
+                ns1)            is_domain_format_valid "$arg" 'ns1' ;;
+                ns2)            is_domain_format_valid "$arg" 'ns2' ;;
+                ns3)            is_domain_format_valid "$arg" 'ns3' ;;
+                ns4)            is_domain_format_valid "$arg" 'ns4' ;;
+                ns5)            is_domain_format_valid "$arg" 'ns5' ;;
+                ns6)            is_domain_format_valid "$arg" 'ns6' ;;
+                ns7)            is_domain_format_valid "$arg" 'ns7' ;;
+                ns8)            is_domain_format_valid "$arg" 'ns8' ;;
+                object)         is_name_format_valid "$arg" 'object';;
+                package)        is_object_format_valid "$arg" "$arg_name" ;;
+                password)       is_password_format_valid "$arg" ;;
+                port)           is_int_format_valid "$arg" 'port' ;;
+                port_ext)       is_fw_protocol_format_valid "$arg";;
+                protocol)       is_fw_port_format_valid "$arg" ;;
+                proxy_ext)      is_extention_format_valid "$arg" ;;
+                quota)          is_int_format_valid "$arg" 'quota' ;;
+                record)         is_common_format_valid "$arg" 'record';;
+                restart)        is_boolean_format_valid "$arg" 'restart' ;;
+                rtype)          is_dns_type_format_valid "$arg" ;;
+                rule)           is_int_format_valid "$arg" "rule id" ;;
+                soa)            is_domain_format_valid "$arg" 'SOA' ;;
+                stats_pass)     is_password_format_valid "$arg" ;;
+                stats_user)     is_user_format_valid "$arg" "$arg_name" ;;
+                template)       is_object_format_valid "$arg" "$arg_name" ;;
+                ttl)            is_int_format_valid "$arg" 'ttl';;
+                user)           is_user_format_valid "$arg" $arg_name;;
+                wday)           is_cron_format_valid "$arg" $arg_name ;;
             esac
             esac
         fi
         fi
     done
     done

+ 14 - 10
func/rebuild.sh

@@ -406,10 +406,14 @@ rebuild_dns_domain_conf() {
 # MAIL domain rebuild
 # MAIL domain rebuild
 rebuild_mail_domain_conf() {
 rebuild_mail_domain_conf() {
 
 
-    # Get domain values
-    domain_idn=$(idn -t --quiet -a "$domain")
     get_domain_values 'mail'
     get_domain_values 'mail'
 
 
+    if [[ "$domain" = *[![:ascii:]]* ]]; then
+        domain_idn=$(idn -t --quiet -a $domain)
+    else
+        domain_idn=$domain
+    fi
+
     if [ "$SUSPENDED" = 'yes' ]; then
     if [ "$SUSPENDED" = 'yes' ]; then
         SUSPENDED_MAIL=$((SUSPENDED_MAIL +1))
         SUSPENDED_MAIL=$((SUSPENDED_MAIL +1))
     fi
     fi
@@ -526,8 +530,8 @@ rebuild_mysql_database() {
     eval $host_str
     eval $host_str
     if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ]; then
     if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ]; then
         echo "Error: mysql config parsing failed"
         echo "Error: mysql config parsing failed"
-        if [ ! -z "$send_mail" ]; then
-            echo "Can't parse MySQL DB config" | $send_mail -s "$subj" $email
+        if [ ! -z "$SENDMAIL" ]; then
+            echo "Can't parse MySQL DB config" | $SENDMAIL -s "$subj" $email
         fi
         fi
         log_event "$E_PARSING" "$ARGUMENTS"
         log_event "$E_PARSING" "$ARGUMENTS"
         exit $E_PARSING
         exit $E_PARSING
@@ -537,9 +541,9 @@ rebuild_mysql_database() {
     mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
     mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
     if [ '0' -ne "$?" ]; then
     if [ '0' -ne "$?" ]; then
         echo "Error: Database connection to $HOST failed"
         echo "Error: Database connection to $HOST failed"
-        if [ ! -z "$send_mail" ]; then
+        if [ ! -z "$SENDMAIL" ]; then
             echo "Database connection to MySQL host $HOST failed" |\
             echo "Database connection to MySQL host $HOST failed" |\
-                $send_mail -s "$subj" $email
+                $SENDMAIL -s "$subj" $email
         fi
         fi
         log_event  "$E_CONNECT" "$ARGUMENTS"
         log_event  "$E_CONNECT" "$ARGUMENTS"
         exit $E_CONNECT
         exit $E_CONNECT
@@ -569,8 +573,8 @@ rebuild_pgsql_database() {
     export PGPASSWORD="$PASSWORD"
     export PGPASSWORD="$PASSWORD"
     if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
     if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
         echo "Error: postgresql config parsing failed"
         echo "Error: postgresql config parsing failed"
-        if [ ! -z "$send_mail" ]; then
-            echo "Can't parse PostgreSQL config" | $send_mail -s "$subj" $email
+        if [ ! -z "$SENDMAIL" ]; then
+            echo "Can't parse PostgreSQL config" | $SENDMAIL -s "$subj" $email
         fi
         fi
         log_event "$E_PARSING" "$ARGUMENTS"
         log_event "$E_PARSING" "$ARGUMENTS"
         exit $E_PARSING
         exit $E_PARSING
@@ -580,9 +584,9 @@ rebuild_pgsql_database() {
     psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
     psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
     if [ '0' -ne "$?" ];  then
     if [ '0' -ne "$?" ];  then
         echo "Error: Connection failed"
         echo "Error: Connection failed"
-        if [ ! -z "$send_mail" ]; then
+        if [ ! -z "$SENDMAIL" ]; then
             echo "Database connection to PostgreSQL host $HOST failed" |\
             echo "Database connection to PostgreSQL host $HOST failed" |\
-                $send_mail -s "$subj" $email
+                $SENDMAIL -s "$subj" $email
         fi
         fi
         log_event "$E_CONNECT" "$ARGUMENTS"
         log_event "$E_CONNECT" "$ARGUMENTS"
         exit $E_CONNECT
         exit $E_CONNECT

+ 1 - 1
func/remote.sh

@@ -106,7 +106,7 @@ remote_dns_health_check() {
             else
             else
                 subj="DNS sync failed"
                 subj="DNS sync failed"
                 email=$($BIN/v-get-user-value admin CONTACT)
                 email=$($BIN/v-get-user-value admin CONTACT)
-                cat $tmpfile |$send_mail -s "$subj" $email
+                cat $tmpfile |$SENDMAIL -s "$subj" $email
             fi
             fi
 
 
             # Deleting tmp file
             # Deleting tmp file