source: src/do_domaines.sh @ 691

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

[project @ alternc: changeset 2005-05-26 20:52:30 by anarcat]
ne pas mettre de ligne avec des sous-domaines "vides", utiliser @ à la
place le problème avec cette approche était qu'elle assumait un
certain ordre dans les lignes de bind, chose qui n'était plus
respectée avec les nouveaux modifier_ip_sous_domaine et modifier_mx

Original author: anarcat
Date: 2005-05-26 20:52:30

Line 
1#!/bin/ksh
2#
3# $Id: do_domaines.sh,v 1.28 2005/05/26 20:52:30 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        if [ "X" = "X$SUB" ]
195        then
196            SUB="@"
197        fi
198        DOMLINE="$SUB   IN      A       $IP"
199
200        if [ -f "$NAMED_MASTER/$DOM" ] ; then
201            if grep -q $PAT $NAMED_MASTER/$DOM
202            then
203                $sed "s/$PAT/$DOMLINE/" < $NAMED_MASTER/$DOM > $NAMED_MASTER/$DOM.$$
204                mv $NAMED_MASTER/$DOM.$$ $NAMED_MASTER/$DOM
205            else
206                echo "$DOMLINE" >> $NAMED_MASTER/$DOM
207            fi
208
209        fi
210
211}
212
213
214#---------------
215# Crée un sous-domaine au niveau disque,
216# et dans les fichiers named.
217# prend domaine,
218# type, valeur, sous-domaine en argument.
219# Principe : la création est forcée,
220# si le sub existe déjà, il est remplacé.
221#---------------
222function creer_sous_domaine
223{
224        DOM=$1
225        TYP=$2
226        VAL=$4
227        SB=$3
228        POINT="."
229       
230        detruire_sous_domaine "$DOM" "$SB"
231
232        if [ "$SB" = "" ] ; then
233                POINT=""
234                modifier_ip_sous_domaine "$DOM" "$DEFAULT_IP"
235        else
236                if [ "$TYP" = "$TYPE_IP" ]; then
237                        ip=$VAL
238                else
239                        ip=$DEFAULT_IP
240                fi
241                modifier_ip_sous_domaine "$DOM" "$ip" "$SB"
242        fi
243       
244        if [ "$TYP" = "$TYPE_LOCAL" ] ; then
245                # NOTE : ne pas virer le rm -f (le ln -sf est buggé)
246                $rm -f "${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}"
247                $ln -s "${HTML_HOME}/${INITIALE_USER}/${USER}${VAL}" "${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}"
248        fi
249       
250        if [ "$TYP" = "$TYPE_WEBMAIL" ] ; then
251                # NOTE : ne pas virer le rm -f (le ln -sf est bugg?)
252                $rm -f "${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}"
253                $ln -s "${WEBMAIL_ROOT}" "${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}"
254        fi
255       
256        if [ "$TYP" = "$TYPE_URL" ] ; then
257                mkdir -p "${HTTP_DNS}/redir/${INITIALE_DOM}/${SB}${POINT}${DOM}"
258                $echo "RewriteEngine on
259RewriteRule (.*) ${VAL}/\$1 [R,L]" > "${HTTP_DNS}/redir/${INITIALE_DOM}/${SB}${POINT}${DOM}/.htaccess"
260                # NOTE : ne pas virer le rm -f (le ln -sf est buggé)
261                $rm -f "${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}"
262                $ln -s "${HTTP_DNS}/redir/${INITIALE_DOM}/${SB}${POINT}${DOM}" "${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}"
263        fi
264       
265        if [ "$TYP" = "$TYPE_IP" ] ; then
266                $rm -f "${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}"
267                $rm -fr "${HTTP_DNS}/redir/${INITIALE_DOM}/${SB}${POINT}${DOM}"
268        fi
269}
270
271#---------------
272# Destruction d'un
273# sous-domaine
274#---------------
275function detruire_sous_domaine
276{
277        DOM=$1
278        SB=$2
279
280        edom=`$echo "$DOM" | $sed 's/\./\\\./g'`
281        esub=`$echo "$SB" | $sed 's/\([\*|\.]\)/\\\\\1/g'`
282        epoint="\."
283       
284       
285        if [ "$SB" = "" ] ; then
286                POINT=""
287                epoint=""
288        fi
289
290        if [ -f "$NAMED_MASTER/$DOM" ] ; then
291                $sed -e "/^$esub[[:space:]]*IN[[:space:]]*A[[:space:]]/d" < "$NAMED_MASTER/$DOM" > "$NAMED_MASTER/$DOM.$$" && mv "$NAMED_MASTER/$DOM.$$" "$NAMED_MASTER/$DOM"
292        fi
293
294        initial_domain=`init_dom_letter "$DOM"`
295        $rm -f "/var/alternc/apacheconf/$initial_domain/${SB}${POINT}${DOM}"
296        $sed -e "/\/${esub}${epoint}${edom}\$/d" > /var/alternc/apacheconf/override_php.conf.$$ < /var/alternc/apacheconf/override_php.conf && \
297                mv /var/alternc/apacheconf/override_php.conf.$$ /var/alternc/apacheconf/override_php.conf
298
299        $rm -f "${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}"
300        $rm -fr "${HTTP_DNS}/redir/${INITIALE_DOM}/${SB}${POINT}${DOM}"
301        increment_serial "$NAMED_MASTER/$DOM"
302}
303
304
305#---------------
306# création du fichier named
307# si il n'existe pas.
308# Prend le nom du domaine
309# en argument.
310#---------------
311function creer_fic_named
312{
313        if ! [ -f $NAMED_MASTER/$1 ] ; then
314                SERIAL=`$date +%Y%m%d`00
315                $sed s/"@@DOMAINE@@"/"${1}"/g < $NAMED_MASTER/$NAMED_TPL | $sed s/"@@SERIAL@@"/$SERIAL/g > $NAMED_MASTER/"${1}"
316                $cp -f $NAMED_ETC/$NAMED_CONF $NAMED_ETC/$NAMED_CONF.prec
317                $sed s/"@@DOMAINE@@"/"${1}"/g >> $NAMED_ETC/$NAMED_CONF < $NAMED_ETC/$NAMED_TPL
318                $cp -f $BIND2_ROOT/$SECONDARY_LIST $BIND2_ROOT/$SECONDARY_LIST.prec
319                $sed s/"@@DOMAINE@@"/"${1}"/g >> $BIND2_ROOT/$SECONDARY_LIST < $BIND2_ROOT/$NAMED_TPL
320                RESTART_NAMED="true"
321        fi
322}
323
324
325#---------------
326# Destruction des fichiers
327# de conf named pour
328# un domaine
329#---------------
330function detruire_fic_named
331{
332        if [ -f $NAMED_MASTER/$1 ] ; then
333                $rm -f $NAMED_MASTER/"$1"
334                $grep -v "\"$1\"" > $NAMED_ETC/$NAMED_CONF.tmp < $NAMED_ETC/$NAMED_CONF
335                $cp -f $NAMED_ETC/$NAMED_CONF $NAMED_ETC/$NAMED_CONF.prec
336                $mv -f $NAMED_ETC/$NAMED_CONF.tmp $NAMED_ETC/$NAMED_CONF
337                $grep -v "\"$1\"" > $BIND2_ROOT/$SECONDARY_LIST.tmp < $BIND2_ROOT/$SECONDARY_LIST
338                $cp -f $BIND2_ROOT/$SECONDARY_LIST $BIND2_ROOT/$SECONDARY_LIST.prec
339                $mv -f $BIND2_ROOT/$SECONDARY_LIST.tmp $BIND2_ROOT/$SECONDARY_LIST
340        fi
341}
342
343#---------------
344# Modification du champ mx.
345
346  # prend domaine et champ mx
347# en arguments.
348#---------------
349function modifier_mx_domaine
350{
351    DOM=$1
352    MX=$2
353    PAT="^[[:space:]]*IN[[:space:]]*MX[[:space:]]*[[:digit:]]*[[:space:]].*\$"
354    MXLINE="@   IN      MX      5       $MX"
355    # aller chercher le numéro de la ligne MX
356    # XXX: comportement inconnu si plusieurs matchs ou MX commenté
357    if $grep -q "$PAT" "$NAMED_MASTER/$DOM"
358    then
359        $sed "s/$PAT/$MXLINE/" < "$NAMED_MASTER/$DOM" > "$NAMED_MASTER/$DOM.$$" && mv "$NAMED_MASTER/$DOM.$$" "$NAMED_MASTER/$DOM"
360    else
361        echo "$MXLINE" >> "$NAMED_MASTER/$DOM"
362    fi
363
364    increment_serial "$NAMED_MASTER/${1}"
365    RESTART_NAMED="true"
366}
367
368
369# ####################################################################
370# Main program
371# ####################################################################
372
373#------------------------------------
374# CALL WITH "do_domaines.sh --secondary"
375# It rebuilds the secondary.list file.
376if [ "$1" = "--secondary" ] ; then
377        > $FIC_LOCK
378        $rm -f $FIC_TMP
379        echo "CALL --secondary, rebuilding secondary.list file." >> $FIC_LOG
380        SQL_RES=`$MYSQL_SELECT "SELECT b.domaine INTO OUTFILE '$FIC_TMP' FROM domaines b WHERE b.gesdns=1;" 2>&1` 
381        RES=$?
382       
383        if [ "$RES" != 0 ] ; then
384                $echo `$date` >> $FIC_LOG
385                $echo "$SQL_RES" >> $FIC_LOG
386                $echo "`$date` : $0 : erreur à l'exécution de la requête de sélection des domaines à traiter : $SQL_RES"
387                $rm -f $FIC_LOCK >> $FIC_LOG 2>&1
388                $rm -f $FIC_TMP >> $FIC_LOG 2>&1
389                exit 1
390        else
391                # On traite les domaines
392                $mv -f $BIND2_ROOT/$SECONDARY_LIST $BIND2_ROOT/$SECONDARY_LIST.prec
393                for i in `$cat $FIC_TMP` ; do
394                        $sed s/"@@DOMAINE@@"/"${i}"/g >> $BIND2_ROOT/$SECONDARY_LIST < $BIND2_ROOT/$NAMED_TPL
395                done
396        fi
397       
398        $rm -f $FIC_LOCK >> $FIC_LOG 2>&1
399        $rm -f $FIC_TMP >> $FIC_LOG 2>&1
400        echo "CALL --secondary END" >> $FIC_LOG
401        exit 0
402fi
403
404
405# ------------------------------------------------------------
406# CALL with NO argument : process pending domains / subdomains
407#
408# si le cron précédent n'est pas
409# terminé, on attend le suivant.
410if [ -f $FIC_TMP ] ; then
411        echo `$date` >> $FIC_LOG
412        echo "ERREUR : cron précédent inachevé." >> $FIC_LOG
413        $echo "`$date` : $0 : cron précédent inachevé."
414        exit 1
415fi
416
417> $FIC_LOCK
418
419SQL_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`
420RES=$?
421
422if [ "$RES" != 0 ] ; then
423        $echo `$date` >> $FIC_LOG
424        $echo "$SQL_RES" >> $FIC_LOG
425        $echo "`$date` : $0 : erreur à l'exécution de la requête de sélection des domaines à traiter : $SQL_RES"
426        $rm -f $FIC_LOCK >> $FIC_LOG 2>&1
427        $rm -f $FIC_TMP >> $FIC_LOG 2>&1
428        $rm -f $FIC_TMP_SUB >> $FIC_LOG 2>&1
429        exit 1
430else
431        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`
432        RES=$?
433        if [ "$RES" != 0 ] ; then
434                $echo `$date` >> $FIC_LOG
435                $echo "$SQL_RES" >> $FIC_LOG
436                $echo "`$date` : $0 : erreur à l'exécution de la requête de sélection des sous-domaines à traiter : $SQL_RES"
437                        $rm -f $FIC_LOCK >> $FIC_LOG 2>&1
438                $rm -f $FIC_TMP >> $FIC_LOG 2>&1
439                $rm -f $FIC_TMP_SUB >> $FIC_LOG 2>&1
440                exit 1
441        else
442                $rm -f $FIC_LOCK
443                $MYSQL_DELETE "DELETE FROM domaines_standby;"
444                $MYSQL_DELETE "DELETE FROM sub_domaines_standby;"
445                RESTART_NAMED="false"
446                > $FIC_TMP_OVERRIDE_PHP
447
448                # On traite les domaines
449                $sed s/"        "/"@"/g > $FIC_TMP.tmp < $FIC_TMP
450                $mv -f $FIC_TMP.tmp $FIC_TMP
451               
452                if [ `$wc -l $FIC_TMP | $awk {'print $1'}` -gt 0 ] ; then
453                        $echo `$date` >> $FIC_LOG
454                        $cat $FIC_TMP >> $FIC_LOG
455                fi
456
457                for i in `$cat $FIC_TMP` ; do
458                        USER=`$echo "$i" | $cut -d"@" -f1`
459                        DOMAINE=`$echo "$i" | $cut -d"@" -f2`
460                        MX=`$echo "$i" | $cut -d"@" -f3 | $sed -e 's/\.*$//'`
461                        GESDNS=`$echo "$i" | $cut -d"@" -f4`
462                        GESMX=`$echo "$i" | $cut -d"@" -f5`
463                        ACTION=`$echo "$i" | $cut -d"@" -f6`
464                        PASS=`$echo "$i" | $cut -d"@" -f7`
465                        INITIALE_DOM=`$echo "$DOMAINE" | $awk '{z = split($0, intiale, "."); print substr(intiale[z - 1], 1, 1)}'`
466                        INITIALE_USER=`$echo "$USER" | $awk {'print substr($1, 1, 1)'}`
467
468                        echo "${DOMAINE}@${USER}" >> $FIC_TMP_OVERRIDE_PHP
469                        echo "www.${DOMAINE}@${USER}" >> $FIC_TMP_OVERRIDE_PHP
470
471                        if [ "$ACTION" = "$ACTION_INSERT" ] ; then
472                                # création des liens symboliques par défaut :
473                                # NOTE : ne pas virer le rm -f (le ln -sf est buggé)
474                                $rm -f "${HTTP_DNS}/${INITIALE_DOM}/$DOMAINE"
475                                $ln -s "${HTML_HOME}/${INITIALE_USER}/$USER" "${HTTP_DNS}/${INITIALE_DOM}/$DOMAINE"
476                                $rm -f "${HTTP_DNS}/${INITIALE_DOM}/www.$DOMAINE"
477                                $ln -s "${HTML_HOME}/${INITIALE_USER}/$USER" "${HTTP_DNS}/${INITIALE_DOM}/www.$DOMAINE"
478                                $rm -f "${HTTP_DNS}/${INITIALE_DOM}/mail.$DOMAINE"
479                                $ln -s "${WEBMAIL_ROOT}" "${HTTP_DNS}/${INITIALE_DOM}/mail.$DOMAINE"
480                               
481                                if [ "$GESDNS" = "$OUI" ] ; then
482                                        creer_fic_named "$DOMAINE"
483                                        modifier_ip_sous_domaine "$DOMAINE" "$DEFAULT_IP"
484                                        modifier_ip_sous_domaine "$DOMAINE" "$DEFAULT_IP" www
485                                        modifier_ip_sous_domaine "$DOMAINE" "$DEFAULT_IP" mail
486                                fi
487                        fi
488                       
489                        if [ "$ACTION" = "$ACTION_UPDATE" ] ; then
490                                if [ "$GESDNS" = "$OUI" ] ; then
491                                        creer_fic_named "$DOMAINE"
492                                        modifier_mx_domaine "$DOMAINE" "$MX"
493                                else
494                                        detruire_fic_named "$DOMAINE"
495                                fi
496                        fi
497                       
498                        if [ "$ACTION" = "$ACTION_DELETE" ] ; then
499                                detruire_fic_named "$DOMAINE"
500                                # suppression des liens symboliques :
501                                $rm -f "${HTTP_DNS}/${INITIALE_DOM}/"*".$DOMAINE"
502                                $rm -f "${HTTP_DNS}/${INITIALE_DOM}/$DOMAINE"
503                                $rm -fr "${HTTP_DNS}/redir/${INITIALE_DOM}/"*".$DOMAINE"
504                                $rm -fr "${HTTP_DNS}/redir/${INITIALE_DOM}/$DOMAINE"
505                        fi
506                       
507                        RESTART_NAMED="true"
508                done
509
510                # on traite les sous-domaines
511                $sed s/"        "/"@"/g > $FIC_TMP_SUB.tmp < $FIC_TMP_SUB
512                $mv -f $FIC_TMP_SUB.tmp $FIC_TMP_SUB
513       
514                if [ `$wc -l $FIC_TMP_SUB | $awk {'print $1'}` -gt 0 ] ; then
515                        $echo `$date` >> $FIC_LOG_SUB
516                        $cat $FIC_TMP_SUB >> $FIC_LOG_SUB
517                fi
518                       
519                for i in `$cat $FIC_TMP_SUB` ; do
520                        USER=`$echo "$i" | $cut -d"@" -f1`
521                        DOMAINE=`$echo "$i" | $cut -d"@" -f2`
522                        SUB=`$echo "$i" | $cut -d"@" -f3`
523                        VALEUR=`$echo "$i" | $cut -d"@" -f4`
524                        TYPE=`$echo "$i" | $cut -d"@" -f5`
525                        ACTION=`$echo "$i" | $cut -d"@" -f6`
526                        PASS=`$echo "$i" | $cut -d"@" -f7`
527                        INITIALE_DOM=`$echo "$DOMAINE" | $awk '{z = split($0, intiale, "."); print substr(intiale[z - 1], 1, 1)}'`
528                        INITIALE_USER=`$echo "$USER" | $awk {'print substr($1, 1, 1)'}`
529                       
530                        POINT="."
531                        [ "$SUB" = "" ] && POINT=""
532                        $echo "${SUB}${POINT}${DOMAINE}@${USER}" >> $FIC_TMP_OVERRIDE_PHP
533
534                        if [ "$ACTION" = "$ACTION_UPDATE" -o "$ACTION" = "$ACTION_INSERT" ] ; then
535                                creer_sous_domaine "$DOMAINE" "$TYPE" "$SUB" "$VALEUR" 
536                        fi
537                       
538                        if [ "$ACTION" = "$ACTION_DELETE" ] ; then
539                                detruire_sous_domaine "$DOMAINE" "$SUB"
540                        fi
541                       
542                        RESTART_NAMED="true"
543                done
544
545                # On crée ou supprime les fichiers /etc/apache/override_php/... pour les domaines modifiés
546                # C'est un patch pour éviter que les users ne puissent utiliser opendir()
547                # pour voir/modifier les autres comptes que le leur.
548                for i in `$sort -u < $FIC_TMP_OVERRIDE_PHP` ; do
549                        domain=`$echo "$i" | $cut -d"@" -f1`
550                        /usr/lib/alternc/basedir_prot.sh "$domain" > /dev/null
551                done
552
553
554                # redémarrage apache et bind si nécessaire     
555                if [ "$RESTART_NAMED" = "true" ] ; then
556                        $RELOAD_NAMED reload
557                        # ne pas faire de killall -1 apache, car tous les streamings et downloads en cours seraient tués. Donc un reload :
558                        $RELOAD_APACHE reload > /dev/null 2>&1
559                fi
560               
561                $rm -f $FIC_TMP_SUB >> $FIC_LOG 2>&1
562                $rm -f $FIC_TMP >> $FIC_LOG 2>&1
563                $rm -f $FIC_TMP_OVERRIDE_PHP >> $FIC_LOG 2>&1
564        fi
565fi     
566
567       
568
Note: See TracBrowser for help on using the repository browser.