[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#373969: apache2-common: a2ensite rewritten to allow globbing/multiple site enabling

Package: apache2-common
Version: 2.0.54-5
Severity: normal
Tags: patch

I have modified a2ensite to :

1. enable multiple sites at a time, (including file globbing).
  (Both from the command-line, and from the "Site Name?" prompt)
2. modified the sites-available listing to be columnar, as opposed to space-delimited. 
  (Helps when you have hundreds of sites available).
3. allow for interactive or non-interactive modes, (using -f). 
  (interactive mode prompts for confirmation before enabling a site). 
4. generates a help message (-h).
5. I also wrote a man page "a2ensite(8)", which documents all of the features that
I have included in this revision:

.TH a2ensite "8" "June 2006" "a2ensite" 
a2ensite \- Enables Apache2 sites
.B a2ensite
[\fIOPTION\fR] [\fIFILE\fR] [\fIFILE\fR]...

.B a2ensite
simplifies the relationship between available and 
live, (or enabled), sites, by creating a user interface which controls
the creation of symbolic links between configuration files
in /etc/apache2/sites-available and /etc/apache2/sites-enabled.
.B a2ensite
allows you to pass the names of configuration files, (which exist
in /etc/apache2/sites-available), from the command line, or will
generate a listing of available sites if no arguments are given.  
(File globbing is available).
run in non-interactive mode, (do not prompt user for confirmation when enabling a site).
display help message and exit
.B a2ensite
Generate a list of 
.B available 
sites and prompt for user to input a list of sites which they would like to enable.  
This runs a2ensite in default 
.B interactive 
mode, and will prompt the user for confirmation before enabling any site.
.B a2ensite -f
Same as previous example, except that it runs a2ensite in
.B non-interactive
mode. (It will not prompt the user for confirmation before
enabling a site).
.B a2ensite default
Enables the default site. (interactive mode)
.B a2ensite \-f default test2? test1
Enables the default site, plus test1, and all of the sites which 
match the globbing pattern test2?, (ie test20, test21, ... test29). (non-interactive mode)
This manual page was written by Shannon Eric Peevey <speeves@unt.edu>.
a2dissite(8), a2enmod(8), a2dismod(8)

-- System Information:
Debian Release: 3.1
Architecture: i386 (i686)
Kernel: Linux 2.6.8-2-386
Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ISO-8859-1)

Versions of packages apache2-common depends on:
ii  apache2-utils         2.0.54-5           utility programs for webservers
ii  debconf               Debian configuration management sy
ii  debianutils           2.8.4              Miscellaneous utilities specific t
ii  libc6                 2.3.2.ds1-22sarge3 GNU C Library: Shared libraries an
ii  libdb4.2              4.2.52-18          Berkeley v4.2 Database Libraries [
ii  libexpat1             1.95.8-3           XML parsing C library - runtime li
ii  libgcc1               1:3.4.3-13         GCC support library
ii  libmagic1             4.12-1             File type determination library us
ii  mime-support          3.28-1             MIME files 'mime.types' & 'mailcap
ii  net-tools             1.60-10            The NET-3 networking toolkit
ii  openssl               0.9.7e-3sarge1     Secure Socket Layer (SSL) binary a
ii  ssl-cert              1.0-11             Simple debconf wrapper for openssl

-- no debconf information
--- /usr/local/src/a2dissite	2006-06-16 09:43:41.589474872 -0500
+++ a2dissite	2006-06-16 06:39:43.000000000 -0500
@@ -1,33 +1,106 @@
 #!/bin/sh -e
+# Initialize variables
+Usage: ${0} [OPTION]...
+ -f		Never prompt
+ -h		This message
+while getopts ":ft" OPT
+    case $OPT in
+	f )
+	    prompt=0
+	    ;;
+	h )
+	    echo "$usage"
+	    exit 1
+	    ;;
+	\?) 
+	    echo "$usage"
+            exit 1;;
+	esac
+# remove the flags from $@
+shift $((${OPTIND} - 1))
+# If a2dissite is called without an argument, then
+# print a list of sites to choose from.  Multiple sites
+# can be passed to the SITENAME variable.
 if [ -z $1 ]; then
 	echo "Which site would you like to disable?"
-	# echo -n "Your choices are: "
-	#ls /etc/apache2/sites-enabled/* | \
-	#sed -e "s,$SYSCONFDIR/sites-enabled/,,g" | xargs echo
 	echo "Your choices are: "
-	ls /etc/apache2/sites-enabled/
-	#sed -e "s,$SYSCONFDIR/sites-enabled/,,g" | xargs echo
+	ls $SYSCONFDIR/sites-enabled/
 	echo -n "Site name? "
+	read  SITENAME
-if [ $SITENAME = "default" ]; then
-        PRIORITY="000"
-if ! [ -e $SYSCONFDIR/sites-enabled/$SITENAME -o \
-       -e $SYSCONFDIR/sites-enabled/"$PRIORITY"-"$SITENAME" ]; then
-	echo "This site is already disabled, or does not exist!"
-	exit 1
-if ! rm $SYSCONFDIR/sites-enabled/$SITENAME 2>/dev/null; then
-	rm -f $SYSCONFDIR/sites-enabled/"$PRIORITY"-"$SITENAME"
+# Loop through the site files in SITENAME
+for siteentry in $SITENAME
+    # Set default site with top priority
+    ## 
+    if [ $siteentry = "default" ]; then
+	siteentry="000-default"
+    fi
+    # Allow for file globbing
+    for site in $(ls $SYSCONFDIR/sites-enabled/$siteentry | xargs -n1 -r basename)
+    do
+        # Check to see if the site has already been disabled
+	if ! [ -e $SYSCONFDIR/sites-enabled/$site ]; then
+	    echo "$site is already disabled, or does not exist!"
+	    disabled=1
+	fi
+        # If -f flag is not passed to the script, prompt user for confirmation on each site.
+	if [ ${disabled:-0} -eq 0 ]; then
+	    if [ $prompt -eq 1 ]; then
+		delsitelast=$delsite
+		echo -n "a2dissite: disable $site? [${delsitelast}] "
+		read delsite
+		if [ "$delsite" = "" ]; then
+		    delsite=$delsitelast
+		fi
+		if [ ${delsite:-n} = "y" ]; then
+		    rm $SYSCONFDIR/sites-enabled/$site 2>/dev/null
+		    disabledsites="$disabledsites $site "
+		fi
+	    else
+		rm $SYSCONFDIR/sites-enabled/$site 2>/dev/null
+		disabledsites="$disabledsites $site "
+	    fi
+	fi
+	unset disabled
+    done
+# Print list of disabled sites, if any
+# Test to see if any sites were disabled
+if [ ${#disabledsites} -gt 0 ]; then
+    echo "Following site(s) disabled: "
+    echo
+    for vhost in $disabledsites
+    do
+	echo "$vhost"
+    done
+    echo
+    echo "Run /etc/init.d/apache2 reload to fully disable."
+    echo
+    echo "No sites were disabled."
-echo "Site $SITENAME disabled; run /etc/init.d/apache2 reload to fully disable."
+unset disabledsites
\ No newline at end of file

Reply to: