ipv6.sh 6.1 KB

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