shared.func 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889
  1. # Log event function
  2. log_event() {
  3. # Argument defenition
  4. level="$1"
  5. event="$2"
  6. # Checking logging system
  7. if [ "$LOG_SYSTEM" = 'yes' ]; then
  8. log=$(echo "$LOG_LEVEL" | grep -w "$level" )
  9. if [ -n "$log" ]; then
  10. echo "$event" >> $V_LOG/$level.log
  11. fi
  12. fi
  13. }
  14. # Log user history
  15. log_history() {
  16. event="$1"
  17. undo="$2"
  18. # Checking logging system
  19. if [ "$LOG_HISTORY" = 'yes' ]; then
  20. echo "$event [$undo]" >> $V_USERS/$user/history.log
  21. fi
  22. }
  23. # Argument list checker
  24. check_args() {
  25. sys_args="$1"
  26. user_args="$2"
  27. usage="$3"
  28. if [ "$user_args" -lt "$sys_args" ]; then
  29. echo "Error: bad args"
  30. echo "Usage: $V_SCRIPT $usage"
  31. log_event 'debug' "$E_ARGS $V_EVENT"
  32. exit $E_ARGS
  33. fi
  34. }
  35. # Format validator
  36. format_validation() {
  37. # Defining url function
  38. format_url() {
  39. val="$1"
  40. # Checking url
  41. check_http=$( echo "$val" |grep "^https://" )
  42. needed_chars=$(echo "$val" | cut -s -f 2 -d '.')
  43. if [ -z "$check_http" ] || [ -z "$needed_chars" ]; then
  44. echo "Error: invalid url"
  45. log_event 'debug' "$E_INVALID $V_EVENT"
  46. exit $E_INVALID
  47. fi
  48. }
  49. # Defining shell function
  50. format_sh() {
  51. val="$1"
  52. # Checking shell
  53. check_shell=$(/usr/bin/chsh --list-shells | grep -w "$val" )
  54. if [ -z "$1"] || [ -z "$check_shell" ]; then
  55. echo "Error: shell not found"
  56. log_event 'debug' "$E_NOTEXIST $V_EVENT"
  57. exit $E_NOTEXIST
  58. fi
  59. }
  60. # Defining password function
  61. format_pwd() {
  62. val="$1"
  63. # Checking password lenght
  64. if [ "${#val}" -lt '6' ]; then
  65. echo "Error: password is shorter than 6 chars"
  66. log_event 'debug' "$E_PASSWORD $V_EVENT"
  67. exit $E_PASSWORD
  68. fi
  69. }
  70. # Defining integer function
  71. format_int() {
  72. val="$1"
  73. # Defining exlude mask
  74. special_chars=$(echo "$val" | \
  75. grep -c "[!|@|#|$|^|&|*|(|)|-|+|=|{|}|:|_|,|.|<|>|?|/|\|\"|'|;|%| ]" )
  76. if [[ 0 -ne "$special_chars" ]]; then
  77. echo "Error: $var out of range"
  78. log_event 'debug' "$E_INVALID $V_EVENT"
  79. exit $E_INVALID
  80. fi
  81. # Checking letters
  82. letters=$(echo "$val" | grep -c "[a-Z]")
  83. if [ 0 -ne "$letters" ]; then
  84. echo "Error: $var out of range"
  85. log_event 'debug' "$E_INVALID $V_EVENT"
  86. exit $E_INVALID
  87. fi
  88. # Checking -zero
  89. if [[ 0 -ne "$val" ]] && [[ 0 -gt "$val" ]]; then
  90. echo "Error: $var out of range"
  91. log_event 'debug' "$E_INVALID $V_EVENT"
  92. exit $E_INVALID
  93. fi
  94. }
  95. # Defining ip function
  96. format_ip() {
  97. val="$1"
  98. oc1=$(echo $val | cut -s -f 1 -d . )
  99. oc2=$(echo $val | cut -s -f 2 -d . )
  100. oc3=$(echo $val | cut -s -f 3 -d . )
  101. oc4=$(echo $val | cut -s -f 4 -d . )
  102. # Checking octets
  103. if [ -z "$oc1" ] || [ -z "$oc2" ] || [ -z "$oc3" ] || [ -z "$oc4" ]
  104. then
  105. echo "Error: $var out of range"
  106. log_event 'debug' "$E_INVALID $V_EVENT"
  107. exit $E_INVALID
  108. fi
  109. }
  110. # Defining ip_status function
  111. format_ips() {
  112. val="$1"
  113. check_status=$(echo "shared, exclusive" | grep -w "$val" )
  114. # Checking status
  115. if [ -z "$check_status" ]; then
  116. echo "Error: $var out of range"
  117. log_event 'debug' "$E_INVALID $V_EVENT"
  118. exit $E_INVALID
  119. fi
  120. }
  121. # Defining email function
  122. format_eml() {
  123. val="$1"
  124. check_at=$(echo "$val" | cut -s -f 1 -d @)
  125. check_dt=$(echo "$val" | cut -s -f 2 -d @|cut -s -f 2 -d .)
  126. # Checking format
  127. if [ -z "$check_at" ] ||\
  128. [ -z "$check_dt" ] ||\
  129. [ "${#check_dt}" -lt 2 ] &&\
  130. [ "$val" != 'vesta@localhost' ]; then
  131. echo "Error: email format is wrong"
  132. log_event 'debug' "$E_INVALID $V_EVENT"
  133. exit $E_INVALID
  134. fi
  135. }
  136. # Defining interface function
  137. format_ifc() {
  138. val="$1"
  139. # Parsing ifconfig
  140. /sbin/ifconfig "$val" > /dev/null 2>&1
  141. return_val="$?"
  142. if [ "$return_val" -ne 0 ]; then
  143. echo "Error: intreface not exist"
  144. log_event 'debug' "$E_NOTEXIST"
  145. exit $E_NOTEXIST
  146. fi
  147. }
  148. # Defining user function
  149. format_usr() {
  150. val="$1"
  151. # Defining exlude mask
  152. special_chars=$(echo "$val" | \
  153. grep -c "[!|@|#|$|^|&|*|(|)|+|=|{|}|:| |,|<|>|?|/|\|\"|'|;|%| ]" )
  154. # Checking result
  155. if [[ 0 -ne "$special_chars" ]]; then
  156. echo "Error: $var is out of range"
  157. log_event 'debug' "$E_INVALID $V_EVENT"
  158. exit $E_INVALID
  159. fi
  160. }
  161. # Defining domain function
  162. format_dom() {
  163. val="$1"
  164. # Defining exlude mask
  165. special_chars=$(echo "$val" | \
  166. grep -c "[!|@|#|$|^|&|*|(|)|+|=|{|}|:|,|<|>|?|_|/|\|\"|'|;|%| ]" )
  167. needed_chars=$(echo "$val" | cut -s -f 2 -d '.')
  168. # Checking result
  169. if [[ 0 -ne "$special_chars" ]] || [ -z "$needed_chars" ]; then
  170. echo "Error: $var is out of range"
  171. log_event 'debug' "$E_INVALID $V_EVENT"
  172. exit $E_INVALID
  173. fi
  174. }
  175. # Defining format_db function
  176. format_db() {
  177. val="$1"
  178. # Defining exlude mask
  179. special_chars=$(echo "$val" | \
  180. grep -c "[!|@|#|$|^|&|*|(|)|+|=|{|}|:|,|.|<|>|?|/|\|\"|'|;|%| ]" )
  181. # Checking result
  182. if [[ 0 -ne "$special_chars" ]] || [ 17 -le ${#val} ]; then
  183. echo "Error: $var is out of range"
  184. log_event 'debug' "$E_INVALID $V_EVENT"
  185. exit $E_INVALID
  186. fi
  187. }
  188. # Defining format_db function
  189. format_dbu() {
  190. val="$1"
  191. # Checking result
  192. if [ 17 -le ${#val} ]; then
  193. echo "Error: $var is out of range"
  194. log_event 'debug' "$E_INVALID $V_EVENT"
  195. exit $E_INVALID
  196. fi
  197. }
  198. # Defining dns record function
  199. format_rcd() {
  200. val="$1"
  201. case $val in
  202. A) known='yes';;
  203. NS) known='yes';;
  204. CNAME) known='yes';;
  205. AAAA) known='yes';;
  206. MX) known='yes';;
  207. TXT) known='yes';;
  208. SRV) known='yes';;
  209. DNSKEY) known='yes';;
  210. KEY) known='yes';;
  211. IPSECKEY) known='yes';;
  212. PTR) known='yes';;
  213. SPF) known='yes';;
  214. *) known='no';;
  215. esac
  216. if [[ "$known" != 'yes' ]]; then
  217. echo "Error: $var is out of range"
  218. log_event 'debug' "$E_INVALID $V_EVENT"
  219. exit $E_INVALID
  220. fi
  221. }
  222. # Defining format_ext function
  223. format_ext() {
  224. val="$1"
  225. # Checking result
  226. if [ 200 -le ${#val} ]; then
  227. echo "Error: $var is out of range"
  228. log_event 'debug' "$E_INVALID $V_EVENT"
  229. exit $E_INVALID
  230. fi
  231. }
  232. # Defining format_dvl function
  233. format_dvl() {
  234. val="$1"
  235. # Checking spaces
  236. check_spaces="$(echo "$val"|grep ' ')"
  237. check_rtype="$(echo "A AAAA NS CNAME" | grep -i -w "$rtype")"
  238. if [ ! -z "$check_spaces" ] && [ ! -z "$check_rtype" ]; then
  239. echo "Error: $var is out of range"
  240. log_event 'debug' "$E_INVALID $V_EVENT"
  241. exit $E_INVALID
  242. fi
  243. # Checking ip
  244. if [ "$rtype" = 'A' ]; then
  245. format_ip "$val"
  246. fi
  247. # Checking domain
  248. if [ "$rtype" = 'NS' ]; then
  249. format_dom "$val"
  250. fi
  251. }
  252. # Lopp on all variables
  253. for var in $*; do
  254. # Parsing reference
  255. eval v=\$$var
  256. # Checking variable format
  257. case $var in
  258. dom_alias) format_dom "$v" ;;
  259. auth_pass) format_pwd "$v" ;;
  260. auth_user) format_usr "$v" ;;
  261. ssl) format_usr "$v" ;;
  262. domain) format_dom "$v" ;;
  263. database) format_db "$v" ;;
  264. db_user) format_dbu "$v" ;;
  265. dvalue) format_dvl "$v" ;;
  266. fname) format_usr "$v" ;;
  267. job) format_int "$v" ;;
  268. ns) format_dom "$v" ;;
  269. ns1) format_dom "$v" ;;
  270. ns2) format_dom "$v" ;;
  271. ns3) format_dom "$v" ;;
  272. ns4) format_dom "$v" ;;
  273. ns5) format_dom "$v" ;;
  274. ns6) format_dom "$v" ;;
  275. ns7) format_dom "$v" ;;
  276. ns8) format_dom "$v" ;;
  277. email) format_eml "$v" ;;
  278. extentions) format_ext "$v" ;;
  279. host) format_usr "$v" ;;
  280. interface) format_ifc "$v" ;;
  281. ip) format_ip "$v" ;;
  282. ip_status) format_ips "$v" ;;
  283. ip_name) format_dom "$v" ;;
  284. id) format_int "$v" ;;
  285. mask) format_ip "$v" ;;
  286. max_usr) format_int "$v" ;;
  287. max_db) format_int "$v" ;;
  288. lname) format_usr "$v" ;;
  289. owner) format_usr "$v" ;;
  290. package) format_usr "$v" ;;
  291. password) format_pwd "$v" ;;
  292. port) format_int "$v" ;;
  293. rtype) format_rcd "$v" ;;
  294. shell) format_sh "$v" ;;
  295. soa) format_dom "$v" ;;
  296. suspend_url) format_url "$v" ;;
  297. template) format_usr "$v" ;;
  298. ttl) format_int "$v" ;;
  299. user) format_usr "$v" ;;
  300. esac
  301. done
  302. }
  303. # Sub system checker
  304. is_system_enabled() {
  305. stype="$1"
  306. web_function() {
  307. if [ -z "$WEB_SYSTEM" ] || [ "$WEB_SYSTEM" = "no" ]; then
  308. echo "Error: web hosting support disabled"
  309. log_event 'debug' "$E_DISABLED $V_EVENT"
  310. exit $E_DISABLED
  311. fi
  312. }
  313. proxy_function() {
  314. if [ "$PROXY_SYSTEM" != 'nginx' ]; then
  315. echo "Error: proxy hosting support disabled"
  316. log_event 'debug' "$E_DISABLED $V_EVENT"
  317. exit $E_DISABLED
  318. fi
  319. }
  320. dns_function() {
  321. if [ -z "$DNS_SYSTEM" ] || [ "$DNS_SYSTEM" = "no" ]; then
  322. echo "Error: dns support disabled"
  323. log_event 'debug' "$E_DISABLED $V_EVENT"
  324. exit $E_DISABLED
  325. fi
  326. }
  327. cron_function() {
  328. if [ -z "$CRON_SYSTEM" ] || [ "$CRON_SYSTEM" = "no" ]; then
  329. echo "Error: crond support disabled"
  330. log_event 'debug' "$E_DISABLED $V_EVENT"
  331. exit $E_DISABLED
  332. fi
  333. }
  334. db_function() {
  335. if [ -z "$DB_SYSTEM" ] || [ "$DB_SYSTEM" = "no" ]; then
  336. echo "Error: db support disabled"
  337. log_event 'debug' "$E_DISABLED $V_EVENT"
  338. exit $E_DISABLED
  339. fi
  340. }
  341. backup_function() {
  342. if [ -z "$BACKUP_SYSTEM" ] || [ "$BACKUP_SYSTEM" = "no" ]; then
  343. echo "Error: backup support disabled"
  344. log_event 'debug' "$E_DISABLED $V_EVENT"
  345. exit $E_DISABLED
  346. fi
  347. }
  348. case $stype in
  349. web) web_function ;;
  350. proxy) proxy_function ;;
  351. dns) dns_function ;;
  352. cron) cron_function ;;
  353. db) db_function ;;
  354. backup) backup_function ;;
  355. *) check_args '1' '0' 'system'
  356. esac
  357. }
  358. # System user check
  359. is_user_valid() {
  360. search_user="${1-$user}"
  361. check_user=$(grep -w "$search_user" /etc/passwd )
  362. if [ -z "$check_user" ]; then
  363. echo "Error: user not found"
  364. log_event 'debug' "$E_NOTEXIST $V_EVENT"
  365. exit $E_NOTEXIST
  366. fi
  367. if [ ! -d "$V_USERS/$search_user" ]; then
  368. echo "Error: unknown user"
  369. log_event 'debug' "$E_USER_NOTEXIST $V_EVENT"
  370. exit $E_USER_NOTEXIST
  371. fi
  372. }
  373. # Specific key check
  374. is_user_suspended() {
  375. check_suspend=$(grep "SUSPENDED='yes'" $V_USERS/$user/user.conf)
  376. if [ ! -z "$check_suspend" ]; then
  377. echo "Error: User is suspended"
  378. log_event 'debug' "$E_SUSPENDED $V_EVENT"
  379. exit $E_SUSPENDED
  380. fi
  381. }
  382. # User package check
  383. is_package_full() {
  384. stype="$1"
  385. web_domain() {
  386. # Checking zero domains
  387. domain_number=$(wc -l $V_USERS/$user/web.conf|cut -f 1 -d ' ')
  388. # Comparing current val with conf
  389. val=$(grep '^WEB_DOMAINS=' $V_USERS/$user/user.conf|cut -f 2 -d \' )
  390. if [ "$domain_number" -ge "$val" ]; then
  391. echo "Error: Upgrade package"
  392. log_event 'debug' "$E_LIMIT $v_log"
  393. exit $E_LIMIT
  394. fi
  395. }
  396. web_alias() {
  397. # Parsing aliases
  398. alias_nmb=$(grep "DOMAIN='$domain'" $V_USERS/$user/web.conf|\
  399. awk -F "ALIAS=" '{print $2}' | cut -f 2 -d \' |\
  400. sed -e "s/,/\n/g" | wc -l )
  401. # Parsing config
  402. val=$(grep 'WEB_ALIASES=' $V_USERS/$user/user.conf | cut -f 2 -d \' )
  403. if [ "$alias_nmb" -ge "$val" ]; then
  404. echo "Error: Upgrade package"
  405. log_event 'debug' "$E_LIMIT $v_log"
  406. exit $E_LIMIT
  407. fi
  408. }
  409. web_ssl() {
  410. # Parsing config
  411. val=$(grep '^WEB_SSL=' $V_USERS/$user/user.conf | cut -f 2 -d \' )
  412. if [ "$val" -eq '0' ]; then
  413. echo "Error: Upgrade package"
  414. log_event 'debug' "$E_LIMIT $v_log"
  415. exit $E_LIMIT
  416. fi
  417. # Checking domains
  418. domain_nmb=$(grep "SSL='yes'" $V_USERS/$user/web.conf | wc -l)
  419. # Comparing current val with conf
  420. if [ "$domain_nmb" -ge "$val" ]; then
  421. echo "Error: Upgrade package"
  422. log_event 'debug' "$E_LIMIT $v_log"
  423. exit $E_LIMIT
  424. fi
  425. }
  426. dns_domain() {
  427. # Checking zero domains
  428. domain_number=$(wc -l $V_USERS/$user/dns.conf | cut -f 1 -d " ")
  429. # Comparing current val with conf
  430. val=$(grep '^DNS_DOMAINS=' $V_USERS/$user/user.conf | cut -f 2 -d \' )
  431. if [ "$domain_number" -ge "$val" ]; then
  432. echo "Error: Upgrade package"
  433. log_event 'debug' "$E_LIMIT $v_log"
  434. exit $E_LIMIT
  435. fi
  436. }
  437. db_base() {
  438. # Checking zero domains
  439. db_number=$(wc -l $V_USERS/$user/db.conf | cut -f 1 -d " ")
  440. # Comparing current val with conf
  441. val=$(grep '^DATABASES=' $V_USERS/$user/user.conf | cut -f 2 -d \' )
  442. if [ "$db_number" -ge "$val" ]; then
  443. echo "Error: Upgrade package"
  444. log_event 'debug' "$E_LIMIT $v_log"
  445. exit $E_LIMIT
  446. fi
  447. }
  448. # FIXME - should finish other functions
  449. # Switching
  450. case "$stype" in
  451. web_domain) web_domain "$user" ;;
  452. web_alias) web_alias "$user" "$domain" ;;
  453. web_ssl) web_ssl "$user" ;;
  454. dns) dns_domain "$user" ;;
  455. db_base) db_base "$user" ;;
  456. mail_domain) mail_domain "$user" ;;
  457. mail_box) mail_box "$user" "$domain";;
  458. mail_forwarder) mail_forwarder "$user" "$domain";;
  459. *)
  460. echo "Error: bad type"
  461. log_event 'debug' "$E_INVALID $V_EVENT"
  462. exit $E_INVALID
  463. ;;
  464. esac
  465. }
  466. is_template_valid() {
  467. stype="$1"
  468. web_template() {
  469. check_tpl=$(echo "$templates"|sed -e "s/,/\n/g"|grep "^$template$")
  470. tpl="$V_WEBTPL/apache_$template.tpl"
  471. descr="$V_WEBTPL/apache_$template.descr"
  472. ssl="$V_WEBTPL/apache_$template.stpl"
  473. if [ -z "$check_tpl" ] || [ ! -e $tpl ] || \
  474. [ ! -e $descr ] || [ ! -e $ssl ]; then
  475. echo "Error: template not found"
  476. log_event 'debug' "$E_NOTEXIST"
  477. exit $E_NOTEXIST
  478. fi
  479. }
  480. proxy_template() {
  481. tpl="$V_WEBTPL/ngingx_vhost_$template.tpl"
  482. descr="$V_WEBTPL/ngingx_vhost_$template.descr"
  483. ssl="$V_WEBTPL/ngingx_vhost_$template.stpl"
  484. if [ ! -e $tpl ] || [ ! -e $descr ] || [ ! -e $ssl ]; then
  485. echo "Error: template not found"
  486. log_event 'debug' "$E_NOTEXIST"
  487. exit $E_NOTEXIST
  488. fi
  489. }
  490. dns_template() {
  491. tpl="$V_DNSTPL/$template.tpl"
  492. descr="$V_DNSTPL/$template.descr"
  493. if [ ! -e $tpl ] || [ ! -e $descr ]; then
  494. echo "Error: template not found"
  495. log_event 'debug' "$E_NOTEXIST"
  496. exit $E_NOTEXIST
  497. fi
  498. }
  499. # Switching config
  500. case $stype in
  501. web) web_template "$template" ;;
  502. proxy) proxy_template "$template" ;;
  503. dns) dns_template "$template" ;;
  504. esac
  505. }
  506. get_user_value() {
  507. key="$1"
  508. USER="$user"
  509. # Parsing domains
  510. string=$( cat $V_USERS/$user/user.conf )
  511. # Parsing key=value
  512. for keys in $string; do
  513. eval ${keys%%=*}=${keys#*=}
  514. done
  515. # Self reference
  516. eval value="$key"
  517. # Print value
  518. echo "$value"
  519. }
  520. restart_schedule() {
  521. type="$1"
  522. period="$2"
  523. # Checking period
  524. if [ -z "$period" ]; then
  525. period=$(grep 'RESTART_PERIOD=' $V_CONF/vesta.conf | cut -f 2 -d \')
  526. fi
  527. if [ "$period" -le 0 ]; then
  528. $V_FUNC/restart_"$type"
  529. else
  530. echo "$type" >> $V_QUEUE/restart.pipe
  531. fi
  532. }
  533. is_package_valid() {
  534. if [ ! -e "$V_PKG/$package.pkg" ]; then
  535. echo "Error: package is not exist"
  536. log_event 'debug' "$E_NOTEXIST $v_log"
  537. exit $E_NOTEXIST
  538. fi
  539. }
  540. update_user_value() {
  541. USER="$1"
  542. key="$2"
  543. value="$3"
  544. # Defining conf
  545. conf="$V_USERS/$USER/user.conf"
  546. # Parsing conf
  547. str=$(cat $conf)
  548. # Reading key=values
  549. for keys in $str; do
  550. eval ${keys%%=*}=${keys#*=}
  551. done
  552. # Define clean key
  553. c_key=$(echo "${key//$/}")
  554. eval old="${key}"
  555. # Escaping slashes
  556. old=$(echo "$old" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g')
  557. new=$(echo "$value" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g')
  558. # Updating conf
  559. sed -i "s/$c_key='${old//\*/\\*}'/$c_key='${new//\*/\\*}'/g" $conf
  560. }
  561. increase_user_value() {
  562. USER="$1"
  563. key="$2"
  564. # Defining conf
  565. conf="$V_USERS/$USER/user.conf"
  566. # Deleting $
  567. key=$(echo "${key//$/}")
  568. # Parsing current value
  569. current_value=$(grep "$key=" $conf |cut -f 2 -d \')
  570. # Checking result
  571. if [ -z "$current_value" ]; then
  572. echo "Error: Parsing error"
  573. log_event 'debug' "$E_PARSING $V_EVENT"
  574. exit $E_PARSING
  575. fi
  576. # Plus one
  577. new_value=$(expr $current_value + 1 )
  578. # Changing config
  579. sed -i "s/$key='$current_value'/$key='$new_value'/g" $conf
  580. }
  581. is_type_valid() {
  582. # Argument defenition
  583. sys="$1"
  584. stype="$2"
  585. # Switching config
  586. case $sys in
  587. stat) skey='STATS_SYSTEM=';;
  588. db) skey='DB_SYSTEM=' ;;
  589. *) skey='UNKNOWN' ;;
  590. esac
  591. # Parsing domain values
  592. check_type=$(grep "$skey" $V_CONF/vesta.conf|grep -w $stype)
  593. # Checking result
  594. if [ -z "$check_type" ]; then
  595. echo "Error: unknown type"
  596. log_event 'debug' "$E_INVALID $V_EVENT"
  597. exit $E_INVALID
  598. fi
  599. }
  600. decrease_user_value() {
  601. USER="$1"
  602. key="$2"
  603. conf="$V_USERS/$USER/user.conf"
  604. # Deleting $
  605. key=$(echo "${key//$/}")
  606. # Parsing current value
  607. current_value=$(grep "$key=" $conf |cut -f 2 -d \')
  608. # Checking result
  609. if [ -z "$current_value" ]; then
  610. echo "Error: Parsing error"
  611. log_event 'debug' "$E_PARSING $V_EVENT"
  612. exit $E_PARSING
  613. fi
  614. # Checking zero val
  615. if [ "$current_value" -gt 0 ]; then
  616. # Minus one
  617. new_value=$(expr $current_value - 1 )
  618. # Changing config
  619. sed -i "s/$key='$current_value'/$key='$new_value'/g" $conf
  620. fi
  621. }
  622. # Json listing function
  623. json_list() {
  624. # Print top bracket
  625. echo '{'
  626. # Count fields
  627. fileds_count=$(echo $fields| wc -w )
  628. # Reading file line by line
  629. while read line; do
  630. # Assing key=value pair
  631. eval $line
  632. # Closing bracket if there already was output
  633. if [ -n "$data" ]; then
  634. echo -e ' },'
  635. fi
  636. i=1
  637. for field in $fields; do
  638. eval value=$field
  639. if [ $i -eq 1 ]; then
  640. # Printing parrent
  641. (( ++i))
  642. echo -e "\t\"$value\": {"
  643. else
  644. # Printing child
  645. if [ $i -lt $fileds_count ]; then
  646. (( ++i))
  647. echo -e "\t\t\"${field//$/}\": \"$value\","
  648. else
  649. echo -e "\t\t\"${field//$/}\": \"$value\""
  650. data=1
  651. fi
  652. fi
  653. done
  654. done < $conf
  655. # Closing bracket if there was output
  656. if [ -n "$data" ]; then
  657. echo -e ' }'
  658. fi
  659. # Printing bottom bracket
  660. echo -e '}'
  661. }
  662. # Shell listing function
  663. shell_list() {
  664. if [ -z "$nohead" ] ; then
  665. # Print brief info
  666. echo "${fields//$/}"
  667. for a in $fields; do
  668. echo -e "------ \c"
  669. done
  670. echo
  671. fi
  672. # Reading file line by line
  673. while read line ; do
  674. # Assing key=value pair
  675. eval $line
  676. # Print result
  677. eval echo "$fields"
  678. done < $conf
  679. }
  680. get_usr_disk() {
  681. size='0'
  682. # Using tricky way to parse configs
  683. dir_usage=$(grep 'U_DIR_DISK=' $V_USERS/$user/user.conf |\
  684. cut -f 2 -d "'")
  685. size=$((size + dir_usage))
  686. # Checking web
  687. if [ -f "$V_USERS/$user/web.conf" ]; then
  688. # Using tricky way to parse configs
  689. disk_usage=$(grep 'U_DISK=' $V_USERS/$user/web.conf |\
  690. awk -F "U_DISK='" '{print $2}'|cut -f 1 -d "'")
  691. for disk in $disk_usage; do
  692. size=$((size + disk))
  693. done
  694. fi
  695. # Checking db
  696. if [ -f "$V_USERS/$user/db.conf" ]; then
  697. # Using tricky way to parse configs
  698. disk_usage=$(grep 'U_DISK=' $V_USERS/$user/db.conf |\
  699. awk -F "U_DISK='" '{print $2}'|cut -f 1 -d "'")
  700. for disk in $disk_usage; do
  701. size=$((size + disk))
  702. done
  703. fi
  704. # Checking mail
  705. if [ -f "$V_USERS/$user/mail_domains.conf" ]; then
  706. # Using tricky way to parse configs
  707. disk_usage=$(grep 'U_DISK=' $V_USERS/$user/mail_domains.conf |\
  708. awk -F "U_DISK='" '{print $2}'|cut -f 1 -d "'")
  709. for disk in $disk_usage; do
  710. size=$((size + disk))
  711. done
  712. fi
  713. echo "$size"
  714. }
  715. get_usr_traff() {
  716. size='0'
  717. conf='web.conf'
  718. # Checking web
  719. if [ -f "$V_USERS/$user/$conf" ]; then
  720. # Using tricky way to parse configs
  721. bandwidth_usage=$(grep 'U_BANDWIDTH=' $V_USERS/$user/$conf|\
  722. awk -F "U_BANDWIDTH='" '{print $2}'|cut -f 1 -d "'")
  723. for bandwidth in $bandwidth_usage; do
  724. size=$((size + bandwidth))
  725. done
  726. fi
  727. echo "$size"
  728. }
  729. is_backup_enabled() {
  730. BACKUPS=$(grep "BACKUPS='" $V_USERS/$user/user.conf |cut -f 2 -d \')
  731. if [ -z "$BACKUPS" ] || [[ "$BACKUPS" -le '0' ]]; then
  732. echo "Error: User backups are disabled"
  733. log_event 'debug' "$E_DISABLED $V_EVENT"
  734. exit $E_DISABLED
  735. fi
  736. }
  737. gen_password() {
  738. MATRIX='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
  739. LENGTH=10
  740. while [ ${n:=1} -le $LENGTH ]; do
  741. PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}"
  742. let n+=1
  743. done
  744. echo "$PASS"
  745. }