#!/bin/sh # # php5enmod - a php5 module manager for Debian # # Copyright 2013 Ondřej Surý # # This program is licensed at your choice under the terms of the GNU General # Public License version 2+ or under the terms of the PHP License 3.01. # # For GPL-2+: # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, # USA. # # For PHP 3.01: # This source file is subject to version 3.01 of the PHP license, # that is bundled with this package in the file LICENSE, and is # available through the world-wide-web at the following url: # http://www.php.net/license/3_01.txt # If you did not receive a copy of the PHP license and are unable to # obtain it through the world-wide-web, please send a note to # license@php.net so we can mail you a copy immediately. # set -ue SCRIPT_NAME=${0##*/} QUIET=no NEED_RESTART=no MAINT_MODE=no . /usr/share/php5/php5-helper usage() { [ -n "$@" ] && warning $@ echo "usage: ${SCRIPT_NAME} [ -s ALL|sapi_name ] module_name [ module_name_2 ]" exit 1 } enmods() { local sapis="$1" local mods="$2" local register="$3" local sapi local mod for mod in $mods; do for sapi in $sapis; do enmod_ret=0 enmod $sapi $mod || enmod_ret=$? case $enmod_ret in 0) NEED_RESTART=yes record_state enabled $sapi $mod ;; esac done if [ "$register" = "yes" ]; then mod_registry register $mod fi done } dismods() { local sapis="$1" local mods="$2" local register="$3" local purge="$4" local sapi local mod for mod in $mods; do for sapi in $sapis; do local dismod_ret=0 dismod $sapi $mod $purge || dismod_ret=$? case $dismod_ret in 0) NEED_RESTART=yes record_state disabled $sapi $mod ;; esac done if [ "$purge" = "yes" ]; then remove_state enabled $sapi $mod remove_state disabled $sapi $mod mod_registry unregister $mod elif [ "$register" = "yes" ]; then mod_registry unregister $mod fi done } enmod() { local sapi=$1 local modname=$2 if ! module_exists $modname; then warning "Module $modname ini file doesn't exist under /etc/php5/mods-available" return 1 fi local priority=$(get_priority $sapi $modname) local live_link=$(get_live_link $sapi $modname $priority) local live_link_content=$(get_live_link_content $sapi $modname $priority) module_cleanup $sapi $modname $priority local module_state=0 php5query -q -s $sapi -m $modname || module_state=$? case $module_state in # module enabled, but re-enable the conf.d link just in case 0) ;; # module not yet enabled 1) ;; # module disabled by maintainer script 33) ;; # module disabled by site administrator # enable module only if not running in maintainer mode 32) if [ "$MAINT_MODE" = "yes" ]; then warning "Not enabling the ${modname} module for ${sapi} SAPI since the module" warning "was disabled by local administrator." return 1 fi ;; 34) warning "Not enabling the ${modname} module for ${sapi} SAPI since module symlink" warning "already exists in /etc/php5/${sapi}/conf.d with different content." return 1 ;; # fail if we get any different result *) warning "Unable to get module state, run php5query -s $sapi -m $modname manually" warning "and fix the module state." return 1 esac if [ -d "/etc/php5/$sapi/conf.d" ]; then if [ ! -h "${live_link}" ]; then ln -s "${live_link_content}" "${live_link}" fi else warning "Directory /etc/php5/$sapi/conf.d doesn't exist, not enabling the module" return 1 fi return 0 } dismod() { local sapi=$1 local modname=$2 local purge=$3 if ! module_exists $modname; then if [ "$purge" = "no" ]; then warning "Module $modname ini file doesn't exist under /etc/php5/mods-available" return 1 fi fi local priority=$(get_priority $sapi $modname) local live_link=$(get_live_link $sapi $modname $priority) local live_link_content=$(get_live_link_content $sapi $modname $priority) module_cleanup $sapi $modname $priority local module_state=0 php5query -q -s $sapi -m $modname || module_state=$? case $module_state in # module enabled 0) ;; # module not enabled, but re-remove the link just in case 1|32|33) ;; 34) warning "Not disabling module $modname for $sapi SAPI. The configuration was" warning "modified by local administrator." return 1 ;; # fail if we get any different result *) warning "Unable to get module state, run php5query -s $sapi -m $modname manually" warning "and fix the module state." return 1 esac if [ -d "/etc/php5/$sapi/conf.d" ]; then if [ -h "$live_link" ]; then rm -f "$live_link" fi fi return 0 } sapis= register=no purge=no while getopts pfs:mqr opt; do case $opt in r) register=yes;; s) if [ "$sapis" = "ALL" -o \( "$OPTARG" = "ALL" -a -n "$sapis" \) ]; then warning "You cannot specify ALL and individual sapis" usage fi sapis="${sapis}${sapis:+ }$OPTARG" ;; m) MAINT_MODE=yes;; p) purge=yes;; q) QUIET=yes;; \?) usage;; esac done shift $(expr $OPTIND - 1) mods="" for mod in $@; do mods="${mods}${mods:+ }${mod%%/*}" done if [ "$register" = "no" ]; then sapis="${sapis:-ALL}" if [ "$sapis" = "ALL" ]; then register=yes fi fi if [ "$sapis" = "ALL" ]; then sapis=$(php5query -S) fi [ -z "$mods" ] && usage case "${SCRIPT_NAME}" in php5enmod) enmods "$sapis" "$mods" "$register" ;; php5dismod) dismods "$sapis" "$mods" "$register" "$purge" ;; *) usage ;; esac exit 0