ip.sh 6.4 KB

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