ip.sh 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. # Check ip ownership
  2. is_ip_owner() {
  3. owner=$(grep 'OWNER=' $VESTA/data/ips/$ip |cut -f 2 -d \')
  4. if [ "$owner" != "$user" ]; then
  5. check_result $E_FORBIDEN "$ip is not owned by $user"
  6. fi
  7. }
  8. # Check if ip address is free
  9. is_ip_free() {
  10. if [ -e "$VESTA/data/ips/$ip" ]; then
  11. check_result $E_EXISTS "$ip is already exists"
  12. fi
  13. }
  14. # Get full interface name
  15. get_ip_iface() {
  16. i=$(/sbin/ip addr |grep -w $interface |\
  17. awk '{print $NF}' |tail -n 1 |cut -f 2 -d :)
  18. if [ "$i" = "$interface" ]; then
  19. n=0
  20. else
  21. n=$((i + 1))
  22. fi
  23. echo "$interface:$n"
  24. }
  25. # Check ip address speciefic value
  26. is_ip_key_empty() {
  27. key="$1"
  28. string=$(cat $VESTA/data/ips/$ip)
  29. eval $string
  30. eval value="$key"
  31. if [ ! -z "$value" ] && [ "$value" != '0' ]; then
  32. check_result $E_EXISTS "$key is not empty = $value"
  33. fi
  34. }
  35. # Update ip address value
  36. update_ip_value() {
  37. key="$1"
  38. value="$2"
  39. conf="$VESTA/data/ips/$ip"
  40. str=$(cat $conf)
  41. eval $str
  42. c_key=$(echo "${key//$/}")
  43. eval old="${key}"
  44. old=$(echo "$old" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g')
  45. new=$(echo "$value" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g')
  46. sed -i "$str_number s/$c_key='${old//\*/\\*}'/$c_key='${new//\*/\\*}'/g"\
  47. $conf
  48. }
  49. # Get ip name
  50. get_ip_alias() {
  51. ip_name=$(grep "NAME=" $VESTA/data/ips/$local_ip |cut -f 2 -d \')
  52. if [ ! -z "$ip_name" ]; then
  53. echo "${1//./-}.$ip_name"
  54. fi
  55. }
  56. # Increase ip value
  57. increase_ip_value() {
  58. sip=${1-ip}
  59. USER=$user
  60. web_key='U_WEB_DOMAINS'
  61. usr_key='U_SYS_USERS'
  62. current_web=$(grep "$web_key=" $VESTA/data/ips/$sip |cut -f 2 -d \')
  63. current_usr=$(grep "$usr_key=" $VESTA/data/ips/$sip |cut -f 2 -d \')
  64. if [ -z "$current_web" ]; then
  65. echo "Error: Parsing error"
  66. log_event "$E_PARSING" "$ARGUMENTS"
  67. exit $E_PARSING
  68. fi
  69. new_web=$((current_web + 1))
  70. if [ -z "$current_usr" ]; then
  71. new_usr="$USER"
  72. else
  73. check_usr=$(echo -e "${current_usr//,/\n}" |grep -w $USER)
  74. if [ -z "$check_usr" ]; then
  75. new_usr="$current_usr,$USER"
  76. else
  77. new_usr="$current_usr"
  78. fi
  79. fi
  80. sed -i "s/$web_key='$current_web'/$web_key='$new_web'/g" \
  81. $VESTA/data/ips/$ip
  82. sed -i "s/$usr_key='$current_usr'/$usr_key='$new_usr'/g" \
  83. $VESTA/data/ips/$ip
  84. }
  85. # Decrease ip value
  86. decrease_ip_value() {
  87. sip=${1-ip}
  88. USER=$user
  89. web_key='U_WEB_DOMAINS'
  90. usr_key='U_SYS_USERS'
  91. current_web=$(grep "$web_key=" $VESTA/data/ips/$sip |cut -f 2 -d \')
  92. current_usr=$(grep "$usr_key=" $VESTA/data/ips/$sip |cut -f 2 -d \')
  93. if [ -z "$current_web" ]; then
  94. check_result $E_PARSING "Parsing errpr"
  95. fi
  96. new_web=$((current_web - 1))
  97. check_ip=$(grep $sip $USER_DATA/web.conf |wc -l)
  98. if [ "$check_ip" -lt 2 ]; then
  99. new_usr=$(echo "$current_usr" |\
  100. sed "s/,/\n/g"|\
  101. sed "s/^$user$//g"|\
  102. sed "/^$/d"|\
  103. sed ':a;N;$!ba;s/\n/,/g')
  104. else
  105. new_usr="$current_usr"
  106. fi
  107. sed -i "s/$web_key='$current_web'/$web_key='$new_web'/g" \
  108. $VESTA/data/ips/$sip
  109. sed -i "s/$usr_key='$current_usr'/$usr_key='$new_usr'/g" \
  110. $VESTA/data/ips/$sip
  111. }
  112. # Get ip address value
  113. get_ip_value() {
  114. key="$1"
  115. string=$(cat $VESTA/data/ips/$ip)
  116. eval $string
  117. eval value="$key"
  118. echo "$value"
  119. }
  120. # Get real ip address
  121. get_real_ip() {
  122. if [ -e "$VESTA/data/ips/$1" ]; then
  123. echo $1
  124. else
  125. nat=$(grep -H "^NAT='$1'" $VESTA/data/ips/*)
  126. if [ ! -z "$nat" ]; then
  127. echo "$nat" |cut -f 1 -d : |cut -f 7 -d /
  128. else
  129. get_user_ip
  130. fi
  131. fi
  132. }
  133. # Convert CIDR to netmask
  134. convert_cidr() {
  135. set -- $(( 5 - ($1 / 8) )) 255 255 255 255 \
  136. $(((255 << (8 - ($1 % 8))) & 255 )) 0 0 0
  137. if [[ $1 -gt 1 ]]; then
  138. shift $1
  139. else
  140. shift
  141. fi
  142. echo ${1-0}.${2-0}.${3-0}.${4-0}
  143. }
  144. # Convert netmask to CIDR
  145. convert_netmask() {
  146. nbits=0
  147. IFS=.
  148. for dec in $1 ; do
  149. case $dec in
  150. 255) let nbits+=8;;
  151. 254) let nbits+=7;;
  152. 252) let nbits+=6;;
  153. 248) let nbits+=5;;
  154. 240) let nbits+=4;;
  155. 224) let nbits+=3;;
  156. 192) let nbits+=2;;
  157. 128) let nbits+=1;;
  158. 0);;
  159. esac
  160. done
  161. echo "$nbits"
  162. }
  163. # Calculate broadcast address
  164. get_broadcast() {
  165. OLD_IFS=$IFS
  166. IFS=.
  167. typeset -a I=($1)
  168. typeset -a N=($2)
  169. IFS=$OLD_IFS
  170. echo "$((${I[0]} |\
  171. (255 ^ ${N[0]}))).$((${I[1]} |\
  172. (255 ^ ${N[1]}))).$((${I[2]} |\
  173. (255 ^ ${N[2]}))).$((${I[3]} |\
  174. (255 ^ ${N[3]})))"
  175. }
  176. # Get user ips
  177. get_user_ips() {
  178. dedicated=$(grep -H "OWNER='$user'" $VESTA/data/ips/*)
  179. dedicated=$(echo "$dedicated" |cut -f 1 -d : |sed 's=.*/==')
  180. shared=$(grep -H -A1 "OWNER='$owner'" $VESTA/data/ips/* |grep shared)
  181. shared=$(echo "$shared" |cut -f 1 -d : |sed 's=.*/==' |cut -f 1 -d \-)
  182. for dedicated_ip in $dedicated; do
  183. shared=$(echo "$shared" |grep -v $dedicated_ip)
  184. done
  185. echo -e "$dedicated\n$shared"
  186. }
  187. # Get user ip
  188. get_user_ip() {
  189. ip=$(get_user_ips |head -n1)
  190. if [ -z "$ip" ]; then
  191. check_result $E_NOTEXIST "no IP is available"
  192. fi
  193. local_ip=$ip
  194. nat=$(grep "^NAT" $VESTA/data/ips/$ip |cut -f 2 -d \')
  195. if [ ! -z "$nat" ]; then
  196. ip=$nat
  197. fi
  198. }
  199. # Validate ip address
  200. is_ip_valid() {
  201. if [ ! -z $1 ]; then
  202. if [ -e "$VESTA/data/ips/$1" ]; then
  203. ip_data=$(cat $VESTA/data/ips/$1)
  204. local_ip="$1"
  205. else
  206. nat=$(grep -H "^NAT='$1'" $VESTA/data/ips/*)
  207. check_result $? "IP $1 doesn't exist" $E_NOTEXIST
  208. nat=$(echo "$nat" |cut -f1 -d: |cut -f7 -d/)
  209. ip_data=$(cat $VESTA/data/ips/$nat)
  210. local_ip=$nat
  211. fi
  212. ip_owner=$(echo "$ip_data" |grep OWNER= |cut -f2 -d \')
  213. ip_status=$(echo "$ip_data" |grep STATUS= |cut -f2 -d \')
  214. if [ "$ip_owner" != "$user" ] && [ "$ip_status" = 'dedicated' ]; then
  215. check_result $E_FORBIDEN "$user user can't use IP $1"
  216. fi
  217. get_user_owner
  218. if [ "$ip_owner" != "$user" ] && [ "$ip_owner" != "$owner" ]; then
  219. check_result $E_FORBIDEN "$user user can't use IP $1"
  220. fi
  221. else
  222. get_user_ip
  223. fi
  224. }