ip.sh 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. # Validationg ip address
  2. is_ip_valid() {
  3. check_ifc=$(/sbin/ifconfig |grep "inet addr:$ip")
  4. if [ ! -e "$VESTA/data/ips/$ip" ] || [ -z "$check_ifc" ]; then
  5. echo "Error: IP $ip not exist"
  6. log_event "$E_NOTEXIST" "$EVENT"
  7. exit $E_NOTEXIST
  8. fi
  9. }
  10. # Check if ip availabile for user
  11. is_ip_avalable() {
  12. ip_data=$(cat $VESTA/data/ips/$ip)
  13. owner=$(echo "$ip_data"|grep OWNER= | cut -f 2 -d \')
  14. status=$(echo "$ip_data"|grep OWNER= | cut -f 2 -d \')
  15. shared=no
  16. if [ 'admin' = "$owner" ] && [ "$status" = 'shared' ]; then
  17. shared='yes'
  18. fi
  19. if [ "$owner" != "$user" ] && [ "$shared" != 'yes' ]; then
  20. echo "Error: User $user don't have permission to use $ip"
  21. log_event "$E_FORBIDEN" "$EVENT"
  22. exit $E_FORBIDEN
  23. fi
  24. }
  25. # Check ip ownership
  26. is_ip_owner() {
  27. # Parsing ip
  28. owner=$(grep 'OWNER=' $VESTA/data/ips/$IP|cut -f 2 -d \')
  29. if [ "$owner" != "$user" ]; then
  30. echo "Error: IP $IP not owned"
  31. log_event "$E_FORBIDEN" "$EVENT"
  32. exit $E_FORBIDEN
  33. fi
  34. }
  35. # Check if ip address is free
  36. is_ip_free() {
  37. list=$(/sbin/ifconfig |grep 'inet addr:' |cut -f 2 -d : |cut -f 1 -d ' ')
  38. ip_check=$(echo "$list" |grep -w "$ip")
  39. if [ -n "$ip_check" ] || [ -e "$VESTA/data/ips/$ip" ]; then
  40. echo "Error: IP exist"
  41. log_event "$E_EXISTS" "$EVENT"
  42. exit $E_EXISTS
  43. fi
  44. }
  45. # Get full interface name
  46. get_ip_iface() {
  47. i=$(/sbin/ifconfig -a |grep -w "$interface"|cut -f1 -d ' '|\
  48. tail -n 1|cut -f 2 -d :)
  49. if [ "$i" = "$interface" ]; then
  50. n=0
  51. else
  52. n=$((i + 1))
  53. fi
  54. iface="$interface:$n"
  55. }
  56. # Check ip address speciefic value
  57. is_ip_key_empty() {
  58. key="$1"
  59. string=$(cat $VESTA/data/ips/$ip)
  60. eval $string
  61. eval value="$key"
  62. if [ ! -z "$value" ] && [ "$value" != '0' ]; then
  63. echo "Error: $key is not empty = $value"
  64. log_event "$E_EXISTS" "$EVENT"
  65. exit $E_EXISTS
  66. fi
  67. }
  68. # Update ip address value
  69. update_ip_value() {
  70. key="$1"
  71. value="$2"
  72. conf="$VESTA/data/ips/$ip"
  73. str=$(cat $conf)
  74. eval $str
  75. c_key=$(echo "${key//$/}")
  76. eval old="${key}"
  77. old=$(echo "$old" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g')
  78. new=$(echo "$value" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g')
  79. sed -i "$str_number s/$c_key='${old//\*/\\*}'/$c_key='${new//\*/\\*}'/g"\
  80. $conf
  81. }
  82. # Get ip name
  83. get_ip_name() {
  84. grep "NAME=" $VESTA/data/ips/$ip |cut -f 2 -d \'
  85. }
  86. # Increase ip value
  87. increase_ip_value() {
  88. sip=${1-ip}
  89. USER=$user
  90. web_key='U_WEB_DOMAINS'
  91. usr_key='U_SYS_USERS'
  92. current_web=$(grep "$web_key=" $VESTA/data/ips/$sip |cut -f 2 -d \')
  93. current_usr=$(grep "$usr_key=" $VESTA/data/ips/$sip |cut -f 2 -d \')
  94. if [ -z "$current_web" ]; then
  95. echo "Error: Parsing error"
  96. log_event "$E_PARSING" "$EVENT"
  97. exit $E_PARSING
  98. fi
  99. new_web=$((current_web + 1))
  100. if [ -z "$current_usr" ]; then
  101. new_usr="$USER"
  102. else
  103. check_usr=$(echo -e "${current_usr//,/\n}" |grep -w $USER)
  104. if [ -z "$check_usr" ]; then
  105. new_usr="$current_usr,$USER"
  106. else
  107. new_usr="$current_usr"
  108. fi
  109. fi
  110. sed -i "s/$web_key='$current_web'/$web_key='$new_web'/g" \
  111. $VESTA/data/ips/$ip
  112. sed -i "s/$usr_key='$current_usr'/$usr_key='$new_usr'/g" \
  113. $VESTA/data/ips/$ip
  114. }
  115. # Decrease ip value
  116. decrease_ip_value() {
  117. sip=${1-ip}
  118. USER=$user
  119. web_key='U_WEB_DOMAINS'
  120. usr_key='U_SYS_USERS'
  121. current_web=$(grep "$web_key=" $VESTA/data/ips/$sip |cut -f 2 -d \')
  122. current_usr=$(grep "$usr_key=" $VESTA/data/ips/$sip |cut -f 2 -d \')
  123. if [ -z "$current_web" ]; then
  124. echo "Error: Parsing error"
  125. log_event "$E_PARSING" "$EVENT"
  126. exit $E_PARSING
  127. fi
  128. new_web=$((current_web - 1))
  129. check_ip=$(grep $sip $USER_DATA/web.conf |wc -l)
  130. if [ "$check_ip" -lt 2 ]; then
  131. new_usr=$(echo "$current_usr" |\
  132. sed -e "s/,/\n/g"|\
  133. sed -e "s/^$user$//g"|\
  134. sed -e "/^$/d"|\
  135. sed -e ':a;N;$!ba;s/\n/,/g')
  136. else
  137. new_usr="$current_usr"
  138. fi
  139. sed -i "s/$web_key='$current_web'/$web_key='$new_web'/g" \
  140. $VESTA/data/ips/$sip
  141. sed -i "s/$usr_key='$current_usr'/$usr_key='$new_usr'/g" \
  142. $VESTA/data/ips/$sip
  143. }
  144. # Get ip address value
  145. get_ip_value() {
  146. key="$1"
  147. string=$( cat $VESTA/data/ips/$ip )
  148. eval $string
  149. eval value="$key"
  150. echo "$value"
  151. }
  152. # Get current ip interface
  153. get_current_interface() {
  154. i=$(/sbin/ifconfig |grep -B1 "addr:$ip "|head -n 1 |cut -f 1 -d ' ')
  155. if [ -z "$i" ]; then
  156. echo "Error: interface for ip $ip not found"
  157. log_event "$E_NOTEXIST" "$EVENT"
  158. exit $E_NOTEXIST
  159. fi
  160. if [ -z "$(echo $i | cut -s -f 2 -d :)" ]; then
  161. echo "Error: Main IP on interface"
  162. log_event "$E_FORBIDEN" "$EVENT"
  163. exit $E_FORBIDEN
  164. fi
  165. interface="$i"
  166. }
  167. # Create ip vesta configuration
  168. create_vesta_ip() {
  169. ip_data="OWNER='$user'"
  170. ip_data="$ip_data\nSTATUS='$ip_status'"
  171. ip_data="$ip_data\nNAME='$ip_name'"
  172. ip_data="$ip_data\nU_SYS_USERS=''"
  173. ip_data="$ip_data\nU_WEB_DOMAINS='0'"
  174. ip_data="$ip_data\nINTERFACE='$interface'"
  175. ip_data="$ip_data\nNETMASK='$mask'"
  176. ip_data="$ip_data\nDATE='$DATE'"
  177. echo -e "$ip_data" >$VESTA/data/ips/$ip
  178. chmod 660 $VESTA/data/ips/$ip
  179. }
  180. # Create ip address startup configuration
  181. create_ip_startup() {
  182. ip_data="# Added by vesta $SCRIPT\nDEVICE=$iface"
  183. ip_data="$ip_data\nBOOTPROTO=static\nONBOOT=yes\nIPADDR=$ip"
  184. ip_data="$ip_data\nNETMASK=$mask"
  185. echo -e "$ip_data" > $iconf-$iface
  186. }