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/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
 |