diff --git a/ulib/base b/ulib/base index 88abda1..22a031f 100644 --- a/ulib/base +++ b/ulib/base @@ -3,7 +3,11 @@ ##@cooked nocomments # Emplacement du script courant -if [ "$0" == "-bash" ]; then +if [ -n "$UTOOLS_HAVE_SCRIPTVARS" ]; then + # ne pas mettre à jour script, scriptname, scriptdir. Ils ont déjà été + # calculés + : +elif [ "$0" == "-bash" ]; then scriptname= scriptdir= script= @@ -3924,29 +3928,6 @@ if [ -n "$UTOOLS_CHROOT" ]; then [ -n "$UTOOLS_UNAME_MACHINE" ] && eval "UNAME_MACHINE=$UTOOLS_UNAME_MACHINE" fi -################################################################################ -## Support de CGI - -# Si on est lancé comme script cgi par un lien, il faut résoudre l'emplacement -# réel du script. Si on a besoin des fichiers du répertoire CGI, il est toujours -# possible d'utiliser cgiscriptdir -if [ -n "$GATEWAY_INTERFACE" -a -L "$script" ]; then - # garder une copie de la valeur originale de scriptdir - cgiscriptdir="$scriptdir" - if [ "$UNAME_SYSTEM" == Linux ]; then - script="$(readlink -f -- "$script")" - else - # Sur un système autre que linux, readlink -f n'existe sans doute pas. - # Essayer de l'émuler: si le lien est relatif, l'exprimer par rapport à - # $scriptdir. Ne prendre qu'un seul niveau de lien symbolique. - script="$(readlink -- "$script")" - [ "${script#/}" != "$script" ] || script="$scriptdir/$script" - fi - scriptname="$(basename -- "$script")" - scriptdir="$(dirname -- "$script")" - scriptdir="$(cd "$scriptdir"; pwd)" -fi - ################################################################################ ## support de ulib dans le cas où cette librairie n'est pas encore chargée diff --git a/ulib/support/cgiscript b/ulib/support/cgiscript new file mode 100644 index 0000000..fadf063 --- /dev/null +++ b/ulib/support/cgiscript @@ -0,0 +1,30 @@ +##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +## Support des scripts CGI attaqués par un lien symbolique +##@cooked nocomments +# Ce fichier doit être inclu avec uinc +# Si le script qui inclu ce fichier est lancé comme script CGI par un lien, il +# doit pouvoir accéder à ses fichiers de support à partir de son répertoire +# d'origine. Ce fichier permet de s'assurer que scriptdir a la bonne valeur. +# cgiscriptdir contient la valeur d'origine, c'est à dire le répertoire cgi à +# partir duquel le script est lancé. +if [ -L "$0" ]; then + cgiscriptdir="$(dirname "$0")" + if [ "$(uname -s)" == Linux ]; then + script="$(readlink -f -- "$0")" + scriptdir="$(dirname -- "$script")" + scriptname="$(basename -- "$script")" + else + # Sur un système autre que linux, readlink -f n'existe sans doute pas. + # Essayer de l'émuler: si le lien est relatif, l'exprimer par rapport à + # $scriptdir. Ne prendre qu'un seul niveau de lien symbolique. + script="$(readlink -- "$0")" + [ "${script#/}" != "$script" ] || script="$cgiscriptdir/$script" + scriptdir="$(dirname -- "$script")" + scriptdir="$(cd "$scriptdir"; pwd)" + scriptname="$(basename -- "$script")" + fi + UTOOLS_HAVE_SCRIPTVARS=1 +fi +# Juste après avoir inclu ce fichier, il faut rajouter une ligne comme celle-ci +# pour charger ulib: +#source "$scriptdir/ulib/auto"