rebuild.sh 21 KB

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