source: src/do_domaines.sh @ 688

Revision 688, 17.9 KB checked in by anarcat, 7 years ago (diff)

[project @ alternc: changeset 2005-05-24 18:48:31 by anarcat]
ajouter un espace à la fin du pattern d'effacement de domaine corriger
une autre erreur dans l'enlèvement des cat(1) corriger le pattern de
MX

Original author: anarcat
Date: 2005-05-24 18:48:31

Line 
1#!/bin/ksh
2#
3# $Id: do_domaines.sh,v 1.27 2005/05/24 18:48: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# ####################################################################
32# VARIABLES SETTINGS :
33# ####################################################################
34
35umask 022
36
37integer nb1
38integer nb2
39integer ORDRE
40
41[ -x "/usr/bin/get_account_by_domain" ] || { echo "You have to install alternc-admintools: apt-get update ; apt-get install alternc-admintools" ; exit 1 ; }
42
43DOM_ROOT=/usr/lib/alternc/system
44BIND2_ROOT=$DOM_ROOT/bind2
45FIC_TMP=/tmp/domaines.tmp
46FIC_TMP_SUB=/tmp/sub_domaines.tmp
47FIC_LOCK=/var/run/alternc/cron.lock
48FIC_LOG=/var/log/alternc/domaines.log
49FIC_LOG_SUB=/var/log/alternc/sub_domaines.log
50FIC_TMP_OVERRIDE_PHP=/tmp/override_php.tmp
51HTTP_DNS=/var/alternc/dns
52HTML_HOME=/var/alternc/html
53NAMED_HOME=/etc/bind
54NAMED_ETC=${NAMED_HOME}
55NAMED_MASTER=${NAMED_HOME}/master
56NAMED_TPL=domaines.template
57SLAVE_TPL=slave.template
58SECONDARY_LIST=secondary.list
59NAMED_CONF=automatic.conf
60RELOAD_NAMED=/etc/init.d/bind9
61RELOAD_APACHE=/etc/init.d/apache
62WEBMAIL_ROOT=/var/alternc/dns/redir/mail
63DATA_ROOT=var/alternc
64
65ACTION_INSERT=0
66ACTION_UPDATE=1
67ACTION_DELETE=2
68TYPE_LOCAL=0
69TYPE_URL=1
70TYPE_IP=2
71TYPE_WEBMAIL=3
72SLAVE=2
73OUI=1
74NON=0
75
76wc=/usr/bin/wc
77awk=/usr/bin/awk
78echo=/bin/echo
79cut=/usr/bin/cut
80grep=/bin/grep
81egrep=/bin/egrep
82tail=/usr/bin/tail
83head=/usr/bin/head
84rm=/bin/rm
85find=/usr/bin/find
86cat=/bin/cat
87sed=/bin/sed
88mv=/bin/mv
89ln=/bin/ln
90date=/bin/date
91printf=/usr/bin/printf
92cp=/bin/cp
93env=/usr/bin/env
94sort=/usr/bin/sort
95mkdir=/bin/mkdir
96mktemp=/bin/mktemp
97
98# récupération des passwd et autres à partir d'un fichier externe :
99FIC_CONF=/etc/alternc/local.sh
100[ -r "$FIC_CONF" ] && . $FIC_CONF || { echo "Le fichier de configuration $FIC_CONF est absent ou est inaccessible" ; exit 1 ; }
101
102# On teste si les variables attendues sont renseignées :
103for variable in MYSQL_DATABASE MYSQL_USER MYSQL_PASS DEFAULT_MX DEFAULT_IP ; do
104        var=""
105        var=`set | $grep $variable | $grep -v variable`
106        var=`$echo $var | $cut -d= -f2`
107        [ -z "$var" ] && { $echo "la variable \$$variable n'est pas renseignée." ; exit 1 ; }
108done
109
110
111WEBMAIL_ROOT=/$DATA_ROOT/bureau/admin/webmail/
112DOM_ROOT=/$DATA_ROOT/exec/system
113FIC_LOCK=/$DATA_ROOT/bureau/cron.lock
114HTTP_DNS=/$DATA_ROOT/dns
115HTML_HOME=/$DATA_ROOT/html
116
117MYSQL_SELECT="/usr/bin/mysql -u${MYSQL_USER} -p${MYSQL_PASS} -Bs ${MYSQL_DATABASE} -e "
118MYSQL_DELETE="/usr/bin/mysql -u${MYSQL_USER} -p${MYSQL_PASS} ${MYSQL_DATABASE} -e "
119
120
121# ####################################################################
122# FUNCTIONS :
123# ####################################################################
124
125# la première lettre de l'avant-dernière partie du domaine (e.g.
126# www.alternc.org -> a)
127#
128# argument: le domaine
129# imprime: la lettre
130function init_dom_letter
131{
132    echo $1 | awk '{z=split($NF, a, ".") ; print substr(a[z-1], 1, 1)}'
133}
134
135#---------------
136# A chaque modification du fichier named
137# d'un domaine, on incrémente son serial.
138# Le serial est de la forme YYYYYMMDDSS
139# où SS est le numéro d'ordre dans la journée.
140# On incrémente ce numéro d'ordre si la modif
141# est du même jour que la précédente, sinon on
142# met la date du jour avec 01 en numéro d'ordre.
143# Prend le nom du fic de conf en argument.
144#---------------
145# we assume that the serial line contains the "serial string", eg.:
146#                 2005012703      ; serial
147#
148# returns 1 if file isn't readable
149# returns 2 if we can't find the serial number
150# returns 3 if a tempfile can't be created
151function increment_serial {
152    if [ -f "$1" ]; then
153        # the assumption is here
154        SERIAL=`$awk '/^..*serial/ {print $1}' < $1` || return 2
155        if [ ! -z "${SERIAL}" ]; then
156            DATE=`$echo $SERIAL | $cut -c1-8`
157            ORDRE=`$echo $SERIAL | $sed s/"${DATE}0\?"/""/g`
158            DATE_JOUR=`$date +%Y%m%d`
159            # increment the serial number only if the date hasn't changed
160            if [ "X$DATE" = "X$DATE_JOUR" ] ; then
161                ORDRE=$(($ORDRE+1))
162            else
163                ORDRE=1
164                DATE=$DATE_JOUR
165            fi
166            NEW_SERIAL=$DATE`$printf "%.2d" $ORDRE`
167            TMPFILE=`$mktemp $1.XXXXXX` || return 3
168            # put the serial number in place
169            $awk -v NEW_SERIAL=$NEW_SERIAL '{if ($3 =="serial") print "         "NEW_SERIAL "   ; serial"; else print $0}' < $1 > $TMPFILE && \
170                $mv -f $TMPFILE $1 && \
171                chmod 644 $1
172            return 0
173        else
174            return 2
175        fi
176    else
177        return 1
178    fi
179}
180
181#---------------
182# Modification de l'ip d'un sous_domaine.
183# dans la conf named. La rajoute si manquante.
184# Prend domaine, ip et
185# sous_domaine en arguments.
186#---------------
187function modifier_ip_sous_domaine
188{
189
190        DOM=$1
191        IP=$2
192        SUB=$3
193        PAT="^$SUB[[:space:]]*IN[[:space:]]*A[[:space:]]*.*\$"
194        DOMLINE="$SUB   IN      A       $IP"
195
196        if [ -f "$NAMED_MASTER/$DOM" ] ; then
197            if grep -q $PAT $NAMED_MASTER/$DOM
198            then
199                $sed "s/$PAT/$DOMLINE/" < $NAMED_MASTER/$DOM > $NAMED_MASTER/$DOM.$$
200                mv $NAMED_MASTER/$DOM.$$ $NAMED_MASTER/$DOM
201            else
202                echo "$DOMLINE" >> $NAMED_MASTER/$DOM
203            fi
204
205        fi
206
207}
208
209
210#---------------
211# Crée un sous-domaine au niveau disque,
212# et dans les fichiers named.
213# prend domaine,
214# type, valeur, sous-domaine en argument.
215# Principe : la création est forcée,
216# si le sub existe déjà, il est remplacé.
217#---------------
218function creer_sous_domaine
219{
220        DOM=$1
221        TYP=$2
222        VAL=$4
223        SB=$3
224        POINT="."
225       
226        detruire_sous_domaine "$DOM" "$SB"
227
228        if [ "$SB" = "" ] ; then
229                POINT=""
230                modifier_ip_sous_domaine "$DOM" "$DEFAULT_IP"
231        else
232                if [ "$TYP" = "$TYPE_IP" ]; then
233                        ip=$VAL
234                else
235                        ip=$DEFAULT_IP
236                fi
237                modifier_ip_sous_domaine "$DOM" "$ip" "$SB"
238        fi
239       
240        if [ "$TYP" = "$TYPE_LOCAL" ] ; then
241                # NOTE : ne pas virer le rm -f (le ln -sf est buggé)
242                $rm -f "${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}"
243                $ln -s "${HTML_HOME}/${INITIALE_USER}/${USER}${VAL}" "${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}"
244        fi
245       
246        if [ "$TYP" = "$TYPE_WEBMAIL" ] ; then
247                # NOTE : ne pas virer le rm -f (le ln -sf est bugg?)
248                $rm -f "${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}"
249                $ln -s "${WEBMAIL_ROOT}" "${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}"
250        fi
251       
252        if [ "$TYP" = "$TYPE_URL" ] ; then
253                mkdir -p "${HTTP_DNS}/redir/${INITIALE_DOM}/${SB}${POINT}${DOM}"
254                $echo "RewriteEngine on
255RewriteRule (.*) ${VAL}/\$1 [R,L]" > "${HTTP_DNS}/redir/${INITIALE_DOM}/${SB}${POINT}${DOM}/.htaccess"
256                # NOTE : ne pas virer le rm -f (le ln -sf est buggé)
257                $rm -f "${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}"
258                $ln -s "${HTTP_DNS}/redir/${INITIALE_DOM}/${SB}${POINT}${DOM}" "${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}"
259        fi
260       
261        if [ "$TYP" = "$TYPE_IP" ] ; then
262                $rm -f "${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}"
263                $rm -fr "${HTTP_DNS}/redir/${INITIALE_DOM}/${SB}${POINT}${DOM}"
264        fi
265}
266
267#---------------
268# Destruction d'un
269# sous-domaine
270#---------------
271function detruire_sous_domaine
272{
273        DOM=$1
274        SB=$2
275
276        edom=`$echo "$DOM" | $sed 's/\./\\\./g'`
277        esub=`$echo "$SB" | $sed 's/\([\*|\.]\)/\\\\\1/g'`
278        epoint="\."
279       
280       
281        if [ "$SB" = "" ] ; then
282                POINT=""
283                epoint=""
284        fi
285
286        if [ -f "$NAMED_MASTER/$DOM" ] ; then
287                $sed -e "/^$esub[[:space:]]*IN[[:space:]]*A[[:space:]]/d" < "$NAMED_MASTER/$DOM" > "$NAMED_MASTER/$DOM.$$" && mv "$NAMED_MASTER/$DOM.$$" "$NAMED_MASTER/$DOM"
288        fi
289
290        initial_domain=`init_dom_letter "$DOM"`
291        $rm -f "/var/alternc/apacheconf/$initial_domain/${SB}${POINT}${DOM}"
292        $sed -e "/\/${esub}${epoint}${edom}\$/d" > /var/alternc/apacheconf/override_php.conf.$$ < /var/alternc/apacheconf/override_php.conf && \
293                mv /var/alternc/apacheconf/override_php.conf.$$ /var/alternc/apacheconf/override_php.conf
294
295        $rm -f "${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}"
296        $rm -fr "${HTTP_DNS}/redir/${INITIALE_DOM}/${SB}${POINT}${DOM}"
297        increment_serial "$NAMED_MASTER/$DOM"
298}
299
300
301#---------------
302# création du fichier named
303# si il n'existe pas.
304# Prend le nom du domaine
305# en argument.
306#---------------
307function creer_fic_named
308{
309        if ! [ -f $NAMED_MASTER/$1 ] ; then
310                SERIAL=`$date +%Y%m%d`00
311                $sed s/"@@DOMAINE@@"/"${1}"/g < $NAMED_MASTER/$NAMED_TPL | $sed s/"@@SERIAL@@"/$SERIAL/g > $NAMED_MASTER/"${1}"
312                $cp -f $NAMED_ETC/$NAMED_CONF $NAMED_ETC/$NAMED_CONF.prec
313                $sed s/"@@DOMAINE@@"/"${1}"/g >> $NAMED_ETC/$NAMED_CONF < $NAMED_ETC/$NAMED_TPL
314                $cp -f $BIND2_ROOT/$SECONDARY_LIST $BIND2_ROOT/$SECONDARY_LIST.prec
315                $sed s/"@@DOMAINE@@"/"${1}"/g >> $BIND2_ROOT/$SECONDARY_LIST < $BIND2_ROOT/$NAMED_TPL
316                RESTART_NAMED="true"
317        fi
318}
319
320
321#---------------
322# Destruction des fichiers
323# de conf named pour
324# un domaine
325#---------------
326function detruire_fic_named
327{
328        if [ -f $NAMED_MASTER/$1 ] ; then
329                $rm -f $NAMED_MASTER/"$1"
330                $grep -v "\"$1\"" > $NAMED_ETC/$NAMED_CONF.tmp < $NAMED_ETC/$NAMED_CONF
331                $cp -f $NAMED_ETC/$NAMED_CONF $NAMED_ETC/$NAMED_CONF.prec
332                $mv -f $NAMED_ETC/$NAMED_CONF.tmp $NAMED_ETC/$NAMED_CONF
333                $grep -v "\"$1\"" > $BIND2_ROOT/$SECONDARY_LIST.tmp < $BIND2_ROOT/$SECONDARY_LIST
334                $cp -f $BIND2_ROOT/$SECONDARY_LIST $BIND2_ROOT/$SECONDARY_LIST.prec
335                $mv -f $BIND2_ROOT/$SECONDARY_LIST.tmp $BIND2_ROOT/$SECONDARY_LIST
336        fi
337}
338
339#---------------
340# Modification du champ mx.
341
342  # prend domaine et champ mx
343# en arguments.
344#---------------
345function modifier_mx_domaine
346{
347    DOM=$1
348    MX=$2
349    PAT="^[[:space:]]*IN[[:space:]]*MX[[:space:]]*[[:digit:]]*[[:space:]].*\$"
350    MXLINE="    IN      MX      5       $MX"
351    # aller chercher le numéro de la ligne MX
352    # XXX: comportement inconnu si plusieurs matchs ou MX commenté
353    if $grep -q "$PAT" "$NAMED_MASTER/$DOM"
354    then
355        $sed "s/$PAT/$MXLINE/" < "$NAMED_MASTER/$DOM" > "$NAMED_MASTER/$DOM.$$" && mv "$NAMED_MASTER/$DOM.$$" "$NAMED_MASTER/$DOM"
356    else
357        echo "$MXLINE" >> "$NAMED_MASTER/$DOM"
358    fi
359
360    increment_serial "$NAMED_MASTER/${1}"
361    RESTART_NAMED="true"
362}
363
364
365# ####################################################################
366# Main program
367# ####################################################################
368
369#------------------------------------
370# CALL WITH "do_domaines.sh --secondary"
371# It rebuilds the secondary.list file.
372if [ "$1" = "--secondary" ] ; then
373        > $FIC_LOCK
374        $rm -f $FIC_TMP
375        echo "CALL --secondary, rebuilding secondary.list file." >> $FIC_LOG
376        SQL_RES=`$MYSQL_SELECT "SELECT b.domaine INTO OUTFILE '$FIC_TMP' FROM domaines b WHERE b.gesdns=1;" 2>&1` 
377        RES=$?
378       
379        if [ "$RES" != 0 ] ; then
380                $echo `$date` >> $FIC_LOG
381                $echo "$SQL_RES" >> $FIC_LOG
382                $echo "`$date` : $0 : erreur à l'exécution de la requête de sélection des domaines à traiter : $SQL_RES"
383                $rm -f $FIC_LOCK >> $FIC_LOG 2>&1
384                $rm -f $FIC_TMP >> $FIC_LOG 2>&1
385                exit 1
386        else
387                # On traite les domaines
388                $mv -f $BIND2_ROOT/$SECONDARY_LIST $BIND2_ROOT/$SECONDARY_LIST.prec
389                for i in `$cat $FIC_TMP` ; do
390                        $sed s/"@@DOMAINE@@"/"${i}"/g >> $BIND2_ROOT/$SECONDARY_LIST < $BIND2_ROOT/$NAMED_TPL
391                done
392        fi
393       
394        $rm -f $FIC_LOCK >> $FIC_LOG 2>&1
395        $rm -f $FIC_TMP >> $FIC_LOG 2>&1
396        echo "CALL --secondary END" >> $FIC_LOG
397        exit 0
398fi
399
400
401# ------------------------------------------------------------
402# CALL with NO argument : process pending domains / subdomains
403#
404# si le cron précédent n'est pas
405# terminé, on attend le suivant.
406if [ -f $FIC_TMP ] ; then
407        echo `$date` >> $FIC_LOG
408        echo "ERREUR : cron précédent inachevé." >> $FIC_LOG
409        $echo "`$date` : $0 : cron précédent inachevé."
410        exit 1
411fi
412
413> $FIC_LOCK
414
415SQL_RES=`$MYSQL_SELECT "SELECT m.login,b.domaine,b.mx,b.gesdns,b.gesmx,b.action INTO OUTFILE '$FIC_TMP' FROM domaines_standby b INNER JOIN membres m ON m.uid=b.compte ORDER BY b.action;" 2>&1`
416RES=$?
417
418if [ "$RES" != 0 ] ; then
419        $echo `$date` >> $FIC_LOG
420        $echo "$SQL_RES" >> $FIC_LOG
421        $echo "`$date` : $0 : erreur à l'exécution de la requête de sélection des domaines à traiter : $SQL_RES"
422        $rm -f $FIC_LOCK >> $FIC_LOG 2>&1
423        $rm -f $FIC_TMP >> $FIC_LOG 2>&1
424        $rm -f $FIC_TMP_SUB >> $FIC_LOG 2>&1
425        exit 1
426else
427        SQL_RES=`$MYSQL_SELECT "SELECT m.login,b.domaine,b.sub,b.valeur,b.type,b.action INTO OUTFILE '$FIC_TMP_SUB' FROM sub_domaines_standby b INNER JOIN membres m ON m.uid=b.compte ORDER BY b.action desc;" 2>&1`
428        RES=$?
429        if [ "$RES" != 0 ] ; then
430                $echo `$date` >> $FIC_LOG
431                $echo "$SQL_RES" >> $FIC_LOG
432                $echo "`$date` : $0 : erreur à l'exécution de la requête de sélection des sous-domaines à traiter : $SQL_RES"
433                        $rm -f $FIC_LOCK >> $FIC_LOG 2>&1
434                $rm -f $FIC_TMP >> $FIC_LOG 2>&1
435                $rm -f $FIC_TMP_SUB >> $FIC_LOG 2>&1
436                exit 1
437        else
438                $rm -f $FIC_LOCK
439                $MYSQL_DELETE "DELETE FROM domaines_standby;"
440                $MYSQL_DELETE "DELETE FROM sub_domaines_standby;"
441                RESTART_NAMED="false"
442                > $FIC_TMP_OVERRIDE_PHP
443
444                # On traite les domaines
445                $sed s/"        "/"@"/g > $FIC_TMP.tmp < $FIC_TMP
446                $mv -f $FIC_TMP.tmp $FIC_TMP
447               
448                if [ `$wc -l $FIC_TMP | $awk {'print $1'}` -gt 0 ] ; then
449                        $echo `$date` >> $FIC_LOG
450                        $cat $FIC_TMP >> $FIC_LOG
451                fi
452
453                for i in `$cat $FIC_TMP` ; do
454                        USER=`$echo "$i" | $cut -d"@" -f1`
455                        DOMAINE=`$echo "$i" | $cut -d"@" -f2`
456                        MX=`$echo "$i" | $cut -d"@" -f3 | $sed -e 's/\.*$//'`
457                        GESDNS=`$echo "$i" | $cut -d"@" -f4`
458                        GESMX=`$echo "$i" | $cut -d"@" -f5`
459                        ACTION=`$echo "$i" | $cut -d"@" -f6`
460                        PASS=`$echo "$i" | $cut -d"@" -f7`
461                        INITIALE_DOM=`$echo "$DOMAINE" | $awk '{z = split($0, intiale, "."); print substr(intiale[z - 1], 1, 1)}'`
462                        INITIALE_USER=`$echo "$USER" | $awk {'print substr($1, 1, 1)'}`
463
464                        echo "${DOMAINE}@${USER}" >> $FIC_TMP_OVERRIDE_PHP
465                        echo "www.${DOMAINE}@${USER}" >> $FIC_TMP_OVERRIDE_PHP
466
467                        if [ "$ACTION" = "$ACTION_INSERT" ] ; then
468                                # création des liens symboliques par défaut :
469                                # NOTE : ne pas virer le rm -f (le ln -sf est buggé)
470                                $rm -f "${HTTP_DNS}/${INITIALE_DOM}/$DOMAINE"
471                                $ln -s "${HTML_HOME}/${INITIALE_USER}/$USER" "${HTTP_DNS}/${INITIALE_DOM}/$DOMAINE"
472                                $rm -f "${HTTP_DNS}/${INITIALE_DOM}/www.$DOMAINE"
473                                $ln -s "${HTML_HOME}/${INITIALE_USER}/$USER" "${HTTP_DNS}/${INITIALE_DOM}/www.$DOMAINE"
474                                $rm -f "${HTTP_DNS}/${INITIALE_DOM}/mail.$DOMAINE"
475                                $ln -s "${WEBMAIL_ROOT}" "${HTTP_DNS}/${INITIALE_DOM}/mail.$DOMAINE"
476                               
477                                if [ "$GESDNS" = "$OUI" ] ; then
478                                        creer_fic_named "$DOMAINE"
479                                        modifier_ip_sous_domaine "$DOMAINE" "$DEFAULT_IP"
480                                        modifier_ip_sous_domaine "$DOMAINE" "$DEFAULT_IP" www
481                                        modifier_ip_sous_domaine "$DOMAINE" "$DEFAULT_IP" mail
482                                fi
483                        fi
484                       
485                        if [ "$ACTION" = "$ACTION_UPDATE" ] ; then
486                                if [ "$GESDNS" = "$OUI" ] ; then
487                                        creer_fic_named "$DOMAINE"
488                                        modifier_mx_domaine "$DOMAINE" "$MX"
489                                else
490                                        detruire_fic_named "$DOMAINE"
491                                fi
492                        fi
493                       
494                        if [ "$ACTION" = "$ACTION_DELETE" ] ; then
495                                detruire_fic_named "$DOMAINE"
496                                # suppression des liens symboliques :
497                                $rm -f "${HTTP_DNS}/${INITIALE_DOM}/"*".$DOMAINE"
498                                $rm -f "${HTTP_DNS}/${INITIALE_DOM}/$DOMAINE"
499                                $rm -fr "${HTTP_DNS}/redir/${INITIALE_DOM}/"*".$DOMAINE"
500                                $rm -fr "${HTTP_DNS}/redir/${INITIALE_DOM}/$DOMAINE"
501                        fi
502                       
503                        RESTART_NAMED="true"
504                done
505
506                # on traite les sous-domaines
507                $sed s/"        "/"@"/g > $FIC_TMP_SUB.tmp < $FIC_TMP_SUB
508                $mv -f $FIC_TMP_SUB.tmp $FIC_TMP_SUB
509       
510                if [ `$wc -l $FIC_TMP_SUB | $awk {'print $1'}` -gt 0 ] ; then
511                        $echo `$date` >> $FIC_LOG_SUB
512                        $cat $FIC_TMP_SUB >> $FIC_LOG_SUB
513                fi
514                       
515                for i in `$cat $FIC_TMP_SUB` ; do
516                        USER=`$echo "$i" | $cut -d"@" -f1`
517                        DOMAINE=`$echo "$i" | $cut -d"@" -f2`
518                        SUB=`$echo "$i" | $cut -d"@" -f3`
519                        VALEUR=`$echo "$i" | $cut -d"@" -f4`
520                        TYPE=`$echo "$i" | $cut -d"@" -f5`
521                        ACTION=`$echo "$i" | $cut -d"@" -f6`
522                        PASS=`$echo "$i" | $cut -d"@" -f7`
523                        INITIALE_DOM=`$echo "$DOMAINE" | $awk '{z = split($0, intiale, "."); print substr(intiale[z - 1], 1, 1)}'`
524                        INITIALE_USER=`$echo "$USER" | $awk {'print substr($1, 1, 1)'}`
525                       
526                        POINT="."
527                        [ "$SUB" = "" ] && POINT=""
528                        $echo "${SUB}${POINT}${DOMAINE}@${USER}" >> $FIC_TMP_OVERRIDE_PHP
529
530                        if [ "$ACTION" = "$ACTION_UPDATE" -o "$ACTION" = "$ACTION_INSERT" ] ; then
531                                creer_sous_domaine "$DOMAINE" "$TYPE" "$SUB" "$VALEUR" 
532                        fi
533                       
534                        if [ "$ACTION" = "$ACTION_DELETE" ] ; then
535                                detruire_sous_domaine "$DOMAINE" "$SUB"
536                        fi
537                       
538                        RESTART_NAMED="true"
539                done
540
541                # On crée ou supprime les fichiers /etc/apache/override_php/... pour les domaines modifiés
542                # C'est un patch pour éviter que les users ne puissent utiliser opendir()
543                # pour voir/modifier les autres comptes que le leur.
544                for i in `$sort -u < $FIC_TMP_OVERRIDE_PHP` ; do
545                        domain=`$echo "$i" | $cut -d"@" -f1`
546                        /usr/lib/alternc/basedir_prot.sh "$domain" > /dev/null
547                done
548
549
550                # redémarrage apache et bind si nécessaire     
551                if [ "$RESTART_NAMED" = "true" ] ; then
552                        $RELOAD_NAMED reload
553                        # ne pas faire de killall -1 apache, car tous les streamings et downloads en cours seraient tués. Donc un reload :
554                        $RELOAD_APACHE reload > /dev/null 2>&1
555                fi
556               
557                $rm -f $FIC_TMP_SUB >> $FIC_LOG 2>&1
558                $rm -f $FIC_TMP >> $FIC_LOG 2>&1
559                $rm -f $FIC_TMP_OVERRIDE_PHP >> $FIC_LOG 2>&1
560        fi
561fi     
562
563       
564
Note: See TracBrowser for help on using the repository browser.