# setup paths for BATS test units setup() { [ ! -f ${BATS_PARENT_TMPNAME}.skip ] || skip "skip remaining tests" bats_require_minimum_version 1.5.0 R="$BATS_TEST_DIRNAME" # R=`cd "$T"/.. && pwd` TMP="$BATS_FILE_TMPDIR" load test_helper/bats-support/load load test_helper/bats-assert/load load test_helper/bats-file/load ZTMP="$BATS_FILE_TMPDIR" if [ "$ZENROOM_EXECUTABLE" == "" ]; then ZENROOM_EXECUTABLE="/usr/local/bin/zenroom" fi PATH="$PATH:/usr/local/bin:/usr/local/sbin" MNT="/media/`basename $BATS_TEST_FILENAME`" PIM=42 # max password stdin size to veracrypt is 128 bytes PW="91cd69b2caab05cb64f8e1c8ae22a7c5a25564e7fc5116d0303dce1ffd26861ea0483c25bdb85adb216718c19815eb59ac14ec9783bfbbb57786ca7d9038c845" # `openssl rand -hex 64`" FS='ext4' SIZE='20M' [ "$TOMB" = "" ] && TOMB=test.tomb # default on freebsd is 1001 user_uid=1000 user_gid=1000 system="`uname -s`" f_create="" f_format="" f_map="" f_mount="" f_close="" case "$system" in FreeBSD) f_create=portable_create f_format=freebsd_format f_map=portable_map f_mount=freebsd_mount f_close=freebsd_close user_uid=1001 user_gid=1001 ;; Linux) f_create=portable_create f_format=linux_format f_map=portable_map f_mount=linux_mount f_close=portable_close user_uid=1000 user_gid=1000 ;; *) >&2 echo "Unsupported system: $system" exit 1 esac # cd $ZTMP } teardown() { [ -n "$BATS_TEST_COMPLETED" ] || touch ${BATS_PARENT_TMPNAME}.skip >&3 echo } # usage: echo PASSWORD | portable_create file size pim portable_create() { local file="$1" # must not exist local size="$2" # veracrypt format (accepts M or G) local pim="$3" # any number # >&2 echo "portable_create $file $size $pim" veracrypt --non-interactive --text --stdin \ -m nokernelcrypto \ -c ${file} --volume-type normal \ --hash sha512 --encryption serpent-aes \ --filesystem none --size ${size} --pim ${pim} \ --random-source /dev/urandom -k '' return $? } # usage: echo PASSWORD | portable_map file pim portable_map() { local file="$1" local pim="$2" # >&2 echo "portable_map $file $pim" veracrypt --non-interactive --text --stdin \ --protect-hidden no -m nokernelcrypto \ -k '' --pim ${pim} --filesystem none \ ${file} local loop=`veracrypt -l "$file" | awk '{print $3}'` return $? } portable_close() { local file="$1" veracrypt -d ${file} return $? } linux_format() { local file="$1" # loop="`losetup -j ${vera}/volume | cut -d: -f1`" local loop=`veracrypt -l "$FILE" | awk '{print $3}'` # losetup -l >&2 echo "veramap format: ${loop}" sync sudo mkfs.ext4 -E root_owner="${user_uid}:${user_gid}" "$loop" return $? } # usage: _mount /tmp/.veracrypt_ mountpoint linux_mount() { local file="$1" local mnt="$2" # local loop="`losetup -j ${vera}/volume | cut -d: -f1`" local loop=`veracrypt -l "$file" | awk '{print $3}'` >&3 echo "fsck $loop" fsck.ext4 -p -C0 "$loop" sudo mount ${loop} "$mnt" return $? } freebsd_format() { file="$1" local loop=`veracrypt -l "$FILE" | awk '{print $3}'` mkfs.ext4 -E root_owner="${user_uid}:${user_gid}" "${loop}" return $? } freebsd_mount() { local file="$1" local mnt="$2" >&2 echo `veracrypt -l "$file"` local loop=`veracrypt -l "$file" | awk '{print $3}'` >&3 echo "fsck $loop" fsck.ext4 -p -C0 "$loop" lklfuse -o type=ext4 "${loop}" "$mnt" return $? } freebsd_close() { local file="$1" local md=`veracrypt -l "$file" | awk '{print $3}'` # umount "$mnt" >&2 echo "md: $md" local mnt=`pgrep -lf "lklfuse.*$md" | awk '{print $6}'` >&2 echo "mnt: $mnt" lkl=`pgrep -f "lklfuse.*$md" | awk '{print $1}'` >&3 echo "kill $lkl (lklfuse on $md)" # trying to deail with lklfuse bug # https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=239831 renice -20 $lkl kill $lkl sync sleep 1 kill -9 $lkl # lkl should have really exited now >&3 echo "veracrypt -d $file" veracrypt -d "$file" return $? } Z() { tmptmp=0 if ! [ "$TMP" ]; then TMP=`mktemp -d`; tmptmp=1 fi script=$1 if [ "$script" == "-" ]; then cat > $TMP/script_stdin script=$TMP/script_stdin else if ! [ -r "$script" ]; then script=$T/$script fi fi if ! [ -r $script ]; then >&2 echo "Error - script not found: $script" return 1 fi shift 1 if [ "${1##*.}" == "zen" ]; then $ZENROOM_EXECUTABLE $@ -z $script else $ZENROOM_EXECUTABLE $@ $script fi if [ $tmptmp = 1 ]; then rm -f $TMP/* rmdir $TMP fi }