diff options
Diffstat (limited to 'pki/dogtag/scripts/remove_ds_instance')
-rwxr-xr-x | pki/dogtag/scripts/remove_ds_instance | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/pki/dogtag/scripts/remove_ds_instance b/pki/dogtag/scripts/remove_ds_instance new file mode 100755 index 000000000..d81326c63 --- /dev/null +++ b/pki/dogtag/scripts/remove_ds_instance @@ -0,0 +1,156 @@ +#!/bin/sh +# BEGIN COPYRIGHT BLOCK +# 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; version 2 of the License. +# +# 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., 59 Temple +# Place, Suite 330, Boston, MA 02111-1307 USA. +# +# Copyright (C) 2007 Red Hat, Inc. +# All rights reserved. +# END COPYRIGHT BLOCK +# + +## Always switch into this base directory +## prior to script execution so that all +## of its output is written to this directory + +cd `dirname $0` + + +## +## This script MUST be run as root! +## + +ROOTUID=0 + +OS=`uname` +if [ "${OS}" = "Linux" ] ; then + MY_EUID=`/usr/bin/id -u` + MY_UID=`/usr/bin/id -ur` + USERNAME=`/usr/bin/id -un` +else + printf "ERROR: Unsupported operating system '${OS}'!\n" + exit 255 +fi + +if [ "${MY_UID}" != "${ROOTUID}" ] && + [ "${MY_EUID}" != "${ROOTUID}" ] ; then + printf "ERROR: The '$0' script must be run as root!\n" + exit 255 +fi + + +## First, check for the existence of a directory server on this machine. +if [ ! -e /etc/init.d/dirsrv ]; then + printf "The Directory Server package does NOT exist on this machine!\n" + exit 255 +fi + + +## Second, check for the existence of a directory server administration server +## on this machine. +if [ -e /usr/sbin/ds_removal ] && + [ -d /usr/lib/dirsrv/cgi-bin ] || + [ -d /usr/lib64/dirsrv/cgi-bin ]; then + printf "This machine contains a Directory Server Administration\n" + printf "Server which means that Directory Server instances may\n" + printf "have been registered with the Administration Server.\n\n" + while : + do + printf "Do you wish to use the '/usr/sbin/ds_removal' tool\n" + printf "instead of '$0'? [yn] " + read ANSWER + printf "\n" + if [ "${ANSWER}" = "Y" ] || + [ "${ANSWER}" = "y" ] ; then + printf "\n" + printf "Please RUN the '/usr/sbin/ds_removal' tool to remove\n" + printf "the desired DS instance instead of '$0'.\n\n" + exit 255 + elif [ "${ANSWER}" = "N" ] || + [ "${ANSWER}" = "n" ] ; then + printf "\n" + break + else + continue + fi + done +fi + + +Usage() +{ + printf "Usage: $0 -s server_id\n" + printf " server_id: Directory server identifier; slapd-<server_id>\n" +} + +error="" +server_id="" +ds_server="" +ds_remove_cgi="" + +while [ "$1" != "" ] +do + if [ "$1" = "-s" ]; then + shift + server_id=$1 + shift + elif [ "$1" = "-h" -o "$1" = "-H" -o "$1" = "--help" ]; then + Usage + exit 0 + else + printf "ERROR: Option '$1' is not supported!\n" + Usage + exit 1 + fi +done + +if [ "$server_id" = "" ]; then + error="Directory Server identifier is missing!" +else + if [ -d "/usr/lib/dirsrv/slapd-${server_id}" ]; then + ds_server="/usr/lib/dirsrv/slapd-${server_id}" + ds_remove_cgi="./ds_remove_cgi_32" + elif [ -d "/usr/lib64/dirsrv/slapd-${server_id}" ]; then + ds_server="/usr/lib64/dirsrv/slapd-${server_id}" + ds_remove_cgi="./ds_remove_cgi_64" + else + error="Directory server identifier 'slapd-${server_id}' does not exist!" + fi +fi + +if [ "$error" != "" ]; then + printf "ERROR: ${error}\n" + Usage + exit 1 +fi + +QUERY_STRING="InstanceName=slapd-${server_id}"; export QUERY_STRING +REQUEST_METHOD=GET; export REQUEST_METHOD + +if [ -c /dev/null ]; then + NULL=/dev/null +else + NULL=/tmp/ds_remove.out +fi + +${ds_remove_cgi} > $NULL << EOF +EOF + +if [ -d "${ds_server}" ]; then + printf "FAILED to remove '${ds_server}'!\n" +else + printf "Successfully removed '${ds_server}'!\n" + printf "NOTE: Copies of your security databases have been saved\n" + printf " in '/etc/dirsrv/slapd-${server_id}.removed'!\n" +fi + +exit $? + |