Changeset 248
- Timestamp:
- 02/21/06 23:54:27 (7 years ago)
- File:
-
- 1 edited
-
dns/do_domaines.sh (modified) (15 diffs)
Legend:
- Unmodified
- Added
- Removed
-
dns/do_domaines.sh
r188 r248 1 1 #!/usr/bin/ksh 2 2 # 3 # $Id: do_domaines.sh,v 1.1 2 2004/05/01 23:14:42anonymous Exp $3 # $Id: do_domaines.sh,v 1.13 2004/05/20 20:19:41 anonymous Exp $ 4 4 # ---------------------------------------------------------------------- 5 5 # AlternC - Web Hosting System … … 39 39 integer ORDRE 40 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 41 43 DOM_ROOT=/usr/lib/alternc/system 42 44 BIND2_ROOT=$DOM_ROOT/bind2 … … 46 48 FIC_LOG=/var/log/alternc/domaines.log 47 49 FIC_LOG_SUB=/var/log/alternc/sub_domaines.log 50 FIC_TMP_OVERRIDE_PHP=/tmp/override_php.tmp 48 51 HTTP_DNS=/var/alternc/dns 49 52 HTML_HOME=/var/alternc/html … … 57 60 NAMED_CONF=automatic.conf 58 61 RELOAD_NAMED=/etc/init.d/bind9 62 RELOAD_APACHE=/etc/init.d/apache 59 63 WEBMAIL_ROOT=/var/alternc/dns/redir/mail 60 64 DATA_ROOT=var/alternc … … 77 81 cut=/usr/bin/cut 78 82 grep=/bin/grep 83 egrep=/bin/egrep 79 84 tail=/usr/bin/tail 80 85 head=/usr/bin/head … … 89 94 cp=/bin/cp 90 95 env=/usr/bin/env 96 sort=/usr/bin/sort 97 mkdir=/bin/mkdir 91 98 92 99 # récupération des passwd et autres à partir d'un fichier externe : 93 100 FIC_CONF=/etc/alternc/local.sh 94 if [ -r "$FIC_CONF" ] 95 then 96 . $FIC_CONF 97 else 98 echo "Le fichier de configuration ($FIC_CONF) est absent." 99 exit 1 100 fi 101 [ -x "$FIC_CONF" ] && . $FIC_CONF || { echo "Le fichier de configuration ($FIC_CONF) est absent ou n'est pas exécutable." ; exit 1 ; } 101 102 102 103 # On teste si les variables attendues sont renseignées : 103 for variable in MYSQL_DATABASE MYSQL_USER MYSQL_PASS ROOT_MAIL DEFAULT_MX DEFAULT_IP 104 do 104 for variable in MYSQL_DATABASE MYSQL_USER MYSQL_PASS ROOT_MAIL DEFAULT_MX DEFAULT_IP ; do 105 105 var="" 106 var=`set | $grep $variable | $grep -v variable` 107 var=`$echo $var | $cut -d"=" -f2` 108 if [ -z "$var" ] 109 then 110 $echo "la variable \$$variable n'est pas renseignée." 111 exit 1 112 fi 106 var=`set | $grep $variable | $grep -v variable` 107 var=`$echo $var | $cut -d= -f2` 108 [ -z "$var" ] && { $echo "la variable \$$variable n'est pas renseignée." ; exit 1 ; } 113 109 done 114 110 … … 141 137 function incrementer_serial 142 138 { 143 if [ -f "$1" ] 144 then 145 SERIAL=`$grep "serial" $1 | $grep -v "^serial" | $awk {'print $1'}` 146 DATE=`$echo $SERIAL | $cut -c1-8` 147 ORDRE=`$echo $SERIAL | $sed s/"$DATE"/""/g` 148 DATE_JOUR=`$date +%Y%m%d` 149 if [ $DATE = $DATE_JOUR ] 150 then 151 ORDRE=$ORDRE+1 152 else 153 ORDRE=1 154 DATE=$DATE_JOUR 155 fi 156 NEW_SERIAL=$DATE`$printf "%.2d" $ORDRE` 157 $cat $1 | $awk -v NEW_SERIAL=$NEW_SERIAL '{if ($3 =="serial") print " "NEW_SERIAL " ; serial"; else print $0}' > $1.tmp 158 $mv -f $1.tmp $1 159 fi 139 if [ -f "$1" ] ; then 140 SERIAL=`$grep "serial" $1 | $grep -v "^serial" | $awk {'print $1'}` 141 DATE=`$echo $SERIAL | $cut -c1-8` 142 ORDRE=`$echo $SERIAL | $sed s/"$DATE"/""/g` 143 DATE_JOUR=`$date +%Y%m%d` 144 if [ $DATE = $DATE_JOUR ] ; then 145 ORDRE=$ORDRE+1 146 else 147 ORDRE=1 148 DATE=$DATE_JOUR 149 fi 150 NEW_SERIAL=$DATE`$printf "%.2d" $ORDRE` 151 $cat $1 | $awk -v NEW_SERIAL=$NEW_SERIAL '{if ($3 =="serial") print " "NEW_SERIAL " ; serial"; else print $0}' > $1.tmp 152 $mv -f $1.tmp $1 153 fi 160 154 } 161 155 … … 169 163 function modifier_ip_sous_domaine 170 164 { 171 if [ -f $NAMED_MASTER/$1 ] 172 then 173 nb1=`$wc -l $NAMED_MASTER/$1 | $awk {'print $1'}` 174 if [ "$3" = "" ] 175 then 176 nb2=`$grep -n "^[ ]*IN[ ]*A[ ]*" $NAMED_MASTER/$1 | $cut -d":" -f1` 177 else 178 nb2=`$grep -n "^$3" $NAMED_MASTER/$1 | $cut -d":" -f1` 179 fi 180 if [ $nb2 -eq 0 ] 181 then 182 nb1=$nb1-1 183 nb2=1 184 else 185 nb2=$nb1-$nb2 186 nb1=$nb1-$nb2-1 187 fi 188 $head -n$nb1 $NAMED_MASTER/$1 > $NAMED_MASTER/$1.tmp 189 $cat $NAMED_MASTER/ip.template | $sed s/"@@SUB@@"/"$3"/ | $sed s/"@@IP@@"/"$2"/ >> $NAMED_MASTER/$1.tmp 190 $tail -n$nb2 $NAMED_MASTER/$1 >> $NAMED_MASTER/$1.tmp 191 $mv -f $NAMED_MASTER/$1.tmp $NAMED_MASTER/$1 192 fi 165 if [ -f $NAMED_MASTER/$1 ] ; then 166 nb1=`$wc -l $NAMED_MASTER/$1 | $awk {'print $1'}` 167 if [ "$3" = "" ] ; then 168 nb2=`$grep -n "^[ ]*IN[ ]*A[ ]*" $NAMED_MASTER/$1 | $cut -d":" -f1` 169 else 170 nb2=`$grep -n "^$3" $NAMED_MASTER/$1 | $cut -d":" -f1` 171 fi 172 173 if [ $nb2 -eq 0 ] ; then 174 nb1=$nb1-1 175 nb2=1 176 else 177 nb2=$nb1-$nb2 178 nb1=$nb1-$nb2-1 179 fi 180 181 $head -n$nb1 $NAMED_MASTER/$1 > $NAMED_MASTER/$1.tmp 182 $cat $NAMED_MASTER/ip.template | $sed s/"@@SUB@@"/"$3"/ | $sed s/"@@IP@@"/"$2"/ >> $NAMED_MASTER/$1.tmp 183 $tail -n$nb2 $NAMED_MASTER/$1 >> $NAMED_MASTER/$1.tmp 184 $mv -f $NAMED_MASTER/$1.tmp $NAMED_MASTER/$1 185 fi 193 186 } 194 187 … … 204 197 function creer_sous_domaine 205 198 { 206 DOM=$1207 TYP=$2208 VAL=$4209 SB=$3210 POINT="."211 if [ "$SB" = "" ] 212 then213 POINT=""214 modifier_ip_sous_domaine $DOM $DEFAULT_IP215 fi216 detruire_sous_domaine $DOM $SB 217 if [ "$TYP" = "$TYPE_LOCAL" ] 218 then219 # NOTE : ne pas virer le rm -f (le ln -sf est buggé)220 $rm -f ${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}221 $ln -s ${HTML_HOME}/${INITIALE_USER}/${USER}${VAL}${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}222 fi 223 if [ "$TYP" = "$TYPE_WEBMAIL" ] 224 then 225 # NOTE : ne pas virer le rm -f (le ln -sf est bugg?) 226 $rm -f ${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}227 $ln -s ${WEBMAIL_ROOT}${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}228 fi 229 if [ "$TYP" = "$TYPE_URL" ] 230 then231 232 mkdir -p ${HTTP_DNS}/redir/${INITIALE_DOM}/${SB}${POINT}${DOM}233 $echo "RewriteEngine on199 DOM=$1 200 TYP=$2 201 VAL=$4 202 SB=$3 203 POINT="." 204 205 if [ "$SB" = "" ] ; then 206 POINT="" 207 modifier_ip_sous_domaine $DOM $DEFAULT_IP 208 fi 209 210 detruire_sous_domaine $DOM $SB 211 212 if [ "$TYP" = "$TYPE_LOCAL" ] ; then 213 # NOTE : ne pas virer le rm -f (le ln -sf est buggé) 214 $rm -f ${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM} 215 $ln -s ${HTML_HOME}/${INITIALE_USER}/${USER}${VAL} ${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM} 216 fi 217 218 if [ "$TYP" = "$TYPE_WEBMAIL" ] ; then 219 # NOTE : ne pas virer le rm -f (le ln -sf est bugg?) 220 $rm -f ${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM} 221 $ln -s ${WEBMAIL_ROOT} ${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM} 222 fi 223 224 if [ "$TYP" = "$TYPE_URL" ] ; then 225 mkdir -p ${HTTP_DNS}/redir/${INITIALE_DOM}/${SB}${POINT}${DOM} 226 $echo "RewriteEngine on 234 227 RewriteRule (.*) ${VAL}/\$1 [R,L]" > ${HTTP_DNS}/redir/${INITIALE_DOM}/${SB}${POINT}${DOM}/.htaccess 235 # NOTE : ne pas virer le rm -f (le ln -sf est buggé)236 $rm -f ${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}237 $ln -s ${HTTP_DNS}/redir/${INITIALE_DOM}/${SB}${POINT}${DOM} ${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}238 fi239 if [ "$TYP" = "$TYPE_IP" ] 240 then241 $rm -f ${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM}242 $rm -fr ${HTTP_DNS}/redir/${INITIALE_DOM}/${SB}${POINT}${DOM}243 modifier_ip_sous_domaine $DOM $VAL $SB244 fi228 # NOTE : ne pas virer le rm -f (le ln -sf est buggé) 229 $rm -f ${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM} 230 $ln -s ${HTTP_DNS}/redir/${INITIALE_DOM}/${SB}${POINT}${DOM} ${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM} 231 fi 232 233 if [ "$TYP" = "$TYPE_IP" ] ; then 234 $rm -f ${HTTP_DNS}/${INITIALE_DOM}/${SB}${POINT}${DOM} 235 $rm -fr ${HTTP_DNS}/redir/${INITIALE_DOM}/${SB}${POINT}${DOM} 236 modifier_ip_sous_domaine $DOM $VAL $SB 237 fi 245 238 } 246 239 … … 251 244 function detruire_sous_domaine 252 245 { 253 DOM=$1254 SB=$2255 if ! [ "$SB" = "" ] 256 then257 if [ -f $NAMED_MASTER/$DOM.hosts ]258 then259 $grep -v "^$SB" $NAMED_MASTER/$DOM > $NAMED_MASTER/$DOM.tmp260 $mv -f $NAMED_MASTER/$DOM.tmp $NAMED_MASTER/$DOM261 fi 262 fi 263 $rm -f ${HTTP_DNS}/${INITIALE_DOM}/${SB}.${DOM}264 $rm -fr ${HTTP_DNS}/redir/${INITIALE_DOM}/${SB}.${DOM}265 incrementer_serial $NAMED_MASTER/$DOM246 DOM=$1 247 SB=$2 248 249 if ! [ "$SB" = "" ] ; then 250 if [ -f $NAMED_MASTER/$DOM.hosts ] ; then 251 $grep -v "^$SB" $NAMED_MASTER/$DOM > $NAMED_MASTER/$DOM.tmp 252 $mv -f $NAMED_MASTER/$DOM.tmp $NAMED_MASTER/$DOM 253 fi 254 fi 255 256 $rm -f ${HTTP_DNS}/${INITIALE_DOM}/${SB}.${DOM} 257 $rm -fr ${HTTP_DNS}/redir/${INITIALE_DOM}/${SB}.${DOM} 258 incrementer_serial $NAMED_MASTER/$DOM 266 259 } 267 260 … … 275 268 function creer_fic_named 276 269 { 277 if ! [ -f $NAMED_MASTER/$1 ] 278 then 279 SERIAL=`$date +%Y%m%d`00 280 $cat $NAMED_MASTER/$NAMED_TPL | $sed s/"@@DOMAINE@@"/${1}/g | $sed s/"@@SERIAL@@"/$SERIAL/g > $NAMED_MASTER/${1} 281 $cp -f $NAMED_ETC/$NAMED_CONF $NAMED_ETC/$NAMED_CONF.prec 282 $cat $NAMED_ETC/$NAMED_TPL | $sed s/"@@DOMAINE@@"/${1}/g >> $NAMED_ETC/$NAMED_CONF 283 $cp -f $BIND2_ROOT/$SECONDARY_LIST $BIND2_ROOT/$SECONDARY_LIST.prec 284 $cat $BIND2_ROOT/$NAMED_TPL | $sed s/"@@DOMAINE@@"/${1}/g >> $BIND2_ROOT/$SECONDARY_LIST 285 RESTART_NAMED="true" 286 fi 270 if ! [ -f $NAMED_MASTER/$1 ] ; then 271 SERIAL=`$date +%Y%m%d`00 272 $cat $NAMED_MASTER/$NAMED_TPL | $sed s/"@@DOMAINE@@"/${1}/g | $sed s/"@@SERIAL@@"/$SERIAL/g > $NAMED_MASTER/${1} 273 $cp -f $NAMED_ETC/$NAMED_CONF $NAMED_ETC/$NAMED_CONF.prec 274 $cat $NAMED_ETC/$NAMED_TPL | $sed s/"@@DOMAINE@@"/${1}/g >> $NAMED_ETC/$NAMED_CONF 275 $cp -f $BIND2_ROOT/$SECONDARY_LIST $BIND2_ROOT/$SECONDARY_LIST.prec 276 $cat $BIND2_ROOT/$NAMED_TPL | $sed s/"@@DOMAINE@@"/${1}/g >> $BIND2_ROOT/$SECONDARY_LIST 277 RESTART_NAMED="true" 278 fi 287 279 } 288 280 … … 295 287 function detruire_fic_named 296 288 { 297 if [ -f $NAMED_MASTER/$1 ] 298 then 299 $rm -f $NAMED_MASTER/$1 300 $cat $NAMED_ETC/$NAMED_CONF | $grep -v "\"$1\"" > $NAMED_ETC/$NAMED_CONF.tmp 301 $cp -f $NAMED_ETC/$NAMED_CONF $NAMED_ETC/$NAMED_CONF.prec 302 $mv -f $NAMED_ETC/$NAMED_CONF.tmp $NAMED_ETC/$NAMED_CONF 303 $cat $BIND2_ROOT/$SECONDARY_LIST | $grep -v "\"$1\"" > $BIND2_ROOT/$SECONDARY_LIST.tmp 304 $cp -f $BIND2_ROOT/$SECONDARY_LIST $BIND2_ROOT/$SECONDARY_LIST.prec 305 $mv -f $BIND2_ROOT/$SECONDARY_LIST.tmp $BIND2_ROOT/$SECONDARY_LIST 306 fi 289 if [ -f $NAMED_MASTER/$1 ] ; then 290 $rm -f $NAMED_MASTER/$1 291 $cat $NAMED_ETC/$NAMED_CONF | $grep -v "\"$1\"" > $NAMED_ETC/$NAMED_CONF.tmp 292 $cp -f $NAMED_ETC/$NAMED_CONF $NAMED_ETC/$NAMED_CONF.prec 293 $mv -f $NAMED_ETC/$NAMED_CONF.tmp $NAMED_ETC/$NAMED_CONF 294 $cat $BIND2_ROOT/$SECONDARY_LIST | $grep -v "\"$1\"" > $BIND2_ROOT/$SECONDARY_LIST.tmp 295 $cp -f $BIND2_ROOT/$SECONDARY_LIST $BIND2_ROOT/$SECONDARY_LIST.prec 296 $mv -f $BIND2_ROOT/$SECONDARY_LIST.tmp $BIND2_ROOT/$SECONDARY_LIST 297 fi 307 298 } 308 299 … … 318 309 nb1=`$grep -n "MX" $NAMED_MASTER/${1} | $cut -d":" -f1` 319 310 nb1=$nb1-1 311 320 312 # aller chercher tout ce qui est avant le MX 321 313 $head -n$nb1 $NAMED_MASTER/${1} > $NAMED_MASTER/${1}.tmp 314 322 315 # regénérer la ligne MX correct du template 323 316 $cat $NAMED_MASTER/$NAMED_MX_TPL | $sed s/"@@MX@@"\.\*/${2}\./g >> $NAMED_MASTER/${1}.tmp 317 324 318 # le nombre de lignes total du fichier 325 319 nb2=`$wc -l $NAMED_MASTER/${1} | $awk {'print $1'}` 320 326 321 # le nombre de lignes *après* le MX 327 322 nb2=$nb2-$nb1-1 323 328 324 # on rajoute la fin du fichier 329 325 $tail -n$nb2 $NAMED_MASTER/${1} >> $NAMED_MASTER/${1}.tmp 330 326 $mv -f $NAMED_MASTER/${1}.tmp $NAMED_MASTER/${1} 327 331 328 incrementer_serial $NAMED_MASTER/${1} 332 329 RESTART_NAMED="true" … … 341 338 # CALL WITH "do_domaines.sh --secondary" 342 339 # It rebuilds the secondary.list file. 343 if [ "$1" = "--secondary" ] 344 then 345 > $FIC_LOCK 346 $rm -f $FIC_TMP 347 echo "CALL --secondary, rebuilding secondary.list file." >> $FIC_LOG 348 SQL_RES=`$MYSQL_SELECT "SELECT b.domaine INTO OUTFILE '$FIC_TMP' FROM domaines b WHERE b.gesdns=1;" 2>&1` 349 RES=$? 350 if [ "$RES" != 0 ] 351 then 340 if [ "$1" = "--secondary" ] ; then 341 > $FIC_LOCK 342 $rm -f $FIC_TMP 343 echo "CALL --secondary, rebuilding secondary.list file." >> $FIC_LOG 344 SQL_RES=`$MYSQL_SELECT "SELECT b.domaine INTO OUTFILE '$FIC_TMP' FROM domaines b WHERE b.gesdns=1;" 2>&1` 345 RES=$? 346 347 if [ "$RES" != 0 ] ; then 348 $echo `$date` >> $FIC_LOG 349 $echo $SQL_RES >> $FIC_LOG 350 $echo "`$date` : $DOM_ROOT/do_domaines.sh : erreur à l'exécution de la requête de sélection des domaines à traiter : $SQL_RES" | $mail -s "erreur requête dans do_domaines.sh" $DEST_MAILS_ERREUR 351 $rm -f $FIC_LOCK >> $FIC_LOG 2>&1 352 $rm -f $FIC_TMP >> $FIC_LOG 2>&1 353 exit 1 354 else 355 # On traite les domaines 356 $mv -f $BIND2_ROOT/$SECONDARY_LIST $BIND2_ROOT/$SECONDARY_LIST.prec 357 for i in `$cat $FIC_TMP` ; do 358 $cat $BIND2_ROOT/$NAMED_TPL | $sed s/"@@DOMAINE@@"/${i}/g >> $BIND2_ROOT/$SECONDARY_LIST 359 done 360 fi 361 362 $rm -f $FIC_LOCK >> $FIC_LOG 2>&1 363 $rm -f $FIC_TMP >> $FIC_LOG 2>&1 364 echo "CALL --secondary END" >> $FIC_LOG 365 exit 0 366 fi 367 368 369 # ------------------------------------------------------------ 370 # CALL with NO argument : process pending domains / subdomains 371 # 372 # si le cron précédent n'est pas 373 # terminé, on attend le suivant. 374 if [ -f $FIC_TMP ] ; then 375 echo `$date` >> $FIC_LOG 376 echo "ERREUR : cron précédent inachevé." >> $FIC_LOG 377 $echo "`$date` : $DOM_ROOT/do_domaines.sh : cron précédent inachevé." | $mail -s "erreur do_domaines.sh" $DEST_MAILS_ERREUR 378 exit 1 379 fi 380 381 > $FIC_LOCK 382 383 SQL_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` 384 RES=$? 385 386 if [ "$RES" != 0 ] ; then 352 387 $echo `$date` >> $FIC_LOG 353 388 $echo $SQL_RES >> $FIC_LOG … … 355 390 $rm -f $FIC_LOCK >> $FIC_LOG 2>&1 356 391 $rm -f $FIC_TMP >> $FIC_LOG 2>&1 357 exit 1358 else359 # On traite les domaines360 $mv -f $BIND2_ROOT/$SECONDARY_LIST $BIND2_ROOT/$SECONDARY_LIST.prec361 for i in `$cat $FIC_TMP`362 do363 $cat $BIND2_ROOT/$NAMED_TPL | $sed s/"@@DOMAINE@@"/${i}/g >> $BIND2_ROOT/$SECONDARY_LIST364 done365 fi366 $rm -f $FIC_LOCK >> $FIC_LOG 2>&1367 $rm -f $FIC_TMP >> $FIC_LOG 2>&1368 echo "CALL --secondary END" >> $FIC_LOG369 exit 0370 fi371 372 373 # ------------------------------------------------------------374 # CALL with NO argument : process pending domains / subdomains375 #376 # si le cron précédent n'est pas377 # terminé, on attend le suivant.378 if [ -f $FIC_TMP ]379 then380 echo `$date` >> $FIC_LOG381 echo "ERREUR : cron précédent inachevé." >> $FIC_LOG382 $echo "`$date` : $DOM_ROOT/do_domaines.sh : cron précédent inachevé." | $mail -s "erreur do_domaines.sh" $DEST_MAILS_ERREUR383 exit 1384 fi385 386 > $FIC_LOCK387 388 SQL_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`389 RES=$?390 391 if [ "$RES" != 0 ]392 then393 $echo `$date` >> $FIC_LOG394 $echo $SQL_RES >> $FIC_LOG395 $echo "`$date` : $DOM_ROOT/do_domaines.sh : erreur à l'exécution de la requête de sélection des domaines à traiter : $SQL_RES" | $mail -s "erreur requête dans do_domaines.sh" $DEST_MAILS_ERREUR396 $rm -f $FIC_LOCK >> $FIC_LOG 2>&1397 $rm -f $FIC_TMP >> $FIC_LOG 2>&1398 $rm -f $FIC_TMP_SUB >> $FIC_LOG 2>&1399 exit 1400 else401 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`402 RES=$?403 if [ "$RES" != 0 ]404 then405 $echo `$date` >> $FIC_LOG406 $echo $SQL_RES >> $FIC_LOG407 $echo "`$date` : $DOM_ROOT/do_domaines.sh : erreur à l'exécution de la requête de sélection des sous-domaines à traiter : $SQL_RES" | $mail -s "erreur requête dans do_domaines.sh" $DEST_MAILS_ERREUR408 $rm -f $FIC_LOCK >> $FIC_LOG 2>&1409 $rm -f $FIC_TMP >> $FIC_LOG 2>&1410 392 $rm -f $FIC_TMP_SUB >> $FIC_LOG 2>&1 411 393 exit 1 412 else 413 $rm -f $FIC_LOCK 414 $MYSQL_DELETE "DELETE FROM domaines_standby;" 415 $MYSQL_DELETE "DELETE FROM sub_domaines_standby;" 416 RESTART_NAMED="false" 417 # On traite les domaines 418 $cat $FIC_TMP | $sed s/" "/"@"/g > $FIC_TMP.tmp 419 $mv -f $FIC_TMP.tmp $FIC_TMP 420 if [ `$cat $FIC_TMP | $wc -l | $awk {'print $1'}` -gt 0 ] 421 then 422 $echo `$date` >> $FIC_LOG 423 $cat $FIC_TMP >> $FIC_LOG 424 fi 425 for i in `$cat $FIC_TMP` 426 do 427 USER=`$echo $i | $cut -d"@" -f1` 428 DOMAINE=`$echo $i | $cut -d"@" -f2` 429 MX=`$echo $i | $cut -d"@" -f3` 430 GESDNS=`$echo $i | $cut -d"@" -f4` 431 GESMX=`$echo $i | $cut -d"@" -f5` 432 ACTION=`$echo $i | $cut -d"@" -f6` 433 PASS=`$echo $i | $cut -d"@" -f7` 434 INITIALE_DOM=`$echo $DOMAINE | $awk '{z = split($0, intiale, "."); print substr(intiale[z - 1], 1, 1)}'` 435 INITIALE_USER=`$echo $USER | $awk {'print substr($1, 1, 1)'}` 436 if [ "$ACTION" = "$ACTION_INSERT" ] 437 then 438 # création des liens symboliques par défaut : 439 # NOTE : ne pas virer le rm -f (le ln -sf est buggé) 440 $rm -f ${HTTP_DNS}/${INITIALE_DOM}/$DOMAINE 441 $ln -s ${HTML_HOME}/${INITIALE_USER}/$USER ${HTTP_DNS}/${INITIALE_DOM}/$DOMAINE 442 $rm -f ${HTTP_DNS}/${INITIALE_DOM}/www.$DOMAINE 443 $ln -s ${HTML_HOME}/${INITIALE_USER}/$USER ${HTTP_DNS}/${INITIALE_DOM}/www.$DOMAINE 444 $rm -f ${HTTP_DNS}/${INITIALE_DOM}/mail.$DOMAINE 445 $ln -s ${WEBMAIL_ROOT} ${HTTP_DNS}/${INITIALE_DOM}/mail.$DOMAINE 446 if [ "$GESDNS" = "$OUI" ] 447 then 448 creer_fic_named $DOMAINE 449 fi 450 fi 451 if [ "$ACTION" = "$ACTION_UPDATE" ] 452 then 453 if [ "$GESDNS" = "$OUI" ] 454 then 455 creer_fic_named $DOMAINE 456 modifier_mx_domaine $DOMAINE $MX 457 else 458 detruire_fic_named $DOMAINE 459 fi 460 fi 461 if [ "$ACTION" = "$ACTION_DELETE" ] 462 then 463 detruire_fic_named $DOMAINE 464 # suppression des liens symboliques : 465 $rm -f ${HTTP_DNS}/${INITIALE_DOM}/*.$DOMAINE 466 $rm -f ${HTTP_DNS}/${INITIALE_DOM}/$DOMAINE 467 $rm -fr ${HTTP_DNS}/redir/${INITIALE_DOM}/*.$DOMAINE 468 $rm -fr ${HTTP_DNS}/redir/${INITIALE_DOM}/$DOMAINE 469 fi 470 RESTART_NAMED="true" 471 done 472 # on traite les sous-domaines 473 $cat $FIC_TMP_SUB | $sed s/" "/"@"/g > $FIC_TMP_SUB.tmp 474 $mv -f $FIC_TMP_SUB.tmp $FIC_TMP_SUB 475 476 if [ `$cat $FIC_TMP_SUB | $wc -l | $awk {'print $1'}` -gt 0 ] 477 then 478 $echo `$date` >> $FIC_LOG_SUB 479 $cat $FIC_TMP_SUB >> $FIC_LOG_SUB 480 fi 481 for i in `$cat $FIC_TMP_SUB` 482 do 483 USER=`$echo $i | $cut -d"@" -f1` 484 DOMAINE=`$echo $i | $cut -d"@" -f2` 485 SUB=`$echo $i | $cut -d"@" -f3` 486 VALEUR=`$echo $i | $cut -d"@" -f4` 487 TYPE=`$echo $i | $cut -d"@" -f5` 488 ACTION=`$echo $i | $cut -d"@" -f6` 489 PASS=`$echo $i | $cut -d"@" -f7` 490 INITIALE_DOM=`$echo $DOMAINE | $awk '{z = split($0, intiale, "."); print substr(intiale[z - 1], 1, 1)}'` 491 INITIALE_USER=`$echo $USER | $awk {'print substr($1, 1, 1)'}` 492 if [ "$ACTION" = "$ACTION_UPDATE" -o "$ACTION" = "$ACTION_INSERT" ] 493 then 494 creer_sous_domaine "$DOMAINE" "$TYPE" "$SUB" "$VALEUR" 495 496 fi 497 if [ "$ACTION" = "$ACTION_DELETE" ] 498 then 499 detruire_sous_domaine $DOMAINE $SUB 500 fi 501 RESTART_NAMED="true" 502 done 503 if [ "$RESTART_NAMED" = "true" ] 504 then 505 $RELOAD_NAMED reload 506 fi 507 $rm -f $FIC_TMP_SUB >> $FIC_LOG 2>&1 508 $rm -f $FIC_TMP >> $FIC_LOG 2>&1 509 fi 394 else 395 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` 396 RES=$? 397 if [ "$RES" != 0 ] ; then 398 $echo `$date` >> $FIC_LOG 399 $echo $SQL_RES >> $FIC_LOG 400 $echo "`$date` : $DOM_ROOT/do_domaines.sh : erreur à l'exécution de la requête de sélection des sous-domaines à traiter : $SQL_RES" | $mail -s "erreur requête dans do_domaines.sh" $DEST_MAILS_ERREUR 401 $rm -f $FIC_LOCK >> $FIC_LOG 2>&1 402 $rm -f $FIC_TMP >> $FIC_LOG 2>&1 403 $rm -f $FIC_TMP_SUB >> $FIC_LOG 2>&1 404 exit 1 405 else 406 $rm -f $FIC_LOCK 407 $MYSQL_DELETE "DELETE FROM domaines_standby;" 408 $MYSQL_DELETE "DELETE FROM sub_domaines_standby;" 409 RESTART_NAMED="false" 410 > $FIC_TMP_OVERRIDE_PHP 411 412 # On traite les domaines 413 $cat $FIC_TMP | $sed s/" "/"@"/g > $FIC_TMP.tmp 414 $mv -f $FIC_TMP.tmp $FIC_TMP 415 416 if [ `$cat $FIC_TMP | $wc -l | $awk {'print $1'}` -gt 0 ] ; then 417 $echo `$date` >> $FIC_LOG 418 $cat $FIC_TMP >> $FIC_LOG 419 fi 420 421 for i in `$cat $FIC_TMP` ; do 422 USER=`$echo $i | $cut -d"@" -f1` 423 DOMAINE=`$echo $i | $cut -d"@" -f2` 424 MX=`$echo $i | $cut -d"@" -f3` 425 GESDNS=`$echo $i | $cut -d"@" -f4` 426 GESMX=`$echo $i | $cut -d"@" -f5` 427 ACTION=`$echo $i | $cut -d"@" -f6` 428 PASS=`$echo $i | $cut -d"@" -f7` 429 INITIALE_DOM=`$echo $DOMAINE | $awk '{z = split($0, intiale, "."); print substr(intiale[z - 1], 1, 1)}'` 430 INITIALE_USER=`$echo $USER | $awk {'print substr($1, 1, 1)'}` 431 432 echo "${DOMAINE}@${USER}" >> $FIC_TMP_OVERRIDE_PHP 433 434 if [ "$ACTION" = "$ACTION_INSERT" ] ; then 435 # création des liens symboliques par défaut : 436 # NOTE : ne pas virer le rm -f (le ln -sf est buggé) 437 $rm -f ${HTTP_DNS}/${INITIALE_DOM}/$DOMAINE 438 $ln -s ${HTML_HOME}/${INITIALE_USER}/$USER ${HTTP_DNS}/${INITIALE_DOM}/$DOMAINE 439 $rm -f ${HTTP_DNS}/${INITIALE_DOM}/www.$DOMAINE 440 $ln -s ${HTML_HOME}/${INITIALE_USER}/$USER ${HTTP_DNS}/${INITIALE_DOM}/www.$DOMAINE 441 $rm -f ${HTTP_DNS}/${INITIALE_DOM}/mail.$DOMAINE 442 $ln -s ${WEBMAIL_ROOT} ${HTTP_DNS}/${INITIALE_DOM}/mail.$DOMAINE 443 444 if [ "$GESDNS" = "$OUI" ] ; then 445 creer_fic_named $DOMAINE 446 fi 447 fi 448 449 if [ "$ACTION" = "$ACTION_UPDATE" ] ; then 450 if [ "$GESDNS" = "$OUI" ] ; then 451 creer_fic_named $DOMAINE 452 modifier_mx_domaine $DOMAINE $MX 453 else 454 detruire_fic_named $DOMAINE 455 fi 456 fi 457 458 if [ "$ACTION" = "$ACTION_DELETE" ] ; then 459 detruire_fic_named $DOMAINE 460 # suppression des liens symboliques : 461 $rm -f ${HTTP_DNS}/${INITIALE_DOM}/*.$DOMAINE 462 $rm -f ${HTTP_DNS}/${INITIALE_DOM}/$DOMAINE 463 $rm -fr ${HTTP_DNS}/redir/${INITIALE_DOM}/*.$DOMAINE 464 $rm -fr ${HTTP_DNS}/redir/${INITIALE_DOM}/$DOMAINE 465 fi 466 467 RESTART_NAMED="true" 468 done 469 470 # on traite les sous-domaines 471 $cat $FIC_TMP_SUB | $sed s/" "/"@"/g > $FIC_TMP_SUB.tmp 472 $mv -f $FIC_TMP_SUB.tmp $FIC_TMP_SUB 473 474 if [ `$cat $FIC_TMP_SUB | $wc -l | $awk {'print $1'}` -gt 0 ] ; then 475 $echo `$date` >> $FIC_LOG_SUB 476 $cat $FIC_TMP_SUB >> $FIC_LOG_SUB 477 fi 478 479 for i in `$cat $FIC_TMP_SUB` ; do 480 USER=`$echo $i | $cut -d"@" -f1` 481 DOMAINE=`$echo $i | $cut -d"@" -f2` 482 SUB=`$echo $i | $cut -d"@" -f3` 483 VALEUR=`$echo $i | $cut -d"@" -f4` 484 TYPE=`$echo $i | $cut -d"@" -f5` 485 ACTION=`$echo $i | $cut -d"@" -f6` 486 PASS=`$echo $i | $cut -d"@" -f7` 487 INITIALE_DOM=`$echo $DOMAINE | $awk '{z = split($0, intiale, "."); print substr(intiale[z - 1], 1, 1)}'` 488 INITIALE_USER=`$echo $USER | $awk {'print substr($1, 1, 1)'}` 489 490 echo "${DOMAINE}@${USER}" >> $FIC_TMP_OVERRIDE_PHP 491 492 if [ "$ACTION" = "$ACTION_UPDATE" -o "$ACTION" = "$ACTION_INSERT" ] ; then 493 creer_sous_domaine "$DOMAINE" "$TYPE" "$SUB" "$VALEUR" 494 fi 495 496 if [ "$ACTION" = "$ACTION_DELETE" ] ; then 497 detruire_sous_domaine $DOMAINE $SUB 498 fi 499 500 RESTART_NAMED="true" 501 done 502 503 # On crée ou supprime les fichiers /etc/apache/override_php/... pour les domaines modifiés 504 # C'est un patch pour éviter que les users ne puissent utiliser opendir() 505 # pour voir/modifier les autres comptes que le leur. 506 # Cette fonction sera mieux réécrite plus tard. 507 for i in `$cat $FIC_TMP_OVERRIDE_PHP | $sort -u` ; do 508 domain=`$echo $i | $cut -d"@" -f1` 509 510 for j in `$egrep ".*\.$domain|/$domain" /etc/apache/override_php.conf | $sed s/"^Include "/""/` 511 do 512 $rm -f $j 513 done 514 515 $egrep -v ".*\.$domain|/$domain" /etc/apache/override_php.conf > /tmp/override_php.conf 516 mv -f /tmp/override_php.conf /etc/apache/override_php.conf 517 518 for j in `$find /var/alternc/dns -type l \( -name "*.$domain" -o -name "$domain" \) -ls | $grep -v /var/alternc/dns/redir | $grep -v /var/alternc/bureau/admin/webmail | $awk {'print $11'}` 519 do 520 domain2=`basename $j` 521 account=`/usr/bin/get_account_by_domain $domain2 | $cut -d\ -f1` 522 initial_domain=`echo $domain2 | $awk {'z=split($NF, a, ".") ; print substr(a[z-1], 1, 1)'}` 523 initial_account=`echo $account | $cut -c1` 524 path1=/var/alternc/dns/$initial_domain/$domain2 525 path2=/var/alternc/html/$initial_account/$account 526 527 echo "Include /etc/apache/override_php/$initial_domain/$domain2" >> /etc/apache/override_php.conf 528 529 $mkdir -p /etc/apache/override_php/$initial_domain 530 531 $cat - << ! > /etc/apache/override_php/$initial_domain/$domain2 532 <Directory ${path1}> 533 php_admin_value open_basedir ${path2}/ 534 </Directory> 535 ! 536 done 537 538 for j in `$find /var/alternc/dns/redir -type d \( -name "*.$domain" -o -name "$domain" \)` 539 do 540 domain2=`basename $j` 541 [ `echo $domain2 | $awk {'print length($0)'}` = 1 ] && continue 542 account=`/usr/bin/get_account_by_domain $domain2 | $cut -d\ -f1` 543 initial_domain=`echo $domain2 | $awk {'z=split($NF, a, ".") ; print substr(a[z-1], 1, 1)'}` 544 initial_account=`echo $account | $cut -c1` 545 path1=/var/alternc/dns/redir/$initial_domain/$domain2 546 path2=/var/alternc/html/$initial_account/$account 547 548 echo "Include /etc/apache/override_php/$initial_domain/$domain2" >> /etc/apache/override_php.conf 549 550 $mkdir -p /etc/apache/override_php/$initial_domain 551 $cat - << ! > /etc/apache/override_php/$initial_domain/$domain2 552 <Directory ${path1}> 553 php_admin_value open_basedir ${path2}/ 554 </Directory> 555 ! 556 done 557 done 558 559 560 # redémarrage apache et bind si nécessaire 561 if [ "$RESTART_NAMED" = "true" ] ; then 562 $RELOAD_NAMED reload 563 # ne pas faire de killall -1 apache, car tous les streamings et downloads en cours seraient tués. Donc un reload : 564 $RELOAD_APACHE reload > /dev/null 2>&1 565 fi 566 567 $rm -f $FIC_TMP_SUB >> $FIC_LOG 2>&1 568 $rm -f $FIC_TMP >> $FIC_LOG 2>&1 569 $rm -f $FIC_TMP_OVERRIDE_PHP >> $FIC_LOG 2>&1 570 fi 510 571 fi 511 572 512 573 574
Note: See TracChangeset
for help on using the changeset viewer.
