nutools/uconf

117 lines
4.0 KiB
Bash
Executable File

#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
urequire conf
function display_help() {
local OENC="$UTF8"
uecho "$scriptname: Activer ou désactiver un paramètre dans un fichier de configuration
USAGE
$scriptname [options] config name[=value]...
OPTIONS
-e
Activer le paramètre (par défaut). Si le paramètre existe, mais est
commenté, il est décommenté. Si une valeur est spécifiée pour le
paramètre, le paramètre est modifié dans le fichier en conséquence.
-q
Cette option s'utilise avec l'option -e et le type shell. Elle permet
de s'assurer que les valeurs ayant des espaces et/ou des caractères
spéciaux sont quotées
-d
Désactiver le paramètre. Le paramètre est commenté s'il existe dans le
fichier
-a
Ajouter une valeur à la variable, ou un paramètre avec cette valeur
(suivant le type de fichier de configuration)
-A
Ajouter une valeur au tableau, ou un paramètre avec cette valeur
(suivant le type de fichier de configuration)
-t TYPE
Type de fichier de configuration. TYPE peut être sh (par défaut), apache
ou mysql.
shell
les paramètres sont de la forme 'name=value', et les commentaires
débutent par '#'. Ce type peut être utilisé pour tous les fichiers
ayant ces caractéristiques, dont les fichiers de script shell
apache
les paramètres sont de la forme 'name value', et les commentaires
débutent par '#'. Ce type peut être utilisé pour tous les fichiers
ayant ces caractéristiques, dont les fichiers de configuration
apache
mysql, php
les paramètres sont dans des sections nommées de la forme [section],
sont de la forme 'name=value', et les commentaires débutent par '#'
ou ';'
Ce type peut être utilisé pour tous les fichiers ayant ces
caractéristiques, dont les fichiers de configuration de mysql et de
php. Avec ce type, la section est obligatoire.
-s SECTION
Avec le type mysql, préciser la section dans laquelle inscrire le
paramètre. Attention! La section DOIT exister, elle n'est pas créée
automatiquement."
}
action=enable
quoted=
type=auto
section=
parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with display_help' \
-e action=enable \
-q quoted=1 \
-d action=disable \
-a action=append \
-A action=array_append \
-t: type= \
--shell type=shell \
--apache type=apache \
--mysql type=mysql \
--php type=mysql \
-s: section= \
@ args -- "$@" && set -- "${args[@]}" || die "$args"
config="$1"; shift
[ -f "$config" ] || touch "$config" || die
if [ "$type" == auto ]; then
# essayer de deviner le type
[ -f "$config" ] && first_lines="$(head -n5 <"$config")" || first_lines=
name="$(basename "$config")"
MYSQL_NAMES=(my.cnf php.ini)
APACHE_NAMES=(apache{,2}.conf httpd.conf)
# ... d'abord sur la base du nom
if array_contains MYSQL_NAMES "$name"; then
type=mysql
elif array_contains APACHE_NAMES "$name"; then
type=apache
# ... puis sur la ligne de mode
elif quietgrep "^[ $TAB]*#.*-\\*-.* mode: sh .*-\\*-" <<<"$first_lines"; then
type=shell
elif quietgrep "^[ $TAB]*#.*-\\*-.* mode: conf .*-\\*-" <<<"$first_lines"; then
type=apache
elif [[ "$name" == *.sh ]]; then
type=shell
elif [[ "$name" == *.conf ]]; then
type=apache
else
# type shell par défaut
type=shell
fi
fi
case "$type" in
s|sh|shell)
[ -n "$quoted" -a "$action" == "enable" ] && action=enableq
"conf_$action" "$config" "$@"
;;
a|apache)
"aconf_$action" "$config" "$@"
;;
m|mysql|p|php)
[ -n "$section" ] || die "Il faut spécifier la section avec -s"
"mconf_$action" "$config" "$section" "$@"
;;
esac