shared.func 23 KB

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