rebuild.sh 22 KB

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