Package: jailer
Version: 0.4-9
Severity: normal
Tags: patch

As subject line.  Since updatejail is normally run as root, this can be
a bit of an unfortunate side effect of what would otherwise be a trivial
accident !

Attached is a patch which fixes the issue, as well as adding other safety
and efficiency fixes such as fewer 'find's and clearer prompts/errors.
More could undoubtedly be done but I feel this will do for now !

-- System Information:
Debian Release: 4.0
  APT prefers stable
  APT policy: (600, 'stable'), (480, 'proposed-updates'), (80, 'testing'), (3, 
'unstable')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.18-6-k7
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)

Versions of packages jailer depends on:
ii  cpio                      2.6-18.1+etch1 GNU cpio -- a program to manage ar
ii  perl [perl5]              5.8.8-7etch3   Larry Wall's Practical Extraction 

jailer recommends no packages.

-- no debconf information
--- updatejail.orig	2006-11-03 02:07:10.000000000 +0000
+++ updatejail	2008-05-29 22:48:48.000000000 +0100
@@ -7,39 +7,47 @@
 "
 
 
-if [ Q$1 == "Q" -o Q$2 == "Q" ]
+if [ "Q$1" == "Q" -o "Q$2" == "Q" ]
 then
-	echo "Usage: upratejail <config.file> <jail identifier>"
+	echo "Usage: updatejail <config.file> <jail identifier>"
 else
 
-	JAIL=`cat $1 | grep Root: | grep $2 | awk '{print $2}'`
-	echo "jail: " $JAIL
+	if [ ! -f "$1" ]; then
+		echo "$1: file not found"
+		exit 1
+	fi
+	JAIL=`cat "$1" | grep Root: | grep "$2" | awk '{print $2}'`
+	echo "jail: $JAIL"
 	echo "config: " $1
-	read
+	read -p "Press ENTER to continue"
+
+	echo "$KEEP" > /tmp/$$.updatejail.keep
 
-	
-	if test -d $JAIL
+	if test -d "$JAIL"
 	then
-		cd $JAIL
+		set -e
+
+		cd "$JAIL"
+
+		find "$JAIL" \( -type b \
+		             -o -type c \
+		             -o -type p \
+		             -o -type f \
+		             -o -type l \
+		             -o -type s \) -print > /tmp/$$.updatejail
 
-		find $JAIL -type b > /tmp/$$.updatejail
-		find $JAIL -type c >> /tmp/$$.updatejail
-		find $JAIL -type p >> /tmp/$$.updatejail
-		find $JAIL -type f >> /tmp/$$.updatejail
-		find $JAIL -type l >> /tmp/$$.updatejail
-		find $JAIL -type s >> /tmp/$$.updatejail
 		for i in `echo $KEEP`
 		do
-			cat /tmp/$$.updatejail | grep -v $JAIL$i > /tmp/$$.updatejail.tmp
+			grep -v "^$JAIL$i\$" /tmp/$$.updatejail > /tmp/$$.updatejail.tmp
 			mv /tmp/$$.updatejail.tmp /tmp/$$.updatejail
 		done
-		for i in `cat /tmp/$$.updatejail`
-		do
-			rm $i
-		done
+
+		cat /tmp/$$.updatejail | xargs -r rm
+
 		rm /tmp/$$.updatejail
-		/usr/sbin/jailer $1 $2
+
+		/usr/sbin/jailer "$1" "$2"
 	else
-		echo "This jail does not exist!"
+		echo "Jail directory '$JAIL' does not exist!"
 	fi
 fi

Reply via email to