Intégration de la branche better-apacheconfig

This commit is contained in:
Jephté Clain 2016-12-30 18:22:58 +04:00
commit a7767f7983
52 changed files with 8462 additions and 4751 deletions

2
.udir
View File

@ -19,7 +19,7 @@ openvz_service=
# Faut-il installer le service kill-ssh-user-sessions? # Faut-il installer le service kill-ssh-user-sessions?
ksus_service= ksus_service=
configure_variables=(dest uninst_utools rm_utools kvm_service openvz_service) configure_variables=(dest uninst_utools rm_utools kvm_service openvz_service ksus_service)
configure_dest_for=(bashrc profile lib/uinst/conf lib/uinst/rootconf lib/profile.d/nutools.shared lib/bashrc.d/bash_completion.shared lib/init.d/kvm-stop-all legacy/sysinc/utools legacy/sysinc/system_caps legacy/sysinc/private/init) configure_dest_for=(bashrc profile lib/uinst/conf lib/uinst/rootconf lib/profile.d/nutools.shared lib/bashrc.d/bash_completion.shared lib/init.d/kvm-stop-all legacy/sysinc/utools legacy/sysinc/system_caps legacy/sysinc/private/init)
config_scripts=(lib/uinst/conf lib/uinst/system_caps.legacy) config_scripts=(lib/uinst/conf lib/uinst/system_caps.legacy)
install_profiles=true install_profiles=true

View File

