shared_func.sh 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385
  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" = 'yes' ]; 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. fname) format_usr "$v" ;;
  253. job) format_int "$v" ;;
  254. ns) format_dom "$v" ;;
  255. ns1) format_dom "$v" ;;
  256. ns2) format_dom "$v" ;;
  257. ns3) format_dom "$v" ;;
  258. ns4) format_dom "$v" ;;
  259. ns5) format_dom "$v" ;;
  260. ns6) format_dom "$v" ;;
  261. ns7) format_dom "$v" ;;
  262. ns8) format_dom "$v" ;;
  263. email) format_eml "$v" ;;
  264. extentions) format_ext "$v" ;;
  265. host) format_usr "$v" ;;
  266. interface) format_ifc "$v" ;;
  267. ip) format_ip "$v" ;;
  268. ip_status) format_ips "$v" ;;
  269. ip_name) format_dom "$v" ;;
  270. id) format_int "$v" ;;
  271. mask) format_ip "$v" ;;
  272. max_usr) format_int "$v" ;;
  273. max_db) format_int "$v" ;;
  274. limit) format_int "$v" ;;
  275. lname) format_usr "$v" ;;
  276. offset) format_int "$v" ;;
  277. owner) format_usr "$v" ;;
  278. package) format_usr "$v" ;;
  279. password) format_pwd "$v" ;;
  280. port) format_int "$v" ;;
  281. rtype) format_rcd "$v" ;;
  282. shell) format_sh "$v" ;;
  283. soa) format_dom "$v" ;;
  284. suspend_url) format_url "$v" ;;
  285. template) format_usr "$v" ;;
  286. ttl) format_int "$v" ;;
  287. user) format_usr "$v" ;;
  288. esac
  289. done
  290. }
  291. # Sub system checker
  292. is_system_enabled() {
  293. stype="$1"
  294. web_function() {
  295. # Parsing config
  296. web_system=$(grep "WEB_SYSTEM=" $V_CONF/vesta.conf|cut -f 2 -d \' )
  297. # Checking result
  298. if [ -z "$web_system" ] || [ "$web_system" = "no" ]; then
  299. echo "Error: web hosting support disabled"
  300. log_event 'debug' "$E_WEB_DISABLED $V_EVENT"
  301. exit $E_WEB_DISABLED
  302. fi
  303. }
  304. proxy_function() {
  305. # Parsing config
  306. proxy_system=$(grep "PROXY_SYSTEM=" $V_CONF/vesta.conf|cut -f 2 -d \' )
  307. # Checking result
  308. if [ "$proxy_system" != 'nginx' ]; then # only nginx
  309. echo "Error: proxy hosting support disabled" # support for
  310. log_event 'debug' "$E_PROXY_DISABLED $V_EVENT" # now
  311. exit $E_PROXY_DISABLED
  312. fi
  313. }
  314. dns_function() {
  315. # Parsing config
  316. dns_system=$(grep "DNS_SYSTEM=" $V_CONF/vesta.conf|cut -f 2 -d \' )
  317. # Checking result
  318. if [ -z "$dns_system" ] || [ "$cron_system" = "no" ]; then
  319. echo "Error: dns support disabled"
  320. log_event 'debug' "$E_DNS_DISABLED $V_EVENT"
  321. exit $E_DNS_DISABLED
  322. fi
  323. }
  324. cron_function() {
  325. # Parsing config
  326. cron_system=$(grep "CRON_SYSTEM=" $V_CONF/vesta.conf|cut -f 2 -d \' )
  327. # Checking result
  328. if [ -z "$cron_system" ] || [ "$cron_system" = "no" ]; then
  329. echo "Error: crond support disabled"
  330. log_event 'debug' "$E_CRON_DISABLED $V_EVENT"
  331. exit $E_CRON_DISABLED
  332. fi
  333. }
  334. db_function() {
  335. # Parsing config
  336. db_system=$(grep "DB_SYSTEM=" $V_CONF/vesta.conf|cut -f 2 -d \' )
  337. # Checking result
  338. if [ -z "$db_system" ] || [ "$db_system" = "no" ]; then
  339. echo "Error: db support disabled"
  340. log_event 'debug' "$E_DB_DISABLED $V_EVENT"
  341. exit $E_DB_DISABLED
  342. fi
  343. }
  344. backup_function() {
  345. # Parsing config
  346. bck_system=$(grep "BACKUP_SYSTEM=" $V_CONF/vesta.conf|cut -f 2 -d \' )
  347. # Checking result
  348. if [ -z "$bck_system" ] || [ "$bck_system" = "no" ]; then
  349. echo "Error: backup support disabled"
  350. log_event 'debug' "$E_BACKUP_DISABLED $V_EVENT"
  351. exit $E_BACKUP_DISABLED
  352. fi
  353. }
  354. case $stype in
  355. web) web_function ;;
  356. proxy) proxy_function ;;
  357. dns) dns_function ;;
  358. cron) cron_function ;;
  359. db) db_function ;;
  360. backup) backup_function ;;
  361. *) check_args '1' '0' 'system'
  362. esac
  363. }
  364. # System user check
  365. is_user_valid() {
  366. search_user="${1-$user}"
  367. check_user=$(cut -f 1 -d : /etc/passwd | grep -w "$search_user" )
  368. if [ -z "$check_user" ]; then
  369. echo "Error: user not found"
  370. log_event 'debug' "$E_USER_NOTEXIST $V_EVENT"
  371. exit $E_USER_NOTEXIST
  372. fi
  373. if [ ! -d "$V_USERS/$search_user" ]; then
  374. echo "Error: unknown user"
  375. log_event 'debug' "$E_USER_UNKNOWN $V_EVENT"
  376. exit $E_USER_UNKNOWN
  377. fi
  378. }
  379. # Specific key check
  380. is_user_suspended() {
  381. check_suspend=$(grep "SUSPENDED='yes'" $V_USERS/$user/user.conf)
  382. if [ ! -z "$check_suspend" ]; then
  383. echo "Error: User is suspended"
  384. log_event 'debug' "$E_USER_SUSPENDED $V_EVENT"
  385. exit $E_USER_SUSPENDED
  386. fi
  387. }
  388. # User package check
  389. is_package_full() {
  390. stype="$1"
  391. web_domain() {
  392. # Checking zero domains
  393. domain_number=$(wc -l $V_USERS/$user/web.conf|cut -f 1 -d ' ')
  394. # Comparing current val with conf
  395. val=$(grep '^WEB_DOMAINS=' $V_USERS/$user/user.conf|cut -f 2 -d \' )
  396. if [ "$domain_number" -ge "$val" ]; then
  397. echo "Error: Upgrade package"
  398. log_event 'debug' "$E_PKG_UPGRADE $v_log"
  399. exit $E_PKG_UPGRADE
  400. fi
  401. }
  402. web_alias() {
  403. # Parsing aliases
  404. alias_nmb=$(grep "DOMAIN='$domain'" $V_USERS/$user/web.conf|\
  405. awk -F "ALIAS=" '{print $2}' | cut -f 2 -d \' |\
  406. sed -e "s/,/\n/g" | wc -l )
  407. # Parsing config
  408. val=$(grep 'WEB_ALIASES=' $V_USERS/$user/user.conf | cut -f 2 -d \' )
  409. if [ "$alias_nmb" -ge "$val" ]; then
  410. echo "Error: Upgrade package"
  411. log_event 'debug' "$E_PKG_UPGRADE $v_log"
  412. exit $E_PKG_UPGRADE
  413. fi
  414. }
  415. web_ssl() {
  416. # Parsing config
  417. val=$(grep '^WEB_SSL=' $V_USERS/$user/user.conf | cut -f 2 -d \' )
  418. if [ "$val" -eq '0' ]; then
  419. echo "Error: Upgrade package"
  420. log_event 'debug' "$E_PKG_UPGRADE $v_log"
  421. exit $E_PKG_UPGRADE
  422. fi
  423. # Checking domains
  424. domain_nmb=$(grep "SSL='yes'" $V_USERS/$user/web.conf | wc -l)
  425. # Comparing current val with conf
  426. if [ "$domain_nmb" -ge "$val" ]; then
  427. echo "Error: Upgrade package"
  428. log_event 'debug' "$E_PKG_UPGRADE $v_log"
  429. exit $E_PKG_UPGRADE
  430. fi
  431. }
  432. dns_domain() {
  433. # Checking zero domains
  434. domain_number=$(wc -l $V_USERS/$user/dns.conf | cut -f 1 -d " ")
  435. # Comparing current val with conf
  436. val=$(grep '^DNS_DOMAINS=' $V_USERS/$user/user.conf | cut -f 2 -d \' )
  437. if [ "$domain_number" -ge "$val" ]; then
  438. echo "Error: Upgrade package"
  439. log_event 'debug' "$E_PKG_UPGRADE $v_log"
  440. exit $E_PKG_UPGRADE
  441. fi
  442. }
  443. db_base() {
  444. # Checking zero domains
  445. db_number=$(wc -l $V_USERS/$user/db.conf | cut -f 1 -d " ")
  446. # Comparing current val with conf
  447. val=$(grep '^DATABASES=' $V_USERS/$user/user.conf | cut -f 2 -d \' )
  448. if [ "$db_number" -ge "$val" ]; then
  449. echo "Error: Upgrade package"
  450. log_event 'debug' "$E_PKG_UPGRADE $v_log"
  451. exit $E_PKG_UPGRADE
  452. fi
  453. }
  454. # FIXME - should finish other functions
  455. # Switching
  456. case "$stype" in
  457. web_domain) web_domain "$user" ;;
  458. web_alias) web_alias "$user" "$domain" ;;
  459. web_ssl) web_ssl "$user" ;;
  460. dns) dns_domain "$user" ;;
  461. db_base) db_base "$user" ;;
  462. mail_domain) mail_domain "$user" ;;
  463. mail_box) mail_box "$user" "$domain";;
  464. mail_forwarder) mail_forwarder "$user" "$domain";;
  465. *)
  466. echo "Error: bad type"
  467. log_event 'debug' "$E_BAD_TYPE $V_EVENT"
  468. exit $E_BAD_TYPE
  469. ;;
  470. esac
  471. }
  472. is_package_avalable() {
  473. # Parsing user data
  474. usr_data=$(cat $V_USERS/$user/user.conf)
  475. for key in $usr_data; do
  476. eval ${key%%=*}=${key#*=}
  477. done
  478. # Clearing vars
  479. WEB_DOMAINS='0'
  480. WEB_SSL='0'
  481. DATABASES='0'
  482. MAIL_DOMAINS='0'
  483. MAIL_BOXES='0'
  484. MAIL_FORWARDERS='0'
  485. DNS_DOMAINS='0'
  486. DISK_QUOTA='0'
  487. BANDWIDTH='0'
  488. MAX_CHILDS='0'
  489. # Parsing package
  490. pkg_data=$(cat $V_PKG/$package.pkg)
  491. for key in $pkg_data; do
  492. eval ${key%%=*}=${key#*=}
  493. done
  494. # Comparing user data with package
  495. if [ "$WEB_DOMAINS" -lt "$U_WEB_DOMAINS" ] ||\
  496. [ "$WEB_SSL" -lt "$U_WEB_SSL" ] ||\
  497. [ "$DATABASES" -lt "$U_DATABASES" ] ||\
  498. [ "$MAIL_DOMAINS" -lt "$U_MAIL_DOMAINS" ] ||\
  499. [ "$DNS_DOMAINS" -lt "$U_DNS_DOMAINS" ] ||\
  500. [ "$DISK_QUOTA" -lt "$U_DISK" ] ||\
  501. [ "$BANDWIDTH" -lt "$U_BANDWIDTH" ] ||\
  502. [ "$MAX_CHILDS" -lt "$U_CHILDS" ]; then
  503. echo "Error: Upgrade package"
  504. log_event 'debug' "$E_PKG_UPGRADE $v_log"
  505. exit $E_PKG_UPGRADE
  506. fi
  507. }
  508. is_template_valid() {
  509. stype="$1"
  510. web_template() {
  511. check_tpl=$(echo "$templates"|sed -e "s/,/\n/g"|grep "^$template$")
  512. tpl="$V_WEBTPL/apache_$template.tpl"
  513. descr="$V_WEBTPL/apache_$template.descr"
  514. ssl="$V_WEBTPL/apache_$template.stpl"
  515. if [ -z "$check_tpl" ] || [ ! -e $tpl ] || \
  516. [ ! -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. proxy_template() {
  523. tpl="$V_WEBTPL/ngingx_vhost_$template.tpl"
  524. descr="$V_WEBTPL/ngingx_vhost_$template.descr"
  525. ssl="$V_WEBTPL/ngingx_vhost_$template.stpl"
  526. if [ ! -e $tpl ] || [ ! -e $descr ] || [ ! -e $ssl ]; then
  527. echo "Error: template not found"
  528. log_event 'debug' "$E_TPL_NOTEXIST"
  529. exit $E_TPL_NOTEXIST
  530. fi
  531. }
  532. dns_template() {
  533. tpl="$V_DNSTPL/$template.tpl"
  534. descr="$V_DNSTPL/$template.descr"
  535. if [ ! -e $tpl ] || [ ! -e $descr ]; then
  536. echo "Error: template not found"
  537. log_event 'debug' "$E_TPL_NOTEXIST"
  538. exit $E_TPL_NOTEXIST
  539. fi
  540. }
  541. # Switching config
  542. case $stype in
  543. web) web_template "$template" ;;
  544. proxy) proxy_template "$template" ;;
  545. dns) dns_template "$template" ;;
  546. esac
  547. }
  548. get_user_value() {
  549. key="$1"
  550. USER="$user"
  551. # Parsing domains
  552. string=$( cat $V_USERS/$user/user.conf )
  553. # Parsing key=value
  554. for keys in $string; do
  555. eval ${keys%%=*}=${keys#*=}
  556. done
  557. # Self reference
  558. eval value="$key"
  559. # Print value
  560. echo "$value"
  561. }
  562. restart_schedule() {
  563. type="$1"
  564. period="$2"
  565. # Checking period
  566. if [ -z "$period" ]; then
  567. period=$(grep 'RESTART_PERIOD=' $V_CONF/vesta.conf | cut -f 2 -d \')
  568. fi
  569. if [ "$period" -le 0 ]; then
  570. $V_FUNC/restart_"$type"
  571. else
  572. echo "$type" >> $V_QUEUE/restart.pipe
  573. fi
  574. }
  575. is_user_free() {
  576. # Parsing domain values
  577. check_sysuser=$(cut -f 1 -d : /etc/passwd | grep -w "$user" )
  578. # Checking result
  579. if [ ! -z "$check_sysuser" ] || [ -e "$V_USERS/$user" ]; then
  580. echo "Error: user $user exist"
  581. log_event 'debug' "$E_USER_EXIST $V_EVENT"
  582. exit $E_USER_EXIST
  583. fi
  584. }
  585. is_user_privileged() {
  586. search_user="${1-$user}"
  587. # Parsing domain values
  588. user_role=$(grep 'ROLE=' $V_USERS/$search_user/user.conf|cut -f 2 -d \' )
  589. # Checking role
  590. if [ "$user_role" != 'reseller' ] && [ "$user_role" != 'admin' ]; then
  591. echo "Error: user role is $user_role"
  592. log_event 'debug' "$E_PERMS_REQUEIURED $V_EVENT"
  593. exit $E_PERMS_REQUEIURED
  594. fi
  595. # Checking role permissions
  596. if [ -n "$role" ]; then
  597. case "$user_role" in
  598. admin) rights='reseller, user' ;;
  599. reseller) rights='user' ;;
  600. *) rights='no_create' ;;
  601. esac
  602. # Comparing rights with role
  603. check_perms=$(echo "$rights"|grep -w "$role")
  604. if [ -z "$check_perms" ]; then
  605. echo "Error: user rights are '$rights'"
  606. log_event 'debug' "$E_PERMS_REQUEIURED $V_EVENT"
  607. exit $E_PERMS_REQUEIURED
  608. fi
  609. fi
  610. }
  611. is_package_valid() {
  612. if [ ! -e "$V_PKG/$package.pkg" ]; then
  613. echo "Error: package is not exist"
  614. log_event 'debug' "$E_PKG_NOTEXIST $v_log"
  615. exit $E_PKG_NOTEXIST
  616. fi
  617. }
  618. is_user_key_empty() {
  619. key="$1"
  620. # Parsing ip
  621. string=$(cat $V_USERS/$user/user.conf )
  622. # Parsing key=value
  623. for keys in $string; do
  624. eval ${keys%%=*}=${keys#*=}
  625. done
  626. # Self reference
  627. eval value="$key"
  628. # Checkng key
  629. if [ ! -z "$value" ] && [ "$value" != 'no' ] && [ "$value" != '0' ]; then
  630. echo "Error: value is not empty = $value "
  631. log_event 'debug' "$E_VALUE_EXIST $V_EVENT"
  632. exit $E_VALUE_EXIST
  633. fi
  634. }
  635. update_user_value() {
  636. USER="$1"
  637. key="$2"
  638. value="$3"
  639. # Defining conf
  640. conf="$V_USERS/$USER/user.conf"
  641. # Parsing conf
  642. str=$(cat $conf)
  643. # Reading key=values
  644. for keys in $str; do
  645. eval ${keys%%=*}=${keys#*=}
  646. done
  647. # Define clean key
  648. c_key=$(echo "${key//$/}")
  649. eval old="${key}"
  650. # Escaping slashes
  651. old=$(echo "$old" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g')
  652. new=$(echo "$value" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g')
  653. # Updating conf
  654. sed -i "s/$c_key='${old//\*/\\*}'/$c_key='${new//\*/\\*}'/g" $conf
  655. }
  656. increase_user_value() {
  657. USER="$1"
  658. key="$2"
  659. # Defining conf
  660. conf="$V_USERS/$USER/user.conf"
  661. # Deleting $
  662. key=$(echo "${key//$/}")
  663. # Parsing current value
  664. current_value=$(grep "$key=" $conf |cut -f 2 -d \')
  665. # Checking result
  666. if [ -z "$current_value" ]; then
  667. echo "Error: Parsing error"
  668. log_event 'debug' "$E_PARSE_ERROR $V_EVENT"
  669. exit $E_PARSE_ERROR
  670. fi
  671. # Plus one
  672. new_value=$(expr $current_value + 1 )
  673. # Changing config
  674. sed -i "s/$key='$current_value'/$key='$new_value'/g" $conf
  675. }
  676. is_web_domain_cert_valid() {
  677. # Checking file existance
  678. path="$V_USERS/$user/cert"
  679. if [ ! -e "$path/$cert.crt" ] || [ ! -e "$path/$cert.key" ]; then
  680. echo "Error: certificate not exist"
  681. log_event 'debug' "$E_CERT_NOTEXIST $V_EVENT"
  682. exit $E_CERT_NOTEXIST
  683. fi
  684. }
  685. is_type_valid() {
  686. # Argument defenition
  687. sys="$1"
  688. stype="$2"
  689. # Switching config
  690. case $sys in
  691. stat) skey='STATS_SYSTEM=';;
  692. db) skey='DB_SYSTEM=' ;;
  693. *) skey='UNKNOWN' ;;
  694. esac
  695. # Parsing domain values
  696. check_type=$(grep "$skey" $V_CONF/vesta.conf|grep -w $stype)
  697. # Checking result
  698. if [ -z "$check_type" ]; then
  699. echo "Error: unknown type"
  700. log_event 'debug' "$E_BAD_TYPE $V_EVENT"
  701. exit $E_BAD_TYPE
  702. fi
  703. }
  704. change_user_package() {
  705. # Parsing user data
  706. usr_data=$(cat $V_USERS/$user/user.conf)
  707. for key in $usr_data; do
  708. eval ${key%%=*}=${key#*=}
  709. done
  710. # Parsing package
  711. pkg_data=$(cat $V_PKG/$package.pkg)
  712. for key in $pkg_data; do
  713. eval ${key%%=*}=${key#*=}
  714. done
  715. echo "PACKAGE='$package'
  716. WEB_DOMAINS='$WEB_DOMAINS'
  717. WEB_SSL='$WEB_SSL'
  718. WEB_ALIASES='$WEB_ALIASES'
  719. DATABASES='$DATABASES'
  720. MAIL_DOMAINS='$MAIL_DOMAINS'
  721. MAIL_BOXES='$MAIL_BOXES'
  722. MAIL_FORWARDERS='$MAIL_FORWARDERS'
  723. DNS_DOMAINS='$DNS_DOMAINS'
  724. DISK_QUOTA='$DISK_QUOTA'
  725. BANDWIDTH='$BANDWIDTH'
  726. NS1='$NS1'
  727. NS2='$NS2'
  728. SHELL='$SHELL'
  729. BACKUPS='$BACKUPS'
  730. WEB_TPL='$WEB_TPL'
  731. MAX_CHILDS='$MAX_CHILDS'
  732. SUSPENDED='$SUSPENDED'
  733. OWNER='$OWNER'
  734. ROLE='$ROLE'
  735. IP_OWNED='$IP_OWNED'
  736. U_CHILDS='$U_CHILDS'
  737. U_DISK='$U_DISK'
  738. U_BANDWIDTH='$U_BANDWIDTH'
  739. U_WEB_DOMAINS='$U_WEB_DOMAINS'
  740. U_WEB_SSL='$U_WEB_SSL'
  741. U_DNS_DOMAINS='$U_DNS_DOMAINS'
  742. U_DATABASES='$U_DATABASES'
  743. U_MAIL_DOMAINS='$U_MAIL_DOMAINS'
  744. DATE='$DATE'" > $V_USERS/$user/user.conf
  745. }
  746. get_shell_path() {
  747. check_shell=$(/usr/bin/chsh --list-shells | grep -w "$shell" )
  748. echo "$check_shell"
  749. }
  750. is_user_value_exist() {
  751. key="$1"
  752. string=$(cat $V_USERS/$user/user.conf )
  753. # Parsing key=value
  754. for keys in $string; do
  755. eval ${keys%%=*}=${keys#*=}
  756. done
  757. # Self reference
  758. eval value="$key"
  759. # Checking result
  760. if [ -z "$value" ] || [ "$value" = 'no' ]; then
  761. echo "Error: ${key//$/} is empty"
  762. log_event 'debug' "$E_VALUE_EMPTY $V_EVENT"
  763. exit $E_VALUE_EMPTY
  764. fi
  765. }
  766. decrease_user_value() {
  767. USER="$1"
  768. key="$2"
  769. conf="$V_USERS/$USER/user.conf"
  770. # Deleting $
  771. key=$(echo "${key//$/}")
  772. # Parsing current value
  773. current_value=$(grep "$key=" $conf |cut -f 2 -d \')
  774. # Checking result
  775. if [ -z "$current_value" ]; then
  776. echo "Error: Parsing error"
  777. log_event 'debug' "$E_PARSE_ERROR $V_EVENT"
  778. exit $E_PARSE_ERROR
  779. fi
  780. # Checking zero val
  781. if [ "$current_value" -gt 0 ]; then
  782. # Minus one
  783. new_value=$(expr $current_value - 1 )
  784. # Changing config
  785. sed -i "s/$key='$current_value'/$key='$new_value'/g" $conf
  786. fi
  787. }
  788. # Json listing function
  789. v_json_list() {
  790. # Definigng variables
  791. i='1' # iterator
  792. end=$(($limit + $offset)) # last string
  793. value='' # clean start value
  794. # Print top bracket
  795. echo '{'
  796. # Reading file line by line
  797. while read line ; do
  798. # Checking offset and limit
  799. if [ "$i" -ge "$offset" ] && [ "$i" -lt "$end" ] && [ "$offset" -gt 0 ]
  800. then
  801. # Parsing key=value
  802. for key in $line; do
  803. eval ${key%%=*}=${key#*=}
  804. done
  805. # Checking !first line to print bracket
  806. if [ "$i" -ne "$offset" ]; then
  807. echo -e "\t},"
  808. fi
  809. j=1 # local loop iterator
  810. last_word=$(echo "$fields" | wc -w)
  811. # Print data
  812. for field in $fields; do
  813. eval value=$field
  814. # Checking parrent key
  815. if [ "$j" -eq 1 ]; then
  816. echo -e "\t\"$value\": {"
  817. else
  818. if [ "$j" -eq "$last_word" ]; then
  819. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
  820. else
  821. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
  822. fi
  823. fi
  824. j=$(($j + 1))
  825. done
  826. fi
  827. i=$(($i + 1))
  828. done < $conf
  829. # If there was any output
  830. if [ -n "$value" ]; then
  831. echo -e "\t}"
  832. fi
  833. # Printing bottom json bracket
  834. echo -e "}"
  835. }
  836. # Shell listing function
  837. v_shell_list() {
  838. # Definigng variables
  839. i='1' # iterator
  840. end=$(($limit + $offset)) # last string
  841. # Print brief info
  842. echo "${fields//$/}"
  843. for a in $fields; do
  844. echo -e "------ \c"
  845. done
  846. echo # new line
  847. # Reading file line by line
  848. while read line ; do
  849. # Checking offset and limit
  850. if [ "$i" -ge "$offset" ] && [ "$i" -lt "$end" ] && [ "$offset" -gt 0 ]
  851. then
  852. # Parsing key=value
  853. for key in $line; do
  854. eval ${key%%=*}=${key#*=}
  855. done
  856. # Print result line
  857. eval echo "$fields"
  858. fi
  859. i=$(($i + 1))
  860. done < $conf
  861. }
  862. usr_json_single_list() {
  863. # Definigng variables
  864. USER="$user" # user
  865. i=1 # iterator
  866. # Define words number
  867. last_word=$(echo "$fields" | wc -w)
  868. # Reading file line by line
  869. line=$(cat $V_USERS/$USER/user.conf)
  870. # Print top bracket
  871. echo '{'
  872. # Parsing key=value
  873. for key in $line; do
  874. eval ${key%%=*}=${key#*=}
  875. done
  876. # Starting output loop
  877. for field in $fields; do
  878. # Parsing key=value
  879. eval value=$field
  880. # Checking first field
  881. if [ "$i" -eq 1 ]; then
  882. echo -e "\t\"$value\": {"
  883. else
  884. if [ "$last_word" -eq "$i" ]; then
  885. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
  886. else
  887. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
  888. fi
  889. fi
  890. # Updating iterator
  891. i=$(( i + 1))
  892. done
  893. # If there was any output
  894. if [ -n "$value" ]; then
  895. echo -e "\t}"
  896. fi
  897. # Printing bottom json bracket
  898. echo -e "}"
  899. }
  900. usr_shell_single_list() {
  901. # Definigng variables
  902. USER="$user" # user
  903. # Reading file line by line
  904. line=$(cat $V_USERS/$USER/user.conf)
  905. # Parsing key=value
  906. for key in $line; do
  907. eval ${key%%=*}=${key#*=}
  908. done
  909. # Print result line
  910. for field in $fields; do
  911. eval key="$field"
  912. echo "${field//$/}: $key "
  913. done
  914. }
  915. usr_json_list() {
  916. i='1' # iterator
  917. end=$(($limit + $offset)) # last string
  918. # Definining user list
  919. #user_list=$(find $V_USERS/ -maxdepth 1 -mindepth 1 -type d -printf %P\\n )
  920. user_list=$(ls $V_USERS/)
  921. # Print top bracket
  922. echo '{'
  923. # Starting main loop
  924. for USER in $user_list; do
  925. # Checking offset and limit
  926. if [ "$i" -ge "$offset" ] && [ "$i" -lt "$end" ] && [ "$offset" -gt 0 ]
  927. then
  928. # Reading user data
  929. user_data=$(cat $V_USERS/$USER/user.conf)
  930. # Parsing key/value config
  931. for key in $user_data; do
  932. eval ${key%%=*}=${key#*=}
  933. done
  934. # Checking !first line to print bracket with coma
  935. if [ "$i" -ne "$offset" ]; then
  936. echo -e "\t},"
  937. fi
  938. # Defining local iterator and words count
  939. j='1'
  940. last_word=$(echo "$fields" | wc -w)
  941. # Print data
  942. for field in $fields; do
  943. eval value=$field
  944. # Checking parrent key
  945. if [ "$j" -eq 1 ]; then
  946. echo -e "\t\"$value\": {"
  947. else
  948. if [ "$j" -eq "$last_word" ]; then
  949. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
  950. else
  951. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
  952. fi
  953. fi
  954. j=$(($j + 1))
  955. done
  956. fi
  957. i=$(($i + 1))
  958. done
  959. # If there was any output
  960. if [ -n "$value" ]; then
  961. echo -e "\t}"
  962. fi
  963. # Printing bottom json bracket
  964. echo '}'
  965. }
  966. usr_shell_list() {
  967. i='1' # iterator
  968. end=$(($limit + $offset)) # last string
  969. # Definining user list
  970. #user_list=$(find $V_USERS/ -maxdepth 1 -mindepth 1 -type d -printf %P\\n )
  971. user_list=$(ls $V_USERS/)
  972. # Print brief info
  973. echo "${fields//$/}"
  974. for a in $fields; do
  975. echo -e "--------- \c"
  976. done
  977. echo # new line
  978. # Starting main loop
  979. for USER in $user_list; do
  980. # Checking offset and limit
  981. if [ "$i" -ge "$offset" ] && [ "$i" -lt "$end" ] && [ "$offset" -gt 0 ]
  982. then
  983. # Reading user data
  984. user_data=$(cat $V_USERS/$USER/user.conf)
  985. # Parsing key/value config
  986. for key in $user_data; do
  987. eval ${key%%=*}=${key#*=}
  988. done
  989. # Print result line
  990. eval echo "$fields"
  991. fi
  992. i=$(($i + 1))
  993. done
  994. }
  995. usrns_json_list() {
  996. ns=$(grep "NS[1|2]=" $V_USERS/$user/user.conf |cut -f 2 -d \')
  997. # Print top bracket
  998. echo '['
  999. i=1
  1000. # Listing servers
  1001. for nameserver in $ns;do
  1002. if [ "$i" -eq 1 ]; then
  1003. echo -e "\t\"$nameserver\","
  1004. else
  1005. echo -e "\t\"$nameserver\""
  1006. fi
  1007. i=$((i + 1))
  1008. done
  1009. echo "]"
  1010. }
  1011. usrns_shell_list() {
  1012. ns=$(grep "NS[1|2]=" $V_USERS/$user/user.conf |cut -f 2 -d \')
  1013. # Print result
  1014. echo "NAMESERVER"
  1015. echo "----------"
  1016. for nameserver in $ns;do
  1017. echo "$nameserver"
  1018. done
  1019. }
  1020. get_usr_disk() {
  1021. size='0'
  1022. # Using tricky way to parse configs
  1023. dir_usage=$(grep 'U_DIR_DISK=' $V_USERS/$user/user.conf |\
  1024. cut -f 2 -d "'")
  1025. size=$((size + dir_usage))
  1026. # Checking web
  1027. if [ -f "$V_USERS/$user/web.conf" ]; then
  1028. # Using tricky way to parse configs
  1029. disk_usage=$(grep 'U_DISK=' $V_USERS/$user/web.conf |\
  1030. awk -F "U_DISK='" '{print $2}'|cut -f 1 -d "'")
  1031. for disk in $disk_usage; do
  1032. size=$((size + disk))
  1033. done
  1034. fi
  1035. # Checking db
  1036. if [ -f "$V_USERS/$user/db.conf" ]; then
  1037. # Using tricky way to parse configs
  1038. disk_usage=$(grep 'U_DISK=' $V_USERS/$user/db.conf |\
  1039. awk -F "U_DISK='" '{print $2}'|cut -f 1 -d "'")
  1040. for disk in $disk_usage; do
  1041. size=$((size + disk))
  1042. done
  1043. fi
  1044. # Checking mail
  1045. if [ -f "$V_USERS/$user/mail_domains.conf" ]; then
  1046. # Using tricky way to parse configs
  1047. disk_usage=$(grep 'U_DISK=' $V_USERS/$user/mail_domains.conf |\
  1048. awk -F "U_DISK='" '{print $2}'|cut -f 1 -d "'")
  1049. for disk in $disk_usage; do
  1050. size=$((size + disk))
  1051. done
  1052. fi
  1053. echo "$size"
  1054. }
  1055. get_usr_traff() {
  1056. size='0'
  1057. conf='web.conf'
  1058. # Checking web
  1059. if [ -f "$V_USERS/$user/$conf" ]; then
  1060. # Using tricky way to parse configs
  1061. bandwidth_usage=$(grep 'U_BANDWIDTH=' $V_USERS/$user/$conf|\
  1062. awk -F "U_BANDWIDTH='" '{print $2}'|cut -f 1 -d "'")
  1063. for bandwidth in $bandwidth_usage; do
  1064. size=$((size + bandwidth))
  1065. done
  1066. fi
  1067. echo "$size"
  1068. }
  1069. pkg_json_list() {
  1070. i='1' # iterator
  1071. end=$(($limit + $offset)) # last string
  1072. # Print top bracket
  1073. echo '{'
  1074. # Starting main loop
  1075. for package in $(ls $V_DATA/packages); do
  1076. PACKAGE=${package/.pkg/}
  1077. # Checking offset and limit
  1078. if [ "$i" -ge "$offset" ] && [ "$i" -lt "$end" ] && [ "$offset" -gt 0 ]
  1079. then
  1080. # Parsing key/value config
  1081. pkg_descr=$(cat $V_DATA/packages/$package)
  1082. for key in $pkg_descr; do
  1083. eval ${key%%=*}=${key#*=}
  1084. done
  1085. # Checking !first line to print bracket with coma
  1086. if [ "$i" -ne "$offset" ]; then
  1087. echo -e "\t},"
  1088. fi
  1089. # Defining local iterator and words count
  1090. j='1'
  1091. last_word=$(echo "$fields" | wc -w)
  1092. # Print data
  1093. for field in $fields; do
  1094. eval value=$field
  1095. # Checking parrent key
  1096. if [ "$j" -eq 1 ]; then
  1097. echo -e "\t\"$value\": {"
  1098. else
  1099. if [ "$j" -eq "$last_word" ]; then
  1100. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
  1101. else
  1102. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
  1103. fi
  1104. fi
  1105. j=$(($j + 1))
  1106. done
  1107. fi
  1108. i=$(($i + 1))
  1109. done
  1110. # If there was any output
  1111. if [ -n "$value" ]; then
  1112. echo -e "\t}"
  1113. fi
  1114. # Printing bottom json bracket
  1115. echo '}'
  1116. }
  1117. pkg_shell_list() {
  1118. i='1' # iterator
  1119. end=$(($limit + $offset)) # last string
  1120. # Listing pkg files
  1121. for package in $(ls $V_DATA/packages); do
  1122. PACKAGE=${package/.pkg/}
  1123. # Checking offset and limit
  1124. if [ "$i" -ge "$offset" ] && [ "$i" -lt "$end" ] && [ "$offset" -gt 0 ]
  1125. then
  1126. # Parsing key=value
  1127. pkg_descr=$(cat $V_DATA/packages/$package)
  1128. for key in $pkg_descr; do
  1129. eval ${key%%=*}=${key#*=}
  1130. done
  1131. echo "----------"
  1132. # Starting output loop
  1133. for field in $fields; do
  1134. # Parsing key=value
  1135. eval value=$field
  1136. # Checking first field
  1137. echo -e "${field//$/}: $value"
  1138. done
  1139. fi
  1140. i=$(($i + 1))
  1141. done
  1142. }
  1143. get_config_value() {
  1144. key="$1"
  1145. # Parsing config
  1146. string=$(cat $V_CONF/vesta.conf)
  1147. # Parsing key=value
  1148. for keys in $string; do
  1149. eval ${keys%%=*}=${keys#*=}
  1150. done
  1151. # Self reference
  1152. eval value="$key"
  1153. # Print value
  1154. echo "$value"
  1155. }
  1156. is_backup_enabled() {
  1157. backups=$(grep "BACKUPS='" $V_USERS/$user/user.conf |cut -f 2 -d \')
  1158. if [ -z "$backups" ] || [[ "$backups" -le '0' ]]; then
  1159. echo "Error: User backups are disabled"
  1160. log_event 'debug' "$E_BACKUP_DISABLED $V_EVENT"
  1161. exit $E_BACKUP_DISABLED
  1162. fi
  1163. }