rebuild.sh 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649
  1. # User account rebuild
  2. rebuild_user_conf() {
  3. # Get user variables
  4. source $USER_DATA/user.conf
  5. # Creating user data files
  6. chmod 770 $USER_DATA
  7. chmod 660 $USER_DATA/user.conf
  8. touch $USER_DATA/backup.conf
  9. chmod 660 $USER_DATA/backup.conf
  10. touch $USER_DATA/history.log
  11. chmod 660 $USER_DATA/history.log
  12. touch $USER_DATA/stats.log
  13. chmod 660 $USER_DATA/stats.log
  14. # Run template trigger
  15. if [ -x "$VESTA/data/packages/$PACKAGE.sh" ]; then
  16. $VESTA/data/packages/$package.sh "$user" "$CONTACT" "$FNAME" "$LNAME"
  17. fi
  18. # Rebuild user
  19. shell=$(chsh --list-shells | grep -w "$SHELL" | head -n1)
  20. /usr/sbin/adduser "$user" -s "$shell" -c "$CONTACT" \
  21. -m -d "$HOMEDIR/$user" > /dev/null 2>&1
  22. # Update user shell
  23. shell_path=$(/usr/bin/chsh --list-shells | grep -w "$SHELL" |head -n1)
  24. /usr/bin/chsh -s "$shell_path" "$user" &>/dev/null
  25. # Update password
  26. shadow=$(grep ^$user: /etc/shadow)
  27. shdw3=$(echo "$shadow" | cut -f3 -d :)
  28. shdw4=$(echo "$shadow" | cut -f4 -d :)
  29. shdw5=$(echo "$shadow" | cut -f5 -d :)
  30. shdw6=$(echo "$shadow" | cut -f6 -d :)
  31. shdw7=$(echo "$shadow" | cut -f7 -d :)
  32. shdw8=$(echo "$shadow" | cut -f8 -d :)
  33. shdw9=$(echo "$shadow" | cut -f9 -d :)
  34. shadow_str="$user:$MD5:$shdw3:$shdw4:$shdw5:$shdw6"
  35. shadow_str="$shadow_str:$shdw7:$shdw8:$shdw9"
  36. chmod u+w /etc/shadow
  37. sed -i "/^$user:*/d" /etc/shadow
  38. echo "$shadow_str" >> /etc/shadow
  39. chmod u-w /etc/shadow
  40. # Building directory tree
  41. if [ -e "$HOMEDIR/$user/conf" ]; then
  42. chattr -i $HOMEDIR/$user/conf
  43. fi
  44. mkdir -p $HOMEDIR/$user/conf
  45. chmod a+x $HOMEDIR/$user
  46. chmod a+x $HOMEDIR/$user/conf
  47. chown $user:$user $HOMEDIR/$user
  48. chown root:root $HOMEDIR/$user/conf
  49. # Update disk pipe
  50. sed -i "/ $user$/d" $VESTA/data/queue/disk.pipe
  51. echo "$BIN/v-update-user-disk $user" >> $VESTA/data/queue/disk.pipe
  52. # WEB
  53. if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
  54. mkdir -p $USER_DATA/ssl
  55. chmod 770 $USER_DATA/ssl
  56. touch $USER_DATA/web.conf
  57. chmod 660 $USER_DATA/web.conf
  58. if [ "$(grep -w $user $VESTA/data/queue/traffic.pipe)" ]; then
  59. echo "$BIN/v-update-web-domains-traff $user" \
  60. >> $VESTA/data/queue/traffic.pipe
  61. fi
  62. echo "$BIN/v-update-web-domains-disk $user" \
  63. >> $VESTA/data/queue/disk.pipe
  64. mkdir -p $HOMEDIR/$user/conf/web
  65. mkdir -p $HOMEDIR/$user/web
  66. mkdir -p $HOMEDIR/$user/tmp
  67. chmod 751 $HOMEDIR/$user/conf/web
  68. chmod 751 $HOMEDIR/$user/web
  69. chmod 771 $HOMEDIR/$user/tmp
  70. chown $user:$user $HOMEDIR/$user/web
  71. if [ -z "$create_user" ]; then
  72. $BIN/v-rebuild-web-domains $user $restart
  73. fi
  74. fi
  75. # DNS
  76. if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ]; then
  77. mkdir -p $USER_DATA/dns
  78. chmod 770 $USER_DATA/dns
  79. touch $USER_DATA/dns.conf
  80. chmod 660 $USER_DATA/dns.conf
  81. mkdir -p $HOMEDIR/$user/conf/dns
  82. chmod 751 $HOMEDIR/$user/conf/dns
  83. if [ -z "$create_user" ]; then
  84. $BIN/v-rebuild-dns-domains $user $restart
  85. fi
  86. fi
  87. if [ ! -z "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then
  88. mkdir -p $USER_DATA/mail
  89. chmod 770 $USER_DATA/mail
  90. touch $USER_DATA/mail.conf
  91. chmod 660 $USER_DATA/mail.conf
  92. echo "$BIN/v-update-mail-domains-disk $user" \
  93. >> $VESTA/data/queue/disk.pipe
  94. mkdir -p $HOMEDIR/$user/conf/mail
  95. mkdir -p $HOMEDIR/$user/mail
  96. chmod 751 $HOMEDIR/$user/mail
  97. chmod 751 $HOMEDIR/$user/conf/mail
  98. if [ -z "$create_user" ]; then
  99. $BIN/v-rebuild-mail-domains $user
  100. fi
  101. fi
  102. if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then
  103. touch $USER_DATA/db.conf
  104. chmod 660 $USER_DATA/db.conf
  105. echo "$BIN/v-update-databases-disk $user" >> $VESTA/data/queue/disk.pipe
  106. if [ -z "$create_user" ]; then
  107. $BIN/v-rebuild-databases $user
  108. fi
  109. fi
  110. if [ ! -z "$CRON_SYSTEM" ] && [ "$CRON_SYSTEM" != 'no' ]; then
  111. touch $USER_DATA/cron.conf
  112. chmod 660 $USER_DATA/cron.conf
  113. if [ -z "$create_user" ]; then
  114. $BIN/v-rebuild-cron-jobs $user $restart
  115. fi
  116. fi
  117. # Set immutable flag
  118. chattr +i $HOMEDIR/$user/conf
  119. }
  120. # WEB domain rebuild
  121. rebuild_web_domain_conf() {
  122. # Get domain values
  123. domain_idn=$(idn -t --quiet -a "$domain")
  124. get_domain_values 'web'
  125. ip=$(get_real_ip $IP)
  126. # Preparing domain values for the template substitution
  127. upd_web_domain_values
  128. # Rebuilding directories
  129. mkdir -p $HOMEDIR/$user/web/$domain \
  130. $HOMEDIR/$user/web/$domain/public_html \
  131. $HOMEDIR/$user/web/$domain/public_shtml \
  132. $HOMEDIR/$user/web/$domain/document_errors \
  133. $HOMEDIR/$user/web/$domain/cgi-bin \
  134. $HOMEDIR/$user/web/$domain/private \
  135. $HOMEDIR/$user/web/$domain/stats \
  136. $HOMEDIR/$user/web/$domain/logs
  137. # Create domain logs
  138. touch /var/log/$WEB_SYSTEM/domains/$domain.bytes \
  139. /var/log/$WEB_SYSTEM/domains/$domain.log \
  140. /var/log/$WEB_SYSTEM/domains/$domain.error.log
  141. # Create symlinks
  142. cd $HOMEDIR/$user/web/$domain/logs/
  143. ln -f -s /var/log/$WEB_SYSTEM/domains/$domain.log .
  144. ln -f -s /var/log/$WEB_SYSTEM/domains/$domain.error.log .
  145. cd - > /dev/null
  146. # Propagate html skeleton
  147. if [ ! -e "$WEBTPL/skel/document_errors/" ]; then
  148. cp -r $WEBTPL/skel/document_errors/ $HOMEDIR/$user/web/$domain/
  149. fi
  150. # Set folder permissions
  151. chmod 551 $HOMEDIR/$user/web/$domain
  152. chmod 751 $HOMEDIR/$user/web/$domain/private
  153. chmod 751 $HOMEDIR/$user/web/$domain/cgi-bin
  154. chmod 751 $HOMEDIR/$user/web/$domain/public_html
  155. chmod 751 $HOMEDIR/$user/web/$domain/public_shtml
  156. chmod 751 $HOMEDIR/$user/web/$domain/document_errors
  157. chmod 551 $HOMEDIR/$user/web/$domain/stats
  158. chmod 551 $HOMEDIR/$user/web/$domain/logs
  159. chmod 640 /var/log/$WEB_SYSTEM/domains/$domain.*
  160. # Set ownership
  161. chown $user:$user $HOMEDIR/$user/web/$domain
  162. chown $user:$user $HOMEDIR/$user/web/$domain/private
  163. chown $user:$user $HOMEDIR/$user/web/$domain/cgi-bin
  164. chown $user:$user $HOMEDIR/$user/web/$domain/public_html
  165. chown $user:$user $HOMEDIR/$user/web/$domain/public_shtml
  166. chown -R $user:$user $HOMEDIR/$user/web/$domain/document_errors
  167. chown root:$user /var/log/$WEB_SYSTEM/domains/$domain.*
  168. # Adding tmp conf
  169. tpl_file="$WEBTPL/$WEB_SYSTEM/$TPL.tpl"
  170. conf="$HOMEDIR/$user/conf/web/tmp_$WEB_SYSTEM.conf"
  171. add_web_config
  172. chown root:$user $conf
  173. chmod 640 $conf
  174. # Running template trigger
  175. if [ -x $WEBTPL/$WEB_SYSTEM/$TPL.sh ]; then
  176. $WEBTPL/$WEB_SYSTEM/$TPL.sh $user $domain $ip $HOMEDIR $docroot
  177. fi
  178. # Checking aliases
  179. if [ ! -z "$ALIAS" ]; then
  180. aliases=$(echo "$ALIAS"|tr ',' '\n'| wc -l)
  181. user_aliases=$((user_aliases + aliases))
  182. fi
  183. # Checking stats
  184. if [ ! -z "$STATS" ]; then
  185. cat $WEBTPL/$STATS/$STATS.tpl |\
  186. sed -e "s/%ip%/$ip/g" \
  187. -e "s/%web_port%/$WEB_PORT/g" \
  188. -e "s/%web_ssl_port%/$WEB_SSL_PORT/g" \
  189. -e "s/%proxy_port%/$PROXY_PORT/g" \
  190. -e "s/%proxy_ssl_port%/$PROXY_SSL_PORT/g" \
  191. -e "s/%domain_idn%/$domain_idn/g" \
  192. -e "s/%domain%/$domain/g" \
  193. -e "s/%user%/$user/g" \
  194. -e "s/%home%/${HOMEDIR////\/}/g" \
  195. -e "s/%alias%/${aliases//,/ }/g" \
  196. -e "s/%alias_idn%/${aliases_idn//,/ }/g" \
  197. > $HOMEDIR/$user/conf/web/$STATS.$domain.conf
  198. if [ "$STATS" == 'awstats' ]; then
  199. if [ ! -e "/etc/awstats/$STATS.$domain_idn.conf" ]; then
  200. ln -f -s $HOMEDIR/$user/conf/web/$STATS.$domain.conf \
  201. /etc/awstats/$STATS.$domain_idn.conf
  202. fi
  203. fi
  204. webstats="$BIN/v-update-web-domain-stat $user $domain"
  205. check_webstats=$(grep "$webstats" $VESTA/data/queue/webstats.pipe)
  206. if [ -z "$check_webstats" ]; then
  207. echo "$webstats" >> $VESTA/data/queue/webstats.pipe
  208. fi
  209. if [ ! -z "$STATS_USER" ]; then
  210. stats_dir="$HOMEDIR/$user/web/$domain/stats"
  211. # Adding htaccess file
  212. echo "AuthUserFile $stats_dir/.htpasswd" > $stats_dir/.htaccess
  213. echo "AuthName \"Web Statistics\"" >> $stats_dir/.htaccess
  214. echo "AuthType Basic" >> $stats_dir/.htaccess
  215. echo "Require valid-user" >> $stats_dir/.htaccess
  216. # Generating htaccess user and password
  217. echo "$STATS_USER:$STATS_CRYPT" > $stats_dir/.htpasswd
  218. fi
  219. fi
  220. # Checking SSL
  221. if [ "$SSL" = 'yes' ]; then
  222. # Adding domain to the web conf
  223. conf="$HOMEDIR/$user/conf/web/tmp_s$WEB_SYSTEM.conf"
  224. tpl_file="$WEBTPL/$WEB_SYSTEM/$TPL.stpl"
  225. add_web_config
  226. chown root:$user $conf
  227. chmod 640 $conf
  228. cp -f $USER_DATA/ssl/$domain.crt \
  229. $HOMEDIR/$user/conf/web/ssl.$domain.crt
  230. cp -f $USER_DATA/ssl/$domain.key \
  231. $HOMEDIR/$user/conf/web/ssl.$domain.key
  232. cp -f $USER_DATA/ssl/$domain.pem \
  233. $HOMEDIR/$user/conf/web/ssl.$domain.pem
  234. if [ -e "$USER_DATA/ssl/$domain.ca" ]; then
  235. cp -f $USER_DATA/ssl/$domain.ca \
  236. $HOMEDIR/$user/conf/web/ssl.$domain.ca
  237. fi
  238. # Running template trigger
  239. if [ -x $WEBTPL/$WEB_SYSTEM/$TPL.sh ]; then
  240. $WEBTPL/$WEB_SYSTEM/$TPL.sh $user $domain $ip $HOMEDIR $sdocroot
  241. fi
  242. user_ssl=$((user_ssl + 1))
  243. ssl_change='yes'
  244. fi
  245. # Checking proxy
  246. if [ ! -z "$PROXY_SYSTEM" ] && [ ! -z "$PROXY" ]; then
  247. tpl_file="$WEBTPL/$PROXY_SYSTEM/$PROXY.tpl"
  248. conf="$HOMEDIR/$user/conf/web/tmp_$PROXY_SYSTEM.conf"
  249. add_web_config
  250. chown root:$user $conf
  251. chmod 640 $conf
  252. proxy_change='yes'
  253. fi
  254. if [ ! -z "$PROXY_SYSTEM" ] && [ "$SSL" = 'yes' ]; then
  255. tpl_file="$WEBTPL/$PROXY_SYSTEM/$PROXY.stpl"
  256. if [ -z "$PROXY" ]; then
  257. tpl_file="$WEBTPL/$PROXY_SYSTEM/default.stpl"
  258. fi
  259. conf="$HOMEDIR/$user/conf/web/tmp_s$PROXY_SYSTEM.conf"
  260. add_web_config
  261. chown root:$user $conf
  262. chmod 640 $conf
  263. proxy_change='yes'
  264. fi
  265. if [ "$SUSPENDED" = 'yes' ]; then
  266. suspended_web=$((suspended_web + 1))
  267. fi
  268. user_domains=$((user_domains + 1))
  269. # Running template trigger
  270. if [ -x $WEBTPL/$PROXY_SYSTEM/$PROXY.sh ]; then
  271. $WEBTPL/$PROXY_SYSTEM/$PROXY.sh $user $domain $ip $HOMEDIR $docroot
  272. fi
  273. # Checking ftp
  274. if [ ! -z "$FTP_USER" ]; then
  275. if [ -z "$(grep ^$FTP_USER: /etc/passwd)" ]; then
  276. /usr/sbin/adduser -o -u $(id -u $user) -g $user -s /sbin/nologin \
  277. -M -d "$HOMEDIR/$user/web/$domain" $FTP_USER > /dev/null 2>&1
  278. # Update password
  279. shadow=$(grep "^$FTP_USER:" /etc/shadow)
  280. shdw3=$(echo "$shadow" | cut -f3 -d :)
  281. shdw4=$(echo "$shadow" | cut -f4 -d :)
  282. shdw5=$(echo "$shadow" | cut -f5 -d :)
  283. shdw6=$(echo "$shadow" | cut -f6 -d :)
  284. shdw7=$(echo "$shadow" | cut -f7 -d :)
  285. shdw8=$(echo "$shadow" | cut -f8 -d :)
  286. shdw9=$(echo "$shadow" | cut -f9 -d :)
  287. shadow_str="$FTP_USER:$FTP_MD5:$shdw3:$shdw4:$shdw5:$shdw6"
  288. shadow_str="$shadow_str:$shdw7:$shdw8:$shdw9"
  289. chmod u+w /etc/shadow
  290. sed -i "/^$FTP_USER:*/d" /etc/shadow
  291. echo "$shadow_str" >> /etc/shadow
  292. chmod u-w /etc/shadow
  293. fi
  294. fi
  295. }
  296. # DNS domain rebuild
  297. rebuild_dns_domain_conf() {
  298. # Get domain values
  299. get_domain_values 'dns'
  300. domain_idn=$(idn -t --quiet -a "$domain")
  301. # Checking zone file
  302. if [ ! -e "$USER_DATA/dns/$domain.conf" ]; then
  303. cat $DNSTPL/$TPL.tpl |\
  304. sed -e "s/%ip%/$IP/g" \
  305. -e "s/%domain_idn%/$domain_idn/g" \
  306. -e "s/%domain%/$domain/g" \
  307. -e "s/%ns1%/$ns1/g" \
  308. -e "s/%ns2%/$ns2/g" \
  309. -e "s/%ns3%/$ns3/g" \
  310. -e "s/%ns4%/$ns4/g" \
  311. -e "s/%time%/$TIME/g" \
  312. -e "s/%date%/$DATE/g" > $USER_DATA/dns/$domain.conf
  313. fi
  314. # Sorting records
  315. sort_dns_records
  316. # Updating zone
  317. update_domain_zone
  318. # Set file permissions
  319. chmod 640 $HOMEDIR/$user/conf/dns/$domain.db
  320. chown root:named $HOMEDIR/$user/conf/dns/$domain.db
  321. # Get dns config path
  322. if [ -e '/etc/named.conf' ]; then
  323. dns_conf='/etc/named.conf'
  324. fi
  325. if [ -e '/etc/bind/named.conf' ]; then
  326. dns_conf='/etc/bind/named.conf'
  327. fi
  328. # Bind config check
  329. if [ "$SUSPENDED" = 'yes' ]; then
  330. rm_string=$(grep -n /etc/namedb/$domain.db $dns_conf | cut -d : -f 1)
  331. if [ ! -z "$rm_string" ]; then
  332. sed -i "$rm_string d" $dns_conf
  333. fi
  334. suspended_dns=$((suspended_dns + 1))
  335. else
  336. if [ -z "$(grep /$domain.db $dns_conf)" ]; then
  337. named="zone \"$domain_idn\" {type master; file"
  338. named="$named \"$HOMEDIR/$user/conf/dns/$domain.db\";};"
  339. echo "$named" >> $dns_conf
  340. fi
  341. fi
  342. user_domains=$((user_domains + 1))
  343. records=$(wc -l $USER_DATA/dns/$domain.conf | cut -f 1 -d ' ')
  344. user_records=$((user_records + records))
  345. update_object_value 'dns' 'DOMAIN' "$domain" '$RECORDS' "$records"
  346. }
  347. # MAIL domain rebuild
  348. rebuild_mail_domain_conf() {
  349. domain_idn=$(idn -t --quiet -a "$domain")
  350. # Get domain values
  351. get_domain_values 'mail'
  352. # Rebuilding config structure
  353. rm -f /etc/exim/domains/$domain_idn
  354. mkdir -p $HOMEDIR/$user/conf/mail/$domain
  355. ln -s $HOMEDIR/$user/conf/mail/$domain /etc/exim/domains/$domain_idn
  356. rm -f $HOMEDIR/$user/conf/mail/$domain/aliases
  357. rm -f $HOMEDIR/$user/conf/mail/$domain/protection
  358. rm -f $HOMEDIR/$user/conf/mail/$domain/passwd
  359. touch $HOMEDIR/$user/conf/mail/$domain/aliases
  360. touch $HOMEDIR/$user/conf/mail/$domain/protection
  361. touch $HOMEDIR/$user/conf/mail/$domain/passwd
  362. chown -R dovecot:mail $HOMEDIR/$user/conf/mail/$domain
  363. chown -R dovecot:mail /etc/exim/domains/$domain_idn
  364. chmod 770 $HOMEDIR/$user/conf/mail/$domain
  365. chmod 660 $HOMEDIR/$user/conf/mail/$domain/*
  366. chmod 770 /etc/exim/domains/$domain_idn
  367. # Adding antispam protection
  368. if [ "$ANTISPAM" = 'yes' ]; then
  369. echo 'antispam' >> $HOMEDIR/$user/conf/mail/$domain/protection
  370. fi
  371. # Adding antivirus protection
  372. if [ "$ANTIVIRUS" = 'yes' ]; then
  373. echo 'antivirus' >> $HOMEDIR/$user/conf/mail/$domain/protection
  374. fi
  375. # Adding dkim
  376. if [ "$DKIM" = 'yes' ]; then
  377. U_MAIL_DKMI=$((U_MAIL_DKMI + 1))
  378. pem="$USER_DATA/mail/$domain.pem"
  379. pub="$USER_DATA/mail/$domain.pub"
  380. openssl genrsa -out $pem 512 &>/dev/null
  381. openssl rsa -pubout -in $pem -out $pub &>/dev/null
  382. chmod 660 $USER_DATA/mail/$domain.*
  383. cp $pem $HOMEDIR/$user/conf/mail/$domain/dkim.pem
  384. chown root:mail $HOMEDIR/$user/conf/mail/$domain/dkim.pem
  385. chmod 660 $HOMEDIR/$user/conf/mail/$domain/dkim.pem
  386. # Deleting old dkim records
  387. records=$($BIN/v-list-dns-records $user $domain plain)
  388. dkim_records=$(echo "$records" |grep -w '_domainkey'|cut -f 1 -d ' ')
  389. for id in $dkim_records; do
  390. $BIN/v-delete-dns-record $user $domain $id
  391. done
  392. # Adding dkim dns records
  393. check_dns_domain=$(is_object_valid 'dns' 'DOMAIN' "$domain")
  394. if [ "$?" -eq 0 ]; then
  395. p=$(cat $pub|grep -v ' KEY---'|tr -d '\n')
  396. record='_domainkey'
  397. policy="\"t=y; o=~;\""
  398. $BIN/v-add-dns-record $user $domain $record TXT "$policy"
  399. record='mail._domainkey'
  400. slct="\"k=rsa\; p=$p\""
  401. $BIN/v-add-dns-record $user $domain $record TXT "$slct"
  402. fi
  403. fi
  404. # Removing symbolic link
  405. if [ "$SUSPENDED" = 'yes' ]; then
  406. SUSPENDED_MAIL=$((SUSPENDED_MAIL +1))
  407. rm -f /etc/exim/domains/$domain_idn
  408. fi
  409. if [ ! -e $HOMEDIR/$user/mail/$domain_idn ]; then
  410. mkdir $HOMEDIR/$user/mail/$domain_idn
  411. fi
  412. chown $user:mail $HOMEDIR/$user/mail/$domain_idn
  413. chmod 770 $HOMEDIR/$user/mail/$domain_idn
  414. dom_aliases=$HOMEDIR/$user/conf/mail/$domain/aliases
  415. if [ ! -z "$CATCHALL" ]; then
  416. echo "*@$domain:$CATCHALL" >> $dom_aliases
  417. fi
  418. # Rebuild domain accounts
  419. accs=0
  420. dom_diks=0
  421. if [ -e "$USER_DATA/mail/$domain.conf" ]; then
  422. accounts=$(search_objects "mail/$domain" 'SUSPENDED' "no" 'ACCOUNT')
  423. else
  424. accounts=''
  425. fi
  426. for account in $accounts; do
  427. (( ++accs))
  428. dom_diks=$((dom_diks + U_DISK))
  429. object=$(grep "ACCOUNT='$account'" $USER_DATA/mail/$domain.conf)
  430. eval "$object"
  431. if [ "$SUSPENDED" = 'yes' ]; then
  432. MD5='SUSPENDED'
  433. fi
  434. str="$account:$MD5:$user:mail::$HOMEDIR/$user:$QUOTA"
  435. echo $str >> $HOMEDIR/$user/conf/mail/$domain/passwd
  436. for malias in ${ALIAS//,/ }; do
  437. echo "$malias@$domain:$account@$domain" >> $dom_aliases
  438. done
  439. if [ ! -z "$FWD" ]; then
  440. echo "$account@$domain:$FWD" >> $dom_aliases
  441. fi
  442. done
  443. update_object_value 'mail' 'DOMAIN' "$domain" '$ACCOUNTS' "$accs"
  444. update_object_value 'mail' 'DOMAIN' "$domain" '$U_DISK' "$dom_diks"
  445. U_MAIL_ACCOUNTS=$((U_MAIL_ACCOUNTS + accs))
  446. U_DISK_MAIL=$((U_DISK_MAIL + dom_diks))
  447. U_MAIL_DOMAINS=$((U_MAIL_DOMAINS + 1))
  448. }
  449. # Rebuild MySQL
  450. rebuild_mysql_database() {
  451. host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
  452. eval $host_str
  453. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ]; then
  454. echo "Error: mysql config parsing failed"
  455. if [ ! -z "$send_mail" ]; then
  456. echo "Can't parse MySQL DB config" | $send_mail -s "$subj" $email
  457. fi
  458. log_event "$E_PARSING" "$EVENT"
  459. exit $E_PARSING
  460. fi
  461. query='SELECT VERSION()'
  462. mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
  463. if [ '0' -ne "$?" ]; then
  464. echo "Error: Database connection to $HOST failed"
  465. if [ ! -z "$send_mail" ]; then
  466. echo "Database connection to MySQL host $HOST failed" |\
  467. $send_mail -s "$subj" $email
  468. fi
  469. log_event "$E_CONNECT $EVENT"
  470. exit $E_CONNECT
  471. fi
  472. query="CREATE DATABASE \`$DB\` CHARACTER SET $CHARSET"
  473. mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
  474. query="GRANT ALL ON \`$DB\`.* TO \`$DBUSER\`@\`%\`"
  475. mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
  476. query="GRANT ALL ON \`$DB\`.* TO \`$DBUSER\`@localhost"
  477. mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
  478. query="UPDATE mysql.user SET Password='$MD5' WHERE User='$DBUSER';"
  479. mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
  480. query="FLUSH PRIVILEGES;"
  481. mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
  482. }
  483. # Rebuild PostgreSQL
  484. rebuild_pgsql_database() {
  485. host_str=$(grep "HOST='$HOST'" $VESTA/conf/pgsql.conf)
  486. eval $host_str
  487. export PGPASSWORD="$PASSWORD"
  488. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  489. echo "Error: postgresql config parsing failed"
  490. if [ ! -z "$send_mail" ]; then
  491. echo "Can't parse PostgreSQL config" | $send_mail -s "$subj" $email
  492. fi
  493. log_event "$E_PARSING" "$EVENT"
  494. exit $E_PARSING
  495. fi
  496. query='SELECT VERSION()'
  497. psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
  498. if [ '0' -ne "$?" ]; then
  499. echo "Error: Connection failed"
  500. if [ ! -z "$send_mail" ]; then
  501. echo "Database connection to PostgreSQL host $HOST failed" |\
  502. $send_mail -s "$subj" $email
  503. fi
  504. log_event "$E_CONNECT" "$EVENT"
  505. exit $E_CONNECT
  506. fi
  507. query="CREATE ROLE $DBUSER"
  508. psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
  509. query="UPDATE pg_authid SET rolpassword='$MD5' WHERE rolname='$DBUSER'"
  510. psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
  511. query="CREATE DATABASE $DB OWNER $DBUSER"
  512. if [ "$TPL" = 'template0' ]; then
  513. query="$query ENCODING '$CHARSET' TEMPLATE $TPL"
  514. else
  515. query="$query TEMPLATE $TPL"
  516. fi
  517. psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
  518. query="GRANT ALL PRIVILEGES ON DATABASE $DB TO $DBUSER"
  519. psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
  520. query="GRANT CONNECT ON DATABASE template1 to $dbuser"
  521. psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
  522. }
  523. # Import MySQL dump
  524. import_mysql_database() {
  525. host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
  526. eval $host_str
  527. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ]; then
  528. echo "Error: mysql config parsing failed"
  529. log_event "$E_PARSING" "$EVENT"
  530. exit $E_PARSING
  531. fi
  532. mysql -h $HOST -u $USER -p$PASSWORD $DB < $1 > /dev/null 2>&1
  533. }
  534. # Import PostgreSQL dump
  535. import_pgsql_database() {
  536. host_str=$(grep "HOST='$HOST'" $VESTA/conf/pgsql.conf)
  537. eval $host_str
  538. export PGPASSWORD="$PASSWORD"
  539. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  540. echo "Error: postgresql config parsing failed"
  541. log_event "$E_PARSING" "$EVENT"
  542. exit $E_PARSING
  543. fi
  544. psql -h $HOST -U $USER $DB < $1 > /dev/null 2>&1
  545. }