tMerge pull request #248 from mesbahamin/open_read_only - tomb - the crypto undertaker HTML git clone git://parazyd.org/tomb.git DIR Log DIR Files DIR Refs DIR README DIR LICENSE --- DIR commit 1f022d10f1a1fab564ba960679ec1460535d2a4e DIR parent 2bc7e4319831a64ef46deb79a88e8ac937e09ca4 HTML Author: Jaromil <jaromil@dyne.org> Date: Sat, 18 Feb 2017 20:30:33 +0100 Merge pull request #248 from mesbahamin/open_read_only Open non-writable Tomb files with "read only " mount option Diffstat: M extras/test/runtests | 31 ++++++++++++++++++++++++++++--- M tomb | 3 ++- 2 files changed, 30 insertions(+), 4 deletions(-) --- DIR diff --git a/extras/test/runtests b/extras/test/runtests t@@ -56,7 +56,7 @@ command -v qrencode > /dev/null || QRENCODE=0 typeset -A results -tests=(dig forge lock badpass open close passwd chksum bind setkey) +tests=(dig forge lock badpass open close openro passwd chksum bind setkey) { test $RESIZER = 1 } && { tests+=(resize) } { test $KDF = 1 } && { tests+=(kdforge kdfpass kdflock kdfopen) } { test $STEGHIDE = 1 } && { tests+=(stgin stgout stgopen stgpipe stgimpl) } t@@ -194,7 +194,32 @@ test-regression() { } +test-open-read-only() { + notice "wiping all testro.tomb* in /tmp" + sudo rm -f /tmp/testro.tomb{,.key,.new.key} + + # Create new + tt dig -s 20 /tmp/testro.tomb + tt forge /tmp/testro.tomb.key \ + --ignore-swap --unsafe --tomb-pwd ${dummypass} --use-urandom + tt lock /tmp/testro.tomb -k /tmp/testro.tomb.key \ + --ignore-swap --unsafe --tomb-pwd ${dummypass} + + notice "Testing open read only" + + # Remove write privilege on test.tomb + chmod -w /tmp/testro.tomb + + # Attempt to open the unwritable tomb with the read-only mount option + tt open /tmp/testro.tomb -k /tmp/testro.tomb.key \ + --ignore-swap --unsafe --tomb-pwd ${dummypass} -o ro,noatime,nodev + + { test $? = 0 } && { + results+=(openro SUCCESS) + tt close testro + } +} startloops=(`sudo losetup -a |cut -d: -f1`) t@@ -227,8 +252,8 @@ tt close test { test $? = 0 } && { results+=(close SUCCESS) } - - +# isolated function +test-open-read-only notice "Testing changing tomb password" DIR diff --git a/tomb b/tomb t@@ -507,7 +507,8 @@ is_valid_tomb() { _fail=0 # Tomb file must be a readable, writable, non-empty regular file. - [[ ! -w "$1" ]] && { + # If passed the "ro" mount option, the writable check is skipped. + [[ ! -w "$1" ]] && [[ $(option_value -o) != *"ro"* ]] && { _warning "Tomb file is not writable: ::1 tomb file::" $1 _fail=1 }