117 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			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/ulib" || exit 1
 | 
						|
urequire DEFAULTS 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
 |