ip.sh 6.1 KB

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