@ -16,6 +16,19 @@ OPTIONS
Créer un nouveau répertoire de configuration pour un hôte Créer un nouveau répertoire de configuration pour un hôte
-d, --destdir DESTDIR[=$TEMPLATECTL_NAME] -d, --destdir DESTDIR[=$TEMPLATECTL_NAME]
Nom du répertoire local de configuration. Nom du répertoire local de configuration.
-f,--full
--partial
Indiquer respectivement que la configuration est complète ou partielle.
Avec la configuration complète, le serveur peut être complètement
configuré avec tous les fichiers présents. Avec la configuration
partielle, uniquement les informations spécifiques à un service en
particulier sont disponibles.
Cette option est utilisée avec --create. Par défaut, la configuration
est partielle.
Pour le moment, la seule différence est que --full crée un fichier de
configuration nommé .apacheconfig alors que --partial crée un fichier
nommé apacheconfig.conf qui est visible et donc découvrable et éditable
plus facilement
-t, --template [OPT] -t, --template [OPT]
Gérer les fichiers du répertoire local avec templatectl. La valeur de Gérer les fichiers du répertoire local avec templatectl. La valeur de
@ -46,9 +59,12 @@ OPTIONS
Lors du déploiement de la configuration, les valeurs des variables Lors du déploiement de la configuration, les valeurs des variables
dynamiques sont remplacées dans les fichiers destination. dynamiques sont remplacées dans les fichiers destination.
Les arguments qui restent sont passés tels quels à apache_autoconf Les arguments qui restent sont passés tels quels à apache_autoconf
-N, --network-config
Mettre aussi à jour la configuration réseau.
-r, --certsdir CERTSDIR -r, --certsdir CERTSDIR
Spécifier le cas échéant le répertoire contenant les certificats à Spécifier le cas échéant le répertoire contenant les certificats à
déployer. Cet argument est requis si le répertoire certsconf/ existe. déployer. Cet argument est requis si le répertoire certsconf/ existe,
sauf si les certificats sont déjà déployés.
--localhosts --localhosts
Créer dans le fichier /etc/hosts tous les noms d'hôte ayant un suffixe Créer dans le fichier /etc/hosts tous les noms d'hôte ayant un suffixe
@ -63,24 +79,45 @@ OPTIONS
-S, --one-site SITE -S, --one-site SITE
Ne déployer que le fichier de site spécifié. Cette option est utilisée Ne déployer que le fichier de site spécifié. Cette option est utilisée
avec --deploy ou --localhosts et est utile pour le développement et les avec --deploy ou --localhosts et est utile pour le développement et les
tests." tests.
-k, --new-site HOST.TLD
Créer une définition pour un nouveau site à partir des fichiers du
répertoires templates/
-K, --new-site-templatedir TEMPLATEDIR
Spécifier le répertoire source pour les templates de site utilisés par
l'option --new-site. Par défaut, utiliser le répertoire templates/ situé
dans le répertoire de configuration.
Si TEMPLATEDIR est un nom simple sans séparateur de chemin '/' et qu'un
répertoire templates/TEMPLATEDIR existe, alors prendre ce répertoire-là
comme source.
--new-site-force
Avec --new-site, utiliser le nom d'hôte fourni même s'il n'est pas
pleinement qualifié"
} }
action= action=
destdir= destdir=
nohideconfig= nohideconfig=auto
templateopt= templateopt=
FULLCONF=
netconf=
aac_certsdir= aac_certsdir=
bits= bits=
oneconf= oneconf=
onemodule= onemodule=
onesite= onesite=
site_host=
site_templdir=
site_force=
args=( args=(
--help '$exit_with display_help' --help '$exit_with display_help'
-c,--create action=create -c,--create action=create
-d:,--destdir: destdir= -d:,--destdir: destdir=
--no-hideconfig nohideconfig=1 --no-hideconfig nohideconfig=1
--hideconfig nohideconfig= --hideconfig nohideconfig=
-f,--full FULLCONF=1
--partial FULLCONF=
-t::,--template:: '$set@ templateopt; action=template' -t::,--template:: '$set@ templateopt; action=template'
--help-template '$templateopt=-help; action=template' --help-template '$templateopt=-help; action=template'
-l,--list '$templateopt=l; action=template' -l,--list '$templateopt=l; action=template'
@ -96,15 +133,23 @@ args=(
-8,--jessie '$array_add TEMPLATECTL_VARS sysver=jessie' -8,--jessie '$array_add TEMPLATECTL_VARS sysver=jessie'
--bits: bits= --bits: bits=
-u,--update,--deploy action=deploy -u,--update,--deploy action=deploy
-N,--network-config netconf=1
-r:,--certsdir: aac_certsdir= -r:,--certsdir: aac_certsdir=
--localhosts action=localhosts --localhosts action=localhosts
-C:,--one-conf: oneconf= -C:,--one-conf: oneconf=
-M:,--one-module: onemodule= -M:,--one-module: onemodule=
-S:,--one-site: onesite= -S:,--one-site: onesite=
-k:,--new-site: '$action=new-site; set@ site_host'
-K:,--new-site-templatedir: site_templdir=
--new-site-force site_force=
) )
parse_args "$@"; set -- "${args[@]}" parse_args "$@"; set -- "${args[@]}"
apacheconfig_loadconf "$destdir" || die if [ "$nohideconfig" == auto ]; then
[ -n "$FULLCONF" ] && nohideconfig= || nohideconfig=1
fi
apacheconfig_loadconf "$destdir" "$nohideconfig" || die
apacheconfig_sysinfos "$sysname" "$sysdist" "$sysver" "$bits" apacheconfig_sysinfos "$sysname" "$sysdist" "$sysver" "$bits"
################################################################################ ################################################################################
@ -128,7 +173,7 @@ if [ "$action" == create ]; then
ask_yesno "Le fichier $(ppath "$config") sera écrasé. Voulez-vous continuer?" O || die ask_yesno "Le fichier $(ppath "$config") sera écrasé. Voulez-vous continuer?" O || die
rm -f "$config" || die rm -f "$config" || die
fi fi
templatectl -d "$destdir" --config "$config" --no-load-vars -m --write-vars templatectl -d "$destdir" --config "$config" ${nohideconfig:+--no-hide-config} --no-load-vars -m --write-vars
################################################################################ ################################################################################
elif [ "$action" == template ]; then elif [ "$action" == template ]; then
@ -142,7 +187,9 @@ elif [ "$action" == deploy -o "$action" == localhosts ]; then
[ -d "$destdir" ] || die "$destdir: répertoire introuvable" [ -d "$destdir" ] || die "$destdir: répertoire introuvable"
args=( args=(
-d "$destdir" --$action ${aac_certsdir:+-r "$aac_certsdir"} -d "$destdir" --$action
${netconf:+--network-config}
${aac_certsdir:+-r "$aac_certsdir"}
${oneconf:+--one-conf "$oneconf"} ${oneconf:+--one-conf "$oneconf"}
${onemodule:+--one-module "$onemodule"} ${onemodule:+--one-module "$onemodule"}
${onesite:+--one-site "$onesite"} ${onesite:+--one-site "$onesite"}
@ -160,11 +207,113 @@ elif [ "$action" == deploy -o "$action" == localhosts ]; then
apacheconfig_deploy \ apacheconfig_deploy \
"$destdir" "$aac_certsdir" \ "$destdir" "$aac_certsdir" \
"$config" "$oneconf" "$onemodule" "$onesite" \ "$config" "$oneconf" "$onemodule" "$onesite" \
"$custom_sysinfos" "$sysname" "$sysdist" "$sysver" "$bits" || die "$custom_sysinfos" "$sysname" "$sysdist" "$sysver" "$bits" \
"$netconf" || die
eend eend
elif [ "$action" == localhosts ]; then elif [ "$action" == localhosts ]; then
etitle "Mise à jour de /etc/hosts" etitle "Mise à jour de /etc/hosts"
apacheconfig_deploy_localhosts "$destdir" "$aac_certsdir" "$onesite" || die apacheconfig_deploy_localhosts "$destdir" "$aac_certsdir" "$onesite" || die
eend eend
fi fi
################################################################################
elif [ "$action" == new-site ]; then
host="$site_host"
templdir="$site_templdir"
if [[ "$templdir" != */* ]] && [ -d "$destdir/templates/$templdir" ]; then
templdir="$destdir/templates/$templdir"
elif [ -z "$templdir" ]; then
templdir="$destdir/templates"
fi
[ -d "$templdir" ] || die "$templdir: répertoire introuvable"
force="$site_force"
clrtempl=
ssltempl=
certstempl=
wwwtempl=
array_from_lines templs "$(list_files "$templdir" "*SITE.conf")"
[ ${#templs[*]} -gt 0 ] && clrtempl="${templs[0]}"
array_from_lines templs "$(list_files "$templdir" "*SITE.ssl.conf")"
[ ${#templs[*]} -gt 0 ] && ssltempl="${templs[0]}"
array_from_lines templs "$(list_files "$templdir" "*SITE-certs.conf")"
[ ${#templs[*]} -gt 0 ] && certstempl="${templs[0]}"
array_from_lines templs "$(list_dirs "$templdir" "*SITE")"
[ ${#templs[*]} -gt 0 ] && wwwtempl="${templs[0]}"
found=
for i in "$clrtempl" "$ssltempl" "$certstempl" "$wwwtempl"; do
[ -n "$i" ] && { found=1; break; }
done
[ -n "$found" ] || die "Aucun template disponible"
if [ -z "$force" ] && [[ "$host" != *.* ]]; then
die "$host n'est pas un nom d'hôte pleinement qualifié"
fi
etitle "$host"
hostname="${host%%.*}"
clrconf="${clrtempl/SITE/$hostname}"
sslconf="${ssltempl/SITE/$hostname}"
certsconf="${certstempl/SITE/$hostname}"
wwwdir="${wwwtempl/SITE/$hostname}"
mkdir -p "$destdir/certsconf"
mkdir -p "$destdir/sites"
sedscript="\
s/SITE.TLD/$host/g
s/SITE/$hostname/g"
if [ -z "$clrtempl" ]; then
:
elif [ ! -f "$templdir/$clrtempl" ]; then
ewarn "Le fichier $(ppath "$templdir/$clrtempl") n'existe pas. La copie ne sera pas complète"
elif [ -f "$destdir/sites/$clrconf" ]; then
ewarn "Le fichier sites/$clrconf existe déjà. Il ne sera pas écrasé."
else
estep "sites/$clrconf"
sed "$sedscript" "$templdir/$clrtempl" >"$destdir/sites/$clrconf" || die
fi
if [ -z "$ssltempl" ]; then
:
elif [ ! -f "$templdir/$ssltempl" ]; then
ewarn "Le fichier $(ppath "$templdir/$ssltempl") n'existe pas. La copie ne sera pas complète"
elif [ -f "$destdir/sites/$sslconf" ]; then
ewarn "Le fichier sites/$sslconf existe déjà. Il ne sera pas écrasé."
else
estep "sites/$sslconf"
sed "$sedscript" "$templdir/$ssltempl" >"$destdir/sites/$sslconf" || die
fi
if [ -z "$certstempl" ]; then
:
elif [ ! -f "$templdir/$certstempl" ]; then
ewarn "Le fichier $(ppath "$templdir/$certstempl") n'existe pas. La copie ne sera pas complète"
elif [ -f "$destdir/certsconf/$certsconf" ]; then
ewarn "Le fichier certsconf/$certsconf exite déjà. Il ne sera pas écrasé."
else
estep "certsconf/$certsconf"
sed "$sedscript" "$templdir/$certstempl" >"$destdir/certsconf/$certsconf" || die
fi
if [ -z "$wwwtempl" ]; then
:
elif [ ! -d "$templdir/$wwwtempl" ]; then
ewarn "Le répertoire $(ppath "$templdir/$wwwtempl") n'existe pas. La copie ne sera pas complète"
elif [ -d "$destdir/$wwwdir" ]; then
ewarn "Le répertoire $wwwdir existe déjà. Il ne sera pas écrasé."
else
estep "$wwwdir"
cpdirnovcs "$templdir/$wwwtempl" "$destdir/$wwwdir" || die
sed -i "$sedscript" "$destdir/$wwwdir/.udir" || die
fi
eend
if [ -n "$wwwtempl" ]; then
eimportant "Ne pas oublier le cas échéant de mettre à jour HTDMAPPINGS dans $(ppath "$config") e.g.
HTDMAPPINGS=($wwwdir)"
fi
fi fi

View File

@ -5,28 +5,101 @@
##@require sysinfos ##@require sysinfos
##@require apache ##@require apache
uprovide apache.tools uprovide apache.tools
urequire base sysinfos apache urequire base sysinfos template apache
function __apache_resolvcert() { function __apache_rc_destdir() {
[ -z "$3" ] && set_var "${1:-certsdir}" "$(get_APACHESSLCERTSDIR_prefix)"
[ -z "$4" ] && set_var "${2:-keysdir}" "$(get_APACHESSLKEYSDIR_prefix)"
}
function __apache_rc_loadconf() {
[ -n "$__rc_dir" ] || __rc_dir="$(dirname "$__rc_conf")" [ -n "$__rc_dir" ] || __rc_dir="$(dirname "$__rc_conf")"
eval "$( eval "$(
source "$__rc_conf" source "$__rc_conf"
set_var_cmd __rc_cert "$cert" echo_setv __rc_cert "$cert"
set_var_cmd __rc_key "$key" echo_setv __rc_key "$key"
set_var_cmd __rc_ca "$ca" echo_setv __rc_ca "$ca"
)" )"
[ -n "$__rc_cert" ] && __rc_cert="$(abspath "$__rc_cert" "$__rc_dir")" [ -n "$__rc_cert" ] && __rc_cert="$(abspath "$__rc_cert" "$__rc_dir")"
[ -n "$__rc_key" ] && __rc_key="$(abspath "$__rc_key" "$__rc_dir")" [ -n "$__rc_key" ] && __rc_key="$(abspath "$__rc_key" "$__rc_dir")"
[ -n "$__rc_ca" ] && __rc_ca="$(abspath "$__rc_ca" "$__rc_dir")" [ -n "$__rc_ca" ] && __rc_ca="$(abspath "$__rc_ca" "$__rc_dir")"
} }
function __apache_checkvars() { function __apache_rc_resolveprefix() {
local __prefix __cert __key
local __certsdir="$1" __keysdir="$2"
__apache_rc_destdir __certsdir __keysdir "$__certsdir" "$__keysdir"
if [ -z "$__rc_cert" ]; then
# si pas de certificat, alors générer un préfixe pour chercher les
# fichiers
setx __prefix=basename "$__rc_conf"
__prefix="${__prefix%certs.conf}"
elif [ ! -f "$__rc_cert" ]; then
# si le fichier source n'existe pas, vérifier s'il existe dans la
# destination
setx __cert=basename "$__rc_cert"
setx __key=basename "$__rc_key"
if [ -f "$__certsdir/$__cert" -a -f "$__keysdir/$__key" ]; then
# parfait, les fichiers existent déjà à l'endroit prévu
:
else
# construire un préfixe avec le nom du fichier
__prefix="$__cert"
if [ "${__prefix%.pem}" != "$__prefix" ]; then
__prefix="${__prefix%.pem}"
elif [ "${__prefix%.crt}" != "$__prefix" ]; then
__prefix="${__prefix%.crt}"
fi
if [ -n "${__prefix//[0-9]/}" ]; then
# enlever le suffixe numérique, uniquement si le nom ne contient
# pas que des chiffres
while [ -n "$__prefix" -a "${__prefix%[0-9]}" != "$__prefix" ]; do
__prefix="${__prefix%[0-9]}"
done
fi
fi
fi
if [ -n "$__prefix" ]; then
local -a __certs
array_from_lines __certs "$(list_files "$__certsdir" "$__prefix*" | LANG=C sort -r)"
if [ ${#__certs[*]} -gt 0 ]; then
__cert="${__certs[0]}"
__key="${__cert%.*}.key"
__rc_cert="$__rc_dir/$__cert"
__rc_key="$__rc_dir/$__key"
fi
fi
}
function __apache_rc_checkfiles() {
local destdir="$1"; shift
local file
for file in "$@"; do
[ -n "$file" ] || continue
[ -f "$file" ] && continue
if [ -n "$destdir" -a -f "$destdir/$(basename "$file")" ]; then
[ -z "$__apache_rc_quiet" ] && ewarn "$file: fichier introuvable
Le fichier existant $destdir/$(basename "$file") sera utilisé"
continue
fi
eerror "$file: fichier introuvable"
return 1
done
return 0
}
function __apache_rc_checkvars() {
local __certsdir="$1" __keysdir="$2"
__apache_rc_destdir __certsdir __keysdir "$__certsdir" "$__keysdir"
if [ -n "$__rc_cert" -a -z "$__rc_key" ]; then if [ -n "$__rc_cert" -a -z "$__rc_key" ]; then
local __rc_name __rc_ext local __rc_name __rc_ext
splitname "$__rc_cert" __rc_name __rc_ext splitname "$__rc_cert" __rc_name __rc_ext
if [ "$__rc_ext" == "crt" -o "$__rc_ext" == "pem" ]; then if [ "$__rc_ext" == "crt" -o "$__rc_ext" == "pem" ]; then
__rc_key="$__rc_name.key" __rc_key="$__rc_name.key"
enote "La clé privée n'a pas été spécifiée. La valeur $(ppath "$__rc_key") sera utilisée" [ -z "$__apache_rc_quiet" ] && enote "La clé privée n'a pas été spécifiée. La valeur $(ppath "$__rc_key") sera utilisée"
else else
eerror "Impossible de trouver la clé privée correspondant au certificat $(ppath "$__rc_cert")" eerror "Impossible de trouver la clé privée correspondant au certificat $(ppath "$__rc_cert")"
return 1 return 1
@ -36,30 +109,31 @@ function __apache_checkvars() {
eerror "Vous devez spécifier le certificat à installer" eerror "Vous devez spécifier le certificat à installer"
return 1 return 1
elif [ -z "$__rc_cert" ]; then elif [ -z "$__rc_cert" ]; then
eattention "Seul le certificat autorité a été spécifié." [ -z "$__apache_rc_quiet" ] && eattention "Seul le certificat autorité a été spécifié."
elif [ -z "$__rc_ca" ]; then elif [ -z "$__rc_ca" ]; then
ewarn "Aucun certificat autorité n'a pas été spécifié. Cela ne peut marcher que si le certificat est autosigné" [ -z "$__apache_rc_quiet" ] && ewarn "Aucun certificat autorité n'a pas été spécifié. Cela ne peut marcher que si le certificat est autosigné"
fi fi
local i __apache_rc_checkfiles "$__certsdir" "$__rc_ca" "$__rc_cert" || return 1
for i in "$__rc_cert" "$__rc_key" "$__rc_ca"; do __apache_rc_checkfiles "$__keysdir" "$__rc_key" || return 1
[ -n "$i" ] || continue return 0
[ -f "$i" ] || {
eerror "$i: Fichier introuvable"
return 1
}
done
} }
function apache_resolvecert() { function apache_resolvecert() {
# Calculer l'emplacement des certificats correspondant aux arguments $1 et # Calculer l'emplacement des certificats correspondant aux arguments $1 et
# $2 (qui correspondent aux options --conf et --dir de apache_addcert()), # $2 (qui correspondent aux options --conf et --dir de apache_addcert()),
# puis initialiser les variables $3(=cert), $4(=key) et $5(=ca) # puis initialiser les variables $3(=cert), $4(=key) et $5(=ca)
# Si ces valeurs sont déjà calculées, on peut fournir $6=certsdir et
# $7=keysdir
local __rc_conf="$1" __rc_dir="$2" local __rc_conf="$1" __rc_dir="$2"
local __rc_cert __rc_key __rc_ca local __rc_cert __rc_key __rc_ca
__apache_resolvcert local __certsdir="$6" __keysdir="$7"
__apache_checkvars || return 1 __apache_rc_destdir __certsdir __keysdir "$__certsdir" "$__keysdir"
__apache_rc_loadconf
__apache_rc_resolveprefix "$__certsdir" "$__keysdir"
__apache_rc_checkvars "$__certsdir" "$__keysdir" || return 1
set_var "${3:-cert}" "$__rc_cert" set_var "${3:-cert}" "$__rc_cert"
set_var "${4:-key}" "$__rc_key" set_var "${4:-key}" "$__rc_key"
set_var "${5:-ca}" "$__rc_ca" set_var "${5:-ca}" "$__rc_ca"
@ -93,29 +167,33 @@ OPTIONS
eval "$(utools_local)" eval "$(utools_local)"
local action=install local action=install
local certsconf certsdir cert key ca local certsconf certssrcdir cert key ca
local __out_cert __out_key __out_ca local __out_cert __out_key __out_ca
parse_opts "${PRETTYOPTS[@]}" \ parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with __apache_addcert_display_help' \ --help '$exit_with __apache_addcert_display_help' \
-C:,--conf: certsconf= \ -C:,--conf: certsconf= \
-d:,--dir: certsdir= \ -d:,--dir: certssrcdir= \
--out-cert: '$set@ __out_cert; action=dump' \ --out-cert: '$set@ __out_cert; action=dump' \
--out-key: '$set@ __out_key; action=dump' \ --out-key: '$set@ __out_key; action=dump' \
--out-ca: '$set@ __out_ca; action=dump' \ --out-ca: '$set@ __out_ca; action=dump' \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"
local certsdir keysdir
__apache_rc_destdir certsdir keysdir
local __rc_conf __rc_dir local __rc_conf __rc_dir
local __rc_cert __rc_key __rc_ca local __rc_cert __rc_key __rc_ca
if [ -n "$certsconf" ]; then if [ -n "$certsconf" ]; then
__rc_conf="$certsconf" __rc_conf="$certsconf"
__rc_dir="$certsdir" __rc_dir="$certssrcdir"
__apache_resolvconf __apache_rc_loadconf
__apache_checkvars || return 1 __apache_rc_resolveprefix "$certsdir" "$keysdir"
__apache_rc_checkvars "$certsdir" "$keysdir" || return 1
else else
__rc_cert="$1" __rc_cert="$1"
__rc_key="$2" __rc_key="$2"
__rc_ca="$3" __rc_ca="$3"
__apache_checkvars || return 1 __apache_rc_checkvars "$certsdir" "$keysdir" || return 1
fi fi
cert="$__rc_cert" cert="$__rc_cert"
key="$__rc_key" key="$__rc_key"
@ -129,9 +207,7 @@ OPTIONS
ask_yesno "Voulez-vous continuer?" O || return 1 ask_yesno "Voulez-vous continuer?" O || return 1
urequire install urequire install
etitle "Installation des certificats" etitled "Copie des fichiers"
certsdir="$(get_APACHESSLCERTSDIR_prefix)"
keysdir="$(get_APACHESSLKEYSDIR_prefix)"
if [ ! -d "$certsdir" ]; then if [ ! -d "$certsdir" ]; then
mkdir -p "$certsdir" || return 1 mkdir -p "$certsdir" || return 1
chmod 755 "$certsdir" || return 1 chmod 755 "$certsdir" || return 1
@ -140,38 +216,36 @@ OPTIONS
mkdir -p "$keysdir" || return 1 mkdir -p "$keysdir" || return 1
chmod 710 "$keysdir" || return 1 chmod 710 "$keysdir" || return 1
fi fi
if [ -n "$cert" ]; then if [ -n "$cert" -a -f "$cert" ]; then
copy_replace "$cert" "$certsdir" || return 1 if copy_update "$cert" "$certsdir"; then
chmod 644 "$certsdir/$(basename "$cert")" || return 1 chmod 644 "$certsdir/$(basename "$cert")" || return 1
copy_replace "$key" "$keysdir" || return 1 fi
chmod 640 "$keysdir/$(basename "$key")" || return 1 if copy_update "$key" "$keysdir"; then
chmod 640 "$keysdir/$(basename "$key")" || return 1
fi
fi fi
if [ -n "$ca" ]; then if [ -n "$ca" -a -f "$ca" ]; then
copy_replace "$ca" "$certsdir" || return 1 if copy_update "$ca" "$certsdir"; then
chmod 644 "$certsdir/$(basename "$ca")" || return 1 chmod 644 "$certsdir/$(basename "$ca")" || return 1
fi
fi fi
eend eend
return 0 return 0
} }
__APACHE_AUTOCONF_SUFFIXES=(d8 d)
__APACHE_AUTOCONF_SUFFIX_d8=(-d debian -v jessie+)
__APACHE_AUTOCONF_SUFFIX_d=(-d debian)
function __apache_autoconf_check_suffix() {
array_contains __APACHE_AUTOCONF_SUFFIXES "$1" || return 1
local sysinfos="__APACHE_AUTOCONF_SUFFIX_${1}[@]"
check_sysinfos --vars sysname sysdist sysver bits "${!sysinfos}"
}
function __apache_autoconf_filter_suffix_files() {
grep -vF ..
}
function __apache_autoconf_setup() { function __apache_autoconf_setup() {
if ! check_sysinfos --vars sysname sysdist sysver bits -s linux64 linux32 linux -d debian; then if ! check_sysinfos --vars sysname sysdist sysver bits -s linux64 linux32 linux -d debian; then
eerror "apache_autoconf n'est supporté que sur Debian linux" eerror "$(get_sysinfos_desc): système non supporté. debian linux est requis"
return 1 return 1
fi fi
urequire install urequire debian install
if [ -z "$__apache_autoconf_no_require_apache" ]; then
pkg_check apache2 || {
eerror "apache2 non installé. impossible de continuer"
return 1
}
fi
compute_apache_prefixes compute_apache_prefixes
return 0 return 0
} }
@ -193,24 +267,8 @@ function __apache_autoconf_fillcopy() {
# script sed $FILLSCRIPT. Le fichier temporaire $FILLTEMP est utilisé pour # script sed $FILLSCRIPT. Le fichier temporaire $FILLTEMP est utilisé pour
# le remplacement des valeurs. $3 contient le cas échéant des commandes sed # le remplacement des valeurs. $3 contient le cas échéant des commandes sed
# supplémentaires # supplémentaires
# Si des fichiers suffixes existent, ne faire la copie que si un fichier
# approprié correspondant au système courant est trouvé
local src="$1" dest="$2" sedscript="$3" perms="${4:-go+rX}" local src="$1" dest="$2" sedscript="$3" perms="${4:-go+rX}"
# vérifier les fichiers suffixe
local suffix have_suffix found_suffix
for suffix in "${__APACHE_AUTOCONF_SUFFIXES[@]}"; do
if [ -f "$src..$suffix" ]; then
have_suffix=1
if __apache_autoconf_check_suffix "$suffix"; then
found_suffix=1
src="$src..$suffix"
break
fi
fi
done
[ -n "$have_suffix" -a -z "$found_suffix" ] && return 1
# valeurs à remplacer dans le fichier # valeurs à remplacer dans le fichier
local var found_var local var found_var
for var in "${FILLVARS[@]}"; do for var in "${FILLVARS[@]}"; do
@ -225,14 +283,16 @@ $sedscript" <"$src" >"$FILLTEMP"
src="$FILLTEMP" src="$FILLTEMP"
fi fi
copy_update "$src" "$dest" "$perms" copy_update "$src" "$dest" "$perms" && return
estepn "$(basename -- "$dest")"
return 1
} }
__APACHE_AUTOCONF_HELP="\ __APACHE_AUTOCONF_HELP="\
--confdir CONFDIR --confdir CONFDIR
Spécifier l'emplacement des fichiers de configuration apache ainsi que des Spécifier l'emplacement des fichiers de configuration apache ainsi que des
fichiers 'confs.conf', 'modules.conf' et 'sites.conf'. Par défaut, prendre fichiers 'syspkgs.conf', 'confs.conf', 'modules.conf' et 'sites.conf'. Par
le répertoire local DESTDIR. défaut, prendre le répertoire local DESTDIR.
--confsdir CONFSDIR --confsdir CONFSDIR
Spécifier l'emplacement des fichiers des configuration. Par défaut, utiliser Spécifier l'emplacement des fichiers des configuration. Par défaut, utiliser
DESTDIR/confs si ce répertoire existe. DESTDIR/confs si ce répertoire existe.
@ -264,7 +324,7 @@ function apache_autoconf() {
local autoconfdir certsdir confdir confsdir oneconf modulesdir onemodule local autoconfdir certsdir confdir confsdir oneconf modulesdir onemodule
local sitesdir onesite cgibindir wwwdir certsconfdir rrdir onecms local sitesdir onesite cgibindir wwwdir certsconfdir rrdir onecms
local sysname sysdist sysver bits local sysname sysdist sysver bits
local destconfsdir a2xconf local netconf destconfsdir a2xconf
local restart=1 local restart=1
parse_opts "${PRETTYOPTS[@]}" \ parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with __display_apache_autoconf_help' \ --help '$exit_with __display_apache_autoconf_help' \
@ -288,6 +348,7 @@ function apache_autoconf() {
-7,--wheezy sysver=wheezy \ -7,--wheezy sysver=wheezy \
-8,--jessie sysver=jessie \ -8,--jessie sysver=jessie \
--bits: bits= \ --bits: bits= \
--network-config netconf=1 \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"
if [ -n "$sysname" -o -n "$sysdist" -o -n "$sysver" ]; then if [ -n "$sysname" -o -n "$sysdist" -o -n "$sysver" ]; then
@ -298,13 +359,13 @@ function apache_autoconf() {
sysver=("${MYSYSVER[@]}") sysver=("${MYSYSVER[@]}")
bits="$MYBITS" bits="$MYBITS"
fi fi
__apache_autoconf_setup || return 1 __apache_autoconf_no_require_apache= __apache_autoconf_setup || return 1
if __apache_autoconf_check_suffix d8; then if check_sysinfos --vars sysname sysdist sysver bits -d debian -v jessie+; then
confdefault=000-default.conf confdefault=000-default.conf
confdefaultssl=default-ssl.conf confdefaultssl=default-ssl.conf
destconfsdir="$APACHECONFDIR/conf-available" destconfsdir="$APACHECONFDIR/conf-available"
a2xconf=1 a2xconf=1
elif __apache_autoconf_check_suffix d; then elif check_sysinfos --vars sysname sysdist sysver bits -d debian; then
confdefault=default confdefault=default
confdefaultssl=default-ssl confdefaultssl=default-ssl
destconfsdir="$APACHECONFDIR/conf.d" destconfsdir="$APACHECONFDIR/conf.d"
@ -340,6 +401,19 @@ function apache_autoconf() {
local -a FILLVARS; local FILLSCRIPT FILLTEMP local -a FILLVARS; local FILLSCRIPT FILLTEMP
__apache_autoconf_fillxxx "$@" __apache_autoconf_fillxxx "$@"
# Installation des packages système
if [ -f "$confdir/syspkgs.conf" ]; then
local -a syspkgs
local syspkg
array_from_lines syspkgs "$(<"$confdir/syspkgs.conf" filter_conf)"
if ! pkg_check "${syspkgs[@]}"; then
etitle "Installation de paquets système"
estep "${syspkgs[@]}"
pkg_install "${syspkgs[@]}" || return 1
eend
fi
fi
# Copie des certificats # Copie des certificats
local modified rehash conf local modified rehash conf
if [ -d "$certsconfdir" ]; then if [ -d "$certsconfdir" ]; then
@ -350,17 +424,10 @@ function apache_autoconf() {
array_addu FILLVARS ca array_addu FILLVARS ca
etitle "Installation des certificats" etitle "Installation des certificats"
[ -n "$certsdir" -a ! -d "$certsdir" ] && ewarn "$certsdir: répertoire invalide"
array_lsfiles certsconfs "$certsconfdir" "*.conf" array_lsfiles certsconfs "$certsconfdir" "*.conf"
for certsconf in "${certsconfs[@]}"; do for certsconf in "${certsconfs[@]}"; do
if [ -z "$certsdir" ]; then apache_addcert -y -C "$certsconf" -d "$certsdir" "$cert" "$key" "$ca" || return 1
eerror "CERTSDIR est requis si --certsconfdir est spécifié"
return 1
elif [ ! -d "$certsdir" ]; then
eerror "$certsdir: répertoire invalide"
return 1
fi
apache_resolvecert "$certsconf" "$certsdir" cert key ca || return 1
apache_addcert -y "$cert" "$key" "$ca"
modified=1 modified=1
done done
array_lsfiles certspems "$certsconfdir" "*.crt" "*.pem" array_lsfiles certspems "$certsconfdir" "*.crt" "*.pem"
@ -378,11 +445,9 @@ function apache_autoconf() {
local -a confs local -a confs
local conf local conf
etitle "Installation des configurations" etitle "Installation des configurations"
array_from_lines confs "$(list_files "$confsdir" "*.conf" | __apache_autoconf_filter_suffix_files)" array_from_lines confs "$(list_files "$confsdir" "*.conf")"
for conf in "${confs[@]}"; do for conf in "${confs[@]}"; do
[ -z "$oneconf" -o "$conf" == "$oneconf" ] || continue [ -z "$oneconf" -o "$conf" == "$oneconf" ] || continue
estep "$conf"
__apache_autoconf_fillcopy \ __apache_autoconf_fillcopy \
"$confsdir/$conf" \ "$confsdir/$conf" \
"$destconfsdir/$conf" && modified=1 "$destconfsdir/$conf" && modified=1
@ -395,11 +460,9 @@ function apache_autoconf() {
local -a confs local -a confs
local conf local conf
etitle "Installation des configurations des modules" etitle "Installation des configurations des modules"
array_from_lines confs "$(list_files "$modulesdir" "*.conf" | __apache_autoconf_filter_suffix_files)" array_from_lines confs "$(list_files "$modulesdir" "*.conf")"
for conf in "${confs[@]}"; do for conf in "${confs[@]}"; do
[ -z "$onemodule" -o "$conf" == "$onemodule" ] || continue [ -z "$onemodule" -o "$conf" == "$onemodule" ] || continue
estep "$conf"
__apache_autoconf_fillcopy \ __apache_autoconf_fillcopy \
"$modulesdir/$conf" \ "$modulesdir/$conf" \
"$APACHECONFDIR/mods-available/$conf" && modified=1 "$APACHECONFDIR/mods-available/$conf" && modified=1
@ -409,12 +472,12 @@ function apache_autoconf() {
# Règles de réécriture # Règles de réécriture
if [ -d "$rrdir" -a -z "$onecms" ]; then if [ -d "$rrdir" -a -z "$onecms" ]; then
# legacy... remplacé par des fichiers de règles directement dans le répertoire de configuration
local -a confs local -a confs
local conf local conf
etitle "Installation des règles de réécriture" etitle "Installation des règles de réécriture"
array_from_lines confs "$(list_files "$rrdir" "RewriteRules*.conf")" array_from_lines confs "$(list_files "$rrdir" "RewriteRules*.conf")"
for conf in "${confs[@]}"; do for conf in "${confs[@]}"; do
estep "$conf"
__apache_autoconf_fillcopy \ __apache_autoconf_fillcopy \
"$rrdir/$conf" \ "$rrdir/$conf" \
"$APACHECONFDIR/$conf" && modified=1 "$APACHECONFDIR/$conf" && modified=1
@ -426,9 +489,9 @@ function apache_autoconf() {
local -a enablesites disablesites local -a enablesites disablesites
if [ -d "$sitesdir" -a \( -z "$onecms" -o -n "$onesite" \) ]; then if [ -d "$sitesdir" -a \( -z "$onecms" -o -n "$onesite" \) ]; then
local -a confs local -a confs
local conf confname destconf certsconf local conf confname destconf certsconf sedscript copied
etitle "Installation des sites" etitle "Installation des sites"
array_from_lines confs "$(list_files "$sitesdir" "*.conf" | __apache_autoconf_filter_suffix_files)" array_from_lines confs "$(list_files "$sitesdir" "*.conf")"
for confname in "${confs[@]}"; do for confname in "${confs[@]}"; do
conf="$sitesdir/$confname" conf="$sitesdir/$confname"
[ -z "$onesite" -o "$confname" == "$onesite" ] || continue [ -z "$onesite" -o "$confname" == "$onesite" ] || continue
@ -449,27 +512,44 @@ function apache_autoconf() {
*) destconf="$confname";; *) destconf="$confname";;
esac esac
copied=
if [ -n "$certsconf" ]; then if [ -n "$certsconf" ]; then
certsconf="$certsconfdir/$certsconf" certsconf="$certsconfdir/$certsconf"
if [ -f "$certsconf" ]; then if [ -f "$certsconf" ]; then
apache_resolvecert "$certsconf" "$certsdir" cert key ca || return 1 __apache_rc_quiet=1 apache_resolvecert "$certsconf" "$certsdir" cert key ca || return 1
__apache_autoconf_fillcopy \ if [ -n "$cert" -a -n "$key" ]; then
"$conf" \ sedscript="\
"$APACHEAVSITESDIR/$destconf" "\
s#@@cert@@#$APACHESSLCERTSDIR/$(basename "$cert")#g s#@@cert@@#$APACHESSLCERTSDIR/$(basename "$cert")#g
s#@@key@@#$APACHESSLKEYSDIR/$(basename "$key")#g s#@@key@@#$APACHESSLKEYSDIR/$(basename "$key")#g"
s#@@ca@@#$APACHESSLCERTSDIR/$(basename "$ca")#g if [ -n "$ca" ]; then
" sedscript="$sedscript
s#@@ca@@#$APACHESSLCERTSDIR/$(basename "$ca")#g"
else
sedscript="$sedscript
/@@ca@@/s/^/#/g"
fi
__apache_autoconf_fillcopy \
"$conf" \
"$APACHEAVSITESDIR/$destconf" "$sedscript"
copied=1
else
eerror "$(ppath "$certsconf"): définition des certificats introuvable
Le fichier de configuration $confname a été ignoré"
fi
else else
eerror "$(ppath "$certsconf"): fichier introuvable. Il a été ignoré" eerror "$(ppath "$certsconf"): fichier introuvable
Le fichier de configuration $confname a été ignoré"
fi fi
else else
__apache_autoconf_fillcopy \ __apache_autoconf_fillcopy \
"$conf" \ "$conf" \
"$APACHEAVSITESDIR/$destconf" "$APACHEAVSITESDIR/$destconf"
copied=1
fi
if [ -n "$copied" ]; then
enablesites=("${enablesites[@]}" "$destconf")
modified=1
fi fi
enablesites=("${enablesites[@]}" "$destconf")
modified=1
done done
eend eend
fi fi
@ -478,16 +558,28 @@ s#@@ca@@#$APACHESSLCERTSDIR/$(basename "$ca")#g
if [ -d "$confdir" -a -z "$onecms" ]; then if [ -d "$confdir" -a -z "$onecms" ]; then
local -a confs local -a confs
local conf local conf
etitle "Configuration de base" etitle "Configuration de base"
array_add ignores confs.conf modules.conf sites.conf array_add ignores syspkgs.conf confs.conf modules.conf sites.conf network.conf
array_from_lines confs "$(list_files "$confdir" | __apache_autoconf_filter_suffix_files)" array_from_lines confs "$(list_files "$confdir")"
for conf in "${confs[@]}"; do for conf in "${confs[@]}"; do
array_contains ignores "$conf" && continue array_contains ignores "$conf" && continue
estep "$conf"
__apache_autoconf_fillcopy \ __apache_autoconf_fillcopy \
"$confdir/$conf" \ "$confdir/$conf" \
"$APACHECONFDIR/$conf" && modified=1 "$APACHECONFDIR/$conf" && modified=1
done done
array_from_lines confs "$(list_files "$confdir" "*rewrite*.rules")"
if [ ${#confs[*]} -gt 0 ]; then
etitle "Règles de réécriture"
for conf in "${confs[@]}"; do
[ -f "$APACHECONFDIR/$conf" ] || continue
estep "$conf"
legacy_mkRewriteRules "$APACHECONFDIR/$conf" && modified=1
done
eend
fi
if [ -f "$confdir/confs.conf" -a -n "$a2xconf" ]; then if [ -f "$confdir/confs.conf" -a -n "$a2xconf" ]; then
local -a confs local -a confs
local conf local conf
@ -564,9 +656,30 @@ s#@@ca@@#$APACHESSLCERTSDIR/$(basename "$ca")#g
fi fi
# Contenu web # Contenu web
if [ -d "$wwwdir" -a -z "$onecms" ]; then if [ -z "$onecms" ]; then
etitle "Installation des fichiers du serveur web" etitled "Installation des fichiers du serveur web"
cpdirnovcs "$wwwdir" "$HTDOCSDIR" if is_defined HTDMAPPINGS; then
local htdmapping src dest
for htdmapping in "${HTDMAPPINGS[@]}"; do
splitpair "$htdmapping" dest src
[ -n "$dest" ] || dest=html
case "$dest" in
html) [ -n "$src" ] || src=www;;
*) [ -n "$src" ] || src="$dest";;
esac
withpath "$src" || src="$confdir/$src"
withpath "$dest" || dest="$HTDOCSBASE/$dest"
estep "$src --> $dest"
cpdirnovcs "$src" "$dest"
# par défaut, le propriétaire est root. est-ce nécessaire?
#chown -R www-data: "$dest"
done
elif [ -d "$wwwdir" ]; then
estep "$wwwdir --> $HTDOCSDIR"
cpdirnovcs "$wwwdir" "$HTDOCSDIR"
# par défaut, le propriétaire est root. est-ce nécessaire?
#chown -R www-data: "$HTDOCSDIR"
fi
eend eend
fi fi
@ -587,6 +700,30 @@ s#@@ca@@#$APACHESSLCERTSDIR/$(basename "$ca")#g
eend eend
fi fi
# Mettre à jour la configuration réseau
if [ -z "$onecms" -a -n "$netconf" -a -f "$confdir/network.conf" ]; then
local -a ips brs; local host etc_networks
eval "$(
source "$confdir/network.conf"
set_array_cmd ips
set_array_cmd brs
echo_setv host "$host"
echo_setv etc_networks "$etc_networks"
)"
etitled "Vérification de la configuration du réseau"
if [ -n "$FULLCONF" ]; then
if [ ${#ips[*]} -gt 0 -o ${#brs[*]} -gt 0 -o -n "$hosts" ]; then
network_config "$host" ips brs && modified=1
fi
[ -n "$etc_networks" ] && network_update_etc_networks "$etc_networks"
else
if [ ${#ips[*]} -gt 0 ]; then
network_config_partial ips && modified=1
fi
fi
eend
fi
if [ -n "$modified" ]; then if [ -n "$modified" ]; then
[ -n "$rehash" ] && elinedots "Hashage des certificats" c_rehash [ -n "$rehash" ] && elinedots "Hashage des certificats" c_rehash
if [ -n "$restart" ]; then if [ -n "$restart" ]; then
@ -604,7 +741,7 @@ function apache_autoconf_localhosts() {
--one-site: onesite= \ --one-site: onesite= \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"
__apache_autoconf_setup || return 1 __apache_autoconf_no_require_apache=1 __apache_autoconf_setup || return 1
# Configuration # Configuration
autoconfdir="$1"; shift autoconfdir="$1"; shift
@ -711,27 +848,48 @@ function __template_updatef_dhost() {
[ -n "$ips" ] || __template_set_var ips "" [ -n "$ips" ] || __template_set_var ips ""
} }
# toujours placer une variable dépendante AVANT la variable maitre # syntaxe: var[:depvars,...][=desc]
APACHECONFIG_TEMPLATE_STATIC_VARS=( APACHECONFIG_TEMPLATE_STATIC_VARS=(
hostname aliases host host:hostname,aliases="hôte pour lequel ce template a été créé.
certsdir caname # les variables hostname et aliases sont automatiquement générées.
# utiliser @@dhost@@ pour déployer dynamiquement avec le nom d'hôte courant."
certsdir="répertoire par défaut contenant les certificats à déployer"
caname="nom de l'autorité par défaut"
) )
APACHECONFIG_TEMPLATE_DYNAMIC_VARS=( APACHECONFIG_TEMPLATE_DYNAMIC_VARS=(
ips_namevirtualhosts ips_listens ips ips:ips_namevirtualhosts,ips_listens="liste d'adresses de la forme ip[:port], séparées par un espace.
dhostname daliases dhost # ces adresses sont celles sur lesquelles apache doit écouter. ce paramètre n'a
admin configdir # de sens que sur squeeze. en effet, la configuration par défaut sur jessie rend
# ce paramétrage inutile."
dhost:dhostname,daliases="hôte pour lequel les fichiers doivent être déployés.
# les variables dhostname et daliases sont automatiquement générées.
# cette variable n'a besoin d'être modifiée que si host=@@dhost@@ ci-dessous"
admin="mail de l'administrateur du serveur"
configdir="répertoire dans lequel le template a été généré"
)
APACHECONFIG_TEMPLATE_NOWRITE_VARS=(configdir)
APACHECONFIG_TEMPLATE_USER_VARS=(
FULLCONF="Est-on en mode configuration complète?"
HTDMAPPINGS="Mapping des répertoires destination dans /var/www vers le répertoire local, e.g. html:www"
) )
APACHECONFIG_TEMPLATE_NOWRITE_VARS=(hostname aliases dhostname daliases configdir)
function __apacheconfig_initsrcdirs() {
if check_sysinfos "$@" -d debian -v jessie+; then
TEMPLATECTL_SRCDIRS=(apacheconfig.d8)
else
TEMPLATECTL_SRCDIRS=(apacheconfig)
fi
}
function apacheconfig_initvars() { function apacheconfig_initvars() {
DEFAULT_ADMIN=supervision-gdrsi@listes.univ-reunion.fr DEFAULT_ADMIN=supervision-gdrsi@listes.univ-reunion.fr
DEFAULT_CERTSDIR=1507-renater DEFAULT_CERTSDIR=1507-renater
DEFAULT_CANAME=1507-DigiCertCA.crt DEFAULT_CANAME=1507-DigiCertCA.crt
set_defaults apacheconfig set_defaults apacheconfig
TEMPLATE_STATIC_VARS=("${APACHECONFIG_TEMPLATE_STATIC_VARS[@]}")
TEMPLATE_DYNAMIC_VARS=("${APACHECONFIG_TEMPLATE_DYNAMIC_VARS[@]}")
TEMPLATE_NOWRITE_VARS=("${APACHECONFIG_TEMPLATE_NOWRITE_VARS[@]}") TEMPLATE_NOWRITE_VARS=("${APACHECONFIG_TEMPLATE_NOWRITE_VARS[@]}")
template_build_vars TEMPLATE_STATIC_VARS TEMPLATE_NOWRITE_VARS "${APACHECONFIG_TEMPLATE_STATIC_VARS[@]}"
template_build_vars TEMPLATE_DYNAMIC_VARS TEMPLATE_NOWRITE_VARS "${APACHECONFIG_TEMPLATE_DYNAMIC_VARS[@]}"
template_build_vars TEMPLATE_USER_VARS "" "${APACHECONFIG_TEMPLATE_USER_VARS[@]}"
__TEMPLATE_DEFAULTF_host=__template_defaultf_host __TEMPLATE_DEFAULTF_host=__template_defaultf_host
__TEMPLATE_UPDATEF_host=__template_updatef_host __TEMPLATE_UPDATEF_host=__template_updatef_host
__TEMPLATE_DEFAULTF_ips=__template_defaultf_ips __TEMPLATE_DEFAULTF_ips=__template_defaultf_ips
@ -740,7 +898,7 @@ function apacheconfig_initvars() {
__TEMPLATE_UPDATEF_dhost=__template_updatef_dhost __TEMPLATE_UPDATEF_dhost=__template_updatef_dhost
TEMPLATECTL_NAME=apacheconfig TEMPLATECTL_NAME=apacheconfig
TEMPLATECTL_SRCDIRS=(apacheconfig) __apacheconfig_initsrcdirs
TEMPLATECTL_CONFIG="$TEMPLATECTL_NAME" TEMPLATECTL_CONFIG="$TEMPLATECTL_NAME"
TEMPLATECTL_DEFAULTS=( TEMPLATECTL_DEFAULTS=(
admin="$DEFAULT_ADMIN" admin="$DEFAULT_ADMIN"
@ -751,11 +909,14 @@ function apacheconfig_initvars() {
} }
function apacheconfig_loadconf() { function apacheconfig_loadconf() {
local config modified local config modified autocreate
local destdir="$1" autocreate local destdir="$1" nohideconfig="$2"
# valeurs par défaut
is_defined HTDMAPPINGS || HTDMAPPINGS=(html:www)
__template_set_destdir destdir autocreate "$TEMPLATECTL_NAME" || return 1 __template_set_destdir destdir autocreate "$TEMPLATECTL_NAME" || return 1
setx config=templatectl_config "$destdir" setx config=templatectl_config "$destdir" ${nohideconfig:+nohideconfig}
modified= modified=
templatectl_loadvars "$config" && modified=1 templatectl_loadvars "$config" && modified=1
@ -779,7 +940,8 @@ function apacheconfig_sysinfos() {
__template_set_var sysname "$sysname" __template_set_var sysname "$sysname"
__template_set_var sysdist "$sysdist" __template_set_var sysdist "$sysdist"
__template_set_var sysver "$sysver" __template_set_var sysver "$sysver"
#check_sysinfos --vars sysname sysdist sysver bits "${templatectl_suffix[@]} # mettre à jour la source en fonction du système cible
__apacheconfig_initsrcdirs --vars sysname sysdist sysver bits
upvars sysname "$sysname" sysdist "$sysdist" sysver "$sysver" bits "$bits" \ upvars sysname "$sysname" sysdist "$sysdist" sysver "$sysver" bits "$bits" \
custom_sysinfos "$custom_sysinfos" custom_sysinfos "$custom_sysinfos"
@ -789,6 +951,7 @@ function apacheconfig_deploy() {
local destdir="$1" certsdir="$2"; shift; shift local destdir="$1" certsdir="$2"; shift; shift
local config="$1" oneconf="$2" onemodule="$3"; onesite="$4"; shift; shift; shift; shift local config="$1" oneconf="$2" onemodule="$3"; onesite="$4"; shift; shift; shift; shift
local custom_sysinfos="$1" sysname="$2" sysdist="$3" sysver="$4" bits="$5"; shift; shift; shift; shift; shift local custom_sysinfos="$1" sysname="$2" sysdist="$3" sysver="$4" bits="$5"; shift; shift; shift; shift; shift
local netconf="$1"; shift
local -a args local -a args
args=(--ignore "$(basename -- "$config")") args=(--ignore "$(basename -- "$config")")
@ -796,6 +959,7 @@ function apacheconfig_deploy() {
[ -n "$onemodule" ] && array_add args --one-module "$(basename -- "$onemodule")" [ -n "$onemodule" ] && array_add args --one-module "$(basename -- "$onemodule")"
[ -n "$onesite" ] && array_add args --one-site "$(basename -- "$onesite")" [ -n "$onesite" ] && array_add args --one-site "$(basename -- "$onesite")"
[ -n "$custom_sysinfos" ] && array_add args --sysname "$sysname" --sysdist "$sysdist" --sysver "$sysver" --bits "$bits" [ -n "$custom_sysinfos" ] && array_add args --sysname "$sysname" --sysdist "$sysdist" --sysver "$sysver" --bits "$bits"
[ -n "$netconf" ] && array_add args --network-config
array_add args "$destdir" "$certsdir" array_add args "$destdir" "$certsdir"
for __name in "${TEMPLATE_DYNAMIC_VARS[@]}"; do for __name in "${TEMPLATE_DYNAMIC_VARS[@]}"; do
array_add args "$__name=${!__name}" array_add args "$__name=${!__name}"
@ -803,6 +967,21 @@ function apacheconfig_deploy() {
apache_autoconf "${args[@]}" "$@" apache_autoconf "${args[@]}" "$@"
} }
function apacheconfig_qs() {
# fonction pour simplifier l'utilisation de apacheconfig_deploy pour un
# répertoire spécifique
# $1=destdir $2=certsdir $3=netconf
local destdir="$1" certsdir="$2" netconf="$3"
local config modified destdir autocreate
apacheconfig_initvars
apacheconfig_loadconf "$1"
apacheconfig_deploy \
"$destdir" "$2" \
"$config" "" "" "" \
"" "" "" "" "" \
"$3"
}
function apacheconfig_localhosts() { function apacheconfig_localhosts() {
local destdir="$1" certsdir="$2"; shift; shift local destdir="$1" certsdir="$2"; shift; shift
local onesite="$1"; shift local onesite="$1"; shift
@ -815,3 +994,241 @@ function apacheconfig_localhosts() {
done done
apache_autoconf_localhosts "${args[@]}" "$@" apache_autoconf_localhosts "${args[@]}" "$@"
} }
function __mrr_joinurl() {
# joindre chaque élément de $1..@ par /, en évitant les slashes en double
local i url
for i in "$@"; do
[ -n "$i" ] || continue
if [ -n "$url" ]; then
url="${url%/}/${i#/}"
else
url="$i"
fi
done
[ -n "$url" ] && echo "$url"
}
function __mrr_has_proxy() {
# vérifier que les options $1 contiennent 'P'
local -a options
array_split options "$1" ","
array_contains options P
}
function legacy_mkRewriteRules() {
# $1=infile, $2=thishost, $3=outfile, $4=htmlfile, $5=proxy_enabled?
local infile="$1" thishost="$2" outfile="$3" htmlfile="$4" proxy_enabled="$5"
local -a rules; local rule prefix index done current
local tmpinfile tmpoutfile
local src dest host suffix options prot proxy_acls usrc trail noslash proxy_url proxy_use
if [ -z "$infile" -o "$infile" == - ]; then
infile=/dev/stdin
elif [ -z "$outfile" ]; then
local outdir="$(dirname -- "$infile")"
outfile="$(basename -- "$infile")"
if [[ "$outfile" == *rewrite*.rules ]]; then
outfile="${outfile/rewrite/RewriteRules}"
outfile="${outfile/.rules/.conf}"
else
outfile="$outfile-RewriteRules.conf"
fi
outfile="$outdir/$outfile"
fi
[ -n "$outfile" -a "$outfile" != - ] || outfile=/dev/stdout
if [ -z "$thishost" -o -z "$proxy_enabled" ]; then
# le cas échéant, lire les paramètres manquant depuis le fichier
if [ "$infile" == /dev/stdin ]; then
ac_set_tmpfile tmpinfile
cat >"$tmpinfile"
infile="$tmpinfile"
fi
eval "$(awkrun -f <"$infile" '
/^[^#]/ { exit 0 }
/^#+ *host *=/ { sub(/^#+ *host *= */, ""); sub(/ *$/, ""); print "thishost=" qval($0); next }
/^#+ *enable_proxy *=/ { sub(/^#+ *enable_proxy *= */, ""); sub(/ *$/, ""); print "proxy_enabled=" qval($0); next }
')"
fi
[ -n "$thishost" ] || thishost="$(myhost)"
normyesval proxy_enabled
if [ -n "$htmlfile" ]; then
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!-- -*- coding: utf-8 mode: html -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>'"$thishost</title>
</head>
<body>
<h2>$thishost</h2>
<ul>" >"$htmlfile"
fi
ac_set_tmpfile tmpoutfile
array_from_lines rules "$(<"$infile" filter_comment)"
prefix=
for rule in "${rules[@]}"; do
if beginswith "$rule" ^; then
# Collecter les préfixe pour la règle suivante
prefix="${prefix:+$prefix
}${rule#^}"
continue
elif beginswith "$rule" =; then
# ligne litérale
echo "${rule#=}" >>"$tmpoutfile"
continue
fi
local IFS=:; set -- $rule; unset IFS
index=1
done=
while [ -z "$done" ]; do
current="$1"; shift
while [ "${current%\\}" != "$current" ]; do
current="${current%\\}:$1"; shift
done
case $index in
1) src="$current";;
2) dest="$current";;
3) host="$current";;
4) suffix="$current";;
5) options="$current";;
6) prot="${current:-http}";;
7) proxy_acls="$current";;
*) done=1;;
esac
index=$(($index + 1))
done
# mettre en forme prefix s'il est défini
[ -n "$prefix" ] && prefix="$prefix
"
[ "$thishost" == "$host" ] && host=
usrc="$src"
trail=1
if endswith "$src" '$'; then
trail=
usrc="${src%$}"
fi
noslash=
if endswith "$suffix" '$'; then
noslash=1
suffix="${suffix%$}"
fi
if endswith "$dest" '$'; then
noslash=1
dest="${dest%$}"
fi
proxy_url=
proxy_use=
if endswith "$dest" .woa; then
# lien vers une application
if [ -n "$host" ]; then
# sur un autre hôte
if [ -n "$noslash" ]; then
echo "${prefix}RewriteRule ^/$src${trail:+(.*)} $(__mrr_joinurl "$prot://$host/cgi-bin/WebObjects" "$dest" "$suffix")${trail:+\$1} [L${options:+,$options}]" >>"$tmpoutfile"
setx url __mrr_joinurl "http://$thishost" "$usrc"
setx proxy_url __mrr_joinurl "$prot://$host/cgi-bin/WebObjects" "$dest" "$suffix"
else
echo "${prefix}RewriteRule ^/$src\$ /$src/" >>"$tmpoutfile"
echo "${prefix}RewriteRule ^/$src/(.*) $(__mrr_joinurl "$prot://$host/cgi-bin/WebObjects" "$dest" "$suffix" "\$1") [L${options:+,$options}]" >>"$tmpoutfile"
setx url __mrr_joinurl "http://$thishost" "$usrc/"
setx proxy_url __mrr_joinurl "$prot://$host/cgi-bin/WebObjects" "$dest" "$suffix/"
fi
else
# sur le même hôte
if [ -n "$noslash" ]; then
echo "${prefix}RewriteRule ^/$src${trail:+(.*)} $(__mrr_joinurl /cgi-bin/WebObjects "$dest" "$suffix")${trail:+\$1} [L,P${options:+,$options}]" >>"$tmpoutfile"
setx url __mrr_joinurl "http://$thishost" "$usrc"
setx proxy_url __mrr_joinurl "$prot://$thishost/cgi-bin/WebObjects" "$dest" "$suffix"
proxy_use=1
else
echo "${prefix}RewriteRule ^/$src\$ /$src/" >>"$tmpoutfile"
echo "${prefix}RewriteRule ^/$src/(.*) $(__mrr_joinurl /cgi-bin/WebObjects "$dest" "$suffix" "\$1") [L,P${options:+,$options}]" >>"$tmpoutfile"
setx url __mrr_joinurl "http://$thishost" "$usrc/"
setx proxy_url __mrr_joinurl "$prot://$thishost/cgi-bin/WebObjects" "$dest" "$suffix/"
proxy_use=1
fi
fi
else
# lien vers une url
if [ -n "$host" ]; then
# sur un autre hôte
if [ -n "$noslash" ]; then
echo "${prefix}RewriteRule ^/$src${trail:+(.*)} $(__mrr_joinurl "$prot://$host" "$dest" "$suffix")${trail:+\$1} [L${options:+,$options}]" >>"$tmpoutfile"
setx url __mrr_joinurl "http://$thishost" "$usrc"
setx proxy_url __mrr_joinurl "$prot://$host" "$dest" "$suffix"
else
echo "${prefix}RewriteRule ^/$src\$ /$src/" >>"$tmpoutfile"
echo "${prefix}RewriteRule ^/$src/(.*) $(__mrr_joinurl "$prot://$host" "$dest" "$suffix" "\$1") [L${options:+,$options}]" >>"$tmpoutfile"
setx url __mrr_joinurl "http://$thishost" "$usrc/"
setx proxy_url __mrr_joinurl "$prot://$host" "$dest" "$suffix/"
fi
else
# sur le même hôte
if [ -n "$noslash" ]; then
echo "${prefix}RewriteRule ^/$src${trail:+(.*)} $(__mrr_joinurl / "$dest" "$suffix")${trail:+\$1}${options:+ [$options]}" >>"$tmpoutfile"
setx url __mrr_joinurl "http://$thishost" "$usrc"
setx proxy_url __mrr_joinurl "http://$thishost" "$dest" "$suffix"
else
echo "${prefix}RewriteRule ^/$src\$ /$src/" >>"$tmpoutfile"
echo "${prefix}RewriteRule ^/$src/(.*) $(__mrr_joinurl / "$dest" "$suffix" "\$1")${options:+ [$options]}" >>"$tmpoutfile"
setx url __mrr_joinurl "http://$thishost" "$usrc/"
setx proxy_url __mrr_joinurl "http://$thishost" "$dest" "$suffix/"
fi
fi
fi
__mrr_has_proxy "$options" && proxy_use=1
if [ -n "$proxy_enabled" -a -n "$proxy_use" ]; then
if [ "$proxy_acls" == "None" ]; then
:
elif [ -z "$proxy_acls" ]; then
echo "\
<Proxy $proxy_url*>
AddDefaultCharset off
Order Deny,Allow
Allow from all
</Proxy>" >>"$tmpoutfile"
else
echo "\
<Proxy $proxy_url*>
AddDefaultCharset off
Order Allow,Deny
Allow from $proxy_acls
</Proxy>" >>"$tmpoutfile"
fi
fi
echo "" >>"$tmpoutfile"
if [ -n "$htmlfile" ]; then
echo "<li><a href=\"$url\">$url</a></li>" >>"$htmlfile"
fi
# Réinitialiser les préfixes pour chaque règle
prefix=
done
local modified
if testupdated "$tmpoutfile" "$outfile"; then
cat "$tmpoutfile" >"$outfile"
modified=1
fi
if [ -n "$htmlfile" ]; then
echo '</ul>
</body>
</html>' >>"$htmlfile"
fi
[ -n "$tmpinfile" ] && ac_clean "$tmpinfile"
ac_clean "$tmpoutfile"
[ -n "$modified" ]
}

