shared_func.sh 35 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375
  1. # Log event function
  2. log_event() {
  3. # Argument defenition
  4. level="$1"
  5. event="$2"
  6. # Checking logging system
  7. log_system=$(grep 'LOG_SYSTEM=' $V_CONF/vesta.conf | cut -f 2 -d \' )
  8. if [ "$log_system" = 'yes' ]; then
  9. # Checking logging level
  10. log=$(grep 'LOG_LEVEL=' $V_CONF/vesta.conf|\
  11. cut -f 2 -d \'|grep -w "$level" )
  12. if [ ! -z "$log" ]; then
  13. echo "$event" >> $V_LOG/$level.log
  14. fi
  15. fi
  16. }
  17. # Log user history
  18. log_history() {
  19. event="$1"
  20. undo="$2"
  21. # Checking logging system
  22. log_history=$(grep 'LOG_HISTORY=' $V_CONF/vesta.conf | cut -f 2 -d \' )
  23. if [ "$log_history" = 'on' ]; then
  24. echo "$event [$undo]" >> $V_USERS/$user/history.log
  25. fi
  26. }
  27. # External function result checker
  28. check_func_result() {
  29. return_code="$1"
  30. if [[ "$return_code" -ne "$OK" ]]; then
  31. log_event 'debug' "$return_code $V_EVENT"
  32. exit $return_code
  33. fi
  34. }
  35. # Argument list checker
  36. check_args() {
  37. sys_args="$1"
  38. user_args="$2"
  39. usage="$3"
  40. if [ "$user_args" -lt "$sys_args" ]; then
  41. echo "Error: bad args"
  42. echo "Usage: $V_SCRIPT $usage"
  43. log_event 'debug' "$E_BAD_ARGS $V_EVENT"
  44. exit $E_BAD_ARGS
  45. fi
  46. }
  47. # Format validator
  48. format_validation() {
  49. # Defining url function
  50. format_url() {
  51. val="$1"
  52. # Checking url
  53. check_http=$( echo "$val" |grep "^https://" )
  54. needed_chars=$(echo "$val" | cut -s -f 2 -d '.')
  55. if [ -z "$check_http" ] || [ -z "$needed_chars" ]; then
  56. echo "Error: shell not found"
  57. log_event 'debug' "$E_SHELL_INVALID $V_EVENT"
  58. exit $E_SHELL_INVALID
  59. fi
  60. }
  61. # Defining shell function
  62. format_sh() {
  63. val="$1"
  64. # Checking shell
  65. check_shell=$(/usr/bin/chsh --list-shells | grep -w "$val" )
  66. if [ -z "$check_shell" ]; then
  67. echo "Error: shell not found"
  68. log_event 'debug' "$E_SHELL_INVALID $V_EVENT"
  69. exit $E_SHELL_INVALID
  70. fi
  71. }
  72. # Defining password function
  73. format_pwd() {
  74. val="$1"
  75. # Checking password lenght
  76. if [ "${#val}" -lt '6' ]; then
  77. echo "Error: password is shorter than 6 chars"
  78. log_event 'debug' "$E_PASSWORD_SHORT $V_EVENT"
  79. exit $E_PASSWORD_SHORT
  80. fi
  81. }
  82. # Defining integer function
  83. format_int() {
  84. val="$1"
  85. # Defining exlude mask
  86. special_chars=$(echo "$val" | \
  87. grep -c "[!|@|#|$|^|&|*|(|)|-|+|=|{|}|:|_|,|.|<|>|?|/|\|\"|'|;|%]" )
  88. if [[ 0 -ne "$special_chars" ]]; then
  89. echo "Error: $var out of range"
  90. log_event 'debug' "$E_OUTOFRANGE $V_EVENT"
  91. exit $E_OUTOFRANGE
  92. fi
  93. # Checking letters
  94. letters=$(echo "$val" | grep -c "[a-Z]")
  95. if [ 0 -ne "$letters" ]; then
  96. echo "Error: $var out of range"
  97. log_event 'debug' "$E_OUTOFRANGE $V_EVENT"
  98. exit $E_OUTOFRANGE
  99. fi
  100. # Checking -zero
  101. if [[ 0 -ne "$val" ]] && [[ 0 -gt "$val" ]]; then
  102. echo "Error: $var out of range"
  103. log_event 'debug' "$E_OUTOFRANGE $V_EVENT"
  104. exit $E_OUTOFRANGE
  105. fi
  106. }
  107. # Defining ip function
  108. format_ip() {
  109. val="$1"
  110. oc1=$(echo $val | cut -s -f 1 -d . )
  111. oc2=$(echo $val | cut -s -f 2 -d . )
  112. oc3=$(echo $val | cut -s -f 3 -d . )
  113. oc4=$(echo $val | cut -s -f 4 -d . )
  114. # Checking octets
  115. if [ -z "$oc1" ] || [ -z "$oc2" ] || [ -z "$oc3" ] || [ -z "$oc4" ]
  116. then
  117. echo "Error: $var out of range"
  118. log_event 'debug' "$E_OUTOFRANGE $V_EVENT"
  119. exit $E_OUTOFRANGE
  120. fi
  121. }
  122. # Defining ip_status function
  123. format_ips() {
  124. val="$1"
  125. check_status=$(echo "shared, exclusive" | grep -w "$val" )
  126. # Checking status
  127. if [ -z "$check_status" ]; then
  128. echo "Error: $var out of range"
  129. log_event 'debug' "$E_OUTOFRANGE $V_EVENT"
  130. exit $E_OUTOFRANGE
  131. fi
  132. }
  133. # Defining email function
  134. format_eml() {
  135. val="$1"
  136. check_at=$(echo "$val" | cut -s -f 1 -d @)
  137. check_dt=$(echo "$val" | cut -s -f 2 -d @|cut -s -f 2 -d .)
  138. # Checking format
  139. if [ -z "$check_at" ] ||\
  140. [ -z "$check_dt" ] ||\
  141. [ "${#check_dt}" -lt 2 ] &&\
  142. [ "$val" != 'vesta@localhost' ]; then
  143. echo "Error: email format is wrong"
  144. log_event 'debug' "$E_EMAIL_INVALID $V_EVENT"
  145. exit $E_EMAIL_INVALID
  146. fi
  147. }
  148. # Defining interface function
  149. format_ifc() {
  150. val="$1"
  151. # Parsing ifconfig
  152. /sbin/ifconfig "$val" > /dev/null 2>&1
  153. return_val="$?"
  154. if [ "$return_val" -ne 0 ]; then
  155. echo "Error: intreface not exist"
  156. log_event 'debug' "$E_INTERFACE_NOTEXIST"
  157. exit $E_INTERFACE_NOTEXIST
  158. fi
  159. }
  160. # Defining user function
  161. format_usr() {
  162. val="$1"
  163. # Defining exlude mask
  164. special_chars=$(echo "$val" | \
  165. grep -c "[!|@|#|$|^|&|*|(|)|+|=|{|}|:| |,|<|>|?|/|\|\"|'|;|%]" )
  166. # Checking result
  167. if [[ 0 -ne "$special_chars" ]]; then
  168. echo "Error: $var is out of range"
  169. log_event 'debug' "$E_OUTOFRANGE $V_EVENT"
  170. exit $E_OUTOFRANGE
  171. fi
  172. }
  173. # Defining domain function
  174. format_dom() {
  175. val="$1"
  176. # Defining exlude mask
  177. special_chars=$(echo "$val" | \
  178. grep -c "[!|@|#|$|^|&|*|(|)|+|=|{|}|:|,|<|>|?|_|/|\|\"|'|;|%]" )
  179. needed_chars=$(echo "$val" | cut -s -f 2 -d '.')
  180. # Checking result
  181. if [[ 0 -ne "$special_chars" ]] || [ -z "$needed_chars" ]; then
  182. echo "Error: $var is out of range"
  183. log_event 'debug' "$E_OUTOFRANGE $V_EVENT"
  184. exit $E_OUTOFRANGE
  185. fi
  186. }
  187. # Defining format_db function
  188. format_db() {
  189. val="$1"
  190. # Defining exlude mask
  191. special_chars=$(echo "$val" | \
  192. grep -c "[!|@|#|$|^|&|*|(|)|+|=|{|}|:|,|.|<|>|?|/|\|\"|'|;|%]" )
  193. # Checking result
  194. if [[ 0 -ne "$special_chars" ]] || [ 17 -le ${#val} ]; then
  195. echo "Error: $var is out of range"
  196. log_event 'debug' "$E_OUTOFRANGE $V_EVENT"
  197. exit $E_OUTOFRANGE
  198. fi
  199. }
  200. # Defining format_db function
  201. format_dbu() {
  202. val="$1"
  203. # Checking result
  204. if [ 17 -le ${#val} ]; then
  205. echo "Error: $var is out of range"
  206. log_event 'debug' "$E_OUTOFRANGE $V_EVENT"
  207. exit $E_OUTOFRANGE
  208. fi
  209. }
  210. # Defining dns record function
  211. format_rcd() {
  212. val="$1"
  213. case $val in
  214. A) known='yes';;
  215. NS) known='yes';;
  216. CNAME) known='yes';;
  217. AAAA) known='yes';;
  218. MX) known='yes';;
  219. TXT) known='yes';;
  220. SRV) known='yes';;
  221. *) known='no';;
  222. esac
  223. if [[ "$known" != 'yes' ]]; then
  224. echo "Error: $var is out of range"
  225. log_event 'debug' "$E_OUTOFRANGE $V_EVENT"
  226. exit $E_OUTOFRANGE
  227. fi
  228. }
  229. # Defining format_ext function
  230. format_ext() {
  231. val="$1"
  232. # Checking result
  233. if [ 200 -le ${#val} ]; then
  234. echo "Error: $var is out of range"
  235. log_event 'debug' "$E_OUTOFRANGE $V_EVENT"
  236. exit $E_OUTOFRANGE
  237. fi
  238. }
  239. # Lopp on all variables
  240. for var in $*; do
  241. # Parsing reference
  242. eval v=\$$var
  243. # Checking variable format
  244. case $var in
  245. dom_alias) format_dom "$v" ;;
  246. auth_pass) format_pwd "$v" ;;
  247. auth_user) format_usr "$v" ;;
  248. certificate) format_usr "$v" ;;
  249. domain) format_dom "$v" ;;
  250. database) format_db "$v" ;;
  251. db_user) format_dbu "$v" ;;
  252. ns1) format_dom "$v" ;;
  253. ns2) format_dom "$v" ;;
  254. email) format_eml "$v" ;;
  255. extentions) format_ext "$v" ;;
  256. host) format_usr "$v" ;;
  257. interface) format_ifc "$v" ;;
  258. ip) format_ip "$v" ;;
  259. ip_status) format_ips "$v" ;;
  260. ip_name) format_dom "$v" ;;
  261. id) format_int "$v" ;;
  262. mask) format_ip "$v" ;;
  263. max_usr) format_int "$v" ;;
  264. max_db) format_int "$v" ;;
  265. limit) format_int "$v" ;;
  266. offset) format_int "$v" ;;
  267. owner) format_usr "$v" ;;
  268. package) format_usr "$v" ;;
  269. password) format_pwd "$v" ;;
  270. port) format_int "$v" ;;
  271. rtype) format_rcd "$v" ;;
  272. shell) format_sh "$v" ;;
  273. soa) format_dom "$v" ;;
  274. suspend_url) format_url "$v" ;;
  275. template) format_usr "$v" ;;
  276. ttl) format_int "$v" ;;
  277. user) format_usr "$v" ;;
  278. esac
  279. done
  280. }
  281. # Sub system checker
  282. is_system_enabled() {
  283. stype="$1"
  284. web_function() {
  285. # Parsing config
  286. web_system=$(grep "WEB_SYSTEM=" $V_CONF/vesta.conf|cut -f 2 -d \' )
  287. # Checking result
  288. if [ -z "$web_system" ] || [ "$web_system" = "no" ]; then
  289. echo "Error: web hosting support disabled"
  290. log_event 'debug' "$E_WEB_DISABLED $V_EVENT"
  291. exit $E_WEB_DISABLED
  292. fi
  293. }
  294. proxy_function() {
  295. # Parsing config
  296. proxy_system=$(grep "PROXY_SYSTEM=" $V_CONF/vesta.conf|cut -f 2 -d \' )
  297. # Checking result
  298. if [ "$proxy_system" != 'nginx' ]; then # only nginx
  299. echo "Error: proxy hosting support disabled" # support for
  300. log_event 'debug' "$E_PROXY_DISABLED $V_EVENT" # now
  301. exit $E_PROXY_DISABLED
  302. fi
  303. }
  304. dns_function() {
  305. # Parsing config
  306. dns_system=$(grep "DNS_SYSTEM=" $V_CONF/vesta.conf|cut -f 2 -d \' )
  307. # Checking result
  308. if [ -z "$dns_system" ] || [ "$cron_system" = "no" ]; then
  309. echo "Error: dns support disabled"
  310. log_event 'debug' "$E_DNS_DISABLED $V_EVENT"
  311. exit $E_DNS_DISABLED
  312. fi
  313. }
  314. cron_function() {
  315. # Parsing config
  316. cron_system=$(grep "CRON_SYSTEM=" $V_CONF/vesta.conf|cut -f 2 -d \' )
  317. # Checking result
  318. if [ -z "$cron_system" ] || [ "$cron_system" = "no" ]; then
  319. echo "Error: crond support disabled"
  320. log_event 'debug' "$E_CRON_DISABLED $V_EVENT"
  321. exit $E_CRON_DISABLED
  322. fi
  323. }
  324. db_function() {
  325. # Parsing config
  326. db_system=$(grep "DB_SYSTEM=" $V_CONF/vesta.conf|cut -f 2 -d \' )
  327. # Checking result
  328. if [ -z "$db_system" ] || [ "$db_system" = "no" ]; then
  329. echo "Error: db support disabled"
  330. log_event 'debug' "$E_DB_DISABLED $V_EVENT"
  331. exit $E_DB_DISABLED
  332. fi
  333. }
  334. backup_function() {
  335. # Parsing config
  336. bck_system=$(grep "BACKUP_SYSTEM=" $V_CONF/vesta.conf|cut -f 2 -d \' )
  337. # Checking result
  338. if [ -z "$bck_system" ] || [ "$bck_system" = "no" ]; then
  339. echo "Error: backup support disabled"
  340. log_event 'debug' "$E_BACKUP_DISABLED $V_EVENT"
  341. exit $E_BACKUP_DISABLED
  342. fi
  343. }
  344. case $stype in
  345. web) web_function ;;
  346. proxy) proxy_function ;;
  347. dns) dns_function ;;
  348. cron) cron_function ;;
  349. db) db_function ;;
  350. backup) backup_function ;;
  351. *) check_args '1' '0' 'system'
  352. esac
  353. }
  354. # System user check
  355. is_user_valid() {
  356. search_user="${1-$user}"
  357. check_user=$(cut -f 1 -d : /etc/passwd | grep -w "$search_user" )
  358. if [ -z "$check_user" ]; then
  359. echo "Error: user not found"
  360. log_event 'debug' "$E_USER_NOTEXIST $V_EVENT"
  361. exit $E_USER_NOTEXIST
  362. fi
  363. if [ ! -d "$V_USERS/$search_user" ]; then
  364. echo "Error: unknown user"
  365. log_event 'debug' "$E_USER_UNKNOWN $V_EVENT"
  366. exit $E_USER_UNKNOWN
  367. fi
  368. }
  369. # Specific key check
  370. is_user_suspended() {
  371. check_suspend=$(grep "SUSPENDED='yes'" $V_USERS/$user/user.conf)
  372. if [ ! -z "$check_suspend" ]; then
  373. echo "Error: User is suspended"
  374. log_event 'debug' "$E_USER_SUSPENDED $V_EVENT"
  375. exit $E_USER_SUSPENDED
  376. fi
  377. }
  378. # User package check
  379. is_package_full() {
  380. stype="$1"
  381. web_domain() {
  382. # Checking zero domains
  383. domain_number=$(wc -l $V_USERS/$user/web.conf|cut -f 1 -d ' ')
  384. # Comparing current val with conf
  385. val=$(grep '^WEB_DOMAINS=' $V_USERS/$user/user.conf|cut -f 2 -d \' )
  386. if [ "$domain_number" -ge "$val" ]; then
  387. echo "Error: Upgrade package"
  388. log_event 'debug' "$E_PKG_UPGRADE $v_log"
  389. exit $E_PKG_UPGRADE
  390. fi
  391. }
  392. web_alias() {
  393. # Parsing aliases
  394. alias_nmb=$(grep "DOMAIN='$domain'" $V_USERS/$user/web.conf|\
  395. awk -F "ALIAS=" '{print $2}' | cut -f 2 -d \' |\
  396. sed -e "s/,/\n/g" | wc -l )
  397. # Parsing config
  398. val=$(grep 'WEB_ALIASES=' $V_USERS/$user/user.conf | cut -f 2 -d \' )
  399. if [ "$alias_nmb" -ge "$val" ]; then
  400. echo "Error: Upgrade package"
  401. log_event 'debug' "$E_PKG_UPGRADE $v_log"
  402. exit $E_PKG_UPGRADE
  403. fi
  404. }
  405. web_ssl() {
  406. # Parsing config
  407. val=$(grep '^WEB_SSL=' $V_USERS/$user/user.conf | cut -f 2 -d \' )
  408. if [ "$val" -eq '0' ]; then
  409. echo "Error: Upgrade package"
  410. log_event 'debug' "$E_PKG_UPGRADE $v_log"
  411. exit $E_PKG_UPGRADE
  412. fi
  413. # Checking domains
  414. domain_nmb=$(grep "SSL='yes'" $V_USERS/$user/web.conf | wc -l)
  415. # Comparing current val with conf
  416. if [ "$domain_nmb" -ge "$val" ]; then
  417. echo "Error: Upgrade package"
  418. log_event 'debug' "$E_PKG_UPGRADE $v_log"
  419. exit $E_PKG_UPGRADE
  420. fi
  421. }
  422. dns_domain() {
  423. # Checking zero domains
  424. domain_number=$(wc -l $V_USERS/$user/dns.conf | cut -f 1 -d " ")
  425. # Comparing current val with conf
  426. val=$(grep '^DNS_DOMAINS=' $V_USERS/$user/user.conf | cut -f 2 -d \' )
  427. if [ "$domain_number" -ge "$val" ]; then
  428. echo "Error: Upgrade package"
  429. log_event 'debug' "$E_PKG_UPGRADE $v_log"
  430. exit $E_PKG_UPGRADE
  431. fi
  432. }
  433. db_base() {
  434. # Checking zero domains
  435. db_number=$(wc -l $V_USERS/$user/db.conf | cut -f 1 -d " ")
  436. # Comparing current val with conf
  437. val=$(grep '^DATABASES=' $V_USERS/$user/user.conf | cut -f 2 -d \' )
  438. if [ "$db_number" -ge "$val" ]; then
  439. echo "Error: Upgrade package"
  440. log_event 'debug' "$E_PKG_UPGRADE $v_log"
  441. exit $E_PKG_UPGRADE
  442. fi
  443. }
  444. # FIXME - should finish other functions
  445. # Switching
  446. case "$stype" in
  447. web_domain) web_domain "$user" ;;
  448. web_alias) web_alias "$user" "$domain" ;;
  449. web_ssl) web_ssl "$user" ;;
  450. dns) dns_domain "$user" ;;
  451. db_base) db_base "$user" ;;
  452. mail_domain) mail_domain "$user" ;;
  453. mail_box) mail_box "$user" "$domain";;
  454. mail_forwarder) mail_forwarder "$user" "$domain";;
  455. *)
  456. echo "Error: bad type"
  457. log_event 'debug' "$E_BAD_TYPE $V_EVENT"
  458. exit $E_BAD_TYPE
  459. ;;
  460. esac
  461. }
  462. is_package_avalable() {
  463. # Parsing user data
  464. usr_data=$(cat $V_USERS/$user/user.conf)
  465. for key in $usr_data; do
  466. eval ${key%%=*}=${key#*=}
  467. done
  468. # Clearing vars
  469. WEB_DOMAINS='0'
  470. WEB_SSL='0'
  471. DATABASES='0'
  472. MAIL_DOMAINS='0'
  473. MAIL_BOXES='0'
  474. MAIL_FORWARDERS='0'
  475. DNS_DOMAINS='0'
  476. DISK_QUOTA='0'
  477. BANDWIDTH='0'
  478. MAX_CHILDS='0'
  479. # Parsing package
  480. pkg_data=$(cat $V_PKG/$package.pkg)
  481. for key in $pkg_data; do
  482. eval ${key%%=*}=${key#*=}
  483. done
  484. # Comparing user data with package
  485. if [ "$WEB_DOMAINS" -lt "$U_WEB_DOMAINS" ] ||\
  486. [ "$WEB_SSL" -lt "$U_WEB_SSL" ] ||\
  487. [ "$DATABASES" -lt "$U_DATABASES" ] ||\
  488. [ "$MAIL_DOMAINS" -lt "$U_MAIL_DOMAINS" ] ||\
  489. [ "$DNS_DOMAINS" -lt "$U_DNS_DOMAINS" ] ||\
  490. [ "$DISK_QUOTA" -lt "$U_DISK" ] ||\
  491. [ "$BANDWIDTH" -lt "$U_BANDWIDTH" ] ||\
  492. [ "$MAX_CHILDS" -lt "$U_CHILDS" ]; then
  493. echo "Error: Upgrade package"
  494. log_event 'debug' "$E_PKG_UPGRADE $v_log"
  495. exit $E_PKG_UPGRADE
  496. fi
  497. }
  498. is_template_valid() {
  499. stype="$1"
  500. web_template() {
  501. check_tpl=$(echo "$templates"|sed -e "s/,/\n/g"|grep "^$template$")
  502. tpl="$V_WEBTPL/apache_$template.tpl"
  503. descr="$V_WEBTPL/apache_$template.descr"
  504. ssl="$V_WEBTPL/apache_$template.stpl"
  505. if [ -z "$check_tpl" ] || [ ! -e $tpl ] || \
  506. [ ! -e $descr ] || [ ! -e $ssl ]; then
  507. echo "Error: template not found"
  508. log_event 'debug' "$E_TPL_NOTEXIST"
  509. exit $E_TPL_NOTEXIST
  510. fi
  511. }
  512. proxy_template() {
  513. tpl="$V_WEBTPL/ngingx_vhost_$template.tpl"
  514. descr="$V_WEBTPL/ngingx_vhost_$template.descr"
  515. ssl="$V_WEBTPL/ngingx_vhost_$template.stpl"
  516. if [ ! -e $tpl ] || [ ! -e $descr ] || [ ! -e $ssl ]; then
  517. echo "Error: template not found"
  518. log_event 'debug' "$E_TPL_NOTEXIST"
  519. exit $E_TPL_NOTEXIST
  520. fi
  521. }
  522. dns_template() {
  523. tpl="$V_DNSTPL/$template.tpl"
  524. descr="$V_DNSTPL/$template.descr"
  525. if [ ! -e $tpl ] || [ ! -e $descr ]; then
  526. echo "Error: template not found"
  527. log_event 'debug' "$E_TPL_NOTEXIST"
  528. exit $E_TPL_NOTEXIST
  529. fi
  530. }
  531. # Switching config
  532. case $stype in
  533. web) web_template "$template" ;;
  534. proxy) proxy_template "$template" ;;
  535. dns) dns_template "$template" ;;
  536. esac
  537. }
  538. get_user_value() {
  539. key="$1"
  540. USER="$user"
  541. # Parsing domains
  542. string=$( cat $V_USERS/$user/user.conf )
  543. # Parsing key=value
  544. for keys in $string; do
  545. eval ${keys%%=*}=${keys#*=}
  546. done
  547. # Self reference
  548. eval value="$key"
  549. # Print value
  550. echo "$value"
  551. }
  552. restart_schedule() {
  553. type="$1"
  554. period="$2"
  555. # Checking period
  556. if [ -z "$period" ]; then
  557. period=$(grep 'RESTART_PERIOD=' $V_CONF/vesta.conf | cut -f 2 -d \')
  558. fi
  559. if [ "$period" -le 0 ]; then
  560. $V_FUNC/restart_"$type"
  561. else
  562. echo "$type" >> $V_QUEUE/restart.pipe
  563. fi
  564. }
  565. is_user_free() {
  566. # Parsing domain values
  567. check_sysuser=$(cut -f 1 -d : /etc/passwd | grep -w "$user" )
  568. # Checking result
  569. if [ ! -z "$check_sysuser" ] || [ -e "$V_USERS/$user" ]; then
  570. echo "Error: user $user exist"
  571. log_event 'debug' "$E_USER_EXIST $V_EVENT"
  572. exit $E_USER_EXIST
  573. fi
  574. }
  575. is_user_privileged() {
  576. search_user="${1-$user}"
  577. # Parsing domain values
  578. user_role=$(grep 'ROLE=' $V_USERS/$search_user/user.conf|cut -f 2 -d \' )
  579. # Checking role
  580. if [ "$user_role" != 'reseller' ] && [ "$user_role" != 'admin' ]; then
  581. echo "Error: user role is $user_role"
  582. log_event 'debug' "$E_PERMS_REQUEIURED $V_EVENT"
  583. exit $E_PERMS_REQUEIURED
  584. fi
  585. # Checking role permissions
  586. if [ -n "$role" ]; then
  587. case "$user_role" in
  588. admin) rights='reseller, user' ;;
  589. reseller) rights='user' ;;
  590. *) rights='no_create' ;;
  591. esac
  592. # Comparing rights with role
  593. check_perms=$(echo "$rights"|grep -w "$role")
  594. if [ -z "$check_perms" ]; then
  595. echo "Error: user rights are '$rights'"
  596. log_event 'debug' "$E_PERMS_REQUEIURED $V_EVENT"
  597. exit $E_PERMS_REQUEIURED
  598. fi
  599. fi
  600. }
  601. is_package_valid() {
  602. if [ ! -e "$V_PKG/$package.pkg" ]; then
  603. echo "Error: package is not exist"
  604. log_event 'debug' "$E_PKG_NOTEXIST $v_log"
  605. exit $E_PKG_NOTEXIST
  606. fi
  607. }
  608. is_user_key_empty() {
  609. key="$1"
  610. # Parsing ip
  611. string=$(cat $V_USERS/$user/user.conf )
  612. # Parsing key=value
  613. for keys in $string; do
  614. eval ${keys%%=*}=${keys#*=}
  615. done
  616. # Self reference
  617. eval value="$key"
  618. # Checkng key
  619. if [ ! -z "$value" ] && [ "$value" != 'no' ] && [ "$value" != '0' ]; then
  620. echo "Error: value is not empty = $value "
  621. log_event 'debug' "$E_VALUE_EXIST $V_EVENT"
  622. exit $E_VALUE_EXIST
  623. fi
  624. }
  625. update_user_value() {
  626. USER="$1"
  627. key="$2"
  628. value="$3"
  629. # Defining conf
  630. conf="$V_USERS/$USER/user.conf"
  631. # Parsing conf
  632. str=$(cat $conf)
  633. # Reading key=values
  634. for keys in $str; do
  635. eval ${keys%%=*}=${keys#*=}
  636. done
  637. # Define clean key
  638. c_key=$(echo "${key//$/}")
  639. eval old="${key}"
  640. # Escaping slashes
  641. old=$(echo "$old" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g')
  642. new=$(echo "$value" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g')
  643. # Updating conf
  644. sed -i "s/$c_key='${old//\*/\\*}'/$c_key='${new//\*/\\*}'/g" $conf
  645. }
  646. increase_user_value() {
  647. USER="$1"
  648. key="$2"
  649. # Defining conf
  650. conf="$V_USERS/$USER/user.conf"
  651. # Deleting $
  652. key=$(echo "${key//$/}")
  653. # Parsing current value
  654. current_value=$(grep "$key=" $conf |cut -f 2 -d \')
  655. # Checking result
  656. if [ -z "$current_value" ]; then
  657. echo "Error: Parsing error"
  658. log_event 'debug' "$E_PARSE_ERROR $V_EVENT"
  659. exit $E_PARSE_ERROR
  660. fi
  661. # Plus one
  662. new_value=$(expr $current_value + 1 )
  663. # Changing config
  664. sed -i "s/$key='$current_value'/$key='$new_value'/g" $conf
  665. }
  666. is_web_domain_cert_valid() {
  667. # Checking file existance
  668. path="$V_USERS/$user/cert"
  669. if [ ! -e "$path/$cert.crt" ] || [ ! -e "$path/$cert.key" ]; then
  670. echo "Error: certificate not exist"
  671. log_event 'debug' "$E_CERT_NOTEXIST $V_EVENT"
  672. exit $E_CERT_NOTEXIST
  673. fi
  674. }
  675. is_type_valid() {
  676. # Argument defenition
  677. sys="$1"
  678. stype="$2"
  679. # Switching config
  680. case $sys in
  681. stat) skey='STATS_SYSTEM=';;
  682. db) skey='DB_SYSTEM=' ;;
  683. *) skey='UNKNOWN' ;;
  684. esac
  685. # Parsing domain values
  686. check_type=$(grep "$skey" $V_CONF/vesta.conf|grep -w $stype)
  687. # Checking result
  688. if [ -z "$check_type" ]; then
  689. echo "Error: unknown type"
  690. log_event 'debug' "$E_BAD_TYPE $V_EVENT"
  691. exit $E_BAD_TYPE
  692. fi
  693. }
  694. change_user_package() {
  695. # Parsing user data
  696. usr_data=$(cat $V_USERS/$user/user.conf)
  697. for key in $usr_data; do
  698. eval ${key%%=*}=${key#*=}
  699. done
  700. # Parsing package
  701. pkg_data=$(cat $V_PKG/$package.pkg)
  702. for key in $pkg_data; do
  703. eval ${key%%=*}=${key#*=}
  704. done
  705. echo "PACKAGE='$package'
  706. WEB_DOMAINS='$WEB_DOMAINS'
  707. WEB_SSL='$WEB_SSL'
  708. WEB_ALIASES='$WEB_ALIASES'
  709. DATABASES='$DATABASES'
  710. MAIL_DOMAINS='$MAIL_DOMAINS'
  711. MAIL_BOXES='$MAIL_BOXES'
  712. MAIL_FORWARDERS='$MAIL_FORWARDERS'
  713. DNS_DOMAINS='$DNS_DOMAINS'
  714. DISK_QUOTA='$DISK_QUOTA'
  715. BANDWIDTH='$BANDWIDTH'
  716. NS1='$NS1'
  717. NS2='$NS2'
  718. SHELL='$SHELL'
  719. BACKUPS='$BACKUPS'
  720. WEB_TPL='$WEB_TPL'
  721. MAX_CHILDS='$MAX_CHILDS'
  722. SUSPENDED='$SUSPENDED'
  723. OWNER='$OWNER'
  724. ROLE='$ROLE'
  725. IP_OWNED='$IP_OWNED'
  726. U_CHILDS='$U_CHILDS'
  727. U_DISK='$U_DISK'
  728. U_BANDWIDTH='$U_BANDWIDTH'
  729. U_WEB_DOMAINS='$U_WEB_DOMAINS'
  730. U_WEB_SSL='$U_WEB_SSL'
  731. U_DNS_DOMAINS='$U_DNS_DOMAINS'
  732. U_DATABASES='$U_DATABASES'
  733. U_MAIL_DOMAINS='$U_MAIL_DOMAINS'
  734. DATE='$DATE'" > $V_USERS/$user/user.conf
  735. }
  736. get_shell_path() {
  737. check_shell=$(/usr/bin/chsh --list-shells | grep -w "$shell" )
  738. echo "$check_shell"
  739. }
  740. is_user_value_exist() {
  741. key="$1"
  742. string=$(cat $V_USERS/$user/user.conf )
  743. # Parsing key=value
  744. for keys in $string; do
  745. eval ${keys%%=*}=${keys#*=}
  746. done
  747. # Self reference
  748. eval value="$key"
  749. # Checking result
  750. if [ -z "$value" ] || [ "$value" = 'no' ]; then
  751. echo "Error: ${key//$/} is empty"
  752. log_event 'debug' "$E_VALUE_EMPTY $V_EVENT"
  753. exit $E_VALUE_EMPTY
  754. fi
  755. }
  756. decrease_user_value() {
  757. USER="$1"
  758. key="$2"
  759. conf="$V_USERS/$USER/user.conf"
  760. # Deleting $
  761. key=$(echo "${key//$/}")
  762. # Parsing current value
  763. current_value=$(grep "$key=" $conf |cut -f 2 -d \')
  764. # Checking result
  765. if [ -z "$current_value" ]; then
  766. echo "Error: Parsing error"
  767. log_event 'debug' "$E_PARSE_ERROR $V_EVENT"
  768. exit $E_PARSE_ERROR
  769. fi
  770. # Checking zero val
  771. if [ "$current_value" -gt 0 ]; then
  772. # Minus one
  773. new_value=$(expr $current_value - 1 )
  774. # Changing config
  775. sed -i "s/$key='$current_value'/$key='$new_value'/g" $conf
  776. fi
  777. }
  778. # Json listing function
  779. v_json_list() {
  780. # Definigng variables
  781. i='1' # iterator
  782. end=$(($limit + $offset)) # last string
  783. value='' # clean start value
  784. # Print top bracket
  785. echo '{'
  786. # Reading file line by line
  787. while read line ; do
  788. # Checking offset and limit
  789. if [ "$i" -ge "$offset" ] && [ "$i" -lt "$end" ] && [ "$offset" -gt 0 ]
  790. then
  791. # Parsing key=value
  792. for key in $line; do
  793. eval ${key%%=*}=${key#*=}
  794. done
  795. # Checking !first line to print bracket
  796. if [ "$i" -ne "$offset" ]; then
  797. echo -e "\t},"
  798. fi
  799. j=1 # local loop iterator
  800. last_word=$(echo "$fields" | wc -w)
  801. # Print data
  802. for field in $fields; do
  803. eval value=$field
  804. # Checking parrent key
  805. if [ "$j" -eq 1 ]; then
  806. echo -e "\t\"$value\": {"
  807. else
  808. if [ "$j" -eq "$last_word" ]; then
  809. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
  810. else
  811. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
  812. fi
  813. fi
  814. j=$(($j + 1))
  815. done
  816. fi
  817. i=$(($i + 1))
  818. done < $conf
  819. # If there was any output
  820. if [ -n "$value" ]; then
  821. echo -e "\t}"
  822. fi
  823. # Printing bottom json bracket
  824. echo -e "}"
  825. }
  826. # Shell listing function
  827. v_shell_list() {
  828. # Definigng variables
  829. i='1' # iterator
  830. end=$(($limit + $offset)) # last string
  831. # Print brief info
  832. echo "${fields//$/}"
  833. for a in $fields; do
  834. echo -e "------ \c"
  835. done
  836. echo # new line
  837. # Reading file line by line
  838. while read line ; do
  839. # Checking offset and limit
  840. if [ "$i" -ge "$offset" ] && [ "$i" -lt "$end" ] && [ "$offset" -gt 0 ]
  841. then
  842. # Parsing key=value
  843. for key in $line; do
  844. eval ${key%%=*}=${key#*=}
  845. done
  846. # Print result line
  847. eval echo "$fields"
  848. fi
  849. i=$(($i + 1))
  850. done < $conf
  851. }
  852. usr_json_single_list() {
  853. # Definigng variables
  854. USER="$user" # user
  855. i=1 # iterator
  856. # Define words number
  857. last_word=$(echo "$fields" | wc -w)
  858. # Reading file line by line
  859. line=$(cat $V_USERS/$USER/user.conf)
  860. # Print top bracket
  861. echo '{'
  862. # Parsing key=value
  863. for key in $line; do
  864. eval ${key%%=*}=${key#*=}
  865. done
  866. # Starting output loop
  867. for field in $fields; do
  868. # Parsing key=value
  869. eval value=$field
  870. # Checking first field
  871. if [ "$i" -eq 1 ]; then
  872. echo -e "\t\"$value\": {"
  873. else
  874. if [ "$last_word" -eq "$i" ]; then
  875. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
  876. else
  877. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
  878. fi
  879. fi
  880. # Updating iterator
  881. i=$(( i + 1))
  882. done
  883. # If there was any output
  884. if [ -n "$value" ]; then
  885. echo -e "\t}"
  886. fi
  887. # Printing bottom json bracket
  888. echo -e "}"
  889. }
  890. usr_shell_single_list() {
  891. # Definigng variables
  892. USER="$user" # user
  893. # Reading file line by line
  894. line=$(cat $V_USERS/$USER/user.conf)
  895. # Parsing key=value
  896. for key in $line; do
  897. eval ${key%%=*}=${key#*=}
  898. done
  899. # Print result line
  900. for field in $fields; do
  901. eval key="$field"
  902. echo "${field//$/}: $key "
  903. done
  904. }
  905. usr_json_list() {
  906. i='1' # iterator
  907. end=$(($limit + $offset)) # last string
  908. # Definining user list
  909. #user_list=$(find $V_USERS/ -maxdepth 1 -mindepth 1 -type d -printf %P\\n )
  910. user_list=$(ls $V_USERS/)
  911. # Print top bracket
  912. echo '{'
  913. # Starting main loop
  914. for USER in $user_list; do
  915. # Checking offset and limit
  916. if [ "$i" -ge "$offset" ] && [ "$i" -lt "$end" ] && [ "$offset" -gt 0 ]
  917. then
  918. # Reading user data
  919. user_data=$(cat $V_USERS/$USER/user.conf)
  920. # Parsing key/value config
  921. for key in $user_data; do
  922. eval ${key%%=*}=${key#*=}
  923. done
  924. # Checking !first line to print bracket with coma
  925. if [ "$i" -ne "$offset" ]; then
  926. echo -e "\t},"
  927. fi
  928. # Defining local iterator and words count
  929. j='1'
  930. last_word=$(echo "$fields" | wc -w)
  931. # Print data
  932. for field in $fields; do
  933. eval value=$field
  934. # Checking parrent key
  935. if [ "$j" -eq 1 ]; then
  936. echo -e "\t\"$value\": {"
  937. else
  938. if [ "$j" -eq "$last_word" ]; then
  939. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
  940. else
  941. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
  942. fi
  943. fi
  944. j=$(($j + 1))
  945. done
  946. fi
  947. i=$(($i + 1))
  948. done
  949. # If there was any output
  950. if [ -n "$value" ]; then
  951. echo -e "\t}"
  952. fi
  953. # Printing bottom json bracket
  954. echo '}'
  955. }
  956. usr_shell_list() {
  957. i='1' # iterator
  958. end=$(($limit + $offset)) # last string
  959. # Definining user list
  960. #user_list=$(find $V_USERS/ -maxdepth 1 -mindepth 1 -type d -printf %P\\n )
  961. user_list=$(ls $V_USERS/)
  962. # Print brief info
  963. echo "${fields//$/}"
  964. for a in $fields; do
  965. echo -e "--------- \c"
  966. done
  967. echo # new line
  968. # Starting main loop
  969. for USER in $user_list; do
  970. # Checking offset and limit
  971. if [ "$i" -ge "$offset" ] && [ "$i" -lt "$end" ] && [ "$offset" -gt 0 ]
  972. then
  973. # Reading user data
  974. user_data=$(cat $V_USERS/$USER/user.conf)
  975. # Parsing key/value config
  976. for key in $user_data; do
  977. eval ${key%%=*}=${key#*=}
  978. done
  979. # Print result line
  980. eval echo "$fields"
  981. fi
  982. i=$(($i + 1))
  983. done
  984. }
  985. usrns_json_list() {
  986. ns=$(grep "NS[1|2]=" $V_USERS/$user/user.conf |cut -f 2 -d \')
  987. # Print top bracket
  988. echo '['
  989. i=1
  990. # Listing servers
  991. for nameserver in $ns;do
  992. if [ "$i" -eq 1 ]; then
  993. echo -e "\t\"$nameserver\","
  994. else
  995. echo -e "\t\"$nameserver\""
  996. fi
  997. i=$((i + 1))
  998. done
  999. echo "]"
  1000. }
  1001. usrns_shell_list() {
  1002. ns=$(grep "NS[1|2]=" $V_USERS/$user/user.conf |cut -f 2 -d \')
  1003. # Print result
  1004. echo "NAMESERVER"
  1005. echo "----------"
  1006. for nameserver in $ns;do
  1007. echo "$nameserver"
  1008. done
  1009. }
  1010. get_usr_disk() {
  1011. size='0'
  1012. # Using tricky way to parse configs
  1013. dir_usage=$(grep 'U_DIR_DISK=' $V_USERS/$user/user.conf |\
  1014. cut -f 2 -d "'")
  1015. size=$((size + dir_usage))
  1016. # Checking web
  1017. if [ -f "$V_USERS/$user/web.conf" ]; then
  1018. # Using tricky way to parse configs
  1019. disk_usage=$(grep 'U_DISK=' $V_USERS/$user/web.conf |\
  1020. awk -F "U_DISK='" '{print $2}'|cut -f 1 -d "'")
  1021. for disk in $disk_usage; do
  1022. size=$((size + disk))
  1023. done
  1024. fi
  1025. # Checking db
  1026. if [ -f "$V_USERS/$user/db.conf" ]; then
  1027. # Using tricky way to parse configs
  1028. disk_usage=$(grep 'U_DISK=' $V_USERS/$user/db.conf |\
  1029. awk -F "U_DISK='" '{print $2}'|cut -f 1 -d "'")
  1030. for disk in $disk_usage; do
  1031. size=$((size + disk))
  1032. done
  1033. fi
  1034. # Checking mail
  1035. if [ -f "$V_USERS/$user/mail_domains.conf" ]; then
  1036. # Using tricky way to parse configs
  1037. disk_usage=$(grep 'U_DISK=' $V_USERS/$user/mail_domains.conf |\
  1038. awk -F "U_DISK='" '{print $2}'|cut -f 1 -d "'")
  1039. for disk in $disk_usage; do
  1040. size=$((size + disk))
  1041. done
  1042. fi
  1043. echo "$size"
  1044. }
  1045. get_usr_traff() {
  1046. size='0'
  1047. conf='web.conf'
  1048. # Checking web
  1049. if [ -f "$V_USERS/$user/$conf" ]; then
  1050. # Using tricky way to parse configs
  1051. bandwidth_usage=$(grep 'U_BANDWIDTH=' $V_USERS/$user/$conf|\
  1052. awk -F "U_BANDWIDTH='" '{print $2}'|cut -f 1 -d "'")
  1053. for bandwidth in $bandwidth_usage; do
  1054. size=$((size + bandwidth))
  1055. done
  1056. fi
  1057. echo "$size"
  1058. }
  1059. pkg_json_list() {
  1060. i='1' # iterator
  1061. end=$(($limit + $offset)) # last string
  1062. # Print top bracket
  1063. echo '{'
  1064. # Starting main loop
  1065. for package in $(ls $V_DATA/packages); do
  1066. PACKAGE=${package/.pkg/}
  1067. # Checking offset and limit
  1068. if [ "$i" -ge "$offset" ] && [ "$i" -lt "$end" ] && [ "$offset" -gt 0 ]
  1069. then
  1070. # Parsing key/value config
  1071. pkg_descr=$(cat $V_DATA/packages/$package)
  1072. for key in $pkg_descr; do
  1073. eval ${key%%=*}=${key#*=}
  1074. done
  1075. # Checking !first line to print bracket with coma
  1076. if [ "$i" -ne "$offset" ]; then
  1077. echo -e "\t},"
  1078. fi
  1079. # Defining local iterator and words count
  1080. j='1'
  1081. last_word=$(echo "$fields" | wc -w)
  1082. # Print data
  1083. for field in $fields; do
  1084. eval value=$field
  1085. # Checking parrent key
  1086. if [ "$j" -eq 1 ]; then
  1087. echo -e "\t\"$value\": {"
  1088. else
  1089. if [ "$j" -eq "$last_word" ]; then
  1090. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
  1091. else
  1092. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
  1093. fi
  1094. fi
  1095. j=$(($j + 1))
  1096. done
  1097. fi
  1098. i=$(($i + 1))
  1099. done
  1100. # If there was any output
  1101. if [ -n "$value" ]; then
  1102. echo -e "\t}"
  1103. fi
  1104. # Printing bottom json bracket
  1105. echo '}'
  1106. }
  1107. pkg_shell_list() {
  1108. i='1' # iterator
  1109. end=$(($limit + $offset)) # last string
  1110. # Listing pkg files
  1111. for package in $(ls $V_DATA/packages); do
  1112. PACKAGE=${package/.pkg/}
  1113. # Checking offset and limit
  1114. if [ "$i" -ge "$offset" ] && [ "$i" -lt "$end" ] && [ "$offset" -gt 0 ]
  1115. then
  1116. # Parsing key=value
  1117. pkg_descr=$(cat $V_DATA/packages/$package)
  1118. for key in $pkg_descr; do
  1119. eval ${key%%=*}=${key#*=}
  1120. done
  1121. echo "----------"
  1122. # Starting output loop
  1123. for field in $fields; do
  1124. # Parsing key=value
  1125. eval value=$field
  1126. # Checking first field
  1127. echo -e "${field//$/}: $value"
  1128. done
  1129. fi
  1130. i=$(($i + 1))
  1131. done
  1132. }
  1133. get_config_value() {
  1134. key="$1"
  1135. # Parsing config
  1136. string=$(cat $V_CONF/vesta.conf)
  1137. # Parsing key=value
  1138. for keys in $string; do
  1139. eval ${keys%%=*}=${keys#*=}
  1140. done
  1141. # Self reference
  1142. eval value="$key"
  1143. # Print value
  1144. echo "$value"
  1145. }
  1146. is_backup_enabled() {
  1147. backups=$(grep "BACKUPS='" $V_USERS/$user/user.conf |cut -f 2 -d \')
  1148. if [ -z "$backups" ] || [[ "$backups" -le '0' ]]; then
  1149. echo "Error: User backups are disabled"
  1150. log_event 'debug' "$E_BACKUP_DISABLED $V_EVENT"
  1151. exit $E_BACKUP_DISABLED
  1152. fi
  1153. }