#!/bin/sh # # phpquery - a PHP 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 . /usr/lib/php/php-helper usage() { [ -n "$@" ] && warning $@ echo "usage: ${SCRIPT_NAME} [ -d ] [ -q ] -v version_name -s sapi_name [ -m module_name ] [ -M ] [ -S ] [ -V ]" exit 1 } check_mod() { local version=$1 local sapi=$2 local modname=$3 if ! module_exists $version $modname; then output "No module matches $modname" return 1 fi local priority=$(get_priority $version $sapi $modname) local live_link=$(get_live_link $version $sapi $modname $priority) local live_link_content=$(get_live_link_content $version $sapi $modname $priority) found=no if [ -e "${live_link}" ] ; then if [ -h "${live_link}" ] ; then local content="$(readlink "${live_link}")" if [ "${content}" = "${live_link_content}" ] ; then found=yes fi fi if [ "$found" != "yes" ]; then output "Module $modname symlink was modified by local administrator." return 34 fi fi local state_dir="$(get_state_dir $version $sapi)" if [ -e "${state_dir}/enabled_by_admin/$modname" ]; then output "$modname (Enabled for $sapi by local administrator)" return 0 elif [ -e "${state_dir}/enabled_by_maint/$modname" ]; then output "$modname (Enabled for $sapi by maintainer script)" return 0 elif [ -e "${state_dir}/disabled_by_admin/$modname" ]; then output "No module matches $modname (Disabled for $sapi by local administrator)" return 32 elif [ -e "${state_dir}/disabled_by_maint/$modname" ]; then output "No module matches $modname (Disabled for $sapi by maintainer script)" return 33 elif [ "$found" = "yes" ]; then output "$modname (Enabled for $sapi by unknown)" return 0 else output "No module matches $modname" return 1 fi } list_mod() { local verbose=$1 local registry_dir="$(get_registry_dir)" if [ -d "$registry_dir" ]; then for mod in $(list_parts "$registry_dir"); do versions=$(list_version) for version in $versions; do sapis=$(list_sapi $version) if [ "$verbose" = "yes" ]; then for sapi in $sapis; do check_mod $version $sapi $mod done else echo $mod fi done done return 0 fi return 1 } list_version() { local version_dir="$(get_version_dir)" if [ -d "$version_dir" ]; then for version in $(list_parts_regex "$version_dir" '.*[0-9]\.[0-9]'); do echo $version; done fi } list_sapi() { local version=$1 local sapi_dir="$(get_sapi_dir $version)" if [ -d "$sapi_dir" ]; then for sapi in $(list_parts "$sapi_dir"); do echo $sapi; done fi } check_version() { local version=$1 local version_dir=$(get_version_dir) if [ -d "$version_dir/$version" ]; then return 0 fi return 1 } check_sapi() { local version=$1 local sapi=$2 local sapi_dir="$(get_sapi_dir $version)" if [ -e "$sapi_dir/$sapi" ]; then return 0 fi return 1 } QUIET=no verbose=no action= sapi= double_action() { usage "Cannot use $1 and $2 at the same time, pick only one mode of operation."; } while getopts ds:m:SMqv:V opt; do case $opt in v) new_action=check_version if [ -n "$action" ]; then case "$action" in check_mod|check_sapi) new_action= ;; # check_mod and check_sapi wins *) double_action $action $new_action esac else action=$new_action fi version="$OPTARG" ;; V) new_action=list_version if [ -n "$action" ]; then double_action $action $new_action; fi ;; s) new_action=check_sapi case "$action" in check_mod) new_action= ;; # check_mod wins check_version) ;; "") ;; *) double_action $action $new_action esac sapi="$OPTARG" ;; S) new_action="list_sapi" if [ -n "$action" ]; then double_action $action $new_action; fi ;; m) new_action=check_mod case "$action" in "") ;; check_version|check_sapi) ;; *) double_action $action $new_action ;; esac mod="$OPTARG" ;; M) new_action="list_mod" if [ -n "$action" ]; then double_action $action $new_action; fi ;; d) verbose=yes ;; q) QUIET=yes ;; \?) usage "Unknown parameter specified";; esac [ -n "$new_action" ] && action=$new_action done shift $(expr $OPTIND - 1) if [ -z "$action" ]; then usage "You need to specify at least one action." fi ret=0 case "$action" in check_mod) [ -z "$version" -o -z "$sapi" ] && usage "You need to specify version (-v) and sapi (-s)" check_version $version || usage "Invalid PHP version ($version) specified" check_sapi $sapi || usage "Invalid SAPI ($sapi) specified" check_mod $version $sapi $mod || ret=$? ;; check_sapi) [ -z "$version" ] && usage "You need to specify version (-v)" check_version $version || usage "Invalid PHP version ($version) specified" check_sapi $version $sapi || ret=$? if [ "$ret" -eq 0 ]; then output "$sapi" fi ;; check_version) check_version $version || ret=$? if [ "$ret" -eq 0 ]; then output "$sapi" fi ;; list_version) list_version || ret=$?;; list_mod) list_mod $verbose || ret=$?;; list_sapi) list_sapi || ret=$?;; *) usage "Unknown action $action";; esac exit $ret