ip.sh 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  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. if [ -e "$VESTA/data/ips/$ip" ]; then
  46. echo "Error: IP exist"
  47. log_event "$E_EXISTS" "$EVENT"
  48. exit $E_EXISTS
  49. fi
  50. }
  51. # Get full interface name
  52. get_ip_iface() {
  53. i=$(/sbin/ip addr | grep -w $interface |\
  54. awk '{print $NF}' | tail -n 1 | cut -f 2 -d :)
  55. if [ "$i" = "$interface" ]; then
  56. n=0
  57. else
  58. n=$((i + 1))
  59. fi
  60. echo "$interface:$n"
  61. }
  62. # Check ip address speciefic value
  63. is_ip_key_empty() {
  64. key="$1"
  65. string=$(cat $VESTA/data/ips/$ip)
  66. eval $string
  67. eval value="$key"
  68. if [ ! -z "$value" ] && [ "$value" != '0' ]; then
  69. echo "Error: $key is not empty = $value"
  70. log_event "$E_EXISTS" "$EVENT"
  71. exit $E_EXISTS
  72. fi
  73. }
  74. # Update ip address value
  75. update_ip_value() {
  76. key="$1"
  77. value="$2"
  78. conf="$VESTA/data/ips/$ip"
  79. str=$(cat $conf)
  80. eval $str
  81. c_key=$(echo "${key//$/}")
  82. eval old="${key}"
  83. old=$(echo "$old" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g')
  84. new=$(echo "$value" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g')
  85. sed -i "$str_number s/$c_key='${old//\*/\\*}'/$c_key='${new//\*/\\*}'/g"\
  86. $conf
  87. }
  88. # Get ip name
  89. get_ip_name() {
  90. grep "NAME=" $VESTA/data/ips/$ip | cut -f 2 -d \'
  91. }
  92. # Increase ip value
  93. increase_ip_value() {
  94. sip=${1-ip}
  95. USER=$user
  96. web_key='U_WEB_DOMAINS'
  97. usr_key='U_SYS_USERS'
  98. current_web=$(grep "$web_key=" $VESTA/data/ips/$sip |cut -f 2 -d \')
  99. current_usr=$(grep "$usr_key=" $VESTA/data/ips/$sip |cut -f 2 -d \')
  100. if [ -z "$current_web" ]; then
  101. echo "Error: Parsing error"
  102. log_event "$E_PARSING" "$EVENT"
  103. exit $E_PARSING
  104. fi
  105. new_web=$((current_web + 1))
  106. if [ -z "$current_usr" ]; then
  107. new_usr="$USER"
  108. else
  109. check_usr=$(echo -e "${current_usr//,/\n}" |grep -w $USER)
  110. if [ -z "$check_usr" ]; then
  111. new_usr="$current_usr,$USER"
  112. else
  113. new_usr="$current_usr"
  114. fi
  115. fi
  116. sed -i "s/$web_key='$current_web'/$web_key='$new_web'/g" \
  117. $VESTA/data/ips/$ip
  118. sed -i "s/$usr_key='$current_usr'/$usr_key='$new_usr'/g" \
  119. $VESTA/data/ips/$ip
  120. }
  121. # Decrease ip value
  122. decrease_ip_value() {
  123. sip=${1-ip}
  124. USER=$user
  125. web_key='U_WEB_DOMAINS'
  126. usr_key='U_SYS_USERS'
  127. current_web=$(grep "$web_key=" $VESTA/data/ips/$sip |cut -f 2 -d \')
  128. current_usr=$(grep "$usr_key=" $VESTA/data/ips/$sip |cut -f 2 -d \')
  129. if [ -z "$current_web" ]; then
  130. echo "Error: Parsing error"
  131. log_event "$E_PARSING" "$EVENT"
  132. exit $E_PARSING
  133. fi
  134. new_web=$((current_web - 1))
  135. check_ip=$(grep $sip $USER_DATA/web.conf |wc -l)
  136. if [ "$check_ip" -lt 2 ]; then
  137. new_usr=$(echo "$current_usr" |\
  138. sed "s/,/\n/g"|\
  139. sed "s/^$user$//g"|\
  140. sed "/^$/d"|\
  141. sed ':a;N;$!ba;s/\n/,/g')
  142. else
  143. new_usr="$current_usr"
  144. fi
  145. sed -i "s/$web_key='$current_web'/$web_key='$new_web'/g" \
  146. $VESTA/data/ips/$sip
  147. sed -i "s/$usr_key='$current_usr'/$usr_key='$new_usr'/g" \
  148. $VESTA/data/ips/$sip
  149. }
  150. # Get ip address value
  151. get_ip_value() {
  152. key="$1"
  153. string=$( cat $VESTA/data/ips/$ip )
  154. eval $string
  155. eval value="$key"
  156. echo "$value"
  157. }
  158. # Get real ip address
  159. get_real_ip() {
  160. if [ -e "$VESTA/data/ips/$1" ]; then
  161. echo $1
  162. else
  163. nated_ip=$(grep -H "^NAT='$1'" $VESTA/data/ips/*)
  164. if [ ! -z "$nated_ip" ]; then
  165. echo "$nated_ip" | cut -f 1 -d : | cut -f 7 -d /
  166. else
  167. get_user_ip
  168. fi
  169. fi
  170. }
  171. # Get user ip
  172. get_user_ip(){
  173. ip=$(grep -H "OWNER='$1'" $VESTA/data/ips/* 2>/dev/null | head -n1)
  174. ip=$(echo "$ip" | cut -f 7 -d / | cut -f 1 -d :)
  175. if [ -z "$ip" ]; then
  176. admin_ips=$(grep -H "OWNER='admin'" $VESTA/data/ips/* 2>/dev/null)
  177. admin_ips=$(echo "$admin_ips" | cut -f 7 -d / | cut -f 1 -d :)
  178. for admin_ip in $admin_ips; do
  179. if [ -z "$ip" ]; then
  180. shared=$(grep "STATUS='shared'" $VESTA/data/ips/$admin_ip)
  181. if [ ! -z "$shared" ]; then
  182. ip=$admin_ip
  183. fi
  184. fi
  185. done
  186. fi
  187. echo "$ip"
  188. }
  189. # Convert CIDR to netmask
  190. convert_cidr() {
  191. set -- $(( 5 - ($1 / 8) )) 255 255 255 255 \
  192. $(((255 << (8 - ($1 % 8))) & 255 )) 0 0 0
  193. if [[ $1 -gt 1 ]]; then
  194. shift $1
  195. else
  196. shift
  197. fi
  198. echo ${1-0}.${2-0}.${3-0}.${4-0}
  199. }
  200. # Convert netmask to CIDR
  201. convert_netmask() {
  202. nbits=0
  203. IFS=.
  204. for dec in $1 ; do
  205. case $dec in
  206. 255) let nbits+=8;;
  207. 254) let nbits+=7;;
  208. 252) let nbits+=6;;
  209. 248) let nbits+=5;;
  210. 240) let nbits+=4;;
  211. 224) let nbits+=3;;
  212. 192) let nbits+=2;;
  213. 128) let nbits+=1;;
  214. 0);;
  215. esac
  216. done
  217. echo "$nbits"
  218. }
  219. # Calculate broadcast address
  220. get_broadcast() {
  221. OLD_IFS=$IFS
  222. IFS=.
  223. typeset -a I=($1)
  224. typeset -a N=($2)
  225. IFS=$OLD_IFS
  226. echo "$((${I[0]} |\
  227. (255 ^ ${N[0]}))).$((${I[1]} |\
  228. (255 ^ ${N[1]}))).$((${I[2]} |\
  229. (255 ^ ${N[2]}))).$((${I[3]} |\
  230. (255 ^ ${N[3]})))"
  231. }