45 lines
1.5 KiB
Diff
45 lines
1.5 KiB
Diff
|
From 922b9be90ccce8f5b01339864f499f6d77505c5f Mon Sep 17 00:00:00 2001
|
||
|
From: Andrew Gregory <andrew.gregory.8@gmail.com>
|
||
|
Date: Fri, 13 Dec 2013 12:31:00 -0500
|
||
|
Subject: [PATCH] chroot: sanitize path
|
||
|
|
||
|
path was not being sanitized if it started with '/' causing chroot calls
|
||
|
to fail when path ended with '/'.
|
||
|
|
||
|
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
|
||
|
---
|
||
|
src/chroot.c | 3 +++
|
||
|
test/t/chroot.t | 2 +-
|
||
|
2 files changed, 4 insertions(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/src/chroot.c b/src/chroot.c
|
||
|
index 9e15ff5..7917a9a 100644
|
||
|
--- src/chroot.c
|
||
|
+++ src/chroot.c
|
||
|
@@ -76,6 +76,9 @@
|
||
|
else {
|
||
|
if (*path == '/') {
|
||
|
expand_chroot_rel_path(path);
|
||
|
+ strlcpy(tmp, path, FAKECHROOT_PATH_MAX);
|
||
|
+ dedotdot(tmpptr);
|
||
|
+ path = tmpptr;
|
||
|
}
|
||
|
else {
|
||
|
snprintf(tmp, FAKECHROOT_PATH_MAX, "%s/%s", cwd, path);
|
||
|
diff --git a/test/t/chroot.t b/test/t/chroot.t
|
||
|
index e532a6f..286b863 100755
|
||
|
--- test/t/chroot.t
|
||
|
+++ test/t/chroot.t
|
||
|
@@ -14,7 +14,7 @@ for chroot in chroot fakechroot; do
|
||
|
skip $(( $tap_plan / 2 )) "not root"
|
||
|
else
|
||
|
|
||
|
- for testtree in testtree2 /testtree2 ./testtree2 /./testtree2 testtree2/. testtree2/./.; do
|
||
|
+ for testtree in testtree2 /testtree2 ./testtree2 /./testtree2 testtree2/. testtree2/./. testtree2/; do
|
||
|
t=`$srcdir/$chroot.sh testtree /usr/sbin/chroot $testtree /bin/cat /CHROOT 2>&1`
|
||
|
test "$t" = "testtree/testtree2" || not
|
||
|
ok "$chroot chroot $testtree:" $t
|
||
|
--
|
||
|
1.8.5.1
|
||
|
|