root/alternc/trunk/src/update_domains.sh

Revision 2338, 7.1 kB (checked in by anarcat, 2 months ago)

call apache correctly after changing domains

  • Property svn:executable set to *
Line 
1 #!/bin/sh
2 #
3 # $Id: update_domaines.sh,v 1.31 2005/08/29 19:21:31 anarcat Exp $
4 # ----------------------------------------------------------------------
5 # AlternC - Web Hosting System
6 # Copyright (C) 2002 by the AlternC Development Team.
7 # http://alternc.org/
8 # ----------------------------------------------------------------------
9 # Based on:
10 # Valentin Lacambre's web hosting softwares: http://altern.org/
11 # ----------------------------------------------------------------------
12 # LICENSE
13 #
14 # This program is free software; you can redistribute it and/or
15 # modify it under the terms of the GNU General Public License (GPL)
16 # as published by the Free Software Foundation; either version 2
17 # of the License, or (at your option) any later version.
18 #
19 # This program is distributed in the hope that it will be useful,
20 # but WITHOUT ANY WARRANTY; without even the implied warranty of
21 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22 # GNU General Public License for more details.
23 #
24 # To read the license please visit http://www.gnu.org/copyleft/gpl.html
25 # ----------------------------------------------------------------------
26 # Original Author of file: Jerome Moinet for l'Autre Net - 14/12/2000
27 # Purpose of file: system level domain management
28 # ----------------------------------------------------------------------
29 #
30
31 PATH=/sbin:/bin:/usr/sbin:/usr/bin
32
33 set -e
34
35 umask 022
36
37 ########################################################################
38 # Constants & Preliminary checks
39 #
40
41 CONFIG_FILE="/etc/alternc/local.sh"
42
43 DOMAIN_LOG_FILE="/var/log/alternc/update_domains.log"
44 DATA_ROOT="/var/alternc"
45
46 NAMED_TEMPLATE="/etc/bind/templates/named.template"
47 ZONE_TEMPLATE="/etc/bind/templates/zone.template"
48
49 ACTION_INSERT=0
50 ACTION_UPDATE=1
51 ACTION_DELETE=2
52 TYPE_LOCAL=0
53 TYPE_URL=1
54 TYPE_IP=2
55 TYPE_WEBMAIL=3
56 YES=1
57
58 if [ `id -u` -ne 0 ]; then
59     echo "update_domains.sh must be launched as root"
60     exit 1
61 fi
62
63 if [ ! -x "/usr/bin/get_account_by_domain" ]; then
64     echo "Your AlternC installation is incorrect ! If you are using pre 0.9.4, "
65     echo "you have to install alternc-admintools: "
66     echo "    apt-get update ; apt-get install alternc-admintools"
67     exit 1
68 fi
69
70 if [ ! -r "$CONFIG_FILE" ]; then
71     echo "Can't access $CONFIG_FILE."
72     exit 1
73 fi
74
75 . "$CONFIG_FILE"
76
77 if [ -z "$DEFAULT_MX" -o -z "$PUBLIC_IP" ]; then
78     echo "Bad configuration. Please use:"
79     echo "   dpkg-reconfigure alternc"
80     exit 1
81 fi
82
83 if [ -f "$LOCK_FILE" ]; then
84     echo "`date` $0: last cron unfinished or stale lock file." |
85         tee -a "$DOMAIN_LOG_FILE" >&2
86     exit 1
87 fi
88
89 NAMED_CONF_FILE="$DATA_ROOT/bind/automatic.conf"
90 ZONES_DIR="$DATA_ROOT/bind/zones"
91 APACHECONF_DIR="$DATA_ROOT/apacheconf"
92 OVERRIDE_PHP_FILE="$APACHECONF_DIR/override_php.conf"
93 WEBMAIL_DIR="$DATA_ROOT/bureau/admin/webmail"
94 LOCK_FILE="$DATA_ROOT/bureau/cron.lock"
95 HTTP_DNS="$DATA_ROOT/dns"
96 HTML_HOME="$DATA_ROOT/html"
97
98 MYSQL_SELECT="mysql --defaults-file=/etc/alternc/my.cnf -Bs "
99 MYSQL_DELETE="mysql --defaults-file=/etc/alternc/my.cnf "
100
101 ########################################################################
102 # Functions
103 #
104 . /usr/lib/alternc/functions.sh
105
106 ########################################################################
107 # Main
108 #
109
110 # Init
111
112 touch "$LOCK_FILE"
113 DOMAINS_TMP_FILE=`mktemp -t alternc.update_domains.XXXXXX`
114 HOSTS_TMP_FILE=`mktemp -t alternc.update_domains.XXXXXX`
115 RELOAD_ZONES_TMP_FILE=`mktemp -t alternc.update_domains.XXXXXX`
116
117 cleanup() {
118     rm -f "$LOCK_FILE" "$DOMAINS_TMP_FILE" "$HOSTS_TMP_FILE"
119     rm -f "$RELOAD_ZONES_TMP_FILE"
120     exit 0
121 }
122
123 trap cleanup 0 1 2 15
124
125 # Query database
126
127 $MYSQL_SELECT <<EOF | tail -n '+1' > "$DOMAINS_TMP_FILE"
128 SELECT membres.login,
129        domaines_standby.domaine,
130        if (domaines_standby.mx = '', '@', domaines_standby.mx),
131        domaines_standby.gesdns,
132        domaines_standby.gesmx,
133        domaines_standby.action
134   FROM domaines_standby
135        LEFT JOIN membres membres
136                ON membres.uid = domaines_standby.compte
137  ORDER BY domaines_standby.action
138 EOF
139
140 $MYSQL_SELECT <<EOF | tail -n '+1' > "$HOSTS_TMP_FILE"
141 SELECT membres.login,
142        sub_domaines_standby.domaine,
143        if (sub_domaines_standby.sub = '', '@', sub_domaines_standby.sub),
144        if (sub_domaines_standby.valeur = '', 'NULL',
145                                              sub_domaines_standby.valeur),
146        sub_domaines_standby.type,
147        sub_domaines_standby.action
148   FROM sub_domaines_standby
149        LEFT JOIN membres membres
150                ON membres.uid = sub_domaines_standby.compte
151  ORDER BY sub_domaines_standby.action desc
152 EOF
153
154 # Handle domain updates
155
156 if [ "`wc -l < $DOMAINS_TMP_FILE`" -gt 0 ]; then
157     echo `date` >> $DOMAIN_LOG_FILE
158     cat "$DOMAINS_TMP_FILE" >> $DOMAIN_LOG_FILE
159 fi
160
161 # We need to tweak the IFS as $MYSQL_SELECT use tabs to separate fields
162 OLD_IFS="$IFS"
163 IFS="   "
164 while read user domain mx are_we_dns are_we_mx action ; do
165     IFS="$OLD_IFS"
166
167     DOMAIN_LETTER=`print_domain_letter "$domain"`
168     USER_LETTER=`print_user_letter "$user"`
169
170     case "$action" in
171       $ACTION_INSERT)
172         if [ "$are_we_dns" = "$YES" ] ; then
173             init_zone "$domain"
174         fi
175         ;;
176
177       $ACTION_UPDATE)
178         if [ "$are_we_dns" = "$YES" ] ; then
179             init_zone "$domain"
180             change_mx "$domain" "$mx"
181         else
182             remove_zone "$domain"
183         fi
184         ;;
185
186       $ACTION_DELETE)
187         remove_zone "$domain"
188
189         # remove symlinks
190         rm -f "${HTTP_DNS}/${DOMAIN_LETTER}/"*".$domain"
191         rm -f "${HTTP_DNS}/${DOMAIN_LETTER}/$domain"
192         rm -rf "${HTTP_DNS}/redir/${DOMAIN_LETTER}/"*".$domain"
193         rm -rf "${HTTP_DNS}/redir/${DOMAIN_LETTER}/$domain"
194         ;;
195
196       *)
197         echo "Unknown action code: $action" >> "$DOMAIN_LOG_FILE"
198         ;;
199     esac
200
201     IFS="       "
202 done < "$DOMAINS_TMP_FILE"
203 IFS="$OLD_IFS"
204
205 # Handle hosts update
206
207 if [ "`wc -l < $HOSTS_TMP_FILE`" -gt 0 ] ; then
208     echo `date` >> $DOMAIN_LOG_FILE
209     cat "$HOSTS_TMP_FILE" >> $DOMAIN_LOG_FILE
210 fi
211
212 OLD_IFS="$IFS"
213 IFS="   "
214 while read user domain host value type action; do
215     IFS="$OLD_IFS"
216
217     case "$action" in
218       $ACTION_UPDATE | $ACTION_INSERT)
219         add_host "$domain" "$type" "$host" "$value" "$user"
220         ;;
221
222       $ACTION_DELETE)
223         delete_host "$domain" "$host"
224         ;;
225
226       *)
227         echo "Unknown action code: $action" >> "$DOMAIN_LOG_FILE"
228         ;;
229     esac
230
231     IFS="       "
232 done < "$HOSTS_TMP_FILE"
233 IFS="$OLD_IFS"
234
235 # Reload configuration for named and apache
236
237 RELOAD_ZONES=`cat "$RELOAD_ZONES_TMP_FILE"`
238 if [ ! -z "$RELOAD_ZONES" ]; then
239     if [ "$RELOAD_ZONES" = "all" ]; then
240         rndc reload > /dev/null || echo "Cannot reload bind" >> "$DOMAIN_LOG_FILE"
241     else
242         for zone in $RELOAD_ZONES; do
243             rndc reload "$zone" > /dev/null || echo "Cannot reload bind for zone $zone" >> "$DOMAIN_LOG_FILE"
244         done
245     fi
246     if [ -x /usr/sbin/apache ]; then
247         invoke-rc.d apache reload > /dev/null || echo "Cannot restart apache" >> "$DOMAIN_LOG_FILE"
248     fi
249     if [ -x /usr/sbin/apache2 ]; then
250         invoke-rc.d apache2 reload > /dev/null || echo "Cannot restart apache" >> "$DOMAIN_LOG_FILE"
251     fi
252 fi
253
254 # Cleanup
255
256 echo "DELETE FROM domaines_standby" | $MYSQL_DELETE
257 echo "DELETE FROM sub_domaines_standby" | $MYSQL_DELETE
258
259 # vim: et sw=4
260
Note: See TracBrowser for help on using the browser.