db.func 25 KB

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