shared.func 27 KB

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