diff --git a/.gitattributes b/.gitattributes index 838b895d..e3fc804e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -335,6 +335,7 @@ src/Makefile -text src/basedir_prot.sh -text src/du.pl -text src/fixperms.sh -text +src/functions.sh -text src/mail_add -text src/mail_del -text src/mem_add -text diff --git a/src/basedir_prot.sh b/src/basedir_prot.sh index d262ed44..b969380e 100755 --- a/src/basedir_prot.sh +++ b/src/basedir_prot.sh @@ -16,66 +16,13 @@ override_f=${override_d}/override_php.conf extra_paths="/var/alternc/dns/redir:/usr/share/php/:/var/alternc/tmp/:/tmp/" . /etc/alternc/local.sh +. /usr/lib/alternc/functions.sh + if [ -z "$MYSQL_HOST" ] then MYSQL_HOST="localhost" fi -# imprime le nom d'usager associé au domaine -get_account_by_domain() { - # les admintools ne sont peut-être pas là - if [ -x "/usr/bin/get_account_by_domain" ] - then - # only first field, only first line - /usr/bin/get_account_by_domain "$1" | cut -d\ -f1 | cut -d' -' -f 1 - else - # implantons localement ce que nous avons besoin, puisque admintools - # n'est pas là - mysql -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASS -D$MYSQL_DATABASE -B -N -e \ - 'SELECT a.login FROM membres a, sub_domaines b WHERE a.uid = b.compte AND \ - CONCAT(IF(sub="", "", CONCAT(sub, ".")), domaine) = "'"$1"'" LIMIT 1;' - fi -} - -# add the standard input to a given file, only if not already present -append_no_dupe() { - realfile="$1" - tmpfile=`mktemp` - trap "rm -f $tmpfile; exit 1" 1 2 15 - cat > $tmpfile - if [ -r "$realfile" ] && - (diff -q "$tmpfile" "$realfile" > /dev/null || \ - diff -u "$tmpfile" "$realfile" | grep '^ ' | sed 's/^ //' | diff -q - "$tmpfile" > /dev/null) - then - ret=0 - else - ret=1 - cat "$tmpfile" >> "$realfile" - fi - rm -f "$tmpfile" - return "$ret" -} - -add_dom_entry() { - # protect ourselves from interrupts - trap "rm -f ${override_f}.new; exit 1" 1 2 15 - # ajouter une entrée, seulement s'il n'y en pas déjà, pour ce domaine - (echo "$1"; [ -r $override_f ] && cat $override_f) | \ - sort -u > ${override_f}.new && \ - cp ${override_f}.new ${override_f} && \ - rm ${override_f}.new -} - -# la première lettre de l'avant-dernière partie du domaine (e.g. -# www.alternc.org -> a) -# -# argument: le domaine -# imprime: la lettre -init_dom_letter() { - echo "$1" | awk '{z=split($NF, a, ".") ; print substr(a[z-1], 1, 1)}' -} - echo -n "adding open_base_dir protection for:" # boucle sur tous les domaines hébergés, ou sur les arguments de la # ligne de commande diff --git a/src/functions.sh b/src/functions.sh new file mode 100644 index 00000000..5c6f9cdf --- /dev/null +++ b/src/functions.sh @@ -0,0 +1,58 @@ +# some miscellaneous shell functions + +# imprime le nom d'usager associé au domaine +get_account_by_domain() { + # les admintools ne sont peut-être pas là + if [ -x "/usr/bin/get_account_by_domain" ] + then + # only first field, only first line + /usr/bin/get_account_by_domain "$1" | cut -d\ -f1 | cut -d' +' -f 1 + else + # implantons localement ce que nous avons besoin, puisque admintools + # n'est pas là + mysql -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASS -D$MYSQL_DATABASE -B -N -e \ + 'SELECT a.login FROM membres a, sub_domaines b WHERE a.uid = b.compte AND \ + CONCAT(IF(sub="", "", CONCAT(sub, ".")), domaine) = "'"$1"'" LIMIT 1;' + fi +} + +# add the standard input to a given file, only if not already present +append_no_dupe() { + realfile="$1" + tmpfile=`mktemp` + trap "rm -f $tmpfile; exit 1" 1 2 15 + cat > $tmpfile + if [ -r "$realfile" ] && + (diff -q "$tmpfile" "$realfile" > /dev/null || \ + diff -u "$tmpfile" "$realfile" | grep '^ ' | sed 's/^ //' | diff -q - "$tmpfile" > /dev/null) + then + ret=0 + else + ret=1 + cat "$tmpfile" >> "$realfile" + fi + rm -f "$tmpfile" + return "$ret" +} + +add_dom_entry() { + # protect ourselves from interrupts + trap "rm -f ${override_f}.new; exit 1" 1 2 15 + # ajouter une entrée, seulement s'il n'y en pas déjà, pour ce domaine + (echo "$1"; [ -r $override_f ] && cat $override_f) | \ + sort -u > ${override_f}.new && \ + cp ${override_f}.new ${override_f} && \ + rm ${override_f}.new +} + +# la première lettre de l'avant-dernière partie du domaine (e.g. +# www.alternc.org -> a) +# +# argument: le domaine +# imprime: la lettre +init_dom_letter() { + echo "$1" | awk '{z=split($NF, a, ".") ; print substr(a[z-1], 1, 1)}' +} + +