commit 37792ffdc5fd5d697b7e4df11428689234d361d2
parent 5f5fb06d433f384be36c61b02bc7cc45976d8558
Author: Jaromil <jaromil@dyne.org>
Date: Sat, 25 May 2013 15:04:16 +0200
cleanup of the main script
improved binary check, made resize optional
and set aside old install command (was already unused)
Diffstat:
A | extras/desktop/install.zsh | | | 90 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
M | tomb | | | 169 | ++++++++++++++++++++++--------------------------------------------------------- |
2 files changed, 136 insertions(+), 123 deletions(-)
diff --git a/extras/desktop/install.zsh b/extras/desktop/install.zsh
@@ -0,0 +1,90 @@
+# {{{ - Install
+# install mime-types, bells and whistles for the desktop
+# see http://developers.sun.com/solaris/articles/integrating_gnome.html
+# and freedesktop specs
+install_tomb() {
+
+# TODO: distro package deps (for binary)
+# debian: zsh, cryptsetup, sudo
+ _message "updating mimetypes..."
+ cat <<EOF > /tmp/dyne-tomb.xml
+<?xml version="1.0"?>
+<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
+ <mime-type type="application/x-tomb-volume">
+ <comment>Tomb crypto volume</comment>
+ <glob pattern="*.tomb"/>
+ </mime-type>
+ <mime-type type="application/x-tomb-key">
+ <comment>Tomb crypto key</comment>
+ <glob pattern="*.tomb.key"/>
+ </mime-type>
+</mime-info>
+EOF
+ xdg-mime install /tmp/dyne-tomb.xml
+ xdg-icon-resource install --context mimetypes --size 32 monmort.xpm monmort
+ xdg-icon-resource install --size 32 monmort.xpm dyne-monmort
+
+ rm /tmp/dyne-tomb.xml
+
+ _message "updating desktop..."
+ cat <<EOF > /usr/share/applications/tomb.desktop
+[Desktop Entry]
+Version=1.0
+Type=Application
+Name=Tomb crypto undertaker
+GenericName=Crypto undertaker
+Comment=Keep your bones safe
+Exec="${TOMBOPENEXEC}" %U
+TryExec=tomb-open
+Icon=monmort.xpm
+Terminal=true
+Categories=Utility;Security;Archiving;Filesystem;
+MimeType=application/x-tomb-volume;
+X-AppInstall-Package=tomb
+EOF
+ update-desktop-database
+
+ _message "updating menus..."
+ cat <<EOF > /etc/menu/tomb
+?package(tomb):command="tomb" icon="/usr/share/pixmaps/monmort.xpm" needs="text" \
+ section="Applications/Accessories" title="Tomb" hints="Crypto" \
+ hotkey="Tomb"
+EOF
+ update-menus
+
+ _message "updating mime info..."
+ cat <<EOF > /usr/share/mime-info/tomb.keys
+# actions for encrypted tomb storage
+application/x-tomb-volume:
+ open="${TOMBOPENEXEC}" %f
+ view=tomb-open %f
+ icon-filename=monmort.xpm
+ short_list_application_ids_for_novice_user_level=tomb
+EOF
+ cat <<EOF > /usr/share/mime-info/tomb.mime
+# mime type for encrypted tomb storage
+application/x-tomb-volume
+ ext: tomb
+
+application/x-tomb-key
+ ext: tomb.key
+EOF
+ cat <<EOF > /usr/lib/mime/packages/tomb
+application/x-tomb-volume; tomb-open '%s'; priority=8
+EOF
+ update-mime
+
+ _message "updating application entry..."
+
+ cat <<EOF > /usr/share/application-registry/tomb.applications
+tomb
+ command=tomb-open
+ name=Tomb - Crypto Undertaker
+ can_open_multiple_files=false
+ expects_uris=false
+ requires_terminal=true
+ mime-types=application/x-tomb-volume,application/x-tomb-key
+EOF
+ _message "Tomb is now installed."
+}
+# }}}
diff --git a/tomb b/tomb
@@ -31,6 +31,7 @@ typeset -a OLDARGS
for arg in ${argv}; do OLDARGS+=($arg); done
STEGHIDE=1
MKTEMP=1
+RESIZER=1
MOUNTOPTS="rw,noatime,nodev"
typeset -A global_opts
@@ -169,33 +170,29 @@ progress() {
check_bin() {
# check for required programs
- for req in pinentry sudo gpg; do
- which $req >/dev/null || die "Cannot find $req. Please install it." 1
+ for req in cryptsetup pinentry sudo gpg; do
+ command -v $req >/dev/null || die "Cannot find $req. It's a requirement to use Tomb, please install it." 1
done
export PATH=/sbin:/usr/sbin:$PATH
- which cryptsetup > /dev/null && CRYPTSETUP=cryptsetup || die "Cryptsetup not found in $PATH." 1
-
# which dd command to use
- which dcfldd > /dev/null && DD=dcfldd || DD=dd
+ command -v dcfldd > /dev/null && DD=dcfldd || DD=dd
# which wipe command to use
- which wipe > /dev/null && WIPE="wipe -f -s" || WIPE="rm -f"
+ command -v wipe > /dev/null && WIPE="wipe -f -s" || WIPE="rm -f"
# check for filesystem creation progs
- which mkfs.ext4 > /dev/null && \
+ command -v mkfs.ext4 > /dev/null && \
MKFS="mkfs.ext4 -q -F -j -L" || \
MKFS="mkfs.ext3 -q -F -j -L"
# check for mktemp
- which mktemp > /dev/null || MKTEMP=0
+ command -v mktemp > /dev/null || MKTEMP=0
# check for steghide
- which steghide > /dev/null || STEGHIDE=0
-
- # resize suite check bin!
- which e2fsck > /dev/null || die "Cannot find e2fsck. Please install it." 1
- which resize2fs > /dev/null || die "Cannot find resize2fs. Please install it." 1
+ command -v steghide > /dev/null || STEGHIDE=0
+ # check for resize
+ command -v e2fsck resize2fs > /dev/null || RESIZER=0
if which tomb-kdf-pbkdf2 &> /dev/null; then
KDF_PBKDF2="tomb-kdf-pbkdf2"
@@ -356,6 +353,10 @@ EOF
sudo "${TOMBEXEC}" -U ${UID} -G ${GID} -T ${TTY} "${(@)OLDARGS}"
exit $?
fi # are we root already
+
+ # make sure necessary kernel modules are loaded
+ modprobe dm_crypt
+
return 0
}
# }}}
@@ -393,8 +394,12 @@ Commands:
slam slam a TOMB killing all programs using it
passwd change the password of a KEY
- resize resize a TOMB to a new --size (can only grow)
EOF
+ if [ "$RESIZER" = 1 ]; then
+ cat <<EOF
+ resize resize a TOMB to a new --size (can only grow)
+EOF
+ fi
if [ "$STEGHIDE" = 1 ]; then
cat <<EOF
bury hide a KEY inside a JPEG image
@@ -680,7 +685,7 @@ forge_key() {
_message "Commanded to forge key $1"
if ! [ $1 ]; then
- _warning "no key name specified for creation"
+ _warning "no key name specified for creation"
return 1
fi
@@ -759,7 +764,9 @@ forge_key() {
ls -lh ${tombkey}
}
-# dig a tomb
+# Dig a tomb, means that it will create an empty file to be formatted
+# as a loopback filesystem. Initially the file is filled with random data
+# taken from /dev/urandom which improves the tomb's overall security
dig_tomb() {
_message "Commanded to dig tomb $1"
@@ -1111,8 +1118,10 @@ gen_key() {
;;
esac
echo -n $header
- gpg --openpgp --batch --no-options --no-tty --passphrase-fd 0 2>/dev/null \
- -o - -c -a ${lukskey} <<< "${tombpass}"
+
+ print "${tombpass}" \
+ | gpg --openpgp --batch --no-options --no-tty --passphrase-fd 0 2>/dev/null \
+ -o - -c -a ${lukskey}
unset tombpass
}
@@ -1531,7 +1540,7 @@ umount_tomb() {
return 0
}
# }}}
-# }}}
+
# {{{ - Change Password
# $1 is the tomb key path
@@ -1686,18 +1695,18 @@ resize_tomb() {
_message "Password is required for key ${keyname}"
for c in 1 2 3; do
- if [ $c = 1 ]; then
- tombpass=`exec_as_user ${TOMBEXEC} askpass ${keyname}`
- else
- tombpass=`exec_as_user ${TOMBEXEC} askpass "$keyname (retry $c)"`
- fi
+ if [ $c = 1 ]; then
+ tombpass=`exec_as_user ${TOMBEXEC} askpass ${keyname}`
+ else
+ tombpass=`exec_as_user ${TOMBEXEC} askpass "$keyname (retry $c)"`
+ fi
get_lukskey "${tombpass}" ${tombkey} | \
cryptsetup --key-file - luksOpen ${nstloop} ${mapper}
-
+
unset tombpass
- if [ -r /dev/mapper/${mapper} ]; then
- break; # password was correct
+ if [ -r /dev/mapper/${mapper} ]; then
+ break; # password was correct
fi
done
@@ -1871,8 +1880,8 @@ list_tombs() {
for h in ${mounted_hooks}; do
print -n "$fg_no_bold[green]$tombname"
print -n "$fg_no_bold[white] hooks "
- print -n "$fg_bold[white]`basename ${h[(ws:;:)1]}`"
- print -n "$fg_no_bold[white] on "
+# print -n "$fg_bold[white]`basename ${h[(ws:;:)1]}`"
+# print -n "$fg_no_bold[white] on "
print "$fg_bold[white]${h[(ws:;:)2]}$fg_no_bold[white]"
done
done
@@ -1931,98 +1940,7 @@ launch_status() {
return 0
}
# }}}
-# {{{ - Install GUI
-# install mime-types, bells and whistles for the desktop
-# see http://developers.sun.com/solaris/articles/integrating_gnome.html
-# and freedesktop specs
-install_tomb() {
-
-# TODO: distro package deps (for binary)
-# debian: zsh, cryptsetup, sudo
- _message "updating mimetypes..."
- cat <<EOF > /tmp/dyne-tomb.xml
-<?xml version="1.0"?>
-<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
- <mime-type type="application/x-tomb-volume">
- <comment>Tomb encrypted volume</comment>
- <glob pattern="*.tomb"/>
- </mime-type>
- <mime-type type="application/x-tomb-key">
- <comment>Tomb crypto key</comment>
- <glob pattern="*.tomb.key"/>
- </mime-type>
-</mime-info>
-EOF
- xdg-mime install /tmp/dyne-tomb.xml
- xdg-icon-resource install --context mimetypes --size 32 monmort.xpm monmort
- xdg-icon-resource install --size 32 monmort.xpm dyne-monmort
-
- rm /tmp/dyne-tomb.xml
-
- _message "updating desktop..."
- cat <<EOF > /usr/share/applications/tomb.desktop
-[Desktop Entry]
-Version=1.0
-Type=Application
-Name=Tomb crypto undertaker
-GenericName=Crypto undertaker
-Comment=Keep your bones safe
-Exec="${TOMBOPENEXEC}" %U
-TryExec=tomb-open
-Icon=monmort.xpm
-Terminal=true
-Categories=Utility;Security;Archiving;Filesystem;
-MimeType=application/x-tomb-volume;
-X-AppInstall-Package=tomb
-EOF
- update-desktop-database
- _message "updating menus..."
- cat <<EOF > /etc/menu/tomb
-?package(tomb):command="tomb" icon="/usr/share/pixmaps/monmort.xpm" needs="text" \
- section="Applications/Accessories" title="Tomb" hints="Crypto" \
- hotkey="Tomb"
-EOF
- update-menus
-
- _message "updating mime info..."
- cat <<EOF > /usr/share/mime-info/tomb.keys
-# actions for encrypted tomb storage
-application/x-tomb-volume:
- open="${TOMBOPENEXEC}" %f
- view=tomb-open %f
- icon-filename=monmort.xpm
- short_list_application_ids_for_novice_user_level=tomb
-EOF
- cat <<EOF > /usr/share/mime-info/tomb.mime
-# mime type for encrypted tomb storage
-application/x-tomb-volume
- ext: tomb
-
-application/x-tomb-key
- ext: tomb.key
-EOF
- cat <<EOF > /usr/lib/mime/packages/tomb
-application/x-tomb-volume; tomb-open '%s'; priority=8
-EOF
- update-mime
-
- _message "updating application entry..."
-
- cat <<EOF > /usr/share/application-registry/tomb.applications
-tomb
- command=tomb-open
- name=Tomb - Crypto Undertaker
- can_open_multiple_files=false
- expects_uris=false
- requires_terminal=true
- mime-types=application/x-tomb-volume,application/x-tomb-key
-EOF
- _message "Tomb is now installed."
-}
-# }}}
-
-# }}}
# {{{ MAIN COMMAND
main() {
@@ -2230,9 +2148,14 @@ main() {
decode_key $PARAM[1] $PARAM[2]
;;
resize)
- check_priv
- resize_tomb $PARAM[1]
- ;;
+ if [ "$RESIZER" = 0 ]; then
+ _warning "resize2fs not installed. Cannot resize your tomb."
+ return 1
+ fi
+ check_priv
+ resize_tomb $PARAM[1]
+ ;;
+
# internal commands useful to developers
'source') return 0 ;;
install) check_priv ; install_tomb ;;