2011-01-28 15:55:26 +00:00
#!/bin/bash
2011-03-04 13:45:40 +00:00
# Update domain next-gen by fufroma
2016-01-25 16:14:48 +00:00
PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
2011-01-28 15:55:26 +00:00
for CONFIG_FILE in \
/etc/alternc/local.sh \
/usr/lib/alternc/functions.sh \
2014-06-25 13:56:59 +00:00
/usr/lib/alternc/functions_hosting.sh \
2011-01-30 12:45:53 +00:00
/usr/lib/alternc/functions_dns.sh
2011-01-28 15:55:26 +00:00
do
if [ ! -r " $CONFIG_FILE " ] ; then
echo " Can't access $CONFIG_FILE . "
exit 1
fi
. " $CONFIG_FILE "
done
2006-04-26 12:28:53 +00:00
2013-09-12 09:28:31 +00:00
stop_if_jobs_locked
2011-01-28 15:55:26 +00:00
# Some vars
2006-04-26 12:28:53 +00:00
umask 022
2013-02-18 15:52:47 +00:00
LOCK_FILE = "/usr/share/alternc/panel/cron.lock" # FIXME doesn't seem clean to be here
2014-06-25 13:56:59 +00:00
OLDIFS = " $IFS "
NEWIFS = " "
RELOAD_WEB = " $( mktemp /tmp/alternc_reload_web.XXXX) "
2015-11-16 07:29:13 +00:00
RELOAD_DNS = " $( mktemp /tmp/alternc_reload_dns.XXXX) "
2014-06-25 13:56:59 +00:00
B = "µµ§§" # Strange letters to make split in query
2011-01-28 15:55:26 +00:00
# Somes check before start operations
2006-04-26 12:28:53 +00:00
if [ ` id -u` -ne 0 ] ; then
2011-01-28 15:55:26 +00:00
log_error "must be launched as root"
elif [ -z " $DEFAULT_MX " -o -z " $PUBLIC_IP " ] ; then
log_error "Bad configuration. Please use: dpkg-reconfigure alternc"
elif [ -f " $LOCK_FILE " ] ; then
2011-03-07 20:12:09 +00:00
process = $( ps f -p ` cat " $LOCK_FILE " | tail -1` | tail -1| awk '{print $NF;}' )
if [ " $( basename $process ) " = " $( basename " $0 " ) " ] ; then
log_error " last cron unfinished or stale lock file ( $LOCK_FILE ). "
else
rm " $LOCK_FILE "
fi
2006-04-26 12:28:53 +00:00
fi
2009-07-27 21:21:26 +00:00
# backward compatibility: single-server setup
if [ -z " $ALTERNC_SLAVES " ] ; then
ALTERNC_SLAVES = "localhost"
fi
2011-01-28 15:55:26 +00:00
# We lock the application
2011-03-07 20:12:09 +00:00
echo $$ > " $LOCK_FILE "
2006-04-26 12:28:53 +00:00
2015-11-16 07:29:13 +00:00
echo "" > " $RELOAD_WEB "
echo "" > " $RELOAD_DNS "
2011-01-28 15:55:26 +00:00
# For domains we want to delete completely, make sure all the tags are all right
# set sub_domaines.web_action = delete where domaines.dns_action = DELETE
2011-02-01 22:44:18 +00:00
mysql_query "update sub_domaines sd, domaines d set sd.web_action = 'DELETE' where sd.domaine = d.domaine and sd.compte=d.compte and d.dns_action = 'DELETE';"
2006-04-26 12:28:53 +00:00
2014-06-25 13:56:59 +00:00
# Sub_domaines we want to delete
# sub_domaines.web_action = delete
for sub in $( mysql_query " select concat_ws(' $B ',lower(sd.type), if(length(sd.sub)>0,concat_ws('.',sd.sub,sd.domaine),sd.domaine)) from sub_domaines sd where web_action ='DELETE'; " ) ; do
host_delete ${ sub / $B / }
mysql_query " delete from sub_domaines where concat_ws(' $B ',lower(type), if(length(sub)>0,concat_ws('.',sub,domaine),domaine)) = ' $sub ' and web_action ='DELETE'; "
echo 1 > " $RELOAD_WEB "
done
# Sub domaines we want to update
# sub_domaines.web_action = update and sub_domains.only_dns = false
IFS = " $NEWIFS "
mysql_query "
select concat_ws( '$IFS' ,sd.id, lower( sd.type) , if ( length( sd.sub) >0,concat_ws( '.' ,sd.sub,sd.domaine) ,sd.domaine) , concat_ws( '@' ,m.login,v.value) , sd.valeur )
from sub_domaines sd,membres m,variable v
where sd.compte= m.uid and sd.web_action = 'UPDATE' and v.name= 'mailname_bounce'
; " | while read sdid type domain mail valeur ; do
host_create " $type " " $domain " " $mail " " $valeur "
mysql_query " update sub_domaines sd set web_action='OK',web_result=' $? ' where sd.id = ' $sdid ' ; "
echo 1 > " $RELOAD_WEB "
done
# Domaine to enable
mysql_query " select concat_ws(' $IFS ',sd.id, lower(sd.type),if(length(sd.sub)>0,concat_ws('.',sd.sub,sd.domaine),sd.domaine),sd.valeur) from sub_domaines sd where sd.enable ='ENABLE' ; " | while read sdid type domain valeur ; do
host_enable " $type " " $domain " " $valeur "
mysql_query " update sub_domaines sd set enable='ENABLED' where sd.id = ' $sdid ' ; "
echo 1 > " $RELOAD_WEB "
done
# Domains to disable
mysql_query " select concat_ws(' $IFS ', sd.id, lower(sd.type),if(length(sd.sub)>0,concat_ws('.',sd.sub,sd.domaine),sd.domaine),sd.valeur) from sub_domaines sd where sd.enable ='DISABLE' ; " | while read sdid type domain valeur ; do
host_disable " $type " " $domain " " $valeur "
mysql_query " update sub_domaines sd set enable='DISABLED' where sd.id = ' $sdid ' ; "
echo 1 > " $RELOAD_WEB "
done
# Domains we do not want to be the DNS serveur anymore :
# domaines.dns_action = UPDATE and domaines.gesdns = 0
for dom in ` mysql_query "select domaine from domaines where dns_action = 'UPDATE' and gesdns = 0;" | tr '\n' ' ' `
do
dns_delete $dom
mysql_query " update domaines set dns_action = 'OK', dns_result = ' $? ' where domaine = ' $dom ' "
2015-11-16 07:29:13 +00:00
echo 1 >" $RELOAD_DNS "
2014-06-25 13:56:59 +00:00
done
# Domains we have to update the dns :
# domaines.dns_action = UPDATE
for dom in ` mysql_query "select domaine from domaines where dns_action = 'UPDATE';" | tr '\n' ' ' `
do
echo " dns_regenerate : domain=/ $dom / "
dns_regenerate $dom
mysql_query " update domaines set dns_action = 'OK', dns_result = ' $? ' where domaine = ' $dom ' "
2015-11-16 07:29:13 +00:00
echo 1 >" $RELOAD_DNS "
2014-06-25 13:56:59 +00:00
done
# Domains we want to delete completely, now we do it
# domaines.dns_action = DELETE
for dom in ` mysql_query "select domaine from domaines where dns_action = 'DELETE';" | tr '\n' ' ' `
do
dns_delete $dom
# Web configurations have already bean cleaned previously
mysql_query " delete from sub_domaines where domaine=' $dom '; delete from domaines where domaine=' $dom '; "
2015-11-16 07:29:13 +00:00
echo 1 >" $RELOAD_DNS "
2014-06-25 13:56:59 +00:00
done
if [ ! -z " $( cat " $RELOAD_WEB " ) " ] ; then
# Just to encourage user to use THIS directory and not another one
test -d " $VHOST_MANUALCONF " || mkdir -p " $VHOST_MANUALCONF "
# Concat the apaches files
tempo = $( mktemp " $VHOST_FILE .XXXXX " )
(
echo "###BEGIN OF ALTERNC AUTO-GENERATED FILE - DO NOT EDIT MANUALLY###"
2018-06-16 19:43:33 +00:00
find " $VHOST_DIR " / -mindepth 2 -type f -iname "*.conf" -print0 | xargs -0 cat
2014-06-25 13:56:59 +00:00
echo "###END OF ALTERNC AUTO-GENERATED FILE - DO NOT EDIT MANUALLY###"
) > " $tempo "
if [ $? -ne 0 ] ; then
log_error " web file concatenation failed"
fi
touch " $VHOST_FILE "
if [ ! -w " $VHOST_FILE " ] ; then
log_error " cannot write on $VHOST_FILE "
fi
mv " $tempo " " $VHOST_FILE "
2011-03-07 10:15:38 +00:00
2013-05-28 04:58:01 +00:00
# We must reload apache
2013-02-21 09:54:35 +00:00
# we assume we run apache on the master
2013-05-28 04:58:01 +00:00
/usr/lib/alternc/alternc_reload apache || true
2013-02-21 09:54:35 +00:00
# Launch hooks for apache reload
run-parts --arg= web_reload /usr/lib/alternc/reload.d
2011-03-07 10:09:20 +00:00
fi
2015-11-16 07:29:13 +00:00
# If we added / edited / deleted at least one dns zone file, we go here in the end:
if [ ! -z " $( cat " $RELOAD_DNS " ) " ] ; then
service opendkim restart
run-parts --arg= dns_reload /usr/lib/alternc/reload.d
fi
2014-06-25 13:56:59 +00:00
## FIXME : move the slave part into the /usr/lib/alternc/reload.d directory to be an hook
#for slave in $ALTERNC_SLAVES; do
# if [ "$slave" != "localhost" ]; then
# ssh alternc@$slave alternc_reload 'apache' || true
# fi
#done
2009-07-27 21:21:26 +00:00
2015-11-16 07:29:13 +00:00
rm -f " $LOCK_FILE " " $RELOAD_ZONES " " $RELOAD_WEB " " $INOTIFY_UPDATE_DOMAIN " " $RELOAD_DNS "
2006-04-26 12:28:53 +00:00
2011-01-28 15:55:26 +00:00
exit 0
2006-04-26 12:28:53 +00:00