db.func 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917
  1. is_db_valid() {
  2. config="$V_USERS/$user/db.conf"
  3. check_db=$(grep "DB='$database'" $config)
  4. # Checking result
  5. if [ -z "$check_db" ]; then
  6. echo "Error: db not added"
  7. log_event 'debug' "$E_NOTEXIST $V_EVENT"
  8. exit $E_NOTEXIST
  9. fi
  10. }
  11. is_db_new() {
  12. # Parsing domain values
  13. check_db=$(grep -F "DB='$database'" $V_USERS/$user/db.conf)
  14. # Checking result
  15. if [ ! -z "$check_db" ]; then
  16. echo "Error: db exist"
  17. log_event 'debug' "$E_EXISTS $V_EVENT"
  18. exit $E_EXISTS
  19. fi
  20. }
  21. # Checking database host existance
  22. is_db_host_valid() {
  23. config="$V_DB/$type.conf"
  24. check_db=$(grep "HOST='$host'" $config)
  25. # Checking result
  26. if [ -z "$check_db" ]; then
  27. echo "Error: host not added"
  28. log_event 'debug' "$E_NOTEXIST $V_EVENT"
  29. exit $E_NOTEXIST
  30. fi
  31. }
  32. get_next_db_host() {
  33. # Defining vars
  34. config="$V_DB/$type.conf"
  35. host="empty"
  36. host_str=$(grep "ACTIVE='yes'" $config)
  37. # Checking rows count
  38. check_row=$(echo "$host_str"|wc -l)
  39. # Checking empty result
  40. if [ 0 -eq "$check_row" ]; then
  41. echo "$host"
  42. exit
  43. fi
  44. # Checking one host
  45. if [ 1 -eq "$check_row" ]; then
  46. for key in $host_str; do
  47. eval ${key%%=*}="${key#*=}"
  48. done
  49. users=$(echo -e "${U_SYS_USERS//,/\n}"|wc -l)
  50. if [ "$MAX_DB" -gt "$U_DB_BASES" ]; then
  51. host=$HOST
  52. fi
  53. echo "$host"
  54. exit
  55. fi
  56. # Defining balancing function
  57. weight_balance() {
  58. ow='100' # old_weght
  59. IFS=$'\n'
  60. for db in $host_str; do
  61. for key in $(echo $db|sed -e "s/' /'\n/g"); do
  62. eval ${key%%=*}="${key#*=}"
  63. done
  64. weight=$(echo "$U_DB_BASES * 100 / $MAX_DB"|bc)
  65. users=$(echo -e "${U_SYS_USERS//,/\n}"|wc -l)
  66. if [ "$ow" -gt "$weight" ]; then
  67. host="$HOST"
  68. ow="$weight"
  69. fi
  70. done
  71. }
  72. # Defining random balancing function
  73. random_balance() {
  74. # Parsing host pool
  75. HOST_LIST=''
  76. IFS=$'\n'
  77. for db in $host_str; do
  78. for key in $(echo $db|sed -e "s/' /'\n/g"); do
  79. eval ${key%%=*}="${key#*=}"
  80. done
  81. users=$(echo -e "${U_SYS_USERS//,/\n}"|wc -l)
  82. if [ "$MAX_DB" -gt "$U_DB_BASES" ]; then
  83. HOST_LIST="$HOST_LIST$HOST "
  84. fi
  85. done
  86. # Checking one host
  87. if [ 2 -eq $(echo -e "${HOST_LIST// /\n}"|wc -l) ]; then
  88. host="${HOST_LIST// /\n}"# should test with disabled host
  89. else
  90. # Selecting all hosts
  91. HOSTS=($(echo -e "${HOST_LIST// /\n}"))
  92. num=${#HOSTS[*]}
  93. host="${HOSTS[$((RANDOM%num))]}"
  94. fi
  95. }
  96. # Defining first balancing function
  97. first_balance() {
  98. # Parsing host pool
  99. IFS=$'\n'
  100. for db in $host_str; do
  101. for key in $(echo $db|sed -e "s/' /'\n/g"); do
  102. eval ${key%%=*}="${key#*=}"
  103. done
  104. users=$(echo -e "${U_SYS_USERS//,/\n}"|wc -l)
  105. if [ "$MAX_DB" -gt "$U_DB_BASES" ]; then
  106. host="$HOST"
  107. break
  108. fi
  109. done
  110. }
  111. # Parsing domain values
  112. db_balance=$(grep "DB_BALANCE='" $V_CONF/vesta.conf|cut -f 2 -d \')
  113. case $db_balance in
  114. weight) weight_balance "$config" ;;
  115. random) random_balance "$config" ;;
  116. first) first_balance "$config" ;;
  117. *) random_balance "$config" ;;
  118. esac
  119. echo "$host"
  120. }
  121. increase_db_value() {
  122. # Defining vars
  123. conf="$V_DB/$type.conf"
  124. host_str=$(grep "HOST='$host'" $conf)
  125. for key in $host_str; do
  126. eval ${key%%=*}=${key#*=}
  127. done
  128. # Increasing db_bases usage value
  129. U_DB_BASES=$((U_DB_BASES + 1))
  130. # Adding user to SYS_USERS pool
  131. if [ -z "$U_SYS_USERS" ]; then
  132. U_SYS_USERS="$user"
  133. else
  134. check_users=$(echo $U_SYS_USERS|sed -e "s/,/\n/g"|grep -w "$user")
  135. if [ -z "$check_users" ]; then
  136. U_SYS_USERS="$U_SYS_USERS,$user"
  137. fi
  138. fi
  139. # Concatenating db string
  140. case $type in
  141. mysql) new_str="HOST='$HOST' USER='$USER' PASSWORD='$PASSWORD'";
  142. new_str="$new_str PORT='$PORT' MAX_DB='$MAX_DB'";
  143. new_str="$new_str U_SYS_USERS='$U_SYS_USERS'";
  144. new_str="$new_str U_DB_BASES='$U_DB_BASES' ACTIVE='$ACTIVE'";
  145. new_str="$new_str DATE='$DATE'";;
  146. pgsql) new_str="HOST='$HOST' USER='$USER' PASSWORD='$PASSWORD'";
  147. new_str="$new_str PORT='$PORT' TPL='$TPL' MAX_DB='$MAX_DB'";
  148. new_str="$new_str U_SYS_USERS='$U_SYS_USERS'";
  149. new_str="$new_str U_DB_BASES='$U_DB_BASES' ACTIVE='$ACTIVE'";
  150. new_str="$new_str DATE='$DATE'";;
  151. esac
  152. # Changing config
  153. sed -i "s/$host_str/$new_str/g" $conf
  154. }
  155. decrease_db_value() {
  156. # Defining vars
  157. conf="$V_DB/$type.conf"
  158. host_str=$(grep "HOST='$host'" $conf)
  159. for key in $host_str; do
  160. eval ${key%%=*}=${key#*=}
  161. done
  162. # Decreasing db_bases usage value
  163. U_DB_BASES=$((U_DB_BASES - 1))
  164. # Checking user databases on that host
  165. udb=$(grep "TYPE='$type'" $V_USERS/$user/db.conf|grep "HOST='$host'"|wc -l)
  166. if [ 2 -gt "$udb" ]; then
  167. U_SYS_USERS=$(echo "$U_SYS_USERS" | sed -e "s/,/\n/g" |\
  168. sed -e "/^$user$/d" | sed -e :a -e '$!N;s/\n/,/;ta')
  169. fi
  170. # Concatenating db string
  171. case $type in
  172. mysql) new_str="HOST='$HOST' USER='$USER' PASSWORD='$PASSWORD'";
  173. new_str="$new_str PORT='$PORT'";
  174. new_str="$new_str MAX_DB='$MAX_DB' U_SYS_USERS='$U_SYS_USERS'";
  175. new_str="$new_str U_DB_BASES='$U_DB_BASES' ACTIVE='$ACTIVE'";
  176. new_str="$new_str DATE='$DATE'";;
  177. pgsql) new_str="HOST='$HOST' USER='$USER' PASSWORD='$PASSWORD'";
  178. new_str="$new_str PORT='$PORT' TPL='$TPL'";
  179. new_str="$new_str MAX_DB='$MAX_DB'";
  180. new_str="$new_str U_SYS_USERS='$U_SYS_USERS'";
  181. new_str="$new_str U_DB_BASES='$U_DB_BASES' ACTIVE='$ACTIVE'";
  182. new_str="$new_str DATE='$DATE'";;
  183. esac
  184. # Changing config
  185. sed -i "s/$host_str/$new_str/g" $conf
  186. }
  187. create_db_mysql() {
  188. # Defining vars
  189. host_str=$(grep "HOST='$host'" $V_DB/mysql.conf)
  190. for key in $host_str; do
  191. eval ${key%%=*}=${key#*=}
  192. done
  193. sql="mysql -h $HOST -u $USER -p$PASSWORD -P$PORT -e"
  194. # Checking empty vars
  195. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  196. echo "Error: config is broken"
  197. log_event 'debug' "$E_PARSING $V_EVENT"
  198. exit $E_PARSING
  199. fi
  200. # Checking connection
  201. $sql "SELECT VERSION()" >/dev/null 2>&1; code="$?"
  202. if [ '0' -ne "$code" ]; then
  203. echo "Error: Connect failed"
  204. log_event 'debug' "$E_DB $V_EVENT"
  205. exit $E_DB
  206. fi
  207. # Adding database & checking result
  208. $sql "CREATE DATABASE $database CHARACTER SET $encoding" > /dev/null 2>&1
  209. code="$?"
  210. if [ '0' -ne "$code" ]; then
  211. echo "Error: Connect failed"
  212. log_event 'debug' "$E_DB $V_EVENT"
  213. exit $E_DB
  214. fi
  215. # Adding user with password (% will give access to db from any ip)
  216. $sql "GRANT ALL ON $database.* TO '$db_user'@'%' \
  217. IDENTIFIED BY '$db_password'"
  218. # Adding grant for localhost (% doesn't do that )
  219. if [ "$host" = 'localhost' ]; then
  220. $sql "GRANT ALL ON $database.* TO '$db_user'@'localhost' \
  221. IDENTIFIED BY '$db_password'"
  222. fi
  223. # Flushing priveleges
  224. $sql "FLUSH PRIVILEGES"
  225. }
  226. create_db_pgsql() {
  227. # Defining vars
  228. host_str=$(grep "HOST='$host'" $V_DB/pgsql.conf)
  229. for key in $host_str; do
  230. eval ${key%%=*}=${key#*=}
  231. done
  232. export PGPASSWORD="$PASSWORD"
  233. sql="psql -h $HOST -U $USER -p $PORT -c"
  234. # Checking empty vars
  235. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  236. echo "Error: config is broken"
  237. log_event 'debug' "$E_PARSING $V_EVENT"
  238. exit $E_PARSING
  239. fi
  240. # Checking connection
  241. $sql "SELECT VERSION()" >/dev/null 2>&1;code="$?"
  242. if [ '0' -ne "$code" ]; then
  243. echo "Error: Connect failed"
  244. log_event 'debug' "$E_DB $V_EVENT"
  245. exit $E_DB
  246. fi
  247. # Adding new role
  248. $sql "CREATE ROLE $db_user WITH LOGIN PASSWORD '$db_password'" >/dev/null
  249. code=$?
  250. if [ '0' -ne "$code" ]; then
  251. echo "Error: Connect failed"
  252. log_event 'debug' "$E_DB $V_EVENT"
  253. exit $E_DB
  254. fi
  255. # Adding database & checking result
  256. sql_q="CREATE DATABASE $database OWNER $db_user" > /dev/null
  257. if [ "$TPL" = 'template0' ]; then
  258. sql_q="$sql_q ENCODING '$encoding' TEMPLATE $TPL" > /dev/null
  259. else
  260. sql_q="$sql_q TEMPLATE $TPL" > /dev/null
  261. fi
  262. $sql "$sql_q" >/dev/null
  263. $sql "GRANT ALL PRIVILEGES ON DATABASE $database TO $db_user" > /dev/null
  264. $sql "GRANT CONNECT ON DATABASE template1 to $db_user" > /dev/null
  265. export PGPASSWORD='pgsql'
  266. }
  267. is_db_host_new() {
  268. if [ -e "$V_DB/$type.conf" ]; then
  269. check_host=$(grep "HOST='$host'" $V_DB/$type.conf)
  270. if [ ! -z "$check_host" ]; then
  271. echo "Error: db host exist"
  272. log_event 'debug' "$E_EXISTS $V_EVENT"
  273. exit $E_EXISTS
  274. fi
  275. fi
  276. }
  277. is_mysql_host_alive() {
  278. # Checking connection
  279. sql="mysql -h $host -u $db_user -p$db_password -P$port -e"
  280. $sql "SELECT VERSION()" >/dev/null 2>&1; code="$?"
  281. if [ '0' -ne "$code" ]; then
  282. echo "Error: Connect failed"
  283. log_event 'debug' "$E_DB $V_EVENT"
  284. exit $E_DB
  285. fi
  286. }
  287. is_pgsql_host_alive() {
  288. # Checking connection
  289. export PGPASSWORD="$db_password"
  290. sql="psql -h $host -U $db_user -p $port -c "
  291. $sql "SELECT VERSION()" >/dev/null 2>&1;code="$?"
  292. if [ '0' -ne "$code" ]; then
  293. echo "Error: Connect failed"
  294. log_event 'debug' "$E_DB $V_EVENT"
  295. exit $E_DB
  296. fi
  297. }
  298. is_db_suspended() {
  299. config="$V_USERS/$user/db.conf"
  300. check_db=$(grep "DB='$database'" $config|grep "SUSPEND='yes'")
  301. # Checking result
  302. if [ ! -z "$check_db" ]; then
  303. echo "Error: db suspended"
  304. log_event 'debug' "$E_SUSPENDED $V_EVENT"
  305. exit $E_SUSPENDED
  306. fi
  307. }
  308. is_db_unsuspended() {
  309. config="$V_USERS/$user/db.conf"
  310. check_db=$(grep "DB='$database'" $config|grep "SUSPEND='yes'")
  311. # Checking result
  312. if [ -z "$check_db" ]; then
  313. echo "Error: db unsuspended"
  314. log_event 'debug' "$E_UNSUSPENDED $V_EVENT"
  315. exit $E_UNSUSPENDED
  316. fi
  317. }
  318. is_db_user_valid() {
  319. config="$V_USERS/$user/db.conf"
  320. check_db=$(grep "DB='$database'" $config|grep "USER='$db_user'")
  321. # Checking result
  322. if [ -z "$check_db" ]; then
  323. echo "Error: dbuser not exist"
  324. log_event 'debug' "$E_NOTEXIST $V_EVENT"
  325. exit $E_NOTEXIST
  326. fi
  327. }
  328. change_db_mysql_password() {
  329. # Defining vars
  330. host_str=$(grep "HOST='$host'" $V_DB/mysql.conf)
  331. for key in $host_str; do
  332. eval ${key%%=*}=${key#*=}
  333. done
  334. sql="mysql -h $HOST -u $USER -p$PASSWORD -P$PORT -e"
  335. # Checking empty vars
  336. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  337. echo "Error: config is broken"
  338. log_event 'debug' "$E_PARSING $V_EVENT"
  339. exit $E_PARSING
  340. fi
  341. # Checking connection
  342. $sql "SELECT VERSION()" >/dev/null 2>&1; code="$?"
  343. if [ '0' -ne "$code" ]; then
  344. echo "Error: Connect failed"
  345. log_event 'debug' "$E_DB $V_EVENT"
  346. exit $E_DB
  347. fi
  348. # Changing user password
  349. $sql "GRANT ALL ON $database.* TO '$db_user'@'%' \
  350. IDENTIFIED BY '$db_password'"
  351. $sql "GRANT ALL ON $database.* TO '$db_user'@'localhost' \
  352. IDENTIFIED BY '$db_password'"
  353. #$sql "SET PASSWORD FOR '$db_user'@'%' = PASSWORD('$db_password');"
  354. $sql "FLUSH PRIVILEGES"
  355. }
  356. change_db_pgsql_password() {
  357. # Defining vars
  358. host_str=$(grep "HOST='$host'" $V_DB/pgsql.conf)
  359. for key in $host_str; do
  360. eval ${key%%=*}=${key#*=}
  361. done
  362. export PGPASSWORD="$PASSWORD"
  363. sql="psql -h $HOST -U $USER -p $PORT -c"
  364. # Checking empty vars
  365. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  366. echo "Error: config is broken"
  367. log_event 'debug' "$E_PARSING $V_EVENT"
  368. exit $E_PARSING
  369. fi
  370. # Checking connection
  371. $sql "SELECT VERSION()" >/dev/null 2>&1;code="$?"
  372. if [ '0' -ne "$code" ]; then
  373. echo "Error: Connect failed"
  374. log_event 'debug' "$E_DB $V_EVENT"
  375. exit $E_DB
  376. fi
  377. $sql "ALTER ROLE $db_user WITH LOGIN PASSWORD '$db_password'" >/dev/null
  378. export PGPASSWORD='pgsql'
  379. }
  380. get_db_value() {
  381. # Defining vars
  382. key="$1"
  383. db_str=$(grep "DB='$database'" $V_USERS/$user/db.conf)
  384. # Parsing key=value
  385. for keys in $db_str; do
  386. eval ${keys%%=*}=${keys#*=}
  387. done
  388. # Self reference
  389. eval value="$key"
  390. # Print value
  391. echo "$value"
  392. }
  393. del_db_mysql() {
  394. # Defining vars
  395. host_str=$(grep "HOST='$host'" $V_DB/mysql.conf)
  396. for key in $host_str; do
  397. eval ${key%%=*}=${key#*=}
  398. done
  399. sql="mysql -h $HOST -u $USER -p$PASSWORD -P$PORT -e"
  400. # Checking empty vars
  401. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  402. echo "Error: config is broken"
  403. log_event 'debug' "$E_PARSING $V_EVENT"
  404. exit $E_PARSING
  405. fi
  406. # Checking connection
  407. $sql "SELECT VERSION()" >/dev/null 2>&1; code="$?"
  408. if [ '0' -ne "$code" ]; then
  409. echo "Error: Connect failed"
  410. log_event 'debug' "$E_DB $V_EVENT"
  411. exit $E_DB
  412. fi
  413. # Deleting database & checking result
  414. $sql "DROP DATABASE $database" >/dev/null 2>&1;code="$?"
  415. if [ '0' -ne "$code" ]; then
  416. echo "Error: Connect failed"
  417. log_event 'debug' "$E_DB $V_EVENT"
  418. exit $E_DB
  419. fi
  420. # Deleting user
  421. check_users=$(grep "USER='$db_user'" $V_USERS/$user/db.conf |wc -l)
  422. if [ 1 -ge "$check_users" ]; then
  423. $sql "DROP USER '$db_user'@'%'"
  424. if [ "$host" = 'localhost' ]; then
  425. $sql "DROP USER '$db_user'@'localhost'"
  426. fi
  427. else
  428. $sql "REVOKE ALL ON $database.* from '$db_user'@'%'"
  429. if [ "$host" = 'localhost' ]; then
  430. $sql "REVOKE ALL ON $database.* from '$db_user'@'localhost'"
  431. fi
  432. fi
  433. $sql "FLUSH PRIVILEGES"
  434. }
  435. del_db_pgsql() {
  436. # Defining vars
  437. host_str=$(grep "HOST='$host'" $V_DB/pgsql.conf)
  438. for key in $host_str; do
  439. eval ${key%%=*}=${key#*=}
  440. done
  441. export PGPASSWORD="$PASSWORD"
  442. sql="psql -h $HOST -U $USER -p $PORT -c"
  443. # Checking empty vars
  444. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  445. echo "Error: config is broken"
  446. log_event 'debug' "$E_PARSING $V_EVENT"
  447. exit $E_PARSING
  448. fi
  449. # Checking connection
  450. $sql "SELECT VERSION()" >/dev/null 2>&1;code="$?"
  451. if [ '0' -ne "$code" ]; then
  452. echo "Error: Connect failed"
  453. log_event 'debug' "$E_DB $V_EVENT"
  454. exit $E_DB
  455. fi
  456. # Deleting database & checking result
  457. $sql "REVOKE ALL PRIVILEGES ON DATABASE $database FROM $db_user">/dev/null
  458. $sql "DROP DATABASE $database" >/dev/null 2>&1;code="$?"
  459. if [ '0' -ne "$code" ]; then
  460. echo "Error: Connect failed"
  461. log_event 'debug' "$E_DB $V_EVENT"
  462. exit $E_DB
  463. fi
  464. # Deleting user
  465. check_users=$(grep "USER='$db_user'" $V_USERS/$user/db.conf |wc -l)
  466. if [ 1 -ge "$check_users" ]; then
  467. $sql "REVOKE CONNECT ON DATABASE template1 FROM $db_user" >/dev/null
  468. $sql "DROP ROLE $db_user" >/dev/null
  469. fi
  470. export PGPASSWORD='pgsql'
  471. }
  472. del_db_vesta() {
  473. conf="$V_USERS/$user/db.conf"
  474. # Parsing domains
  475. string=$( grep -n "DB='$database'" $conf | cut -f 1 -d : )
  476. if [ -z "$string" ]; then
  477. echo "Error: parse error"
  478. log_event 'debug' "$E_PARSING $V_EVENT"
  479. exit $E_PARSING
  480. fi
  481. sed -i "$string d" $conf
  482. }
  483. dump_db_mysql() {
  484. # Defining vars
  485. host_str=$(grep "HOST='$host'" $V_DB/mysql.conf)
  486. for key in $host_str; do
  487. eval ${key%%=*}=${key#*=}
  488. done
  489. sql="mysql -h $HOST -u $USER -p$PASSWORD -P$PORT -e"
  490. dumper="mysqldump -h $HOST -u $USER -p$PASSWORD -P$PORT -r"
  491. # Checking empty vars
  492. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  493. echo "Error: config is broken"
  494. log_event 'debug' "$E_PARSING $V_EVENT"
  495. exit $E_PARSING
  496. fi
  497. # Checking connection
  498. $sql "SELECT VERSION()" >/dev/null 2>&1; code="$?"
  499. if [ '0' -ne "$code" ]; then
  500. echo "Error: Connect failed"
  501. log_event 'debug' "$E_DB $V_EVENT"
  502. exit $E_DB
  503. fi
  504. # Dumping database
  505. $dumper $dump $database
  506. # Dumping user grants
  507. $sql "SHOW GRANTS FOR $db_user@localhost" | grep -v "Grants for" > $grants
  508. $sql "SHOW GRANTS FOR $db_user@'%'" | grep -v "Grants for" >> $grants
  509. }
  510. dump_db_pgsql() {
  511. # Defining vars
  512. host_str=$(grep "HOST='$host'" $V_DB/pgsql.conf)
  513. for key in $host_str; do
  514. eval ${key%%=*}=${key#*=}
  515. done
  516. export PGPASSWORD="$PASSWORD"
  517. sql="psql -h $HOST -U $USER -p $PORT -c"
  518. dumper="pg_dump -h $HOST -U $USER -p $PORT -c -d -O -x -i -f"
  519. # Checking empty vars
  520. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  521. echo "Error: config is broken"
  522. log_event 'debug' "$E_PARSING $V_EVENT"
  523. exit $E_PARSING
  524. fi
  525. # Checking connection
  526. $sql "SELECT VERSION()" >/dev/null 2>&1;code="$?"
  527. if [ '0' -ne "$code" ]; then
  528. echo "Error: Connect failed"
  529. log_event 'debug' "$E_DB $V_EVENT"
  530. exit $E_DB
  531. fi
  532. # Dumping database
  533. $dumper $dump $database
  534. # Dumping user grants
  535. md5=$($sql "SELECT rolpassword FROM pg_authid WHERE rolname='$db_user';")
  536. md5=$(echo "$md5" | head -n 1 | cut -f 2 -d ' ')
  537. pw_str="UPDATE pg_authid SET rolpassword='$md5' WHERE rolname='$db_user';"
  538. gr_str="GRANT ALL PRIVILEGES ON DATABASE $database to '$db_user'"
  539. echo -e "$pw_str\n$gr_str" >> $grants
  540. export PGPASSWORD='pgsql'
  541. }
  542. is_db_host_free() {
  543. # Defining vars
  544. host_str=$(grep "HOST='$host'" $V_DB/$type.conf)
  545. for key in $host_str; do
  546. eval ${key%%=*}=${key#*=}
  547. done
  548. # Checking U_DB_BASES
  549. if [ 0 -ne "$U_DB_BASES" ]; then
  550. echo "Error: host is used"
  551. log_event 'debug' "$E_INUSE $V_EVENT"
  552. exit $E_INUSE
  553. fi
  554. }
  555. del_dbhost_vesta() {
  556. conf="$V_DB/$type.conf"
  557. # Parsing domains
  558. string=$( grep -n "HOST='$host'" $conf | cut -f 1 -d : )
  559. if [ -z "$string" ]; then
  560. echo "Error: parse error"
  561. log_event 'debug' "$E_PARSING $V_EVENT"
  562. exit $E_PARSING
  563. fi
  564. sed -i "$string d" $conf
  565. }
  566. update_db_base_value() {
  567. key="$1"
  568. value="$2"
  569. # Defining conf
  570. conf="$V_USERS/$user/db.conf"
  571. # Parsing conf
  572. db_str=$(grep -n "DB='$database'" $conf)
  573. str_number=$(echo $db_str | cut -f 1 -d ':')
  574. str=$(echo $db_str | cut -f 2 -d ':')
  575. # Reading key=values
  576. for keys in $str; do
  577. eval ${keys%%=*}=${keys#*=}
  578. done
  579. # Defining clean key
  580. c_key=$(echo "${key//$/}")
  581. eval old="${key}"
  582. # Escaping slashes
  583. old=$(echo "$old" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g')
  584. new=$(echo "$value" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g')
  585. # Updating conf
  586. sed -i "$str_number s/$c_key='${old//\*/\\*}'/$c_key='${new//\*/\\*}'/g"\
  587. $conf
  588. }
  589. suspend_db_mysql() {
  590. # Defining vars
  591. host_str=$(grep "HOST='$host'" $V_DB/mysql.conf)
  592. for key in $host_str; do
  593. eval ${key%%=*}=${key#*=}
  594. done
  595. sql="mysql -h $HOST -u $USER -p$PASSWORD -P$PORT -e"
  596. # Checking empty vars
  597. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  598. echo "Error: config is broken"
  599. log_event 'debug' "$E_PARSING $V_EVENT"
  600. exit $E_PARSING
  601. fi
  602. # Checking connection
  603. $sql "SELECT VERSION()" >/dev/null 2>&1; code="$?"
  604. if [ '0' -ne "$code" ]; then
  605. echo "Error: Connect failed"
  606. log_event 'debug' "$E_DB $V_EVENT"
  607. exit $E_DB
  608. fi
  609. # Suspending user
  610. $sql "REVOKE ALL ON $database.* FROM '$db_user'@'%'"
  611. $sql "FLUSH PRIVILEGES"
  612. }
  613. suspend_db_pgsql() {
  614. # Defining vars
  615. host_str=$(grep "HOST='$host'" $V_DB/pgsql.conf)
  616. for key in $host_str; do
  617. eval ${key%%=*}=${key#*=}
  618. done
  619. export PGPASSWORD="$PASSWORD"
  620. sql="psql -h $HOST -U $USER -p $PORT -c"
  621. # Checking empty vars
  622. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  623. echo "Error: config is broken"
  624. log_event 'debug' "$E_PARSING $V_EVENT"
  625. exit $E_PARSING
  626. fi
  627. # Checking connection
  628. $sql "SELECT VERSION()" >/dev/null 2>&1;code="$?"
  629. if [ '0' -ne "$code" ]; then
  630. echo "Error: Connect failed"
  631. log_event 'debug' "$E_DB $V_EVENT"
  632. exit $E_DB
  633. fi
  634. # Suspending user
  635. $sql "REVOKE ALL PRIVILEGES ON $database FROM $db_user">/dev/null
  636. export PGPASSWORD='pgsql'
  637. }
  638. unsuspend_db_mysql() {
  639. # Defining vars
  640. host_str=$(grep "HOST='$host'" $V_DB/mysql.conf)
  641. for key in $host_str; do
  642. eval ${key%%=*}=${key#*=}
  643. done
  644. sql="mysql -h $HOST -u $USER -p$PASSWORD -P$PORT -e"
  645. # Checking empty vars
  646. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  647. echo "Error: config is broken"
  648. log_event 'debug' "$E_PARSING $V_EVENT"
  649. exit $E_PARSING
  650. fi
  651. # Checking connection
  652. $sql "SELECT VERSION()" >/dev/null 2>&1; code="$?"
  653. if [ '0' -ne "$code" ]; then
  654. echo "Error: Connect failed"
  655. log_event 'debug' "$E_DB $V_EVENT"
  656. exit $E_DB
  657. fi
  658. # Unsuspending user
  659. $sql "GRANT ALL ON $database.* to '$db_user'@'%'"
  660. $sql "FLUSH PRIVILEGES"
  661. }
  662. unsuspend_db_pgsql() {
  663. # Defining vars
  664. host_str=$(grep "HOST='$host'" $V_DB/pgsql.conf)
  665. for key in $host_str; do
  666. eval ${key%%=*}=${key#*=}
  667. done
  668. export PGPASSWORD="$PASSWORD"
  669. sql="psql -h $HOST -U $USER -p $PORT -c"
  670. # Checking empty vars
  671. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  672. echo "Error: config is broken"
  673. log_event 'debug' "$E_PARSING $V_EVENT"
  674. exit $E_PARSING
  675. fi
  676. # Checking connection
  677. $sql "SELECT VERSION()" >/dev/null 2>&1;code="$?"
  678. if [ '0' -ne "$code" ]; then
  679. echo "Error: Connect failed"
  680. log_event 'debug' "$E_DB $V_EVENT"
  681. exit $E_DB
  682. fi
  683. # Unsuspending user
  684. $sql "GRANT ALL PRIVILEGES ON DATABASE $database TO $db_user" >/dev/null
  685. export PGPASSWORD='pgsql'
  686. }
  687. db_clear_search() {
  688. # Defining delimeter
  689. IFS=$'\n'
  690. # Reading file line by line
  691. for line in $(grep $search_string $conf); do
  692. # Parsing key=val
  693. for key in $line; do
  694. eval ${key%%=*}=${key#*=}
  695. done
  696. # Print result line
  697. eval echo "$field"
  698. done
  699. }
  700. get_disk_db_mysql() {
  701. # Defining vars
  702. host_str=$(grep "HOST='$host'" $V_DB/mysql.conf)
  703. for key in $host_str; do
  704. eval ${key%%=*}=${key#*=}
  705. done
  706. sql="mysql -h $HOST -u $USER -p$PASSWORD -P$PORT -e"
  707. # Checking empty vars
  708. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  709. echo "Error: config is broken"
  710. log_event 'debug' "$E_PARSING $V_EVENT"
  711. exit $E_PARSING
  712. fi
  713. # Checking connection
  714. $sql "SELECT VERSION()" >/dev/null 2>&1; code="$?"
  715. if [ '0' -ne "$code" ]; then
  716. echo "Error: Connect failed"
  717. log_event 'debug' "$E_DB $V_EVENT"
  718. exit $E_DB
  719. fi
  720. # Deleting database & checking result
  721. query="SELECT sum( data_length + index_length ) / 1024 / 1024 \"Size\"
  722. FROM information_schema.TABLES WHERE table_schema='$database'"
  723. raw_size=$($sql "$query" |tail -n 1)
  724. # Checking null output (this means error btw)
  725. if [ "$raw_size" == 'NULL' ]; then
  726. raw_size='0'
  727. fi
  728. # Rounding zero size
  729. if [ "${raw_size:0:1}" -eq '0' ]; then
  730. raw_size='1'
  731. fi
  732. # Printing round size in mb
  733. printf "%0.f\n" $raw_size
  734. }
  735. get_disk_db_pgsql() {
  736. # Defining vars
  737. host_str=$(grep "HOST='$host'" $V_DB/pgsql.conf)
  738. for key in $host_str; do
  739. eval ${key%%=*}=${key#*=}
  740. done
  741. export PGPASSWORD="$PASSWORD"
  742. sql="psql -h $HOST -U $USER -p $PORT -c"
  743. # Checking empty vars
  744. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  745. echo "Error: config is broken"
  746. log_event 'debug' "$E_PARSING $V_EVENT"
  747. exit $E_PARSING
  748. fi
  749. # Checking connection
  750. $sql "SELECT VERSION()" >/dev/null 2>&1;code="$?"
  751. if [ '0' -ne "$code" ]; then
  752. echo "Error: Connect failed"
  753. log_event 'debug' "$E_DB $V_EVENT"
  754. exit $E_DB
  755. fi
  756. # Raw query
  757. raq_query=$($sql "SELECT pg_database_size('$database');")
  758. raw_size=$(echo "$raq_query" | grep -v "-" | grep -v 'row' |\
  759. sed -e "/^$/d" |grep -v "pg_database_size" | awk '{print $1}')
  760. # Checking null output (this means error btw)
  761. if [ -z "$raw_size" ]; then
  762. raw_size='0'
  763. fi
  764. # Converting to MB
  765. size=$(expr $raw_size / 1048576)
  766. # Rounding zero size
  767. if [ "$size" -eq '0' ]; then
  768. echo '1'
  769. else
  770. echo "$size"
  771. fi
  772. }