View File

@ -2464,6 +2464,7 @@ function awkdef() {
# pour un tableau values qui contiendra deux valeurs: value1 et value2 # pour un tableau values qui contiendra deux valeurs: value1 et value2
# Avec l'option -f, des fonctions supplémentaires sont définies. Elles sont # Avec l'option -f, des fonctions supplémentaires sont définies. Elles sont
# décrites dans le module awk. # décrites dans le module awk.
[ -z "$__ULIB_NO_DISABLE_SET_X" ] && [[ $- == *x* ]] && { set +x; local __ULIB_AWKDEF_SET_X=1; } # désactiver set -x pour cette fonction
if [ "${1:0:3}" == "-f" ]; then if [ "${1:0:3}" == "-f" ]; then
shift shift
@ -2541,6 +2542,8 @@ function awkdef() {
rawecho "$__ad_arg" rawecho "$__ad_arg"
done done
fi fi
[ -n "$__ULIB_AWKDEF_SET_X" ] && set -x; return 0
} }
function lawkrun() { function lawkrun() {
# wrapper pour lancer awk avec un script préparé par awkdef. Les définitions et # wrapper pour lancer awk avec un script préparé par awkdef. Les définitions et

View File

@ -288,6 +288,8 @@ function parse_opts() {
# flags_ contient la liste des flags pour les options: '' pour une option # flags_ contient la liste des flags pour les options: '' pour une option
# simple, ':' pour option avec argument obligatoire, '::' pour option avec # simple, ':' pour option avec argument obligatoire, '::' pour option avec
# argument facultatif # argument facultatif
[ -z "$__ULIB_NO_DISABLE_SET_X" ] && [[ $- == *x* ]] && { set +x; local __ULIB_PARSE_OPTS_SET_X=1; } # désactiver set -x pour cette fonction
local -a options_ names_ flags_ destargs_ local -a options_ names_ flags_ destargs_
local opts_ longopts_ local opts_ longopts_
__po_parse_optdescs "$@" || shift $? __po_parse_optdescs "$@" || shift $?
@ -297,8 +299,11 @@ function parse_opts() {
__po_process_options "$@" __po_process_options "$@"
else else
[ -n "$destargs_" ] && setv "$destargs_" "$args_" [ -n "$destargs_" ] && setv "$destargs_" "$args_"
[ -n "$__ULIB_SET_X" ] && set -x
return 1 return 1
fi fi
[ -n "$__ULIB_PARSE_OPTS_SET_X" ] && set -x; return 0
} }
function parse_args_check() { function parse_args_check() {
@ -308,9 +313,15 @@ function parse_args_check() {
# Exemple d'utilisation: # Exemple d'utilisation:
# args=(...) # args=(...)
# parse_args_check "$@" || return; set -- "${args[@]}" # parse_args_check "$@" || return; set -- "${args[@]}"
parse_opts "${PRETTYOPTS[@]}" "${args[@]}" @ args -- "$@" && return 0 [ -z "$__ULIB_NO_DISABLE_SET_X" ] && [[ $- == *x* ]] && { set +x; local __ULIB_PARSE_ARGS_SET_X=1; } # désactiver set -x pour cette fonction
eerror "$args" if parse_opts "${PRETTYOPTS[@]}" "${args[@]}" @ args -- "$@"; then
return 1 [ -n "$__ULIB_PARSE_ARGS_SET_X" ] && set -x
return 0
else
eerror "$args"
[ -n "$__ULIB_PARSE_ARGS_SET_X" ] && set -x
return 1
fi
} }
function parse_args() { function parse_args() {
# Simplifier l'utilisation de parse_opts(). En entrée, le tableau args doit être # Simplifier l'utilisation de parse_opts(). En entrée, le tableau args doit être
@ -320,7 +331,9 @@ function parse_args() {
# Exemple d'utilisation: # Exemple d'utilisation:
# args=(...) # args=(...)
# parse_args_check "$@"; set -- "${args[@]}" # parse_args_check "$@"; set -- "${args[@]}"
[ -z "$__ULIB_NO_DISABLE_SET_X" ] && [[ $- == *x* ]] && { set +x; local __ULIB_PARSE_ARGS_SET_X=1; } # désactiver set -x pour cette fonction
parse_opts "${PRETTYOPTS[@]}" "${args[@]}" @ args -- "$@" || die "$args" parse_opts "${PRETTYOPTS[@]}" "${args[@]}" @ args -- "$@" || die "$args"
[ -n "$__ULIB_PARSE_ARGS_SET_X" ] && set -x; return 0
} }
HELP_DESC= HELP_DESC=

View File

@ -6,24 +6,22 @@ uprovide base.num
function isnum() { function isnum() {
# retourner vrai si $1 est une valeur numérique entière (positive ou négative) # retourner vrai si $1 est une valeur numérique entière (positive ou négative)
[ ${#1} -gt 0 ] || return 1 [ ${#1} -gt 0 ] || return 1
local v="$1" local v="${1#-}"
v="${v#-}" [ ${#v} -gt 0 ] || return 1
v="${v//[0-9]/}" v="${v//[0-9]/}"
[ -z "$v" ] [ -z "$v" ]
} }
function ispnum() { function ispnum() {
# retourner vrai si $1 est une valeur numérique entière positive # retourner vrai si $1 est une valeur numérique entière positive
[ ${#1} -gt 0 ] || return 1 [ ${#1} -gt 0 ] || return 1
local v="$1" [ -z "${1//[0-9]/}" ]
v="${v//[0-9]/}"
[ -z "$v" ]
} }
function isrnum() { function isrnum() {
# retourner vrai si $1 est une valeur numérique réelle (positive ou négative) # retourner vrai si $1 est une valeur numérique réelle (positive ou négative)
# le séparateur décimal peut être . ou , # le séparateur décimal peut être . ou ,
[ ${#1} -gt 0 ] || return 1 [ ${#1} -gt 0 ] || return 1
local v="$1" local v="${1#-}"
v="${v#-}" [ ${#v} -gt 0 ] || return 1
v="${v//./}" v="${v//./}"
v="${v//,/}" v="${v//,/}"
v="${v//[0-9]/}" v="${v//[0-9]/}"

View File

@ -6,6 +6,10 @@
uprovide base.string uprovide base.string
urequire base.core urequire base.core
# IMPORTANT: aucune des fonctions suivantes ne met en échappement les valeur des
# patterns. Ainsi, si un pattern contient des caractères interdits comme \ ou $,
# il faut d'abord le traiter avec _qval()
function straddp() { function straddp() {
# ajouter le préfixe $1 à $2* # ajouter le préfixe $1 à $2*
local p="$1"; shift local p="$1"; shift

View File

@ -176,20 +176,40 @@ function network_fix_confbrs() {
function __network_fix_confips() { function __network_fix_confips() {
local -a confips ipsuffixes ifaces ips local -a confips ipsuffixes ifaces ips
local confip iface gateway ip suffix mainip local confip iface gateway network ip suffix mainip
local mainiface="$1" local mainiface="$1"
# recenser les interfaces et créer les tableaux __IFACE_ipspecs # recenser les interfaces et créer les tableaux __IFACE_ipspecs
for confip in "${__nfc_confips[@]}"; do for confip in "${__nfc_confips[@]}"; do
network_parse_confip "$confip" iface gateway ipsuffixes network_parse_confip "$confip" iface gateway ipsuffixes
[ -n "$iface" ] || iface="$mainiface" if [ -n "$iface" ]; then
array_addu ifaces "$iface" network="${iface}_network"
eval "local ${iface}_gateway; local -a ${iface}_ipsuffixes" if ! array_contains ifaces "$iface"; then
array_add ifaces "$iface"
eval "local ${iface}_gateway $network; local -a ${iface}_ipsuffixes"
fi
if [ -z "${!network}" -a -n "${ipsuffixes[0]}" ]; then
setv "$network" "$(ipcalc_network "${ipsuffixes[0]}")"
fi
fi
done done
# puis construire la liste des adresses IP associées à chaque interface # puis construire la liste des adresses IP associées à chaque interface
for confip in "${__nfc_confips[@]}"; do for confip in "${__nfc_confips[@]}"; do
network_parse_confip "$confip" iface gateway ipsuffixes network_parse_confip "$confip" iface gateway ipsuffixes
# si aucune interface n'est spécifiée, sélectionner celle correspondant
# à la même adresse de réseau. sinon prendre $mainiface
if [ -z "$iface" ]; then
network="$(ipcalc_network "${ipsuffixes[0]}")"
local ip_iface ip_network
for ip_iface in "${ifaces[@]}"; do
ip_network="${ip_iface}_network"
if [ "${!ip_network}" == "$network" ]; then
iface="$ip_iface"
break
fi
done
fi
[ -n "$iface" ] || iface="$mainiface" [ -n "$iface" ] || iface="$mainiface"
# si la passerelle a déjà été spécifiée, la récupérer # si la passerelle a déjà été spécifiée, la récupérer
local tmpgw="${iface}_gateway" local tmpgw="${iface}_gateway"
@ -356,6 +376,7 @@ function __network_set_confips() {
array_from_lines ifaces "$(__network_valid_ifaces)" array_from_lines ifaces "$(__network_valid_ifaces)"
for iface in "${ifaces[@]}"; do for iface in "${ifaces[@]}"; do
__network_set_gateway "$iface" __network_set_gateway "$iface"
[ -n "$gateway" ] || gateway=-
__network_set_confip "$iface" "$gateway" || continue __network_set_confip "$iface" "$gateway" || continue
array_add confips "$confip" array_add confips "$confip"
done done
@ -462,6 +483,7 @@ BEGIN {
have_iface = 0 have_iface = 0
have_method = 0 # static ou dhcp have_method = 0 # static ou dhcp
have_gateway = ipsuffixes[1] == "dhcp" || gateway == "" have_gateway = ipsuffixes[1] == "dhcp" || gateway == ""
if (gateway == "none" || gateway == "-") gateway = ""
array_new(have_ips) array_new(have_ips)
array_new(have_ip_ups) array_new(have_ip_ups)
array_new(have_ip_downs) array_new(have_ip_downs)
@ -692,6 +714,8 @@ function network_interfaces_add_confip() {
local nifile="${4:-$__DEBIAN_NETWORK_INTERFACES}" local nifile="${4:-$__DEBIAN_NETWORK_INTERFACES}"
local mainip netmask method local mainip netmask method
[ "$gateway" == "none" -o "$gateway" == "-" ] && gateway=
network_parse_ipsuffix "${ipsuffixes[0]}" mainip netmask network_parse_ipsuffix "${ipsuffixes[0]}" mainip netmask
if [ "$mainip" == "dhcp" ]; then if [ "$mainip" == "dhcp" ]; then
mainip= mainip=
@ -928,7 +952,9 @@ $ip$TAB$host $hostname" "$tmpfile"
} }
function network_config() { function network_config() {
# (Re)configurer le réseau sur l'hôte courant. # (Re)configurer le réseau sur l'hôte courant. Des efforts sont faits pour
# ne mettre à jour les fichiers que si c'est nécessaire. Si un des arguments
# $1..$6 n'est pas spécifié, il est ignoré.
# $1 (host) est le nom d'hôte. # $1 (host) est le nom d'hôte.
# $2 (confips) est le nom d'un tableau contenant la configuration des # $2 (confips) est le nom d'un tableau contenant la configuration des
# adresses ips pour les interfaces. # adresses ips pour les interfaces.
@ -939,9 +965,12 @@ function network_config() {
# son interface. En principe, l'interface principale est le premier bridge # son interface. En principe, l'interface principale est le premier bridge
# défini ou la première interface définie. # défini ou la première interface définie.
# $5 (reset_interfaces) spécifie de ne pas chercher à mettre à jour le # $5 (reset_interfaces) spécifie de ne pas chercher à mettre à jour le
# fichier /etc/network/interfaces, mais de le recréer depuis zéro. # fichier /etc/network/interfaces, mais de le recréer depuis zéro. la valeur
# 'force' spécifie de recréer le fichier même si ce n'est pas nécessaire à
# priori.
# $6 (oldhost) est le nom d'hôte actuel, avant la modification # $6 (oldhost) est le nom d'hôte actuel, avant la modification
# Si un des arguments n'est pas spécifié, il est ignoré. # $7(=/etc/network/interfaces) est le fichier à mettre à jour
#
# Le tableau confips doit contenir des définitions d'une des formes # Le tableau confips doit contenir des définitions d'une des formes
# suivantes: # suivantes:
# [[iface][//gateway]:]address[/suffix],... # [[iface][//gateway]:]address[/suffix],...
@ -952,6 +981,7 @@ function network_config() {
# interface, seule la première spécification d'adresse IP tient compte de # interface, seule la première spécification d'adresse IP tient compte de
# l'argument gateway. Les autres spécifications définissent des adresses IP # l'argument gateway. Les autres spécifications définissent des adresses IP
# supplémentaires pour l'interface. # supplémentaires pour l'interface.
#
# Le tableau brs doit contenir des définitions de la forme suivante: # Le tableau brs doit contenir des définitions de la forme suivante:
# br:ifaces,... # br:ifaces,...
# br est le nom du bridge, e.g. br0. ifaces est une liste d'interfaces # br est le nom du bridge, e.g. br0. ifaces est une liste d'interfaces
@ -967,6 +997,7 @@ function network_config() {
local -a confbrs; array_copy confbrs __nc_confbrs local -a confbrs; array_copy confbrs __nc_confbrs
local mainiface="$4" reset_interfaces="$5" oldhost="$6" local mainiface="$4" reset_interfaces="$5" oldhost="$6"
local modified local modified
local nifile="${7:-$__DEBIAN_NETWORK_INTERFACES}"
network_fix_confs confbrs confips "$mainiface" network_fix_confs confbrs confips "$mainiface"
@ -1001,13 +1032,16 @@ function network_config() {
# vérifier si une modification est nécessaire # vérifier si une modification est nécessaire
local modify local modify
for confbr in "${confbrs[@]}"; do [ "$reset_interfaces" == force ] && modify=1
network_parse_confbr "$confbr" br ifaces if [ -z "$modify" ]; then
if ! network_interfaces_check_confbr "$br" iface; then for confbr in "${confbrs[@]}"; do
modify=1 network_parse_confbr "$confbr" br ifaces
break if ! network_interfaces_check_confbr "$br" iface; then
fi modify=1
done break
fi
done
fi
if [ -z "$modify" ]; then if [ -z "$modify" ]; then
for confip in "${confips[@]}"; do for confip in "${confips[@]}"; do
network_parse_confip "$confip" iface gateway ipsuffixes network_parse_confip "$confip" iface gateway ipsuffixes
@ -1022,13 +1056,17 @@ function network_config() {
if [ -n "$modify" ]; then if [ -n "$modify" ]; then
# faire une copie de travail # faire une copie de travail
local interfaces; ac_set_tmpfile interfaces local interfaces; ac_set_tmpfile interfaces
cat "$__DEBIAN_NETWORK_INTERFACES" >"$interfaces" cat "$nifile" >"$interfaces"
if [ -n "$reset_interfaces" ]; then if [ -n "$reset_interfaces" ]; then
local source_itfd
check_sysinfos -d debian -v jessie+ && source_itfd=1
echo >"$interfaces" "\ echo >"$interfaces" "\
# This file describes the network interfaces available on your system # This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5). # and how to activate them. For more information, see interfaces(5).
${source_itfd:+
source /etc/network/interfaces.d/*
}
# The loopback network interface # The loopback network interface
auto lo auto lo
iface lo inet loopback iface lo inet loopback
@ -1059,21 +1097,21 @@ iface lo inet loopback
# Fin de traitement # Fin de traitement
if [ -n "$__DEBIAN_NETWORK_DEVEL_SHOW_MODIFS" ]; then if [ -n "$__DEBIAN_NETWORK_DEVEL_SHOW_MODIFS" ]; then
if testdiff "$interfaces" "$__DEBIAN_NETWORK_INTERFACES"; then if testdiff "$interfaces" "$nifile"; then
uecho "Setting $__DEBIAN_NETWORK_INTERFACES to:" uecho "Setting $nifile to:"
cat "$interfaces" | sed 's/^/ /g' 1>&2 cat "$interfaces" | sed 's/^/ /g' 1>&2
else else
uecho "$__DEBIAN_NETWORK_INTERFACES: pas de modifications" uecho "$nifile: pas de modifications"
fi fi
elif testdiff "$interfaces" "$__DEBIAN_NETWORK_INTERFACES"; then elif testdiff "$interfaces" "$nifile"; then
__network_backup "$__DEBIAN_NETWORK_INTERFACES" __network_backup "$nifile"
if show_debug; then if show_debug; then
edebug "Setting $__DEBIAN_NETWORK_INTERFACES to:" edebug "Setting $nifile to:"
cat "$interfaces" | sed 's/^/ /g' 1>&2 cat "$interfaces" | sed 's/^/ /g' 1>&2
else else
estep "$__DEBIAN_NETWORK_INTERFACES" estep "$nifile"
fi fi
cat "$interfaces" >"$__DEBIAN_NETWORK_INTERFACES" cat "$interfaces" >"$nifile"
modified=1 modified=1
fi fi
ac_clean "$interfaces" ac_clean "$interfaces"
@ -1112,3 +1150,68 @@ iface lo inet loopback
[ -z "$modified" ] && return 10 [ -z "$modified" ] && return 10
return 0 return 0
} }
function network_config_partial() {
# une version allégée de network_config() qui ne permet que de rajouter des
# adresses IPs en plus de celles qui sont déjà configurées.
# $1(=confips) est le nom d'un tableau contenant la configuration des
# adresses ips pour les interfaces.
# $2(=/etc/network/interfaces) est le fichier à mettre à jour
local -a __ncp_newconfips; array_copy __ncp_newconfips "${1:-confips}"
local nifile="${2:-$__DEBIAN_NETWORK_INTERFACES}"
local -a confips confbrs
network_set_confips
network_set_confbrs
network_fix_confs
array_extend confips __ncp_newconfips
network_config "" confips confbrs "" "" "" "$nifile" || return
# des modifications ont eu lieu, tenter de configurer les nouvelles adresses
# d'abord calculer les adresses ips qui sont activées
network_set_confips
local -a ips
local ipsuffix ip suffix
for confip in "${confips[@]}"; do
network_parse_confip "$confip" iface gateway ipsuffixes
for ipsuffix in "${ipsuffixes[@]}"; do
network_parse_ipsuffix "$ipsuffix" ip suffix
array_addu ips "$ip"
done
done
# puis lister les commandes correspondant aux adresses ips non activées
local -a ups; local up
array_from_lines ups "$(awkrun <"$nifile" -f ips[@] '
$1 == "up" && $2 == "ip" && $3 == "addr" && $4 == "add" {
ip = $5; sub(/(\/[0-9.]+)?$/, "", ip) # enlever suffixe
if (! in_array(ip, ips)) {
$1 = ""
print
}
}')"
if [ ${#ups[*]} -gt 0 ]; then
etitle "Configuration des nouvelles adresses"
for up in "${ups[@]}"; do
estep "$up"
eval "$up"
done
eend
fi
return 0
}
function network_update_etc_networks() {
# écraser le contenu du fichier /etc/networks avec la chaine $1
# si $1 est vide, initialiser le fichier avec un contenu par défaut.
local contents="$1" TAB=$'\t'
[ -n "$contents" ] || contents="\
default${TAB}${TAB}0.0.0.0
loopback${TAB}127.0.0.0
link-local${TAB}169.254.0.0"
if [ "$(</etc/networks)" != "$contents" ]; then
__network_backup /etc/networks
echo "$contents" >/etc/networks
fi
}

View File

@ -83,6 +83,32 @@ function ipcalc_netmask() {
return 0 return 0
} }
function ipcalc_network() {
# Calculer l'adresse de réseau correspondant à l'adresse ip $1. Le masque
# de sous-réseau peut-être indiqué dans l'adresse ip avec le suffixe /n ou
# /x.x.x.x ou donné dans l'argument $2. Seuls les suffixes 0, 8, 16, 24, 32
# sont supportés.
# Retourner 1 si un erreur s'est produite, par exemple si l'adresse ou le
# suffixe sont invalides ou non supportés.
[ -n "$1" ] || return
local ip mask
ipcalc_splitipmask "$1" ip mask
[ -n "$mask" ] || mask="$2"
[ -n "$mask" ] || mask=24
ip="$(ipcalc_checkip "$ip")" || return
mask="$(ipcalc_checkmask "$mask")" || return
case "$mask" in
0) echo "0.0.0.0";;
8) ip="${ip%.*.*.*}"; echo "$ip.0.0.0";;
16) ip="${ip%.*.*}"; echo "$ip.0.0";;
24) ip="${ip%.*}"; echo "$ip.0";;
32) echo "$ip";;
esac
}
function ipcalc_broadcast() { function ipcalc_broadcast() {
# Calculer l'adresse de broadcast correspondant à l'adresse ip $1. Le masque # Calculer l'adresse de broadcast correspondant à l'adresse ip $1. Le masque
# de sous-réseau peut-être indiqué dans l'adresse ip avec le suffixe /n ou # de sous-réseau peut-être indiqué dans l'adresse ip avec le suffixe /n ou

View File

@ -888,8 +888,7 @@ function runs_initworkdir() {
>"$RUNSEXPORTDIR/varsfile" >"$RUNSEXPORTDIR/varsfile"
>"$RUNSEXPORTDIR/localuser" >"$RUNSEXPORTDIR/localuser"
>"$RUNSEXPORTDIR/localroot" >"$RUNSEXPORTDIR/localroot"
>"$RUNSEXPORTDIR/remoteuser" >"$RUNSEXPORTDIR/remote"
>"$RUNSEXPORTDIR/remoteroot"
# synchronisation ulib # synchronisation ulib
# comme on copie runs et uinst, il faut copier ulib et pyulib comme pour nutools: dans le répertoire lib/ # comme on copie runs et uinst, il faut copier ulib et pyulib comme pour nutools: dans le répertoire lib/
@ -917,6 +916,7 @@ exit 0
cd "$(dirname "$0")" cd "$(dirname "$0")"
'"$args_def"' '"$args_def"'
if [ -s remote ]; then if [ -s remote ]; then
export RUNS_REMOTE_SET_Y=1
[ -f remote-needs-root ] && args=("${args[@]}" -s) [ -f remote-needs-root ] && args=("${args[@]}" -s)
"${args[@]}" -r remote || exit 1 "${args[@]}" -r remote || exit 1
fi fi
@ -1628,6 +1628,13 @@ function runs_action_run() {
__vars=("${__vars[@]}" "$(set_var_cmd "$__name" "$__value")") __vars=("${__vars[@]}" "$(set_var_cmd "$__name" "$__value")")
done done
if [ -n "$RUNS_REMOTE_SET_Y" ]; then
# par défaut, sur l'hôte distant, utiliser un niveau
# d'interaction plus bas que runs
# ainsi, (rruns) ==> (uinst -y) et (rruns -i) ==> (uinst)
set_interaction -y
fi
urequire uinst udir prefixes uinc urequire uinst udir prefixes uinc
# Il faut définir UINST, chemin vers le script uinst. # Il faut définir UINST, chemin vers le script uinst.
UINST="$RUNSSRCDIR/uinst" UINST="$RUNSSRCDIR/uinst"

File diff suppressed because it is too large Load Diff

View File

@ -419,15 +419,42 @@ function template_srcdir() {
fi fi
} }
function template_build_vars() {
# Initialiser les tableaux $1 et $2 avec la description des variables $3..@
# les descriptions sont de la forme var[:depvars,...]=desc
# $1 reçoit les noms (depvars... var) parce que les variables dépendantes
# doivent toujours être placées AVANT la variable maitre
# $2 reçoit les noms (depvars...)
# pour chaque description, une variable __TEMPLATE_DESC_var est créée avec
# la valeur desc
local __t_destvs="$1"; shift
local __t_destnw="$1"; shift
local -a __t_depvars
local __t_vardesc __t_var __t_depvar __t_desc
for __t_vardesc in "$@"; do
splitvar "$__t_vardesc" __t_depvar __t_desc
splitpair "$__t_depvar" __t_var __t_depvar
array_split __t_depvars "$__t_depvar" ,
for __t_depvar in "${__t_depvars[@]}"; do
array_addu "$__t_destvs" "$__t_depvar"
[ -n "$__t_destnw" ] && array_addu "$__t_destnw" "$__t_depvar"
done
array_del "$__t_destvs" "$__t_var"
array_add "$__t_destvs" "$__t_var"
eval "__TEMPLATE_DESC_$__t_var=\"\$__t_desc\""
done
}
function templatectl_config() { function templatectl_config() {
# Obtenir le chemin vers le fichier de configuration pour le répertoire $1 # Obtenir le chemin vers le fichier de configuration pour le répertoire $1 Si
# Si $2==nohideconfig, utiliser le nom CONFIG.conf, sinon utiliser par défaut # l'un des fichiers CONFIG.conf ou .CONFIG existent déjà, prendre ceux-là.
# .CONFIG sauf si le fichier CONFIG.conf existe # Sinon, si $2==nohideconfig, utiliser le nom CONFIG.conf, sinon utiliser
# .CONFIG
local config="$(basename -- "$TEMPLATECTL_CONFIG")" local config="$(basename -- "$TEMPLATECTL_CONFIG")"
if [ -f "$1/$config.conf" -o "$2" == nohideconfig ]; then if [ -f "$1/$config.conf" ]; then echo "$1/$config.conf"
echo "$1/$config.conf" elif [ -f "$1/.$config" ]; then echo "$1/.$config"
else elif [ "$2" == nohideconfig ]; then echo "$1/$config.conf"
echo "$1/.$config" else echo "$1/.$config"
fi fi
} }
@ -449,6 +476,8 @@ function templatectl_loadvars() {
# devraient pas être écrits dans le fichier des variables, sauf si elles # devraient pas être écrits dans le fichier des variables, sauf si elles
# reçoivent une valeur explicite de la part de l'utilisateur. Ce tableau est # reçoivent une valeur explicite de la part de l'utilisateur. Ce tableau est
# mis à jour lors de l'analyse du tableau TEMPLATECTL_VARS # mis à jour lors de l'analyse du tableau TEMPLATECTL_VARS
# - TEMPLATE_USER_VARS contient une liste de noms de tableaux qui sont définis
# en plus et qui peuvent être utilisés par des scripts annexes
local -a __template_vars __dynamic_vars local -a __template_vars __dynamic_vars
local __t_var __t_name __t_value local __t_var __t_name __t_value
@ -469,6 +498,11 @@ function templatectl_loadvars() {
done done
array_contains TEMPLATE_DYNAMIC_VARS configdir && __template_set_var configdir "$configdir" array_contains TEMPLATE_DYNAMIC_VARS configdir && __template_set_var configdir "$configdir"
is_defined TEMPLATE_USER_VARS || TEMPLATE_USER_VARS=()
for __t_var in "${TEMPLATE_USER_VARS[@]}"; do
is_defined "$__t_var" || array_new "$__t_var"
done
local __t_modified=1 local __t_modified=1
for __t_var in "${TEMPLATECTL_VARS[@]}"; do for __t_var in "${TEMPLATECTL_VARS[@]}"; do
splitvar "$__t_var" __t_name __t_value splitvar "$__t_var" __t_name __t_value
@ -479,20 +513,33 @@ function templatectl_loadvars() {
function templatectl_writevars() { function templatectl_writevars() {
# Ecrire les variables dans le fichier $1 # Ecrire les variables dans le fichier $1
local __t_var local __t_var __t_desc
echo "# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8" >"$1" echo "# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8" >"$1"
for __t_var in "${TEMPLATE_USER_VARS[@]}"; do
__t_desc="__TEMPLATE_DESC_$__t_var"
[ -n "${!__t_desc}" ] && echo "# ${!__t_desc}" >>"$1"
if is_array "$__t_var"; then
set_array_cmd "$__t_var" >>"$1"
else
echo_setv "$__t_var" "${!__t_var}" >>"$1"
fi
done
if [ ${#TEMPLATE_DYNAMIC_VARS[*]} -gt 0 ]; then if [ ${#TEMPLATE_DYNAMIC_VARS[*]} -gt 0 ]; then
echo "__dynamic_vars=(" >>"$1" echo "__dynamic_vars=(" >>"$1"
for __t_var in "${TEMPLATE_DYNAMIC_VARS[@]}"; do for __t_var in "${TEMPLATE_DYNAMIC_VARS[@]}"; do
array_contains TEMPLATE_NOWRITE_VARS "$__t_var" && continue array_contains TEMPLATE_NOWRITE_VARS "$__t_var" && continue
echo_setv "$__t_var=${!__t_var}" >>"$1" __t_desc="__TEMPLATE_DESC_$__t_var"
[ -n "${!__t_desc}" ] && echo "# ${!__t_desc}" >>"$1"
echo_setv "$__t_var" "${!__t_var}" >>"$1"
done done
echo ")" >>"$1" echo ")" >>"$1"
fi fi
echo "__template_vars=(# ne pas modifier" >>"$1" echo "__template_vars=(# ne pas modifier" >>"$1"
for __t_var in "${TEMPLATE_STATIC_VARS[@]}"; do for __t_var in "${TEMPLATE_STATIC_VARS[@]}"; do
array_contains TEMPLATE_NOWRITE_VARS "$__t_var" && continue array_contains TEMPLATE_NOWRITE_VARS "$__t_var" && continue
echo_setv "$__t_var=${!__t_var}" >>"$1" __t_desc="__TEMPLATE_DESC_$__t_var"
[ -n "${!__t_desc}" ] && echo "# ${!__t_desc}" >>"$1"
echo_setv "$__t_var" "${!__t_var}" >>"$1"
done done
echo ")" >>"$1" echo ")" >>"$1"
} }

View File

@ -0,0 +1,76 @@
# -*- coding: utf-8 mode: text -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
Ce répertoire peut contenir les fichiers et répertoires suivants, qui sont tous
optionnels:
confs.conf
Liste des configurations qu'il faut activer. Si un fichier de configuration
existe mais n'est pas mentionnée dans ce fichier, ou si ce fichier n'existe
pas, aucune modification n'est effectuée. Ce fichier contient une liste de
ligne de configuration.
Si une configuration est de la forme -conf, elle est désactivée. Si une
configuration est de la forme +conf, elle est activée. Cette syntaxe permet
de supporter les configurations dont le nom commencerait par '-'
IMPORTANT: Ce fichier n'est supporté qu'à partir de debian jessie.
modules.conf
Liste des modules qu'il faut activer. Si un module existe mais n'est pas
mentionné dans ce fichier, ou si ce fichier n'existe pas, aucune
modification n'est effectuée.
Si un module est de la forme -module, il est désactivé. Si un module est de
la forme +module, il est activé. Cette syntaxe permet de supporter les
modules dont le nom commencerait par '-'
sites.conf
Liste des sites qu'il faut activer. Si ce fichier n'existe pas, tous les
sites existant sont activés. Si un site existe mais ne figure pas dans ce
fichier, il est désactivé.
confs/
Répertoire des configurations à installer. Les fichiers de ce répertoire
sont de la forme CONF.conf et sont installés dans le répertoire
/etc/apache2/conf-available. Il faut mentionner la configuration dans le
fichier confs.conf pour l'activer.
IMPORTANT: Ce répertoire n'est supporté qu'à partir de debian jessie.
modules/
Répertoire des configurations de modules à installer. Les fichiers de ce
répertoire sont de la forme MODULE.conf et sont installés dans le répertoire
/etc/apache2/mods-available. Il faut mentioner le module dans le fichier
modules.conf pour l'activer.
sites/
Répertoire des sites à installer. Les fichiers de ce répertoire sont de la
forme SITE.conf pour les sites écoutant en clair, et SITE.ssl.conf pour les
sites écoutant en https.
Pour chaque site SITE.ssl.conf, un fichier SITE-certs.conf doit exister dans
certsconf/. Pour chaque fichier SITE.ssl.conf, les balises @@ca@@, @@cert@@
et @@key@@ sont remplacés par les valeurs des variables ca, cert et key
définies dans le fichier correspondant SITE-certs.conf
cgi-bin/
Répertoire des scripts cgi
www/
Répertoire des fichiers du serveur web
certsconf/
Répertoire qui contient la configuration pour les certificats à installer.
Les fichiers de ce répertoire sont de la forme SITE-certs.conf et chacun
d'eux correspond à un fichier SITE.ssl.conf dans sites/
RewriteRules/
Répertoire qui contient la configuration de réécriture. Tous les fichiers
RewriteRules*.conf de ce répertoire sont copiés dans /etc/apache2
Tous les autres fichiers sont copiés tels quels dans /etc/apache2. Notamment,
apache2.conf est le fichier de configuration principal d'apache et ports.conf le
fichier de configuration des ports d'écoute.
## Configuration TLS
Le site https://mozilla.github.io/server-side-tls/ssl-config-generator/ contient
des informations sur la façon de configurer ssl côté serveur pour la sécurité et
les navigateurs modernes
Voir les détails sur https://wiki.mozilla.org/Security/Server_Side_TLS

View File

@ -0,0 +1,15 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Cette variable est utilisée par la fonction refcerts() du script runs. C'est
# le nom d'un répertoire à chercher dans RUNSMODULESPATH qui contient les
# certificats à installer sur le serveur.
certsdir=@@certsdir@@
# Fichier contenant les certificats racines qui valident le certificat à
# installer, ainsi que les certificats qui sont rencontrés dans le dialogue avec
# d'autres serveurs web
ca=@@caname@@
# Certificat et clé privée à installer
cert=
key=

View File

@ -0,0 +1,24 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Utiliser 'udir --help-vars' pour une description de la signification des
# variables suivantes:
udir_desc="Fichiers à déployer sur @@host@@ dans le répertoire des cgi-bins"
udir_note="Il est possible de déployer les modifications dans ce répertoire avec 'uinst -y'"
udir_types=(uinst:rsync)
uinc=release
uinc_options=()
uinc_args=()
configure_variables=(dest)
configure_dest_for=()
config_scripts=()
install_profiles=false
workdir_rsync_options=()
workdir_excludes=()
workdir_includes=()
copy_files=true
rsync_options=()
destdir=root@@@host@@:CGIBINDIR
srcdir=.
files=()
owner=root:
modes=(u=rwX,g=rX,o=rX)
root_scripts=()

View File

@ -0,0 +1,6 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
echo "Content-Type: text/plain"
echo ""
echo "OK"

View File

@ -0,0 +1,15 @@
# -*- coding: utf-8 mode: conf -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
<IfModule mod_ssl.c>
# cf https://wiki.mozilla.org/Security/Server_Side_TLS
# Choisir un des profils. Clients les plus anciens pouvant se connecter:
# modern: Firefox 27, Chrome 30, Windows 7 IE 11, Edge, Opera 17, Safari 9, Android 5.0, Java 8
# intermediate: Firefox 1, Chrome 1, IE 7, Opera 5, Safari 1, Windows XP IE8, Android 2.3, Java 7
# old: Windows XP IE6, Java 6
#Define SSL_CONFIG_MODERN
#Define SSL_CONFIG_INTERMEDIATE
#Define SSL_CONFIG_OLD
# Faut-il activer HSTS?
#Define SSL_CONFIG_HSTS
</IfModule>

View File

@ -0,0 +1,4 @@
# -*- coding: utf-8 mode: conf -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Liste des modules à activer. Syntaxe:
# module ou +module pour activer un module
# -module pour le désactiver

View File

@ -0,0 +1,24 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Configuration du réseau sur le serveur. Ce fichier est traité différemment
# selon le mode de configuration.
# - En mode complet, ce fichier définit le nom d'hôte ainsi que toutes les
# interfaces, ponts et adresses. La variable host et les tableaux ips et brs
# sont pris en compte.
# - En mode partiel, seuls le tableau ips est pris en compte: il est utilisé
# pour définir des adresses ips supplémentaires à configurer sur le serveur.
# Liste des adresses IPs à configurer. Chaque élément est de la forme
# [IFACE:]dhcp ou [[IFACE][//GATEWAY]:]IP[/SUFFIX]
ips=()
# Liste des ponts à configurer. Chaque élément est de la forme BR:IFACES
# BR est le nom du pont, e.g. br0. IFACES est une liste d'interfaces séparées
# par une virgule. e.g. br0:eth0,eth1
brs=()
# Nom d'hôte pleinement qualifié. Si ce paramètre est spécifié, les fichiers
# /etc/hosts, /etc/hostname et /etc/mailname sont mis à jour.
host=
# Contenu du fichier /etc/networks
etc_networks=

View File

@ -7,16 +7,8 @@ Listen 80
<IfModule ssl_module> <IfModule ssl_module>
Listen 443 Listen 443
#NameVirtualHost IP:443
#Listen IP:443
#@@ips_namevirtualhosts@@
#@@ips_listens@@
</IfModule> </IfModule>
<IfModule mod_gnutls.c> <IfModule mod_gnutls.c>
Listen 443 Listen 443
#NameVirtualHost IP:443
#Listen IP:443
#@@ips_namevirtualhosts@@
#@@ips_listens@@
</IfModule> </IfModule>

View File

@ -0,0 +1,2 @@
# -*- coding: utf-8 mode: conf -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8

View File

@ -0,0 +1,4 @@
# -*- coding: utf-8 mode: conf -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Liste des sites à activer. Syntaxe:
# site ou +site pour activer un site
# -site pour le désactiver

View File

@ -0,0 +1,9 @@
# -*- coding: utf-8 mode: conf -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Liste de paquets système à installer, e.g. php5 ou libapache2-mod-jk
# Chaque package doit être indiqué sur une ligne à part
#libapache2-mod-jk
#libapache2-mod-auth-cas
#php5-mysql
#php5-ldap
#php5-gmp
#php5-gd

View File

@ -0,0 +1,15 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Cette variable est utilisée par la fonction refcerts() du script runs. C'est
# le nom d'un répertoire à chercher dans RUNSMODULESPATH qui contient les
# certificats à installer sur le serveur.
certsdir=@@certsdir@@
# Fichier contenant les certificats racines qui valident le certificat à
# installer, ainsi que les certificats qui sont rencontrés dans le dialogue avec
# d'autres serveurs web
ca=@@caname@@
# Certificat et clé privée à installer
cert=
key=

View File

@ -0,0 +1,31 @@
# -*- coding: utf-8 mode: conf -*- vim:syntax=apache:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
ServerName SITE.TLD
ServerAlias SITE SITE.local
ServerAdmin @@admin@@
DocumentRoot /var/www/SITE
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/SITE_error.log
CustomLog ${APACHE_LOG_DIR}/SITE_access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>

View File

@ -1,54 +1,27 @@
# -*- coding: utf-8 mode: conf -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: conf -*- vim:syntax=apache:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
<IfModule mod_ssl.c> <IfModule mod_ssl.c>
<VirtualHost _default_:443> <VirtualHost _default_:443>
ServerName @@host@@ ServerName SITE.TLD
ServerAlias @@aliases@@ ServerAlias SITE SITE.local
ServerAdmin @@admin@@ ServerAdmin @@admin@@
DocumentRoot /var/www DocumentRoot /var/www/SITE
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
# Pour les serveurs qui ont le module mod_WebObjects: # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# mod_WebObjects et ScriptAlias ne peuvent pas gérer le même préfixe. Pour # error, crit, alert, emerg.
# utiliser des cgi-bin avec WebObjects, il faut soit changer le préfixe de # It is also possible to configure the loglevel for particular
# ScriptAlias, soit changer le préfixe de WebObjectsAlias dans le fichier # modules, e.g.
# mod-webobjects.conf #LogLevel info ssl:warn
# Sinon, il suffit de commenter les lignes suivantes:
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/ssl_error.log ErrorLog ${APACHE_LOG_DIR}/SITE_error.log
CustomLog ${APACHE_LOG_DIR}/SITE_access.log combined
# Possible values include: debug, info, notice, warn, error, crit, # For most configuration files from conf-available/, which are
# alert, emerg. # enabled or disabled at a global level, it is possible to
LogLevel warn # include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined # after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
<LocationMatch "/cgi-bin/WebObjects/.*">
Order allow,deny
Allow from all
</LocationMatch>
<Location /WebObjects>
Order allow,deny
Allow from all
</Location>
# SSL Engine Switch: # SSL Engine Switch:
# Enable/Disable SSL for this virtual host. # Enable/Disable SSL for this virtual host.
@ -56,7 +29,7 @@
# A self-signed (snakeoil) certificate can be created by installing # A self-signed (snakeoil) certificate can be created by installing
# the ssl-cert package. See # the ssl-cert package. See
# /usr/share/doc/apache2.2-common/README.Debian.gz for more info. # /usr/share/doc/apache2/README.Debian.gz for more info.
# If both key and certificate are stored in the same file, only the # If both key and certificate are stored in the same file, only the
# SSLCertificateFile directive is needed. # SSLCertificateFile directive is needed.
SSLCertificateFile @@cert@@ SSLCertificateFile @@cert@@
@ -99,21 +72,6 @@
#SSLVerifyClient require #SSLVerifyClient require
#SSLVerifyDepth 10 #SSLVerifyDepth 10
# Access Control:
# With SSLRequire you can do per-directory access control based
# on arbitrary complex boolean expressions containing server
# variable checks and other lookup directives. The syntax is a
# mixture between C and Perl. See the mod_ssl documentation
# for more details.
#<Location />
#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
# and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
# and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
# and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
# and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \
# or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
#</Location>
# SSL Engine Options: # SSL Engine Options:
# Set various options for the SSL engine. # Set various options for the SSL engine.
# o FakeBasicAuth: # o FakeBasicAuth:
@ -134,19 +92,15 @@
# because the extraction step is an expensive operation and is usually # because the extraction step is an expensive operation and is usually
# useless for serving static content. So one usually enables the # useless for serving static content. So one usually enables the
# exportation for CGI and SSI requests only. # exportation for CGI and SSI requests only.
# o StrictRequire:
# This denies access when "SSLRequireSSL" or "SSLRequire" applied even
# under a "Satisfy any" situation, i.e. when it applies access is denied
# and no other module can change it.
# o OptRenegotiate: # o OptRenegotiate:
# This enables optimized SSL connection renegotiation handling when SSL # This enables optimized SSL connection renegotiation handling when SSL
# directives are used in per-directory context. # directives are used in per-directory context.
#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
<FilesMatch "\.(cgi|shtml|phtml|php)$"> <FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars SSLOptions +StdEnvVars
</FilesMatch> </FilesMatch>
<Directory /usr/lib/cgi-bin> <Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars SSLOptions +StdEnvVars
</Directory> </Directory>
# SSL Protocol Adjustments: # SSL Protocol Adjustments:
@ -174,8 +128,8 @@
# their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and # their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and
# "force-response-1.0" for this. # "force-response-1.0" for this.
BrowserMatch "MSIE [2-6]" \ BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \ nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0 downgrade-1.0 force-response-1.0
# MSIE 7 and newer should be able to use keepalive # MSIE 7 and newer should be able to use keepalive
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

View File

@ -0,0 +1,24 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Utiliser 'udir --help-vars' pour une description de la signification des
# variables suivantes:
udir_desc="Fichiers à déployer dans le répertoire des documents web"
udir_note="Il est possible de déployer les modifications dans ce répertoire avec 'uinst -y'"
udir_types=(uinst:rsync)
uinc=release
uinc_options=()
uinc_args=()
configure_variables=(dest)
configure_dest_for=()
config_scripts=()
install_profiles=false
workdir_rsync_options=()
workdir_excludes=()
workdir_includes=()
copy_files=true
rsync_options=(--delete-after)
destdir=root@@@host@@:HTDOCSBASE/SITE
srcdir=.
files=()
owner=www-data:
modes=(u=rwX,g=rX,o=rX)
root_scripts=()

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -0,0 +1,17 @@
worker.list=prod,dev
worker.prod.port=8009
worker.prod.host=@@prod_host@@
worker.prod.type=ajp13
worker.prod.lbfactor=1
worker.prod.connection_pool_timeout=600
worker.prod.socket_keepalive=1
worker.prod.socket_timeout=60
worker.dev.port=8009
worker.dev.host=@@dev_host@@
worker.dev.type=ajp13
worker.dev.lbfactor=1
worker.dev.connection_pool_timeout=600
worker.dev.socket_keepalive=1
worker.dev.socket_timeout=60

View File

@ -0,0 +1,24 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Utiliser 'udir --help-vars' pour une description de la signification des
# variables suivantes:
udir_desc="Fichiers à déployer sur @@host@@ dans le répertoire des documents web"
udir_note="Il est possible de déployer les modifications dans ce répertoire avec 'uinst -y'"
udir_types=(uinst:rsync)
uinc=release
uinc_options=()
uinc_args=()
configure_variables=(dest)
configure_dest_for=()
config_scripts=()
install_profiles=false
workdir_rsync_options=()
workdir_excludes=()
workdir_includes=()
copy_files=true
rsync_options=()
destdir=root@@@host@@:HTDOCSDIR
srcdir=.
files=()
owner=www-data:
modes=(u=rwX,g=rX,o=rX)
root_scripts=()

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -1,10 +1,6 @@
#!/bin/bash #!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source /etc/ulibauto || exit 1
source /etc/ulib &&
urequire DEFAULTS ||
exit 1
OENC="$UTF8"
PRIHOST= PRIHOST=
PUBHOST= PUBHOST=

View File

@ -0,0 +1,103 @@
<IfModule mod_ssl.c>
# cf https://wiki.mozilla.org/Security/Server_Side_TLS
<IfDefine SSL_CONFIG_MODERN>
# modern configuration not supported. same as SSL_CONFIG_INTERMEDIATE below
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder on
</IfDefine>
<IfDefine !SSL_CONFIG_MODERN>
<IfDefine SSL_CONFIG_INTERMEDIATE>
# intermediate configuration, tweak to your needs
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets off
</IfDefine>
<IfDefine !SSL_CONFIG_INTERMEDIATE>
<IfDefine SSL_CONFIG_OLD>
# old configuration, tweak to your needs
SSLProtocol all -SSLv2
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:DES-CBC3-SHA:HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP
SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets off
</IfDefine>
<IfDefine !SSL_CONFIG_OLD>
# default debian configuration
# SSL Cipher Suite:
# List the ciphers that the client is permitted to negotiate.
# See the mod_ssl documentation for a complete list.
# enable only secure ciphers:
SSLCipherSuite HIGH:MEDIUM:!ADH
# Use this instead if you want to allow cipher upgrades via SGC facility.
# In this case you also have to use something like
# SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128
# see http://httpd.apache.org/docs/2.2/ssl/ssl_howto.html.en#upgradeenc
#SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
# enable only secure protocols: SSLv3 and TLSv1, but not SSLv2
SSLProtocol all -SSLv2
</IfDefine>
</IfDefine>
</IfDefine>
#
# Pseudo Random Number Generator (PRNG):
# Configure one or more sources to seed the PRNG of the SSL library.
# The seed data should be of good random quality.
# WARNING! On some platforms /dev/random blocks if not enough entropy
# is available. This means you then cannot use the /dev/random device
# because it would lead to very long connection times (as long as
# it requires to make more entropy available). But usually those
# platforms additionally provide a /dev/urandom device which doesn't
# block. So, if available, use this one instead. Read the mod_ssl User
# Manual for more details.
#
SSLRandomSeed startup builtin
SSLRandomSeed startup file:/dev/urandom 512
SSLRandomSeed connect builtin
SSLRandomSeed connect file:/dev/urandom 512
##
## SSL Global Context
##
## All SSL configuration in this context applies both to
## the main server and all SSL-enabled virtual hosts.
##
#
# Some MIME-types for downloading Certificates and CRLs
#
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
# Pass Phrase Dialog:
# Configure the pass phrase gathering process.
# The filtering dialog program (`builtin' is a internal
# terminal dialog) has to provide the pass phrase on stdout.
SSLPassPhraseDialog builtin
# Inter-Process Session Cache:
# Configure the SSL Session Cache: First the mechanism
# to use and second the expiring timeout (in seconds).
# (The mechanism dbm has known memory leaks and should not be used).
#SSLSessionCache dbm:${APACHE_RUN_DIR}/ssl_scache
SSLSessionCache shmcb:${APACHE_RUN_DIR}/ssl_scache(512000)
SSLSessionCacheTimeout 300
# Semaphore:
# Configure the path to the mutual exclusion semaphore the
# SSL engine uses internally for inter-process synchronization.
SSLMutex file:${APACHE_RUN_DIR}/ssl_mutex
# Allow insecure renegotiation with clients which do not yet support the
# secure renegotiation protocol. Default: Off
#SSLInsecureRenegotiation on
# Whether to forbid non-SNI clients to access name based virtual hosts.
# Default: Off
#SSLStrictSNIVHostCheck On
</IfModule>

View File

@ -1,103 +0,0 @@
<IfModule mod_ssl.c>
# cf https://wiki.mozilla.org/Security/Server_Side_TLS
<IfDefine SSL_CONFIG_MODERN>
# modern configuration not supported. same as SSL_CONFIG_INTERMEDIATE below
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder on
</IfDefine>
<IfDefine !SSL_CONFIG_MODERN>
<IfDefine SSL_CONFIG_INTERMEDIATE>
# intermediate configuration, tweak to your needs
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets off
</IfDefine>
<IfDefine !SSL_CONFIG_INTERMEDIATE>
<IfDefine SSL_CONFIG_OLD>
# old configuration, tweak to your needs
SSLProtocol all -SSLv2
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:DES-CBC3-SHA:HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP
SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets off
</IfDefine>
<IfDefine !SSL_CONFIG_OLD>
# default debian configuration
# SSL Cipher Suite:
# List the ciphers that the client is permitted to negotiate.
# See the mod_ssl documentation for a complete list.
# enable only secure ciphers:
SSLCipherSuite HIGH:MEDIUM:!ADH
# Use this instead if you want to allow cipher upgrades via SGC facility.
# In this case you also have to use something like
# SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128
# see http://httpd.apache.org/docs/2.2/ssl/ssl_howto.html.en#upgradeenc
#SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
# enable only secure protocols: SSLv3 and TLSv1, but not SSLv2
SSLProtocol all -SSLv2
</IfDefine>
</IfDefine>
</IfDefine>
#
# Pseudo Random Number Generator (PRNG):
# Configure one or more sources to seed the PRNG of the SSL library.
# The seed data should be of good random quality.
# WARNING! On some platforms /dev/random blocks if not enough entropy
# is available. This means you then cannot use the /dev/random device
# because it would lead to very long connection times (as long as
# it requires to make more entropy available). But usually those
# platforms additionally provide a /dev/urandom device which doesn't
# block. So, if available, use this one instead. Read the mod_ssl User
# Manual for more details.
#
SSLRandomSeed startup builtin
SSLRandomSeed startup file:/dev/urandom 512
SSLRandomSeed connect builtin
SSLRandomSeed connect file:/dev/urandom 512
##
## SSL Global Context
##
## All SSL configuration in this context applies both to
## the main server and all SSL-enabled virtual hosts.
##
#
# Some MIME-types for downloading Certificates and CRLs
#
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
# Pass Phrase Dialog:
# Configure the pass phrase gathering process.
# The filtering dialog program (`builtin' is a internal
# terminal dialog) has to provide the pass phrase on stdout.
SSLPassPhraseDialog builtin
# Inter-Process Session Cache:
# Configure the SSL Session Cache: First the mechanism
# to use and second the expiring timeout (in seconds).
# (The mechanism dbm has known memory leaks and should not be used).
#SSLSessionCache dbm:${APACHE_RUN_DIR}/ssl_scache
SSLSessionCache shmcb:${APACHE_RUN_DIR}/ssl_scache(512000)
SSLSessionCacheTimeout 300
# Semaphore:
# Configure the path to the mutual exclusion semaphore the
# SSL engine uses internally for inter-process synchronization.
SSLMutex file:${APACHE_RUN_DIR}/ssl_mutex
# Allow insecure renegotiation with clients which do not yet support the
# secure renegotiation protocol. Default: Off
#SSLInsecureRenegotiation on
# Whether to forbid non-SNI clients to access name based virtual hosts.
# Default: Off
#SSLStrictSNIVHostCheck On
</IfModule>

View File

@ -0,0 +1,29 @@
# -*- coding: utf-8 mode: conf -*- vim:syntax=apache:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz
NameVirtualHost *:80
Listen *:80
<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
#NameVirtualHost IP:443
#Listen IP:443
#@@ips_namevirtualhosts@@
#@@ips_listens@@
</IfModule>
<IfModule mod_gnutls.c>
#NameVirtualHost IP:443
#Listen IP:443
#@@ips_namevirtualhosts@@
#@@ips_listens@@
</IfModule>

View File

@ -1,29 +0,0 @@
# -*- coding: utf-8 mode: conf -*- vim:syntax=apache:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz
NameVirtualHost *:80
Listen *:80
<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
#NameVirtualHost IP:443
#Listen IP:443
#@@ips_namevirtualhosts@@
#@@ips_listens@@
</IfModule>
<IfModule mod_gnutls.c>
#NameVirtualHost IP:443
#Listen IP:443
#@@ips_namevirtualhosts@@
#@@ips_listens@@
</IfModule>

View File

@ -0,0 +1,51 @@
# -*- coding: utf-8 mode: conf -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
<VirtualHost *:80>
ServerName @@host@@
ServerAlias @@aliases@@
ServerAdmin @@admin@@
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
# Pour les serveurs qui ont le module mod_WebObjects:
# mod_WebObjects et ScriptAlias ne peuvent pas gérer le même préfixe. Pour
# utiliser des cgi-bin avec WebObjects, il faut soit changer le préfixe de
# ScriptAlias, soit changer le préfixe de WebObjectsAlias dans le fichier
# mod-webobjects.conf
# Sinon, il suffit de commenter les lignes suivantes:
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
# Pour les serveurs qui ont le module mod_WebObjects:
<LocationMatch "/cgi-bin/WebObjects/.*">
Order allow,deny
Allow from all
</LocationMatch>
<Location /WebObjects>
Order allow,deny
Allow from all
</Location>
</VirtualHost>

View File

@ -1,51 +0,0 @@
# -*- coding: utf-8 mode: conf -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
<VirtualHost *:80>
ServerName @@host@@
ServerAlias @@aliases@@
ServerAdmin @@admin@@
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
# Pour les serveurs qui ont le module mod_WebObjects:
# mod_WebObjects et ScriptAlias ne peuvent pas gérer le même préfixe. Pour
# utiliser des cgi-bin avec WebObjects, il faut soit changer le préfixe de
# ScriptAlias, soit changer le préfixe de WebObjectsAlias dans le fichier
# mod-webobjects.conf
# Sinon, il suffit de commenter les lignes suivantes:
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
# Pour les serveurs qui ont le module mod_WebObjects:
<LocationMatch "/cgi-bin/WebObjects/.*">
Order allow,deny
Allow from all
</LocationMatch>
<Location /WebObjects>
Order allow,deny
Allow from all
</Location>
</VirtualHost>

View File

@ -0,0 +1,190 @@
# -*- coding: utf-8 mode: conf -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerName @@host@@
ServerAlias @@aliases@@
ServerAdmin @@admin@@
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
# Pour les serveurs qui ont le module mod_WebObjects:
# mod_WebObjects et ScriptAlias ne peuvent pas gérer le même préfixe. Pour
# utiliser des cgi-bin avec WebObjects, il faut soit changer le préfixe de
# ScriptAlias, soit changer le préfixe de WebObjectsAlias dans le fichier
# mod-webobjects.conf
# Sinon, il suffit de commenter les lignes suivantes:
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/ssl_error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
<LocationMatch "/cgi-bin/WebObjects/.*">
Order allow,deny
Allow from all
</LocationMatch>
<Location /WebObjects>
Order allow,deny
Allow from all
</Location>
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
# A self-signed (snakeoil) certificate can be created by installing
# the ssl-cert package. See
# /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
# If both key and certificate are stored in the same file, only the
# SSLCertificateFile directive is needed.
SSLCertificateFile @@cert@@
SSLCertificateKeyFile @@key@@
# Server Certificate Chain:
# Point SSLCertificateChainFile at a file containing the
# concatenation of PEM encoded CA certificates which form the
# certificate chain for the server certificate. Alternatively
# the referenced file can be the same as SSLCertificateFile
# when the CA certificates are directly appended to the server
# certificate for convinience.
SSLCertificateChainFile @@ca@@
# Certificate Authority (CA):
# Set the CA certificate verification path where to find CA
# certificates for client authentication or alternatively one
# huge file containing all of them (file must be PEM encoded)
# Note: Inside SSLCACertificatePath you need hash symlinks
# to point to the certificate files. Use the provided
# Makefile to update the hash symlinks after changes.
#SSLCACertificatePath /etc/ssl/certs/
#SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt
# Certificate Revocation Lists (CRL):
# Set the CA revocation path where to find CA CRLs for client
# authentication or alternatively one huge file containing all
# of them (file must be PEM encoded)
# Note: Inside SSLCARevocationPath you need hash symlinks
# to point to the certificate files. Use the provided
# Makefile to update the hash symlinks after changes.
#SSLCARevocationPath /etc/apache2/ssl.crl/
#SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl
# Client Authentication (Type):
# Client certificate verification type and depth. Types are
# none, optional, require and optional_no_ca. Depth is a
# number which specifies how deeply to verify the certificate
# issuer chain before deciding the certificate is not valid.
#SSLVerifyClient require
#SSLVerifyDepth 10
# Access Control:
# With SSLRequire you can do per-directory access control based
# on arbitrary complex boolean expressions containing server
# variable checks and other lookup directives. The syntax is a
# mixture between C and Perl. See the mod_ssl documentation
# for more details.
#<Location />
#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
# and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
# and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
# and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
# and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \
# or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
#</Location>
# SSL Engine Options:
# Set various options for the SSL engine.
# o FakeBasicAuth:
# Translate the client X.509 into a Basic Authorisation. This means that
# the standard Auth/DBMAuth methods can be used for access control. The
# user name is the `one line' version of the client's X.509 certificate.
# Note that no password is obtained from the user. Every entry in the user
# file needs this password: `xxj31ZMTZzkVA'.
# o ExportCertData:
# This exports two additional environment variables: SSL_CLIENT_CERT and
# SSL_SERVER_CERT. These contain the PEM-encoded certificates of the
# server (always existing) and the client (only existing when client
# authentication is used). This can be used to import the certificates
# into CGI scripts.
# o StdEnvVars:
# This exports the standard SSL/TLS related `SSL_*' environment variables.
# Per default this exportation is switched off for performance reasons,
# because the extraction step is an expensive operation and is usually
# useless for serving static content. So one usually enables the
# exportation for CGI and SSI requests only.
# o StrictRequire:
# This denies access when "SSLRequireSSL" or "SSLRequire" applied even
# under a "Satisfy any" situation, i.e. when it applies access is denied
# and no other module can change it.
# o OptRenegotiate:
# This enables optimized SSL connection renegotiation handling when SSL
# directives are used in per-directory context.
#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
# SSL Protocol Adjustments:
# The safe and default but still SSL/TLS standard compliant shutdown
# approach is that mod_ssl sends the close notify alert but doesn't wait for
# the close notify alert from client. When you need a different shutdown
# approach you can use one of the following variables:
# o ssl-unclean-shutdown:
# This forces an unclean shutdown when the connection is closed, i.e. no
# SSL close notify alert is send or allowed to received. This violates
# the SSL/TLS standard but is needed for some brain-dead browsers. Use
# this when you receive I/O errors because of the standard approach where
# mod_ssl sends the close notify alert.
# o ssl-accurate-shutdown:
# This forces an accurate shutdown when the connection is closed, i.e. a
# SSL close notify alert is send and mod_ssl waits for the close notify
# alert of the client. This is 100% SSL/TLS standard compliant, but in
# practice often causes hanging connections with brain-dead browsers. Use
# this only for browsers where you know that their SSL implementation
# works correctly.
# Notice: Most problems of broken clients are also related to the HTTP
# keep-alive facility, so you usually additionally want to disable
# keep-alive for those clients, too. Use variable "nokeepalive" for this.
# Similarly, one has to force some clients to use HTTP/1.0 to workaround
# their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and
# "force-response-1.0" for this.
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
# MSIE 7 and newer should be able to use keepalive
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
# cf https://wiki.mozilla.org/Security/Server_Side_TLS
<IfDefine SSL_CONFIG_HSTS>
<IfModule mod_headers.c>
# HSTS (15768000 seconds = 6 months)
Header always set Strict-Transport-Security "max-age=15768000"
</IfModule>
</IfDefine>
</VirtualHost>
</IfModule>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -76,6 +76,8 @@ function urequire() {
# Le module DEFAULTS est traité de façon particulière: si le fichier associé # Le module DEFAULTS est traité de façon particulière: si le fichier associé
# n'est pas trouvé, charger base, pretty, sysinfos et compat à la place # n'est pas trouvé, charger base, pretty, sysinfos et compat à la place
# Si un module n'est pas trouvé, quitter le script avec die() # Si un module n'est pas trouvé, quitter le script avec die()
[ -z "$__ULIB_NO_DISABLE_SET_X" ] && [[ $- == *x* ]] && { set +x; local __ULIB_UREQUIRE_SET_X=1; }; if [ -n "$__ULIB_UREQUIRE_SET_X" ]; then [ -n "$__ULIB_UREQUIRE_SET_X_RL1" ] || local __ULIB_UREQUIRE_SET_X_RL1; local __ULIB_UREQUIRE_SET_X_RL2=$RANDOM; [ -n "$__ULIB_UREQUIRE_SET_X_RL1" ] || __ULIB_UREQUIRE_SET_X_RL1=$__ULIB_UREQUIRE_SET_X_RL2; fi # désactiver set -x de manière réentrante
local __u_module __u_ulibdir __u_found local __u_module __u_ulibdir __u_found
[ -n "$*" ] || set DEFAULTS [ -n "$*" ] || set DEFAULTS
@ -106,6 +108,8 @@ function urequire() {
fi fi
[ -n "$__u_found" ] || die "Unable to find $__u_module in ${ULIBDIR[*]}" [ -n "$__u_found" ] || die "Unable to find $__u_module in ${ULIBDIR[*]}"
done done
[ -n "$__ULIB_UREQUIRE_SET_X" -a "$__ULIB_UREQUIRE_SET_X_RL1" == "$__ULIB_UREQUIRE_SET_X_RL2" ] && set -x
return 0 return 0
} }

View File

@ -62,6 +62,8 @@ function uprovide() {
__ULIB_FORCE_RELOAD= __ULIB_FORCE_RELOAD=
function urequire() { function urequire() {
[ -z "$__ULIB_NO_DISABLE_SET_X" ] && [[ $- == *x* ]] && { set +x; local __ULIB_UREQUIRE_SET_X=1; }; if [ -n "$__ULIB_UREQUIRE_SET_X" ]; then [ -n "$__ULIB_UREQUIRE_SET_X_RL1" ] || local __ULIB_UREQUIRE_SET_X_RL1; local __ULIB_UREQUIRE_SET_X_RL2=$RANDOM; [ -n "$__ULIB_UREQUIRE_SET_X_RL1" ] || __ULIB_UREQUIRE_SET_X_RL1=$__ULIB_UREQUIRE_SET_X_RL2; fi # désactiver set -x de manière réentrante
local __u_module __u_ulibdir __u_found local __u_module __u_ulibdir __u_found
[ -n "$*" ] || set DEFAULTS [ -n "$*" ] || set DEFAULTS
@ -91,6 +93,8 @@ function urequire() {
fi fi
[ -n "$__u_found" ] || die "Unable to find $__u_module in ${ULIBDIR[*]}" [ -n "$__u_found" ] || die "Unable to find $__u_module in ${ULIBDIR[*]}"
done done
[ -n "$__ULIB_UREQUIRE_SET_X" -a "$__ULIB_UREQUIRE_SET_X_RL1" == "$__ULIB_UREQUIRE_SET_X_RL2" ] && set -x
return 0 return 0
} }

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname "$0")/lib/ulib/ulib" || exit 1 source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire DEFAULTS urequire DEFAULTS apache.tools
function display_help() { function display_help() {
uecho "$scriptname: Créer un fichier de redirections pour Apache à partir d'un certain uecho "$scriptname: Créer un fichier de redirections pour Apache à partir d'un certain
@ -82,23 +82,9 @@ Dans les exemples donnés ci-dessus, $URL est l'\''url générée par la réécr
et $proxy_acls la valeur du champ proxy_acls spécifiée ci-dessus.' et $proxy_acls la valeur du champ proxy_acls spécifiée ci-dessus.'
} }
function joinurl() {
# joindre chaque élément de $1..@ par /, en évitant les slashes en double
local i url
for i in "$@"; do
[ -n "$i" ] || continue
if [ -n "$url" ]; then
url="${url%/}/${i#/}"
else
url="$i"
fi
done
[ -n "$url" ] && echo "$url"
}
proxy_enabled= proxy_enabled=
infile= infile=
outfile="RewriteRules.conf" outfile=
htmlfile= htmlfile=
host= host=
parse_opts "${PRETTYOPTS[@]}" \ parse_opts "${PRETTYOPTS[@]}" \
@ -109,187 +95,20 @@ parse_opts "${PRETTYOPTS[@]}" \
-w: htmlfile= \ -w: htmlfile= \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"
[ -n "$infile" ] || die "Il faut spécifier le fichier de règles"
[ -f "$infile" ] || die "Fichier de règles non trouvé: $(ppath "$infile")"
thishost="$1" thishost="$1"
[ -n "$thishost" ] || die "Il faut spécifier l'hôte pour lequel créer le fichier de configuration" if [ -n "$infile" ]; then infiles=("$infile")
else array_lsfiles infiles . "*rewrite*.rules"
function has_proxy() {
# vérifier que les options $1 contiennent 'P'
local options
array_split options "$1" ","
array_contains options P
}
if [ -n "$htmlfile" ]; then
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!-- -*- coding: utf-8 mode: html -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>'"$thishost</title>
</head>
<body>
<h2>$thishost</h2>
<ul>" >"$htmlfile"
fi fi
>"$outfile" [ ${#infiles[*]} -gt 0 ] || die "Il faut spécifier le fichier de règles avec -f"
array_from_lines rules "$(<"$infile" filter_comment)" for infile in "${infiles[@]}"; do
prefix= if [ -f "$infile" ]; then
for rule in "${rules[@]}"; do estep "$(ppath "$infile")"
if beginswith "$rule" ^; then legacy_mkRewriteRules "$infile" "$thishost" "$outfile" "$htmlfile" "$proxy_enabled"
# Collecter les préfixe pour la règle suivante
prefix="${prefix:+$prefix
}${rule#^}"
continue
elif beginswith "$rule" =; then
# ligne litérale
echo "${rule#=}" >>"$outfile"
continue
fi
IFS=:; set -- $rule; unset IFS
index=1
done=
while [ -z "$done" ]; do
current="$1"; shift
while endswith "$current" "\\"; do
current="${current%\\}:$1"; shift
done
case $index in
1) src="$current";;
2) dest="$current";;
3) host="$current";;
4) suffix="$current";;
5) options="$current";;
6) prot="${current:-http}";;
7) proxy_acls="$current";;
*) done=1;;
esac
index=$(($index + 1))
done
# mettre en forme prefix s'il est défini
[ -n "$prefix" ] && prefix="$prefix
"
if [ "$thishost" == "$host" ]; then
host=
fi
usrc="$src"
trail=1
if endswith "$src" '$'; then
trail=
usrc="${src%$}"
fi
noslash=
if endswith "$suffix" '$'; then
noslash=1
suffix="${suffix%$}"
fi
if endswith "$dest" '$'; then
noslash=1
dest="${dest%$}"
fi
proxy_url=
proxy_use=
if endswith "$dest" .woa; then
# lien vers une application
if [ -n "$host" ]; then
# sur un autre hôte
if [ -n "$noslash" ]; then
echo "${prefix}RewriteRule ^/$src${trail:+(.*)} $(joinurl "$prot://$host/cgi-bin/WebObjects" "$dest" "$suffix")${trail:+\$1} [L${options:+,$options}]" >>"$outfile"
setx url joinurl "http://$thishost" "$usrc"
setx proxy_url joinurl "$prot://$host/cgi-bin/WebObjects" "$dest" "$suffix"
else
echo "${prefix}RewriteRule ^/$src\$ /$src/" >>"$outfile"
echo "${prefix}RewriteRule ^/$src/(.*) $(joinurl "$prot://$host/cgi-bin/WebObjects" "$dest" "$suffix" "\$1") [L${options:+,$options}]" >>"$outfile"
setx url joinurl "http://$thishost" "$usrc/"
setx proxy_url joinurl "$prot://$host/cgi-bin/WebObjects" "$dest" "$suffix/"
fi
else
# sur le même hôte
if [ -n "$noslash" ]; then
echo "${prefix}RewriteRule ^/$src${trail:+(.*)} $(joinurl /cgi-bin/WebObjects "$dest" "$suffix")${trail:+\$1} [L,P${options:+,$options}]" >>"$outfile"
setx url joinurl "http://$thishost" "$usrc"
setx proxy_url joinurl "$prot://$thishost/cgi-bin/WebObjects" "$dest" "$suffix"
proxy_use=1
else
echo "${prefix}RewriteRule ^/$src\$ /$src/" >>"$outfile"
echo "${prefix}RewriteRule ^/$src/(.*) $(joinurl /cgi-bin/WebObjects "$dest" "$suffix" "\$1") [L,P${options:+,$options}]" >>"$outfile"
setx url joinurl "http://$thishost" "$usrc/"
setx proxy_url joinurl "$prot://$thishost/cgi-bin/WebObjects" "$dest" "$suffix/"
proxy_use=1
fi
fi
else else
# lien vers une url eerror "$(ppath "$infile"): fichier introuvable"
if [ -n "$host" ]; then
# sur un autre hôte
if [ -n "$noslash" ]; then
echo "${prefix}RewriteRule ^/$src${trail:+(.*)} $(joinurl "$prot://$host" "$dest" "$suffix")${trail:+\$1} [L${options:+,$options}]" >>"$outfile"
setx url joinurl "http://$thishost" "$usrc"
setx proxy_url joinurl "$prot://$host" "$dest" "$suffix"
else
echo "${prefix}RewriteRule ^/$src\$ /$src/" >>"$outfile"
echo "${prefix}RewriteRule ^/$src/(.*) $(joinurl "$prot://$host" "$dest" "$suffix" "\$1") [L${options:+,$options}]" >>"$outfile"
setx url joinurl "http://$thishost" "$usrc/"
setx proxy_url joinurl "$prot://$host" "$dest" "$suffix/"
fi
else
# sur le même hôte
if [ -n "$noslash" ]; then
echo "${prefix}RewriteRule ^/$src${trail:+(.*)} $(joinurl / "$dest" "$suffix")${trail:+\$1}${options:+ [$options]}" >>"$outfile"
setx url joinurl "http://$thishost" "$usrc"
setx proxy_url joinurl "http://$thishost" "$dest" "$suffix"
else
echo "${prefix}RewriteRule ^/$src\$ /$src/" >>"$outfile"
echo "${prefix}RewriteRule ^/$src/(.*) $(joinurl / "$dest" "$suffix" "\$1")${options:+ [$options]}" >>"$outfile"
setx url joinurl "http://$thishost" "$usrc/"
setx proxy_url joinurl "http://$thishost" "$dest" "$suffix/"
fi
fi
fi fi
has_proxy "$options" && proxy_use=1 # réinitialiser pour ne pas écraser un fichier existant
if [ -n "$proxy_enabled" -a -n "$proxy_use" ]; then outfile=
if [ "$proxy_acls" == "None" ]; then htmlfile=
:
elif [ -z "$proxy_acls" ]; then
echo "\
<Proxy $proxy_url*>
AddDefaultCharset off
Order Deny,Allow
Allow from all
</Proxy>" >>"$outfile"
else
echo "\
<Proxy $proxy_url*>
AddDefaultCharset off
Order Allow,Deny
Allow from $proxy_acls
</Proxy>" >>"$outfile"
fi
fi
echo "" >>"$outfile"
if [ -n "$htmlfile" ]; then
echo "<li><a href=\"$url\">$url</a></li>" >>"$htmlfile"
fi
# Réinitialiser les préfixes pour chaque règle
prefix=
done done
if [ -n "$htmlfile" ]; then
echo '</ul>
</body>
</html>' >>"$htmlfile"
fi

9814
ucrontab

File diff suppressed because it is too large Load Diff