ip_func.sh 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593
  1. is_sys_ip_free() {
  2. # Parsing system ips
  3. ip_list=$(ifconfig|grep 'inet addr:'|cut -f 2 -d ':'|cut -f 1 -d " ")
  4. # Checking ip existance
  5. ip_check=$(echo "$ip_list"|grep -w "$ip")
  6. if [ -n "$ip_check" ] || [ -e "$V_IPS/$ip" ]; then
  7. echo "Error: IP exist"
  8. log_event 'debug' "$E_IP_EXIST $V_EVENT"
  9. exit $E_IP_EXIST
  10. fi
  11. }
  12. get_next_interface_number() {
  13. # Parsing ifconfig
  14. i=$(ifconfig -a |grep -w "$interface"|cut -f1 -d ' '|\
  15. tail -n 1|cut -f 2 -d :)
  16. # Checking result
  17. if [ "$i" = "$interface" ]; then
  18. n=0
  19. else
  20. n=$((i + 1))
  21. fi
  22. echo ":$n"
  23. }
  24. is_sys_ip_valid() {
  25. # Parsing ifconfig
  26. check_ifc=$(/sbin/ifconfig |grep "inet addr:$ip")
  27. # Checking ip existance
  28. if [ ! -e "$V_IPS/$ip" ] || [ -z "$check_ifc" ]; then
  29. echo "Error: IP not exist"
  30. log_event 'debug' "$E_IP_NOTEXIST $V_EVENT"
  31. exit $E_IP_NOTEXIST
  32. fi
  33. }
  34. is_ip_key_empty() {
  35. key="$1"
  36. # Parsing ip
  37. string=$(cat $V_IPS/$ip )
  38. # Parsing key=value
  39. for keys in $string; do
  40. eval ${keys%%=*}=${keys#*=}
  41. done
  42. # Self reference
  43. eval value="$key"
  44. # Checkng key
  45. if [ ! -z "$value" ] && [ "$value" != '0' ]; then
  46. echo "Error: value is not empty = $value "
  47. log_event 'debug' "$E_VALUE_EXIST $V_EVENT"
  48. exit $E_VALUE_EXIST
  49. fi
  50. }
  51. update_sys_ip_value() {
  52. key="$1"
  53. value="$2"
  54. # Defining conf
  55. conf="$V_IPS/$ip"
  56. # Parsing conf
  57. str=$(cat $conf)
  58. # Reading key=values
  59. for keys in $str; do
  60. eval ${keys%%=*}=${keys#*=}
  61. done
  62. # Define clean key
  63. c_key=$(echo "${key//$/}")
  64. eval old="${key}"
  65. # Escaping slashes
  66. old=$(echo "$old" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g')
  67. new=$(echo "$value" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g')
  68. # Updating conf
  69. sed -i "$str_number s/$c_key='${old//\*/\\*}'/$c_key='${new//\*/\\*}'/g"\
  70. $conf
  71. }
  72. is_ip_avalable() {
  73. # Checking ip existance
  74. if [ ! -e "$V_IPS/$ip" ]; then
  75. echo "Error: IP not exist"
  76. log_event 'debug' "$E_IP_NOTEXIST $V_EVENT"
  77. exit $E_IP_NOTEXIST
  78. fi
  79. # Parsing ip data
  80. ip_data=$(cat $V_IPS/$ip)
  81. ip_owner=$(echo "$ip_data" | grep 'OWNER=' | cut -f 2 -d \' )
  82. ip_status=$(echo "$ip_data" | grep 'STATUS=' | cut -f 2 -d \' )
  83. # Parsing user data
  84. user_owner=$(grep 'OWNER=' $V_USERS/$user/user.conf | cut -f 2 -d \')
  85. if [ "$user_owner" = "$ip_owner" ] && [ "$ip_status" = 'shared' ]; then
  86. ip_shared='yes'
  87. else
  88. ip_shared='no'
  89. fi
  90. if [ "$ip_owner" != "$user" ] && [ "$ip_shared" != 'yes' ]; then
  91. echo "Error: ip not owned by user"
  92. log_event 'debug' "$E_IP_NOTOWNED $V_EVENT"
  93. exit $E_IP_NOTOWNED
  94. fi
  95. }
  96. is_sys_ip_owner() {
  97. # Parsing ip
  98. ip_owner=$(grep 'OWNER=' $V_IPS/$ip|cut -f 2 -d \')
  99. if [ "$ip_owner" != "$user" ]; then
  100. echo "Error: IP not owned"
  101. log_event 'debug' "$E_IP_NOTOWNED $V_EVENT"
  102. exit $E_IP_NOTOWNED
  103. fi
  104. }
  105. get_ip_name() {
  106. # Prinitng name
  107. grep "NAME=" $V_IPS/$ip |cut -f 2 -d \'
  108. }
  109. increase_ip_value() {
  110. USER=$user
  111. web_key='U_WEB_DOMAINS'
  112. usr_key='U_SYS_USERS'
  113. # Parsing values
  114. current_web=$(grep "$web_key=" $V_IPS/$ip |cut -f 2 -d \')
  115. current_usr=$(grep "$usr_key=" $V_IPS/$ip |cut -f 2 -d \')
  116. # Checking result
  117. if [ -z "$current_web" ]; then
  118. echo "Error: Parsing error"
  119. log_event 'debug' "$E_PARSE_ERROR $V_EVENT"
  120. exit $E_PARSE_ERROR
  121. fi
  122. # +1 webdomain
  123. new_web=$((current_web + 1))
  124. # +1 user
  125. if [ -z "$current_usr" ]; then
  126. new_usr="$USER"
  127. else
  128. check_usr=$(echo -e "${current_usr//,/\n}" |grep -w $USER)
  129. if [ -z "$check_usr" ]; then
  130. new_usr="$current_usr,$USER"
  131. else
  132. new_usr="$current_usr"
  133. fi
  134. fi
  135. # Changing config
  136. sed -i "s/$web_key='$current_web'/$web_key='$new_web'/g" $V_IPS/$ip
  137. sed -i "s/$usr_key='$current_usr'/$usr_key='$new_usr'/g" $V_IPS/$ip
  138. }
  139. decrease_ip_value() {
  140. sip=${1-ip}
  141. USER=$user
  142. web_key='U_WEB_DOMAINS'
  143. usr_key='U_SYS_USERS'
  144. # Parsing values
  145. current_web=$(grep "$web_key=" $V_IPS/$sip |cut -f 2 -d \')
  146. current_usr=$(grep "$usr_key=" $V_IPS/$sip |cut -f 2 -d \')
  147. # Checking result
  148. if [ -z "$current_web" ]; then
  149. echo "Error: Parsing error"
  150. log_event 'debug' "$E_PARSE_ERROR $V_EVENT"
  151. exit $E_PARSE_ERROR
  152. fi
  153. # -1 webdomain
  154. new_web=$((current_web - 1))
  155. # -1 user
  156. check_ip=$(grep $sip $V_USERS/$user/web_domains.conf |wc -l)
  157. if [ "$check_ip" -lt 2 ]; then
  158. new_usr=$(echo "$current_usr" |\
  159. sed -e "s/,/\n/g"|\
  160. sed -e "s/^$user$//g"|\
  161. sed -e "/^$/d"|\
  162. sed -e ':a;N;$!ba;s/\n/,/g')
  163. else
  164. new_usr="$current_usr"
  165. fi
  166. # Changing config
  167. sed -i "s/$web_key='$current_web'/$web_key='$new_web'/g" $V_IPS/$sip
  168. sed -i "s/$usr_key='$current_usr'/$usr_key='$new_usr'/g" $V_IPS/$sip
  169. }
  170. get_sys_ip_value() {
  171. key="$1"
  172. # Parsing domains
  173. string=$( cat $V_IPS/$ip )
  174. # Parsing key=value
  175. for keys in $string; do
  176. eval ${keys%%=*}=${keys#*=}
  177. done
  178. # Self reference
  179. eval value="$key"
  180. # Print value
  181. echo "$value"
  182. }
  183. change_domain_ip() {
  184. # Defining vars
  185. conf="$1"
  186. domain="$2"
  187. ip="$3"
  188. old_ip="$4"
  189. tpl_file="$5"
  190. # Get ServerName line
  191. serv_line=$(grep -n 'ServerName %domain%' "$tpl_file" |cut -f 1 -d :)
  192. # Get tpl_file last line
  193. last_line=$(wc -l $tpl_file|cut -f 1 -d ' ')
  194. # Get before line
  195. bfr_line=$((serv_line - 1))
  196. # Parsing httpd.conf
  197. str=$(grep -B $bfr_line -n "ServerName $domain" $conf|grep '<VirtualHost')
  198. # Checking integrity
  199. if [ -z "$str" ] || [ -z "$serv_line" ] || [ -z "$bfr_line" ]; then
  200. echo "Error: httpd parsing error"
  201. log_event 'debug' "$E_PARSE_ERROR $V_EVENT"
  202. exit $E_PARSE_ERROR
  203. fi
  204. # String number
  205. str_number=$(echo $str | sed -e "s/-/+/" | cut -f 1 -d '+')
  206. # Changing elog in config
  207. sed -i "$str_number s/$old_ip/$ip/g" $conf
  208. }
  209. get_current_interface() {
  210. # Parsing ifconfig
  211. i=$(/sbin/ifconfig |grep -B1 "addr:$ip "|head -n 1 |cut -f 1 -d ' ')
  212. # Checking result
  213. if [ -z "$i" ]; then
  214. echo "Error: IP not exist"
  215. log_event 'debug' "$E_IP_NOTEXIST $V_EVENT"
  216. exit $E_IP_NOTEXIST
  217. fi
  218. # Checking ip is alias
  219. check_alias=$(echo $i| cut -s -f 2 -d :)
  220. if [ -z "$check_alias" ]; then
  221. echo "Error: IP is first on interface"
  222. log_event 'debug' "$E_IP_FIRST $V_EVENT"
  223. exit $E_IP_FIRST
  224. fi
  225. echo "$i"
  226. }
  227. ip_json_single_list() {
  228. # Definigng variables
  229. IP="$ip" # ip
  230. i=1 # iterator
  231. # Define words number
  232. last_word=$(echo "$fields" | wc -w)
  233. # Reading file line by line
  234. line=$(cat $V_IPS/$IP)
  235. # Print top bracket
  236. echo '{'
  237. # Parsing key=value
  238. for key in $line; do
  239. eval ${key%%=*}=${key#*=}
  240. done
  241. # Starting output loop
  242. for field in $fields; do
  243. # Parsing key=value
  244. eval value=$field
  245. # Checking first field
  246. if [ "$i" -eq 1 ]; then
  247. echo -e "\t\"$value\": {"
  248. else
  249. if [ "$last_word" -eq "$i" ]; then
  250. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
  251. else
  252. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
  253. fi
  254. fi
  255. # Updating iterator
  256. i=$(( i + 1))
  257. done
  258. # If there was any output
  259. if [ -n "$value" ]; then
  260. echo -e "\t}"
  261. fi
  262. # Printing bottom json bracket
  263. echo -e "}"
  264. }
  265. ip_shell_single_list() {
  266. # Definigng variables
  267. IP="$ip" # ip
  268. # Reading file line by line
  269. line=$(cat $V_IPS/$IP)
  270. # Parsing key=value
  271. for key in $line; do
  272. eval ${key%%=*}=${key#*=}
  273. done
  274. # Print result line
  275. for field in $fields; do
  276. eval key="$field"
  277. echo "${field//$/}: $key "
  278. done
  279. }
  280. ip_json_list() {
  281. i='1' # iterator
  282. end=$(($limit + $offset)) # last string
  283. # Definining user list
  284. ip_list=$(ls $V_IPS/)
  285. # Print top bracket
  286. echo '{'
  287. # Starting main loop
  288. for IP in $ip_list; do
  289. # Checking offset and limit
  290. if [ "$i" -ge "$offset" ] && [ "$i" -lt "$end" ] && [ "$offset" -gt 0 ]
  291. then
  292. # Reading user data
  293. ip_data=$(cat $V_IPS/$IP)
  294. # Parsing key/value config
  295. for key in $ip_data; do
  296. eval ${key%%=*}=${key#*=}
  297. done
  298. # Checking !first line to print bracket with coma
  299. if [ "$i" -ne "$offset" ]; then
  300. echo -e "\t},"
  301. fi
  302. # Defining local iterator and words count
  303. j='1'
  304. last_word=$(echo "$fields" | wc -w)
  305. # Print data
  306. for field in $fields; do
  307. eval value=$field
  308. # Checking parrent key
  309. if [ "$j" -eq 1 ]; then
  310. echo -e "\t\"$value\": {"
  311. else
  312. if [ "$j" -eq "$last_word" ]; then
  313. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
  314. else
  315. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
  316. fi
  317. fi
  318. j=$(($j + 1))
  319. done
  320. fi
  321. i=$(($i + 1))
  322. done
  323. # If there was any output
  324. if [ -n "$value" ]; then
  325. echo -e "\t}"
  326. fi
  327. # Printing bottom json bracket
  328. echo '}'
  329. }
  330. ip_shell_list() {
  331. i='1' # iterator
  332. end=$(($limit + $offset)) # last string
  333. # Definining ip list
  334. ip_list=$(ls $V_IPS/)
  335. # Print brief info
  336. echo "${fields//$/}"
  337. for a in $fields; do
  338. echo -e "--------- \c"
  339. done
  340. echo # new line
  341. # Starting main loop
  342. for IP in $ip_list; do
  343. # Checking offset and limit
  344. if [ "$i" -ge "$offset" ] && [ "$i" -lt "$end" ] && [ "$offset" -gt 0 ]
  345. then
  346. # Reading user data
  347. ip_data=$(cat $V_IPS/$IP)
  348. # Parsing key/value config
  349. for key in $ip_data; do
  350. eval ${key%%=*}=${key#*=}
  351. done
  352. # Print result line
  353. eval echo "$fields"
  354. fi
  355. i=$(($i + 1))
  356. done
  357. }
  358. ip_user_json_list() {
  359. i='1' # iterator
  360. end=$(($limit + $offset)) # last string
  361. user_ip=$(grep -l "OWNER='$user'" $V_IPS/*)
  362. owner_ip=$(grep -l -A2 "OWNER='$owner'" $V_IPS/*|grep "STATUS='shared'"|\
  363. cut -f 1 -d -)
  364. # Definining ip list
  365. ip_list=$(echo -e "$user_ip\n$owner_ip"|sort|uniq)
  366. # Print top bracket
  367. echo '{'
  368. # Starting main loop
  369. for IP in ${ip_list//$V_IPS\//}; do
  370. # Checking offset and limit
  371. if [ "$i" -ge "$offset" ] && [ "$i" -lt "$end" ] && [ "$offset" -gt 0 ]
  372. then
  373. # Reading user data
  374. ip_data=$(cat $V_IPS/$IP)
  375. # Parsing key/value config
  376. for key in $ip_data; do
  377. eval ${key%%=*}=${key#*=}
  378. done
  379. # Checking !first line to print bracket with coma
  380. if [ "$i" -ne "$offset" ]; then
  381. echo -e "\t},"
  382. fi
  383. # Defining local iterator and words count
  384. j='1'
  385. last_word=$(echo "$fields"| wc -w)
  386. # Print data
  387. for field in $fields; do
  388. eval value=$field
  389. # Checking parrent key
  390. if [ "$j" -eq 1 ]; then
  391. echo -e "\t\"$value\": {"
  392. else
  393. if [ "$j" -eq "$last_word" ]; then
  394. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
  395. else
  396. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
  397. fi
  398. fi
  399. j=$(($j + 1))
  400. done
  401. fi
  402. i=$(($i + 1))
  403. done
  404. # If there was any output
  405. if [ -n "$value" ]; then
  406. echo -e "\t}"
  407. fi
  408. # Printing bottom json bracket
  409. echo '}'
  410. }
  411. ip_user_shell_list() {
  412. i='1' # iterator
  413. end=$(($limit + $offset)) # last string
  414. user_ip=$(grep -l "OWNER='$user'" $V_IPS/*)
  415. owner_ip=$(grep -A2 "OWNER='$owner'" $V_IPS/* |grep "STATUS='shared'" |\
  416. cut -f 1 -d -)
  417. # Definining ip list
  418. ip_list=$(echo -e "$user_ip\n$owner_ip"|sort|uniq)
  419. # Print brief info
  420. echo "${fields//$/}"
  421. for a in $fields; do
  422. echo -e "--------- \c"
  423. done
  424. echo # new line
  425. # Starting main loop
  426. for IP in ${ip_list//$V_IPS\//}; do
  427. # Checking offset and limit
  428. if [ "$i" -ge "$offset" ] && [ "$i" -lt "$end" ] && [ "$offset" -gt 0 ]
  429. then
  430. # Reading user data
  431. ip_data=$(cat $V_IPS/$IP)
  432. # Parsing key/value config
  433. for key in $ip_data; do
  434. eval ${key%%=*}=${key#*=}
  435. done
  436. # Print result line
  437. eval echo "$fields"
  438. fi
  439. i=$(($i + 1))
  440. done
  441. }
  442. ip_add_vesta() {
  443. # Filling ip values
  444. ip_data="OWNER='$owner'"
  445. ip_data="$ip_data\nSTATUS='$ip_status'"
  446. ip_data="$ip_data\nNAME='$ip_name'"
  447. ip_data="$ip_data\nU_SYS_USERS=''"
  448. ip_data="$ip_data\nU_WEB_DOMAINS='0'"
  449. ip_data="$ip_data\nINTERFACE='$interface'"
  450. ip_data="$ip_data\nNETMASK='$mask'"
  451. ip_data="$ip_data\nDATE='$V_DATE'"
  452. # Adding ip
  453. echo -e "$ip_data" >$V_IPS/$ip
  454. }
  455. ip_add_startup() {
  456. # Filling ip values
  457. ip_data="# Added by vesta $V_SCRIPT"
  458. ip_data="$ip_data\nDEVICE=$iface"
  459. ip_data="$ip_data\nBOOTPROTO=static\nONBOOT=yes"
  460. ip_data="$ip_data\nIPADDR=$ip"
  461. ip_data="$ip_data\nNETMASK=$mask"
  462. # Adding ip
  463. echo -e "$ip_data" >$iconf-$iface
  464. }
  465. ipint_json_list() {
  466. interfaces=$(cat /proc/net/dev|grep :|cut -f 1 -d :|sed -e "s/ //g")
  467. int_counter=$(echo "$interfaces"|wc -l)
  468. i=1
  469. # Print top bracket
  470. echo '['
  471. # Listing servers
  472. for interface in $interfaces; do
  473. if [ "$i" -lt "$int_counter" ]; then
  474. echo -e "\t\"$interface\","
  475. else
  476. echo -e "\t\"$interface\""
  477. fi
  478. i=$((i + 1))
  479. done
  480. echo "]"
  481. }
  482. ipint_shell_list() {
  483. interfaces=$(cat /proc/net/dev|grep :|cut -f 1 -d :|sed -e "s/ //g")
  484. # Print result
  485. echo "INTERFACES"
  486. echo "----------"
  487. for interface in $interfaces; do
  488. echo "$interface"
  489. done
  490. }