commit bd7300aa3ecb667f0e5b3ee252b42a3fedcb933c
parent 836d48c2d75059b7db5d0164d110b46e5a236a03
Author: Daniel "GDrooid" Rodriguez <gdrooid@openmailbox.org>
Date: Fri, 9 Jan 2015 17:11:14 +0100
Update .po files and fix typo in tomb executable.
Diffstat:
M | extras/po/de.po | | | 5745 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------- |
M | extras/po/es.po | | | 5743 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------- |
M | extras/po/fr.po | | | 5825 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------- |
M | extras/po/ru.po | | | 5659 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------- |
M | extras/po/tomb.pot | | | 4923 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- |
M | tomb | | | 2 | +- |
6 files changed, 24873 insertions(+), 3024 deletions(-)
diff --git a/extras/po/de.po b/extras/po/de.po
@@ -1,1118 +1,5519 @@
msgid ""
msgstr ""
+"Project-Id-Version: Tomb the Crypto Undertaker\n"
+"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
-"Project-Id-Version: Tomb the Crypto Undertaker\n"
-"Language: de\n"
-
-#: failure
-msgid "Operation aborted."
-msgstr "Vorgang abgebrochen."
-
-#: warning
-msgid "often occurs on VPS and kernels that don't provide the loop module."
-msgstr "tritt oft in virtuellen Maschinen auf oder mit Kerneln ohne Loop-Modul."
-
-#: warning
-msgid "It is impossible to use Tomb on this machine at this conditions."
-msgstr "Es ist unmöglich Tomb unter diesen Umständen auf dieser Maschine zu benutzen."
-
-#: message
-msgid "Waiting for the key to be piped from stdin... "
-msgstr "Warten auf den Schlüssel auf der Standarteingabe... "
-
-#: failure
-msgid "This operation requires a key file to be specified using the -k option."
-msgstr "Diese Operation benötigt das Angeben eines Schlüssels durch die -k Option."
-
-#: failure
-msgid "Key not found, specify one using -k."
-msgstr "Schlüssel nicht gefunden, bitte mit -k einen Schlüssel angeben."
-
-#: warning
-msgid "User aborted password dialog."
-msgstr "Benutzer hat den Passwortdialog abgebrochen."
-
-#: message
-msgid "Password OK."
-msgstr "Passwort OK."
-
-#: failure
-msgid "Error: the newly generated keyfile does not seem valid."
-msgstr "Fehler: Der neu erstellte Schlüssel scheint nicht gültig zu sein."
-
-#: failure
-msgid "User aborted."
-msgstr "Vom Benutzer abgebrochen."
-
-#: failure
-msgid "You set empty password, which is not possible."
-msgstr "Fehler: Passwort nicht gesetzt."
-
-#: failure
-msgid "Wrong argument for --kdf: must be an integer number (iteration seconds)."
-msgstr "Ungültiges Argument für --kdf: dies muss eine Ganzzahl sein."
-
-#: failure
-msgid "gpg (GnuPG) is not found, Tomb cannot function without it."
-msgstr "gpg (GnuPG) welches zur Funktion von Tomb notwendig ist, nicht gefunden."
-
-#: message
-msgid "Please confirm the key password for the encoding"
-msgstr "Bitte bestätigen Sie das Passwort zur Verschlüsselung"
-
-#: warning
-msgid "Wrong password supplied."
-msgstr "Das eingegebene Passwort ist falsch."
-
-#: failure
-msgid "You shall not bury a key whose password is unknown to you."
-msgstr "Sie dürfen keinen Schlüssel vergraben, von dem Sie das Passwort nicht kennen."
-
-#: warning
-msgid "Encoding error: steghide reports problems."
-msgstr "Fehler beim Verschlüsseln: steghide meldet Fehler."
-
-#: warning
-msgid "Make explicit use of --force to overwrite."
-msgstr "Benutzen Sie --force um ein Überschreiben zu erzwingen."
-
-#: warning
-msgid "Use of --force selected: overwriting."
-msgstr "--force wurde benutzt, wird überschrieben."
-
-#: failure
-msgid "A filename needs to be specified using -k to forge a new key."
-msgstr "Mit -k muss ein Dateiname angegeben werden, um einen neuen Schlüssel zu schmieden."
-
-#: failure
-msgid "Forging this key would overwrite an existing file. Operation aborted."
-msgstr "Diesen Schlüssel zu schmieden würde eine existierende Datei überschreiben. Aktion abgebrochen."
-
-#: message
-msgid "This operation takes time, keep using this computer on other tasks,"
-msgstr "Dieser Vorgang braucht Zeit, benutzen Sie den Computer für andere Aufgaben,"
-
-#: message
-msgid "once done you will be asked to choose a password for your tomb."
-msgstr "wenn der Vorgang einmal abgeschlossen ist, werden Sie gefragt ein Passwort für ihr Grab anzugeben."
-
-#: message
-msgid "To make it faster you can move the mouse around."
-msgstr "Um den Vorgang zu Beschleunigen können Sie die Maus hin und her bewegen."
-
-#: message
-msgid "If you are on a server, you can use an Entropy Generation Daemon."
-msgstr "Falls Sie auf einem Server sind können Sie einen Daemon benutzen um Entropie zu erstellen."
-
-#: warning
-msgid "Cannot generate encryption key."
-msgstr "Verschlüsselungsschlüssel konnte nicht erstellt werden."
-
-#: message
-msgid "(You can also change it later using 'tomb passwd'.)"
-msgstr "(Sie können ihn auch später mit 'tomb passwd' wechseln.)"
-
-#: warning
-msgid "The key does not seem to be valid."
-msgstr "Der Schlüssel scheint ungültig zu sein."
-
-#: warning
-msgid "Dumping contents to screen:"
-msgstr "Inhalte werden am Bildschirm angezeigt :"
-
-#: failure
-msgid "Size argument missing, use -s"
-msgstr "Größenangabe fehlt, benutzen Sie -s"
-
-#: warning
-msgid "A tomb exists already. I'm not digging here:"
-msgstr "Es existiert bereits ein Grab. Hier grabe ich nicht:"
-
-#: message
-msgid "Your tomb is not yet ready, you need to forge a key and lock it:"
-msgstr "Ihr Grab ist noch nicht bereit, erst müssen Sie einen Schlüssel schmieden und es abschließen:"
-
-#: warning
-msgid "No tomb specified for locking."
-msgstr "Kein Grab zum verschließen angegeben"
-
-#: warning
-msgid "Usage: tomb lock file.tomb file.tomb.key"
-msgstr "Gebrauch: tomb lock file.tomb file.tomb.key"
-
-#: failure
-msgid "There is no tomb here. You have to it dig first."
-msgstr "Es ist kein Grab an diesem Ort. Sie müssen erst eins graben."
-
-#: message
-msgid "Checking if the tomb is empty (we never step on somebody else's bones)."
-msgstr "Am kontrollieren ob Grab leer ist (wir würden nie fremde Knochen stören)."
-
-#: warning
-msgid "The tomb was already locked with another key."
-msgstr "Grab ist schon mit anderem Schlüssel verschlossen."
-
-#: failure
-msgid "Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
-msgstr "Vorgang abgebrochen. Ich kann kein bereits abgeschlossenes Grab nochmal abschließen. Graben Sie ein neues."
-
-#: message
-msgid "Fine, this tomb seems empty."
-msgstr "Gut, dieses Grab scheint leer."
-
-#: message
-msgid "Formatting Luks mapped device."
-msgstr "Formatieren des Luks Gerätes."
-
-#: warning
-msgid "cryptsetup luksFormat returned an error."
-msgstr "'cryptsetup luksFormat' hat einen Fehler ausgegeben."
-
-#: message
-msgid "Formatting your Tomb with Ext3/Ext4 filesystem."
-msgstr "Ihr Grab wird mit Ext3/Ext4 formatiert."
-
-#: warning
-msgid "Tomb format returned an error."
-msgstr "Beim Formatieren ist ein Fehler aufgetreten."
-
-#: message
-msgid "Here below its status is reported:"
-msgstr "Zustand des Grabes wie folgt:"
-
-#: message
-msgid "This tomb is a valid LUKS encrypted device."
-msgstr "Dieses Grab ist ein gültiges LUKS verschlüsseltes Gerät."
-
-#: failure
-msgid "Failure mounting the encrypted file."
-msgstr "Fehler beim Einhängen der verschlüsselten Datei."
-
-#: warning
-msgid "How pitiful! A tomb, and no HOME."
-msgstr "Wie bedaurndswert ! Ein Grab aber kein Zuhause."
-
-#: warning
-msgid "Cannot exec bind hooks without a mounted tomb."
-msgstr "'Bind hooks' kann nicht benutzt werden ohne eingehängtes Grab."
-
-#: failure
-msgid "I can't see any open tomb, may they all rest in peace."
-msgstr "Ich sehe kein geöffnetes Grab. Mögen sie alle in Frieden ruhen."
-
-#: message
-msgid "Search index updated."
-msgstr "Such-Index aktualisiert."
-
-#: warning
-msgid "Run 'tomb index' to create indexes."
-msgstr "Führen Sie 'tomb index' aus um Suchindexe zu erstellen."
-
-#: message
-msgid "Search completed."
-msgstr "Suche abgeschlossen."
-
-#: failure
-msgid "No tomb name specified for resizing."
-msgstr "Kein Name für das zu vergrössernde Grab angegeben."
-
-#: failure
-msgid "Size is not an integer."
-msgstr "Die Grösse muss eine Ganzzahl sein."
-
-#: failure
-msgid "The new size must be greater then old tomb size."
-msgstr "Die neue Grösse muss grösser sein als die alte."
-
-#: failure
-msgid "There is no open tomb to be closed."
-msgstr "Es gibt kein zu schließendes Grab."
-
-#: warning
-msgid "Too many tombs mounted, please specify one (see tomb list)"
-msgstr "Zu viele Gräber geöffnet, bitte geben sie ein Grab an (siehe 'tomb list')"
-
-#: warning
-msgid "or issue the command 'tomb close all' to close them all."
-msgstr "oder 'tomb close all' ausführen um alle zu schließen."
-
-#: warning
-msgid "Please specify an existing tomb."
-msgstr "Bitte geben Sie ein existierendes Grab an."
-
-#: message
-msgid "Kill all processes busy inside the tomb."
-msgstr "Abbrechen aller laufenden Prozesse im Grab."
-#: warning
-msgid "Tomb is busy, cannot umount!"
-msgstr "Grab ist beschäftigt und kann nicht ausgehänkt werden!"
-
-#: failure
-msgid "Error parsing."
-msgstr "Syntax Fehler."
-
-#: warning
-msgid "Some error occurred during option processing."
-msgstr "Fehler beim interpretieren der Optionen."
-
-#: warning
-msgid "The create command is deprecated, please use dig, forge and lock instead."
-msgstr "Der Befehl create ist veraltet, benutzen Sie stattdesseb dig, forge, und lock."
-
-#: warning
-msgid "For more informations see Tomb's manual page (man tomb)."
-msgstr "Für mehr Informationen siehe Benutzerhandbuch (man tomb)."
-
-#: message
-msgid "Try -h for help."
-msgstr "Versuchen Sie -h um Hilfe zu erhalten."
+#. Fold: Safety functions
+#. Function: _whoami
+#.
+#. Code sample:
+#.
+#. # Set username from UID or environment
+#. _USER=$SUDO_USER
+#. [[ "$_USER" = "" ]] && { _USER=$USERNAME }
+#. [[ "$_USER" = "" ]] && { _USER=$(id -u) }
+#. [[ "$_USER" = "" ]] && {
+#. > _failure "Failing to identify the user who is calling us" }
+#.
+#. # Get GID from option -G or the environment
+#. option_is_set -G #. && _GID=$(option_value -G) || _GID=$(id -g $_USER)
+#: tomb:189
+msgid "Failing to identify the user who is calling us"
+msgstr "Fehler beim Identifizieren des uns rufenden Benutzers"
-#: failure
+#. Fold: Safety functions
+#. Function: _plot
+#.
+#. Code sample:
+#. TOMBFILE=$(basename $TOMBPATH)
+#.
+#. # The tomb name is TOMBFILE without an extension.
+#. # It can start with dots: ..foo.tomb -> ..foo
+#. TOMBNAME="${TOMBFILE%\.[^\.]*}"
+#. [[ -z $TOMBNAME ]] && {
+#. > _failure "Tomb won't work without a TOMBNAME." }
+#.
+#. # Normalize tomb name
+#. TOMBFILE="$TOMBNAME.tomb"
+#.
+#: tomb:237
msgid "Tomb won't work without a TOMBNAME."
msgstr "Ohne GRABNAME kann Tomb nicht funktionieren."
-#: failure
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#.
+#. # Provide a random filename in shared memory
+#. _tmp_create() {
+#. [[ -d "$TMPPREFIX" ]] || {
+#. # we create the tempdir with the sticky bit on
+#. sudo mkdir -m 1777 "$TMPPREFIX"
+#. > [[ $? == 0 ]] || _failure "Fatal error creating the temporary directory: ::1 temp dir::" "$TMPPREFIX"
+#. }
+#.
+#. # We're going to add one more $RANDOM for each time someone complain
+#. # about this being too weak of a random.
+#: tomb:252
+msgid "Fatal error creating the temporary directory: ::1 temp dir::"
+msgstr "Fataler Fehler beim kreieren der temporären Datei: ::1 temp dir::"
+
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#.
+#. # We're going to add one more $RANDOM for each time someone complain
+#. # about this being too weak of a random.
+#. tfile="${TMPPREFIX}/$RANDOM$RANDOM$RANDOM$RANDOM" # Temporary file
+#. umask 066
+#. [[ $? == 0 ]] || {
+#. > _failure "Fatal error setting the permission umask for temporary files" }
+#.
+#. [[ -r "$tfile" ]] && {
+#. _failure "Someone is messing up with us trying to hijack temporary files." }
+#.
+#: tomb:260
+msgid "Fatal error setting the permission umask for temporary files"
+msgstr ""
+"Fataler Fehler beim Setzen der Berechtigungsmaske für die temporären Dateien"
+
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#. tfile="${TMPPREFIX}/$RANDOM$RANDOM$RANDOM$RANDOM" # Temporary file
+#. umask 066
+#. [[ $? == 0 ]] || {
+#. _failure "Fatal error setting the permission umask for temporary files" }
+#.
+#. [[ -r "$tfile" ]] && {
+#. > _failure "Someone is messing up with us trying to hijack temporary files." }
+#.
+#. touch "$tfile"
+#. [[ $? == 0 ]] || {
+#. _failure "Fatal error creating a temporary file: ::1 temp file::" "$tfile" }
+#: tomb:263
+msgid "Someone is messing up with us trying to hijack temporary files."
+msgstr ""
+"Jemand versucht uns durcheinander zu bringen und unsere temporären Dateien "
+"zu kapern."
+
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#.
+#. [[ -r "$tfile" ]] && {
+#. _failure "Someone is messing up with us trying to hijack temporary files." }
+#.
+#. touch "$tfile"
+#. [[ $? == 0 ]] || {
+#. > _failure "Fatal error creating a temporary file: ::1 temp file::" "$tfile" }
+#.
+#. [[ $? == 0 ]] || {
+#. _failure "Fatal error setting ownership on temporary file: ::1 temp file::" "$tfile" }
+#.
+#: tomb:267
msgid "Fatal error creating a temporary file: ::1 temp file::"
msgstr "Fataler Fehler beim erzeugen der temporären Datei: ::1 temp file::"
-#: warning
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#.
+#. touch "$tfile"
+#. [[ $? == 0 ]] || {
+#. _failure "Fatal error creating a temporary file: ::1 temp file::" "$tfile" }
+#.
+#. [[ $? == 0 ]] || {
+#. > _failure "Fatal error setting ownership on temporary file: ::1 temp file::" "$tfile" }
+#.
+#. _verbose "Created tempfile: ::1 temp file::" "$tfile"
+#. TOMBTMP="$tfile"
+#. TOMBTMPFILES+=("$tfile")
+#: tomb:270
+msgid "Fatal error setting ownership on temporary file: ::1 temp file::"
+msgstr ""
+"Fataler Fehler beim Setzen des Besitzers für die temporäre Datei: ::1 temp "
+"file::"
+
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. r=1
+#. is_crypt=`sudo dmsetup status "$s" | awk '/crypt/ {print $3}'`
+#. [[ $is_crypt == "crypt" ]] && { r=2 } || { break }
+#.
+#. fi
+#. done
+#. > _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#: tomb:316
+msgid "An active swap partition is detected..."
+msgstr ""
+
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. [[ $is_crypt == "crypt" ]] && { r=2 } || { break }
+#.
+#. fi
+#. done
+#. _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. > _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#. _warning "You can deactivate all swap partitions using the command:"
+#. _warning " swapoff -a"
+#: tomb:318
+msgid "All your swaps are belong to crypt. Good."
+msgstr "All ihre Auslagerungsdateien gehören Crypt. Gut."
+
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. fi
+#. done
+#. _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. > _warning "This poses a security risk."
+#. _warning "You can deactivate all swap partitions using the command:"
+#. _warning " swapoff -a"
+#. _warning "But if you want to proceed like this, use the -f (force) flag."
+#. fi
+#: tomb:320
+msgid "This poses a security risk."
+msgstr ""
+
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. done
+#. _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#. > _warning "You can deactivate all swap partitions using the command:"
+#. _warning " swapoff -a"
+#. _warning "But if you want to proceed like this, use the -f (force) flag."
+#. fi
+#. return $r
+#: tomb:321
msgid "You can deactivate all swap partitions using the command:"
msgstr "Sie können alle Swap-Partitionen deaktivieren mit dem Befehl:"
-#: warning
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#. _warning "You can deactivate all swap partitions using the command:"
+#. > _warning " swapoff -a"
+#. _warning "But if you want to proceed like this, use the -f (force) flag."
+#. fi
+#. return $r
+#.
+#: tomb:322
msgid " swapoff -a"
msgstr " swapoff -a"
-#: warning
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#. _warning "You can deactivate all swap partitions using the command:"
+#. _warning " swapoff -a"
+#. > _warning "But if you want to proceed like this, use the -f (force) flag."
+#. fi
+#. return $r
+#.
+#. }
+#: tomb:323
msgid "But if you want to proceed like this, use the -f (force) flag."
-msgstr "Falls sie ohne dies zu tun fortfahren wollen, benutzen sie die -f (forcieren) Option."
+msgstr ""
+"Falls sie ohne dies zu tun fortfahren wollen, benutzen sie die -f "
+"(forcieren) Option."
+
+#. Fold: Safety functions
+#. Function: _check_swap
+#.
+#. Code sample:
+#. _ensure_safe_swap
+#. case $? in
+#. 0|2) # No, or encrypted swap
+#. return 0
+#. ;;
+#. *) # Unencrypted swap
+#. > _failure "Operation aborted."
+#. ;;
+#. esac
+#. fi
+#. }
+#: tomb:342
+msgid "Operation aborted."
+msgstr "Vorgang abgebrochen."
+
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#. SETTITLE $title
+#. SETDESC $description
+#. SETPROMPT Password:
+#. GETPIN
+#. EOF`
+#. else
+#. > _failure "Cannot find pinentry-curses and no DISPLAY detected."
+#. fi
+#.
+#. else # a DISPLAY is found to be active
+#.
+#: tomb:379
+msgid "Cannot find pinentry-curses and no DISPLAY detected."
+msgstr ""
+
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#. EOF`
+#.
+#. else
+#.
+#. if _is_found "pinentry-curses"; then
+#.
+#. > _warning "Detected DISPLAY, but only pinentry-curses is found."
+#. output=`cat <<EOF | pinentry-curses
+#. OPTION ttyname=$TTY
+#. OPTION lc-ctype=$LANG
+#. SETTITLE $title
+#: tomb:432
+msgid "Detected DISPLAY, but only pinentry-curses is found."
+msgstr ""
-#: failure
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#. SETTITLE $title
+#. SETDESC $description
+#. SETPROMPT Password:
+#. GETPIN
+#. EOF`
+#. else
+#. > _failure "Cannot find any pinentry: impossible to ask for password."
+#. fi
+#.
+#. fi
+#.
+#: tomb:442
+msgid "Cannot find any pinentry: impossible to ask for password."
+msgstr ""
+
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#.
+#. fi # end of DISPLAY block
+#.
+#. # parse the pinentry output
+#. for i in ${(f)output}; do
+#. [[ "$i" =~ "^ERR.*" ]] && {
+#. > _warning "Pinentry error: ::1 error::" ${i[(w)3]}
+#. print "canceled"
+#. return 1 }
+#.
+#. # here the password is found
+#: tomb:452
+msgid "Pinentry error: ::1 error::"
+msgstr "Pinentry Fehler: ::1 error::"
+
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#.
+#. # here the password is found
+#. [[ "$i" =~ "^D .*" ]] && password="${i##D }"
+#. done
+#.
+#. [[ "$password" = "" ]] && {
+#. > _warning "Empty password"
+#. print "empty"
+#. return 1 }
+#.
+#. print "$password"
+#: tomb:461
+msgid "Empty password"
+msgstr "Leeres Passwort"
+
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. # Check if a filename is a valid tomb
+#. is_valid_tomb() {
+#. _verbose "is_valid_tomb ::1 tomb file::" $1
+#.
+#. # First argument must be the path to a tomb
+#. [[ -z "$1" ]] && {
+#. > _failure "Tomb file is missing from arguments." }
+#.
+#. # Tomb file must be a readable, writable, not-empty regular file.
+#. [[ ! -r "$1" ]] && {
+#. _failure "Tomb file not found: ::1 tomb file::" $1 }
+#: tomb:477
msgid "Tomb file is missing from arguments."
msgstr "Grab Datei fehlen Argumente."
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. # First argument must be the path to a tomb
+#. [[ -z "$1" ]] && {
+#. _failure "Tomb file is missing from arguments." }
+#.
+#. # Tomb file must be a readable, writable, not-empty regular file.
+#. [[ ! -r "$1" ]] && {
+#. > _failure "Tomb file not found: ::1 tomb file::" $1 }
+#. [[ ! -f "$1" ]] && {
+#. _failure "Tomb file is not a regular file: ::1 tomb file::" $1 }
+#. [[ ! -s "$1" ]] && {
+#. _failure "Tomb file is empty (zero length): ::1 tomb file::" $1 }
+#: tomb:481
msgid "Tomb file not found: ::1 tomb file::"
msgstr "Grab Datei nicht gefunden: ::1 tomb file::"
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. _failure "Tomb file is missing from arguments." }
+#.
+#. # Tomb file must be a readable, writable, not-empty regular file.
+#. [[ ! -r "$1" ]] && {
+#. _failure "Tomb file not found: ::1 tomb file::" $1 }
+#. [[ ! -f "$1" ]] && {
+#. > _failure "Tomb file is not a regular file: ::1 tomb file::" $1 }
+#. [[ ! -s "$1" ]] && {
+#. _failure "Tomb file is empty (zero length): ::1 tomb file::" $1 }
+#. [[ ! -w "$1" ]] && {
+#. _failure "Tomb file is not writable: ::1 tomb file::" $1 }
+#: tomb:483
msgid "Tomb file is not a regular file: ::1 tomb file::"
msgstr "Tomb File ist keine reguläre Datei: ::1 tomb file::"
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. # Tomb file must be a readable, writable, not-empty regular file.
+#. [[ ! -r "$1" ]] && {
+#. _failure "Tomb file not found: ::1 tomb file::" $1 }
+#. [[ ! -f "$1" ]] && {
+#. _failure "Tomb file is not a regular file: ::1 tomb file::" $1 }
+#. [[ ! -s "$1" ]] && {
+#. > _failure "Tomb file is empty (zero length): ::1 tomb file::" $1 }
+#. [[ ! -w "$1" ]] && {
+#. _failure "Tomb file is not writable: ::1 tomb file::" $1 }
+#.
+#. # TODO: split the rest of that function out.
+#: tomb:485
msgid "Tomb file is empty (zero length): ::1 tomb file::"
msgstr "Grab Datei ist leer (Länge: 0): ::1 tomb file::"
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. _failure "Tomb file not found: ::1 tomb file::" $1 }
+#. [[ ! -f "$1" ]] && {
+#. _failure "Tomb file is not a regular file: ::1 tomb file::" $1 }
+#. [[ ! -s "$1" ]] && {
+#. _failure "Tomb file is empty (zero length): ::1 tomb file::" $1 }
+#. [[ ! -w "$1" ]] && {
+#. > _failure "Tomb file is not writable: ::1 tomb file::" $1 }
+#.
+#. # TODO: split the rest of that function out.
+#. # We already have a valid tomb, now we're checking
+#. # whether we can alter it.
+#: tomb:487
msgid "Tomb file is not writable: ::1 tomb file::"
msgstr "Grab-Datei ist nicht beschreibbar: ::1 tomb file::"
-#: warning
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. # TODO: split the rest of that function out.
+#. # We already have a valid tomb, now we're checking
+#. # whether we can alter it.
+#.
+#. # Tomb file may be a LUKS FS (or we are creating it)
+#. [[ "`file $1`" =~ "luks encrypted file" ]] || {
+#. > _warning "File is not yet a tomb: ::1 tomb file::" $1 }
+#.
+#. _plot $1 # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. # Tomb cannot be already mounted (or we cannot alter it)
+#: tomb:495
msgid "File is not yet a tomb: ::1 tomb file::"
msgstr "Datei ist noch kein Grab: ::1 tomb file::"
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. _warning "File is not yet a tomb: ::1 tomb file::" $1 }
+#.
+#. _plot $1 # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. # Tomb cannot be already mounted (or we cannot alter it)
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]$" ]] && {
+#. > _failure "Tomb is currently in use: ::1 tomb name::" $TOMBNAME
+#. }
+#.
+#. _message "Valid tomb file found: ::1 tomb path::" $TOMBPATH
+#.
+#: tomb:501
msgid "Tomb is currently in use: ::1 tomb name::"
msgstr "Grab wird schon benutzt ::1 tomb name::"
-#: message
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#.
+#. # Tomb cannot be already mounted (or we cannot alter it)
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]$" ]] && {
+#. _failure "Tomb is currently in use: ::1 tomb name::" $TOMBNAME
+#. }
+#.
+#. > _message "Valid tomb file found: ::1 tomb path::" $TOMBPATH
+#.
+#. return 0
+#. }
+#.
+#: tomb:504
msgid "Valid tomb file found: ::1 tomb path::"
msgstr "Gültige tomb Datei gefunden: ::1 tomb path::"
-#: warning
+#. Fold: Safety functions
+#. Function: lo_mount
+#.
+#. Code sample:
+#. lo_mount() {
+#. tpath="$1"
+#.
+#. # check if we have support for loop mounting
+#. _nstloop=`sudo losetup -f`
+#. [[ $? = 0 ]] || {
+#. > _warning "Loop mount of volumes is not possible on this machine, this error"
+#. _warning "often occurs on VPS and kernels that don't provide the loop module."
+#. _warning "It is impossible to use Tomb on this machine at this conditions."
+#. _failure "Operation aborted."
+#. }
+#: tomb:516
msgid "Loop mount of volumes is not possible on this machine, this error"
msgstr "Loop-Mount der Laufwerke nicht unterstützt, dieser Fehler"
-#: print
+#. Fold: Safety functions
+#. Function: lo_mount
+#.
+#. Code sample:
+#. tpath="$1"
+#.
+#. # check if we have support for loop mounting
+#. _nstloop=`sudo losetup -f`
+#. [[ $? = 0 ]] || {
+#. _warning "Loop mount of volumes is not possible on this machine, this error"
+#. > _warning "often occurs on VPS and kernels that don't provide the loop module."
+#. _warning "It is impossible to use Tomb on this machine at this conditions."
+#. _failure "Operation aborted."
+#. }
+#.
+#: tomb:517
+msgid "often occurs on VPS and kernels that don't provide the loop module."
+msgstr ""
+"tritt oft in virtuellen Maschinen auf oder mit Kerneln ohne Loop-Modul."
+
+#. Fold: Safety functions
+#. Function: lo_mount
+#.
+#. Code sample:
+#.
+#. # check if we have support for loop mounting
+#. _nstloop=`sudo losetup -f`
+#. [[ $? = 0 ]] || {
+#. _warning "Loop mount of volumes is not possible on this machine, this error"
+#. _warning "often occurs on VPS and kernels that don't provide the loop module."
+#. > _warning "It is impossible to use Tomb on this machine at this conditions."
+#. _failure "Operation aborted."
+#. }
+#.
+#. sudo losetup -f "$tpath" # allocates the next loopback for our file
+#: tomb:518
+msgid "It is impossible to use Tomb on this machine at this conditions."
+msgstr ""
+"Es ist unmöglich Tomb unter diesen Umständen auf dieser Maschine zu benutzen."
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#.
+#. # }}}
+#.
+#. # {{{ Commandline interaction
+#.
+#. usage() {
+#. > _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#: tomb:558
msgid "Syntax: tomb [options] command [arguments]"
msgstr "Syntax: tomb [Optionen] Befehl [Argumente]"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#.
+#. # {{{ Commandline interaction
+#.
+#. usage() {
+#. _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. > _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#: tomb:560
msgid "Commands:"
msgstr "Befehle:"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#.
+#. usage() {
+#. _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. > _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#: tomb:562
msgid " // Creation:"
msgstr " // Erstellen:"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. usage() {
+#. _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#. > _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#: tomb:563
msgid " dig create a new empty TOMB file of size -s in MB"
msgstr " dig Neues GRAB erstellen mit der Größe -s Mb"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. > _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#: tomb:564
msgid " forge create a new KEY file and set its password"
msgstr " forge Neuen SCHLÜSSEL erstellen und Passwort zuweisen"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. > _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#: tomb:565
msgid " lock installs a lock on a TOMB to use it with KEY"
msgstr " lock GRAB mit einem SCHLÜSSEL zusperren"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. > _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#: tomb:567
msgid " // Operations on tombs:"
msgstr " // Gräber bearbeiten:"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. > _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#: tomb:568
msgid " open open an existing TOMB"
msgstr " open Vorhandenens GRAB öffnen"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. > _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#: tomb:569
msgid " index update the search indexes of tombs"
msgstr " index Den Suchindex der Gräber aktualisieren"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. > _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#: tomb:570
msgid " search looks for filenames matching text patterns"
msgstr " search Sucht nach Dateinamen welche Textmustern entsprechen"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. > _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#: tomb:571
msgid " list list of open TOMBs and information on them"
msgstr " list Liste geöffneter GRÄBER mit Infos"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. > _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#: tomb:572
msgid " close close a specific TOMB (or 'all')"
msgstr " close Schliesst das angegebene GRAB (oder \"all\")"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. > _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#: tomb:573
msgid " slam slam a TOMB killing all programs using it"
msgstr " slam Knallt ein GRAB zu und bricht alle dazugehörende Programme ab"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. > _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#. _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#: tomb:575
msgid " resize resize a TOMB to a new size -s (can only grow)"
msgstr " resize Größe eines Grabes ändern zu -s Mb (nur vergrößern möglich)"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#. > _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#. _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#: tomb:578
msgid " // Operations on keys:"
msgstr " // Schlüssel bearbeiten:"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#. _print " // Operations on keys:"
+#. > _print " passwd change the password of a KEY (needs old pass)"
+#. _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#. _print " // Backup on paper:"
+#: tomb:579
+msgid " passwd change the password of a KEY (needs old pass)"
+msgstr ""
+" passwd ändern des Passworts für einen SCHLÜSSEL (benötigt altes Passwort)"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#. _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#. > _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#. _print " // Backup on paper:"
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#: tomb:580
+msgid " setkey change the KEY locking a TOMB (needs old key and pass)"
+msgstr ""
+" setkey ändern des SCHLÜSSELS von einem GRAB (benötigt alten Schlüssel und "
+"Passwort)"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#. _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#. > _print " // Backup on paper:"
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#: tomb:583
+msgid " // Backup on paper:"
+msgstr " //Backup auf Papier:"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#. _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#. _print " // Backup on paper:"
+#. > _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#. _print " // Steganography:"
+#: tomb:584
msgid " engrave makes a QR code of a KEY to be saved on paper"
msgstr " engrave Erstellt einen QR-Code eines SCHLÜSSELS zum ausdrucken"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. [[ $QRENCODE == 1 ]] && {
+#. _print " // Backup on paper:"
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#. > _print " // Steganography:"
+#. _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#: tomb:588
+msgid " // Steganography:"
+msgstr " // Steganographie:"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " // Backup on paper:"
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#. _print " // Steganography:"
+#. > _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. _print "Options:"
+#: tomb:589
+msgid " bury hide a KEY inside a JPEG image (for use with -k)"
+msgstr ""
+" bury versteckt einen SCHLÜSSEL in einem JPEG Bild (zur Nutzung mit -k)"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#. _print " // Steganography:"
+#. _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. > _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#: tomb:590
+msgid " exhume extract a KEY from a JPEG image (prints to stdout)"
+msgstr ""
+" exhume extrahiert einen SCHLÜSSEL aus einer JPEG Datei (gibt an dei "
+"Standardausgabe aus)"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. [[ $STEGHIDE == 1 ]] && {
+#. _print " // Steganography:"
+#. _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. > _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#: tomb:593
msgid "Options:"
msgstr "Optionen:"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#. > _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#: tomb:595
msgid " -s size of the tomb file when creating/resizing one (in MB)"
-msgstr " -s Größe eines Grabes (beim Erstellen/neue Größe zuweisen) (in Mb)"
-
-#: print
+msgstr ""
+" -s Größe eines Grabes (beim Erstellen/neue Größe zuweisen) (in Mb)"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. > _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#: tomb:596
msgid " -k path to the key to be used ('-k -' to read from stdin)"
-msgstr " -k Dateipfad zum Schlüssel ('-k -' um ihn aus der Standarteingabe einzulesen)"
-
-#: print
+msgstr ""
+" -k Dateipfad zum Schlüssel ('-k -' um ihn aus der Standarteingabe "
+"einzulesen)"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. }
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. > _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#: tomb:597
msgid " -n don't process the hooks found in tomb"
msgstr " -n 'Hooks' im Grab nicht benutzen"
-#: print
-msgid " -o mount options used to open (default: rw,noatime,nodev)"
-msgstr " -o Mount Optionen beim Öffnen (Standart: rw,noatime,nodev)"
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. > _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#: tomb:598
+msgid " -o options passed to local command, e.g.:"
+msgstr ""
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. > _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#: tomb:599
+msgid " - mount options used to open (default: rw,noatime,nodev)"
+msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. > _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#: tomb:600
+msgid " - an alternate cipher to forge and lock"
+msgstr ""
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. > _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#: tomb:601
msgid " -f force operation (i.e. even if swap is active)"
msgstr " -f Vorgang erzwingen (z.B. falls Swap-Datei aktiv)"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. > _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#. _print "\000"
+#. _print " -h print this help"
+#: tomb:603
msgid " --kdf generate passwords armored against dictionary attacks"
msgstr " --kdf Gegen Wörterbuchattacken gefeite Passwörter erstellen"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#. _print "\000"
+#. > _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#: tomb:607
msgid " -h print this help"
msgstr " -h Anzeigen dieses Hilfetextes"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#. _print "\000"
+#. _print " -h print this help"
+#. > _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#. _print "For more informations on Tomb read the manual: man tomb"
+#: tomb:608
msgid " -v print version, license and list of available ciphers"
-msgstr " -v Anzeigen der Version, Lizenzen und vorhandeners Verschlüsslungsmethoden"
-
-#: print
+msgstr ""
+" -v Anzeigen der Version, Lizenzen und vorhandeners "
+"Verschlüsslungsmethoden"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#. _print "\000"
+#. _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. > _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#. _print "For more informations on Tomb read the manual: man tomb"
+#. _print "Please report bugs on <http://github.com/dyne/tomb/issues>."
+#: tomb:609
msgid " -q run quietly without printing informations"
msgstr " -q Still ablaufen lassen ohne Infos anzuzeigen"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. }
+#.
+#. _print "\000"
+#. _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. > _print " -D print debugging information at runtime"
+#. _print "\000"
+#. _print "For more informations on Tomb read the manual: man tomb"
+#. _print "Please report bugs on <http://github.com/dyne/tomb/issues>."
+#. }
+#: tomb:610
msgid " -D print debugging information at runtime"
msgstr " -D Debug-Infos beim Ablauf anzeigen"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#. > _print "For more informations on Tomb read the manual: man tomb"
+#. _print "Please report bugs on <http://github.com/dyne/tomb/issues>."
+#. }
+#.
+#.
+#: tomb:612
msgid "For more informations on Tomb read the manual: man tomb"
msgstr "Für mehr Informationen siehe Benutzerhandbuch (man tomb)."
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#. _print "For more informations on Tomb read the manual: man tomb"
+#. > _print "Please report bugs on <http://github.com/dyne/tomb/issues>."
+#. }
+#.
+#.
+#. # Check whether a commandline option is set.
+#: tomb:613
msgid "Please report bugs on <http://github.com/dyne/tomb/issues>."
msgstr "Bug-Reports bitte an <https://github.com/dyne/tomb/issues>.."
-#: failure
+#. Fold: Commandline interaction
+#. Function: _ensure_dependencies
+#.
+#. Code sample:
+#. # missing, bail out.
+#. _ensure_dependencies() {
+#.
+#. # Check for required programs
+#. for req in cryptsetup pinentry sudo gpg mkfs.ext4 e2fsck; do
+#. command -v $req 1>/dev/null 2>/dev/null || {
+#. > _failure "Missing required dependency ::1 command::. Please install it." $req }
+#. done
+#.
+#. # Ensure system binaries are available in the PATH
+#. path+=(/sbin /usr/sbin) # zsh magic
+#: tomb:748
msgid "Missing required dependency ::1 command::. Please install it."
-msgstr "Fehlende Abhängigkeit ::1 tomb path:: wird benötigt. Bitte installieren Sie sie."
+msgstr ""
+"Fehlende Abhängigkeit ::1 tomb path:: wird benötigt. Bitte installieren Sie "
+"sie."
+
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#.
+#. _verbose "is_valid_key"
+#.
+#. [[ -z $key ]] && key=$TOMBKEY
+#. [[ "$key" = "cleartext" ]] && {
+#. { option_is_set --unsafe } || {
+#. > _warning "cleartext key from stdin selected: this is unsafe."
+#. exitv=127 _failure "please use --unsafe if you really want to do this."
+#. }
+#. _warning "received key in cleartext from stdin (unsafe mode)"
+#. return 0 }
+#: tomb:785
+msgid "cleartext key from stdin selected: this is unsafe."
+msgstr ""
+"Klartext Schlüssel von der Standarteingabe ausgewählt: Dies ist nicht sicher."
+
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. _verbose "is_valid_key"
+#.
+#. [[ -z $key ]] && key=$TOMBKEY
+#. [[ "$key" = "cleartext" ]] && {
+#. { option_is_set --unsafe } || {
+#. _warning "cleartext key from stdin selected: this is unsafe."
+#. > exitv=127 _failure "please use --unsafe if you really want to do this."
+#. }
+#. _warning "received key in cleartext from stdin (unsafe mode)"
+#. return 0 }
+#.
+#: tomb:786
+msgid "please use --unsafe if you really want to do this."
+msgstr "Bitte benutzen Sie --unsafe wenn Sie dies wirklich tun wollen."
-#: warning
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. [[ -z $key ]] && key=$TOMBKEY
+#. [[ "$key" = "cleartext" ]] && {
+#. { option_is_set --unsafe } || {
+#. _warning "cleartext key from stdin selected: this is unsafe."
+#. exitv=127 _failure "please use --unsafe if you really want to do this."
+#. }
+#. > _warning "received key in cleartext from stdin (unsafe mode)"
+#. return 0 }
+#.
+#. [[ -z $key ]] && {
+#. _warning "is_valid_key() called without an argument."
+#: tomb:788
+msgid "received key in cleartext from stdin (unsafe mode)"
+msgstr ""
+"Empfangen des Schlüssels in Klartext von der Standarteingabe (Nicht sicherer "
+"Modus)"
+
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. exitv=127 _failure "please use --unsafe if you really want to do this."
+#. }
+#. _warning "received key in cleartext from stdin (unsafe mode)"
+#. return 0 }
+#.
+#. [[ -z $key ]] && {
+#. > _warning "is_valid_key() called without an argument."
+#. return 1
+#. }
+#.
+#. # If the key file is an image don't check file header
+#: tomb:792
msgid "is_valid_key() called without an argument."
msgstr "is_valid_key() ausgeführt ohne gültiges Argument."
-#: message
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. }
+#.
+#. # If the key file is an image don't check file header
+#. [[ -r $TOMBKEYFILE ]] #. && [[ $(file $TOMBKEYFILE) =~ "JP.G" ]] #. && {
+#. > _message "Key is an image, it might be valid."
+#. return 0 }
+#.
+#. [[ $key =~ "BEGIN PGP" ]] && {
+#. _message "Key is valid."
+#: tomb:800
msgid "Key is an image, it might be valid."
msgstr "Schlüssel ist ein Bild, es könnte gültig sein"
-#: message
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. && [[ $(file $TOMBKEYFILE) =~ "JP.G" ]] #. && {
+#. _message "Key is an image, it might be valid."
+#. return 0 }
+#.
+#. [[ $key =~ "BEGIN PGP" ]] && {
+#. > _message "Key is valid."
+#. return 0 }
+#.
+#. return 1
+#. }
+#: tomb:804
msgid "Key is valid."
msgstr "Schlüssel ist gültig"
-#: warning
+#. Fold: Key operations
+#. Function: _tomb_key_recover recover_key
+#.
+#. Code sample:
+#. }
+#.
+#. # $1 is a string containing an encrypted key
+#. _tomb_key_recover recover_key() {
+#. local key="${1}" # Unique argument is an encrypted key
+#.
+#. > _warning "Attempting key recovery."
+#.
+#. _head="${key[(f)1]}" # take the first line
+#.
+#. TOMBKEY="" # Reset global variable
+#: tomb:814
msgid "Attempting key recovery."
msgstr "Versuche Schlüssel wieder herzustellen"
-#: warning
-msgid "The key seems invalid or its format is not known by this version of Tomb."
-msgstr "Der Schlüssel scheint ungültig zu sein, oder sein Format ist dieser Tomb Version unbekannt."
+#. Fold: Key operations
+#. Function: _load_key
+#.
+#. Code sample:
+#. # Set global variables TOMBKEY and TOMBKEYFILE.
+#. _load_key() {
+#. local keyfile="$1" # Unique argument is an optional keyfile
+#.
+#. [[ -z $keyfile ]] && keyfile=$(option_value -k)
+#. [[ -z $keyfile ]] && {
+#. > _failure "This operation requires a key file to be specified using the -k option." }
+#.
+#. if [[ $keyfile == "-" ]]; then
+#. _verbose "load_key reading from stdin."
+#. _message "Waiting for the key to be piped from stdin... "
+#: tomb:838
+msgid "This operation requires a key file to be specified using the -k option."
+msgstr ""
+"Diese Operation benötigt das Angeben eines Schlüssels durch die -k Option."
+
+#. Fold: Key operations
+#. Function: _load_key
+#.
+#. Code sample:
+#. [[ -z $keyfile ]] && keyfile=$(option_value -k)
+#. [[ -z $keyfile ]] && {
+#. _failure "This operation requires a key file to be specified using the -k option." }
+#.
+#. if [[ $keyfile == "-" ]]; then
+#. _verbose "load_key reading from stdin."
+#. > _message "Waiting for the key to be piped from stdin... "
+#. TOMBKEYFILE=stdin
+#. TOMBKEY=$(cat)
+#. elif [[ $keyfile == "cleartext" ]]; then
+#. _verbose "load_key reading SECRET from stdin"
+#: tomb:842
+msgid "Waiting for the key to be piped from stdin... "
+msgstr "Warten auf den Schlüssel auf der Standarteingabe... "
+
+#. Fold: Key operations
+#. Function: _load_key
+#.
+#. Code sample:
+#. _message "Waiting for the key to be piped from stdin... "
+#. TOMBKEYFILE=cleartext
+#. TOMBKEY=cleartext
+#. TOMBSECRET=$(cat)
+#. else
+#. _verbose "load_key argument: ::1 key file::" $keyfile
+#. > [[ -r $keyfile ]] || _failure "Key not found, specify one using -k."
+#. TOMBKEYFILE=$keyfile
+#. TOMBKEY="${mapfile[$TOMBKEYFILE]}"
+#. fi
+#.
+#: tomb:853
+msgid "Key not found, specify one using -k."
+msgstr "Schlüssel nicht gefunden, bitte mit -k einen Schlüssel angeben."
-#: failure
+#. Fold: Key operations
+#. Function: _load_key
+#.
+#. Code sample:
+#. TOMBKEY="${mapfile[$TOMBKEYFILE]}"
+#. fi
+#.
+#. _verbose "load_key: ::1 key::" $TOMBKEYFILE
+#.
+#. is_valid_key $TOMBKEY || {
+#. > _warning "The key seems invalid or its format is not known by this version of Tomb."
+#. _tomb_key_recover $TOMBKEY
+#. }
+#.
+#. # Declared TOMBKEYFILE (path)
+#: tomb:861
+msgid ""
+"The key seems invalid or its format is not known by this version of Tomb."
+msgstr ""
+"Der Schlüssel scheint ungültig zu sein, oder sein Format ist dieser Tomb "
+"Version unbekannt."
+
+#. Fold: Key operations
+#. Function: get_lukskey
+#.
+#. Code sample:
+#. _verbose "KDF salt: $kdf_salt"
+#. _verbose "KDF ic: $kdf_ic"
+#. _verbose "KDF len: $kdf_len"
+#. _password=$(tomb-kdb-pbkdf2 $kdf_salt $kdf_ic $kdf_len 2>/dev/null <<<$_password)
+#. ;;
+#. *)
+#. > _failure "No suitable program for KDF ::1 program::." $pbkdf_hash
+#. unset _password
+#. return 1
+#. ;;
+#. esac
+#: tomb:936
msgid "No suitable program for KDF ::1 program::."
msgstr "Kein gültiges Programm zur Schlüsselableitung ::1 program::."
-#: failure
+#. Fold: Key operations
+#. Function: ask_key_password
+#.
+#. Code sample:
+#.
+#. # This function asks the user for the password to use the key it tests
+#. # it against the return code of gpg on success returns 0 and saves
+#. # the password in the global variable $TOMBPASSWORD
+#. ask_key_password() {
+#. [[ -z "$TOMBKEYFILE" ]] && {
+#. > _failure "Internal error: ask_key_password() called before _load_key()." }
+#.
+#. [[ "$TOMBKEYFILE" = "cleartext" ]] && {
+#. _verbose "no password needed, using secret bytes from stdin"
+#. return 0 }
+#: tomb:962
msgid "Internal error: ask_key_password() called before _load_key()."
msgstr "Interner Fehler: ask_key_password() vor _load_key() ausgeführt."
-#: message
+#. Fold: Key operations
+#. Function: ask_key_password
+#.
+#. Code sample:
+#. _failure "Internal error: ask_key_password() called before _load_key()." }
+#.
+#. [[ "$TOMBKEYFILE" = "cleartext" ]] && {
+#. _verbose "no password needed, using secret bytes from stdin"
+#. return 0 }
+#.
+#. > _message "A password is required to use key ::1 key::" $TOMBKEYFILE
+#. passok=0
+#. tombpass=""
+#. if [[ "$1" = "" ]]; then
+#.
+#: tomb:968
msgid "A password is required to use key ::1 key::"
msgstr "Ein Passwort ist zur Benutzung des Schlüssels ::1 key:: erforderlich"
-#: message
+#. Fold: Key operations
+#. Function: ask_key_password
+#.
+#. Code sample:
+#. if [[ $c == 1 ]]; then
+#. tombpass=$(ask_password "Insert password to: $TOMBKEYFILE")
+#. else
+#. tombpass=$(ask_password "Insert password to: $TOMBKEYFILE (attempt $c)")
+#. fi
+#. [[ $? = 0 ]] || {
+#. > _warning "User aborted password dialog."
+#. return 1
+#. }
+#.
+#. get_lukskey "$tombpass"
+#: tomb:980
+msgid "User aborted password dialog."
+msgstr "Benutzer hat den Passwortdialog abgebrochen."
+
+#. Fold: Key operations
+#. Function: ask_key_password
+#.
+#. Code sample:
+#. return 1
+#. }
+#.
+#. get_lukskey "$tombpass"
+#.
+#. [[ $? = 0 ]] && {
+#. > passok=1; _message "Password OK."
+#. break;
+#. }
+#. done
+#.
+#: tomb:987
+msgid "Password OK."
+msgstr "Passwort OK."
+
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#. change_passwd() {
+#. local tmpnewkey lukskey c tombpass tombpasstmp
+#.
+#. _check_swap # Ensure swap is secure, if any
+#. _load_key # Try loading key from option -k and set TOMBKEYFILE
+#.
+#. > _message "Commanded to change password for tomb key ::1 key::" $TOMBKEYFILE
+#.
+#. _tmp_create
+#. tmpnewkey=$TOMBTMP
+#.
+#: tomb:1025
msgid "Commanded to change password for tomb key ::1 key::"
msgstr "Benutzer hat Passwort für Schlüssel ::1 key:: gewechselt."
-#: failure
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#. local tomboldpwd="`option_value --tomb-old-pwd`"
+#. _verbose "tomb-old-pwd = ::1 old pass::" $tomboldpwd
+#. ask_key_password "$tomboldpwd"
+#. else
+#. ask_key_password
+#. fi
+#. > [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. _success "Changing password for ::1 key file::" $TOMBKEYFILE
+#.
+#. # Here $TOMBSECRET contains the key material in clear
+#: tomb:1037
msgid "No valid password supplied."
msgstr "Kein gültiges Passwort angegeben"
-#: message
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#. ask_key_password "$tomboldpwd"
+#. else
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. > _success "Changing password for ::1 key file::" $TOMBKEYFILE
+#.
+#. # Here $TOMBSECRET contains the key material in clear
+#.
+#. { option_is_set --tomb-pwd } && {
+#: tomb:1039
+msgid "Changing password for ::1 key file::"
+msgstr "Wechsle Passwort für ::1 key file::"
+
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#. gen_key "$tombpwd" >> "$tmpnewkey"
+#. } || {
+#. gen_key >> "$tmpnewkey"
+#. }
+#.
+#. { is_valid_key "${mapfile[$tmpnewkey]}" } || {
+#. > _failure "Error: the newly generated keyfile does not seem valid." }
+#.
+#. # Copy the new key as the original keyfile name
+#. cp -f "${tmpnewkey}" $TOMBKEYFILE
+#. _success "Your passphrase was successfully updated."
+#: tomb:1052
+msgid "Error: the newly generated keyfile does not seem valid."
+msgstr "Fehler: Der neu erstellte Schlüssel scheint nicht gültig zu sein."
+
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#.
+#. { is_valid_key "${mapfile[$tmpnewkey]}" } || {
+#. _failure "Error: the newly generated keyfile does not seem valid." }
+#.
+#. # Copy the new key as the original keyfile name
+#. cp -f "${tmpnewkey}" $TOMBKEYFILE
+#. > _success "Your passphrase was successfully updated."
+#.
+#. return 0
+#. }
+#.
+#: tomb:1056
+msgid "Your passphrase was successfully updated."
+msgstr "Ihr Passphrase wurde erfolgreich auf den neuesten Stand gebracht."
+
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#.
+#. if [ "$1" = "" ]; then
+#. while true; do
+#. # 3 tries to write two times a matching password
+#. tombpass=`ask_password "Type the new password to secure your key"`
+#. if [[ $? != 0 ]]; then
+#. > _failure "User aborted."
+#. fi
+#. if [ -z $tombpass ]; then
+#. _failure "You set empty password, which is not possible."
+#. fi
+#: tomb:1078
+msgid "User aborted."
+msgstr "Vom Benutzer abgebrochen."
+
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. # 3 tries to write two times a matching password
+#. tombpass=`ask_password "Type the new password to secure your key"`
+#. if [[ $? != 0 ]]; then
+#. _failure "User aborted."
+#. fi
+#. if [ -z $tombpass ]; then
+#. > _failure "You set empty password, which is not possible."
+#. fi
+#. tombpasstmp=$tombpass
+#. tombpass=`ask_password "Type the new password to secure your key (again)"`
+#. if [[ $? != 0 ]]; then
+#: tomb:1081
+msgid "You set empty password, which is not possible."
+msgstr "Fehler: Passwort nicht gesetzt."
+
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. # see: https://github.com/dyne/Tomb/issues/82
+#. itertime="`option_value --kdf`"
+#. # removing support of floating points because they can't be type checked well
+#. if [[ "$itertime" != <-> ]]; then
+#. unset tombpass
+#. unset tombpasstmp
+#. > _failure "Wrong argument for --kdf: must be an integer number (iteration seconds)."
+#. fi
+#. # --kdf takes one parameter: iter time (on present machine) in seconds
+#. local -i microseconds
+#. microseconds=$(( itertime * 10000 ))
+#: tomb:1109
+msgid ""
+"Wrong argument for --kdf: must be an integer number (iteration seconds)."
+msgstr "Ungültiges Argument für --kdf: dies muss eine Ganzzahl sein."
+
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. unset tombpasstmp
+#. _failure "Wrong argument for --kdf: must be an integer number (iteration seconds)."
+#. fi
+#. # --kdf takes one parameter: iter time (on present machine) in seconds
+#. local -i microseconds
+#. microseconds=$(( itertime * 10000 ))
+#. > _success "Using KDF, iterations: ::1 microseconds::" $microseconds
+#. _message "generating salt"
+#. pbkdf2_salt=`tomb-kdb-pbkdf2-gensalt`
+#. _message "calculating iterations"
+#. pbkdf2_iter=`tomb-kdb-pbkdf2-getiter $microseconds`
+#: tomb:1114
+msgid "Using KDF, iterations: ::1 microseconds::"
+msgstr "Benutze Schlüsselableitungsverfahren, Durchläufe: ::1 microseconds::"
+
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. _failure "Wrong argument for --kdf: must be an integer number (iteration seconds)."
+#. fi
+#. # --kdf takes one parameter: iter time (on present machine) in seconds
+#. local -i microseconds
+#. microseconds=$(( itertime * 10000 ))
+#. _success "Using KDF, iterations: ::1 microseconds::" $microseconds
+#. > _message "generating salt"
+#. pbkdf2_salt=`tomb-kdb-pbkdf2-gensalt`
+#. _message "calculating iterations"
+#. pbkdf2_iter=`tomb-kdb-pbkdf2-getiter $microseconds`
+#. _message "encoding the password"
+#: tomb:1115
msgid "generating salt"
msgstr "generiere Salt"
-#: message
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. # --kdf takes one parameter: iter time (on present machine) in seconds
+#. local -i microseconds
+#. microseconds=$(( itertime * 10000 ))
+#. _success "Using KDF, iterations: ::1 microseconds::" $microseconds
+#. _message "generating salt"
+#. pbkdf2_salt=`tomb-kdb-pbkdf2-gensalt`
+#. > _message "calculating iterations"
+#. pbkdf2_iter=`tomb-kdb-pbkdf2-getiter $microseconds`
+#. _message "encoding the password"
+#. # We use a length of 64bytes = 512bits (more than needed!?)
+#. tombpass=`tomb-kdb-pbkdf2 $pbkdf2_salt $pbkdf2_iter 64 <<<"${tombpass}"`
+#: tomb:1117
msgid "calculating iterations"
msgstr "berechne Iterationen"
-#: message
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. microseconds=$(( itertime * 10000 ))
+#. _success "Using KDF, iterations: ::1 microseconds::" $microseconds
+#. _message "generating salt"
+#. pbkdf2_salt=`tomb-kdb-pbkdf2-gensalt`
+#. _message "calculating iterations"
+#. pbkdf2_iter=`tomb-kdb-pbkdf2-getiter $microseconds`
+#. > _message "encoding the password"
+#. # We use a length of 64bytes = 512bits (more than needed!?)
+#. tombpass=`tomb-kdb-pbkdf2 $pbkdf2_salt $pbkdf2_iter 64 <<<"${tombpass}"`
+#.
+#. header="_KDF_pbkdf2sha1_${pbkdf2_salt}_${pbkdf2_iter}_64\n"
+#: tomb:1119
msgid "encoding the password"
msgstr "Passwort verschlüsseln"
-#: warning
+#. Fold: Key operations
+#. Function: list_gnupg_ciphers
+#.
+#. Code sample:
+#. unset tombpasstmp
+#. }
+#.
+#. # prints an array of ciphers available in gnupg (to encrypt keys)
+#. list_gnupg_ciphers() {
+#. # prints an error if GnuPG is not found
+#. > which gpg 2>/dev/null || _failure "gpg (GnuPG) is not found, Tomb cannot function without it."
+#.
+#. ciphers=(`gpg --version | awk '
+#. BEGIN { ciphers=0 }
+#. /^Cipher:/ { gsub(/,/,""); sub(/^Cipher:/,""); print; ciphers=1; next }
+#: tomb:1150
+msgid "gpg (GnuPG) is not found, Tomb cannot function without it."
+msgstr ""
+"gpg (GnuPG) welches zur Funktion von Tomb notwendig ist, nicht gefunden."
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#.
+#. _load_key # Try loading key from option -k and set TOMBKEY
+#.
+#. imagefile=$PARAM
+#.
+#. [[ "`file $imagefile`" =~ "JPEG" ]] || {
+#. > _warning "Encode failed: ::1 image file:: is not a jpeg image." $imagefile
+#. return 1
+#. }
+#.
+#. _success "Encoding key ::1 tomb key:: inside image ::2 image file::" $TOMBKEY $imagefile
+#: tomb:1171
msgid "Encode failed: ::1 image file:: is not a jpeg image."
msgstr "Verschlüsselung fehlgeschlagen: ::1 image file:: ist keine JPEG-Datei."
-#: failure
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#.
+#. [[ "`file $imagefile`" =~ "JPEG" ]] || {
+#. _warning "Encode failed: ::1 image file:: is not a jpeg image." $imagefile
+#. return 1
+#. }
+#.
+#. > _success "Encoding key ::1 tomb key:: inside image ::2 image file::" $TOMBKEY $imagefile
+#. _message "Please confirm the key password for the encoding"
+#. # We ask the password and test if it is the same encoding the
+#. # base key, to insure that the same password is used for the
+#. # encryption and the steganography. This is a standard enforced
+#: tomb:1175
+msgid "Encoding key ::1 tomb key:: inside image ::2 image file::"
+msgstr "Enkodiere Schlüssel ::1 tomb key:: im Bild ::2 image file::"
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. [[ "`file $imagefile`" =~ "JPEG" ]] || {
+#. _warning "Encode failed: ::1 image file:: is not a jpeg image." $imagefile
+#. return 1
+#. }
+#.
+#. _success "Encoding key ::1 tomb key:: inside image ::2 image file::" $TOMBKEY $imagefile
+#. > _message "Please confirm the key password for the encoding"
+#. # We ask the password and test if it is the same encoding the
+#. # base key, to insure that the same password is used for the
+#. # encryption and the steganography. This is a standard enforced
+#. # by Tomb, but its not strictly necessary (and having different
+#: tomb:1176
+msgid "Please confirm the key password for the encoding"
+msgstr "Bitte bestätigen Sie das Passwort zur Verschlüsselung"
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tombpwd
+#. ask_key_password "$tombpwd"
+#. } || {
+#. ask_key_password
+#. }
+#. [[ $? != 0 ]] && {
+#. > _warning "Wrong password supplied."
+#. _failure "You shall not bury a key whose password is unknown to you." }
+#.
+#. # We omit armor strings since having them as constants can give
+#. # ground to effective attacks on steganography
+#: tomb:1192
+msgid "Wrong password supplied."
+msgstr "Das eingegebene Passwort ist falsch."
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. ask_key_password "$tombpwd"
+#. } || {
+#. ask_key_password
+#. }
+#. [[ $? != 0 ]] && {
+#. _warning "Wrong password supplied."
+#. > _failure "You shall not bury a key whose password is unknown to you." }
+#.
+#. # We omit armor strings since having them as constants can give
+#. # ground to effective attacks on steganography
+#. print - "$TOMBKEY" | awk '
+#: tomb:1193
+msgid "You shall not bury a key whose password is unknown to you."
+msgstr ""
+"Sie dürfen keinen Schlüssel vergraben, von dem Sie das Passwort nicht kennen."
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. /^-----/ {next}
+#. /^Version/ {next}
+#. {print $0}' #. | steghide embed --embedfile - --coverfile ${imagefile} #. -p $TOMBPASSWORD -z 9 -e serpent cbc
+#. if [ $? != 0 ]; then
+#. > _warning "Encoding error: steghide reports problems."
+#. res=1
+#. else
+#. _success "Tomb key encoded succesfully into image ::1 image file::" $imagefile
+#. res=0
+#: tomb:1204
+msgid "Encoding error: steghide reports problems."
+msgstr "Fehler beim Verschlüsseln: steghide meldet Fehler."
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. | steghide embed --embedfile - --coverfile ${imagefile} #. -p $TOMBPASSWORD -z 9 -e serpent cbc
+#. if [ $? != 0 ]; then
+#. _warning "Encoding error: steghide reports problems."
+#. res=1
+#. else
+#. > _success "Tomb key encoded succesfully into image ::1 image file::" $imagefile
+#. res=0
+#. fi
+#.
+#. return $res
+#: tomb:1207
+msgid "Tomb key encoded succesfully into image ::1 image file::"
+msgstr "Grabschlüssel erfolgreich im Bild ::1 image file:: enkodiert"
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#.
+#. # mandatory 1st arg: the image file where key is supposed to be
+#. # optional 2nd arg: the password to use (same as key, internal use)
+#. # optional 3rd arg: the key where to save the result (- for stdout)
+#. exhume_key() {
+#. [[ "$1" = "" ]] && {
+#. > _failure "Exhume failed, no image specified" }
+#.
+#. local imagefile="$1" # The image file where to look for the key
+#. local tombpass="$2" # (Optional) the password to use (internal use)
+#. local destkey="$3" # (Optional) the key file where to save the
+#: tomb:1219
+msgid "Exhume failed, no image specified"
+msgstr "Extrahieren fehlgeschlagen, keine Bilddatei angegeben"
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. local destkey="$3" # (Optional) the key file where to save the
+#. # result (- for stdout)
+#. local r=1 # Return code (default: fail)
+#.
+#. # Ensure the image file is a readable JPEG
+#. [[ ! -r $imagefile ]] && {
+#. > _failure "Exhume failed, image file not found: ::1 image file::" "${imagefile:-none}" }
+#. [[ ! $(file "$imagefile") =~ "JP.G" ]] && {
+#. _failure "Exhume failed: ::1 image file:: is not a jpeg image." $imagefile }
+#.
+#. # When a password is passed as argument then always print out
+#: tomb:1229
msgid "Exhume failed, image file not found: ::1 image file::"
msgstr "Exhumieren fehlgeschlagen, Bilddatei nicht gefunden: ::1 image file::"
-#: failure
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. local r=1 # Return code (default: fail)
+#.
+#. # Ensure the image file is a readable JPEG
+#. [[ ! -r $imagefile ]] && {
+#. _failure "Exhume failed, image file not found: ::1 image file::" "${imagefile:-none}" }
+#. [[ ! $(file "$imagefile") =~ "JP.G" ]] && {
+#. > _failure "Exhume failed: ::1 image file:: is not a jpeg image." $imagefile }
+#.
+#. # When a password is passed as argument then always print out
+#. # the exhumed key on stdout without further checks (internal use)
+#. [[ -n "$tombpass" ]] && {
+#: tomb:1231
msgid "Exhume failed: ::1 image file:: is not a jpeg image."
msgstr "Verschlüsselung fehlgeschlagen: ::1 image file:: ist keine JPEG-Datei."
-#: failure
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#.
+#. # When a password is passed as argument then always print out
+#. # the exhumed key on stdout without further checks (internal use)
+#. [[ -n "$tombpass" ]] && {
+#. TOMBKEY=$(steghide extract -sf $imagefile -p $tombpass -xf -)
+#. [[ $? != 0 ]] && {
+#. > _failure "Wrong password or no steganographic key found" }
+#.
+#. recover_key $TOMBKEY
+#.
+#. return 0
+#: tomb:1238
msgid "Wrong password or no steganographic key found"
msgstr "Falsches Passwort, oder kein steganographischer Schlüssel gefunden"
-#: message
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. }
+#.
+#. # Ensure we have a valid destination for the key
+#. [[ -z $destkey ]] && { option_is_set -k } && destkey=$(option_value -k)
+#. [[ -z $destkey ]] && {
+#. destkey="-" # No key was specified: fallback to stdout
+#. > _message "printing exhumed key on stdout" }
+#.
+#. # Bail out if destination exists, unless -f (force) was passed
+#. [[ $destkey != "-" && -s $destkey ]] && {
+#. _warning "File exists: ::1 tomb key::" $destkey
+#: tomb:1249
msgid "printing exhumed key on stdout"
msgstr "Gebe exhumierten Schlüssel auf stdout aus"
-#: warning
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. [[ -z $destkey ]] && {
+#. destkey="-" # No key was specified: fallback to stdout
+#. _message "printing exhumed key on stdout" }
+#.
+#. # Bail out if destination exists, unless -f (force) was passed
+#. [[ $destkey != "-" && -s $destkey ]] && {
+#. > _warning "File exists: ::1 tomb key::" $destkey
+#. { option_is_set -f } && {
+#. _warning "Use of --force selected: overwriting."
+#. rm -f $destkey
+#. } || {
+#: tomb:1253
msgid "File exists: ::1 tomb key::"
msgstr "Datei existiert: ::1 tomb key::"
-#: failure
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. _message "printing exhumed key on stdout" }
+#.
+#. # Bail out if destination exists, unless -f (force) was passed
+#. [[ $destkey != "-" && -s $destkey ]] && {
+#. _warning "File exists: ::1 tomb key::" $destkey
+#. { option_is_set -f } && {
+#. > _warning "Use of --force selected: overwriting."
+#. rm -f $destkey
+#. } || {
+#. _warning "Make explicit use of --force to overwrite."
+#. _failure "Refusing to overwrite file. Operation aborted." }
+#: tomb:1255
+msgid "Use of --force selected: overwriting."
+msgstr "--force wurde benutzt, wird überschrieben."
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. [[ $destkey != "-" && -s $destkey ]] && {
+#. _warning "File exists: ::1 tomb key::" $destkey
+#. { option_is_set -f } && {
+#. _warning "Use of --force selected: overwriting."
+#. rm -f $destkey
+#. } || {
+#. > _warning "Make explicit use of --force to overwrite."
+#. _failure "Refusing to overwrite file. Operation aborted." }
+#. }
+#.
+#. _message "Trying to exhume a key out of image ::1 image file::" $imagefile
+#: tomb:1258
+msgid "Make explicit use of --force to overwrite."
+msgstr "Benutzen Sie --force um ein Überschreiben zu erzwingen."
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. _warning "File exists: ::1 tomb key::" $destkey
+#. { option_is_set -f } && {
+#. _warning "Use of --force selected: overwriting."
+#. rm -f $destkey
+#. } || {
+#. _warning "Make explicit use of --force to overwrite."
+#. > _failure "Refusing to overwrite file. Operation aborted." }
+#. }
+#.
+#. _message "Trying to exhume a key out of image ::1 image file::" $imagefile
+#. { option_is_set --tomb-pwd } && {
+#: tomb:1259
msgid "Refusing to overwrite file. Operation aborted."
msgstr "Überschreiben verweigert. Operation abgebrochen."
-#: message
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. rm -f $destkey
+#. } || {
+#. _warning "Make explicit use of --force to overwrite."
+#. _failure "Refusing to overwrite file. Operation aborted." }
+#. }
+#.
+#. > _message "Trying to exhume a key out of image ::1 image file::" $imagefile
+#. { option_is_set --tomb-pwd } && {
+#. tombpass=$(option_value --tomb-pwd)
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tombpass
+#. } || {
+#: tomb:1262
msgid "Trying to exhume a key out of image ::1 image file::"
msgstr "Versuche Schlüssel aus ::1 image file:: zu exhumieren"
-#: warning
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. steghide extract -sf $imagefile -p ${tombpass} -xf $destkey
+#. r=$?
+#.
+#. # Report to the user
+#. [[ "$destkey" = "-" ]] && destkey="stdout"
+#. [[ $r == 0 ]] && {
+#. > _success "Key succesfully exhumed to ::1 key::." $destkey
+#. } || {
+#. _warning "Nothing found in ::1 image file::" $imagefile
+#. }
+#.
+#: tomb:1283
+msgid "Key succesfully exhumed to ::1 key::."
+msgstr "Schlüssel erfolgreich exhumiert in ::1 key::."
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#.
+#. # Report to the user
+#. [[ "$destkey" = "-" ]] && destkey="stdout"
+#. [[ $r == 0 ]] && {
+#. _success "Key succesfully exhumed to ::1 key::." $destkey
+#. } || {
+#. > _warning "Nothing found in ::1 image file::" $imagefile
+#. }
+#.
+#. return $r
+#. }
+#: tomb:1285
msgid "Nothing found in ::1 image file::"
msgstr "Nichts gefunden in ::1 image file::"
-#: failure
+#. Fold: Key operations
+#. Function: engrave_key
+#.
+#. Code sample:
+#.
+#. _load_key # Try loading key from option -k and set TOMBKEYFILE
+#.
+#. local keyname=$(basename $TOMBKEYFILE)
+#. local pngname="$keyname.qr.png"
+#.
+#. > _success "Rendering a printable QRCode for key: ::1 tomb key file::" $TOMBKEYFILE
+#. # we omit armor strings to save space
+#. awk '/^-----/ {next}; /^Version/ {next}; {print $0}' $TOMBKEYFILE #. | qrencode --size 4 --level H --casesensitive -o $pngname
+#. [[ $? != 0 ]] && {
+#: tomb:1300
+msgid "Rendering a printable QRCode for key: ::1 tomb key file::"
+msgstr "Rendern eines ausdruckbaren QRCodes für Schlüssel: ::1 tomb key file::"
+
+#. Fold: Key operations
+#. Function: engrave_key
+#.
+#. Code sample:
+#.
+#. _success "Rendering a printable QRCode for key: ::1 tomb key file::" $TOMBKEYFILE
+#. # we omit armor strings to save space
+#. awk '/^-----/ {next}; /^Version/ {next}; {print $0}' $TOMBKEYFILE #. | qrencode --size 4 --level H --casesensitive -o $pngname
+#. [[ $? != 0 ]] && {
+#. > _failure "QREncode reported an error." }
+#.
+#. _success "Operation successful:"
+#. # TODO: only if verbose and/or not silent
+#. ls -lh $pngname
+#: tomb:1305
msgid "QREncode reported an error."
msgstr "QREncode meldet einen Fehler."
-#: message
+#. Fold: Key operations
+#. Function: engrave_key
+#.
+#. Code sample:
+#. # we omit armor strings to save space
+#. awk '/^-----/ {next}; /^Version/ {next}; {print $0}' $TOMBKEYFILE #. | qrencode --size 4 --level H --casesensitive -o $pngname
+#. [[ $? != 0 ]] && {
+#. _failure "QREncode reported an error." }
+#.
+#. > _success "Operation successful:"
+#. # TODO: only if verbose and/or not silent
+#. ls -lh $pngname
+#. file $pngname
+#. }
+#: tomb:1307
+msgid "Operation successful:"
+msgstr "Operation erfolgreich:"
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#.
+#. dig_tomb() {
+#. local tombpath="$1" # Path to tomb
+#. # Require the specification of the size of the tomb (-s) in MB
+#. local -i tombsize=$(option_value -s)
+#.
+#. > _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#: tomb:1340
msgid "Commanded to dig tomb ::1 tomb path::"
msgstr "Befehl erhalten zum ausgraben des Grabes: ::1 tomb path::"
-#: failure
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. local tombpath="$1" # Path to tomb
+#. # Require the specification of the size of the tomb (-s) in MB
+#. local -i tombsize=$(option_value -s)
+#.
+#. _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. > [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#: tomb:1342
msgid "Missing path to tomb"
msgstr "Dateipfad zum Grab fehlt"
-#: failure
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. # Require the specification of the size of the tomb (-s) in MB
+#. local -i tombsize=$(option_value -s)
+#.
+#. _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. > [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#. _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#: tomb:1343
+msgid "Size argument missing, use -s"
+msgstr "Größenangabe fehlt, benutzen Sie -s"
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. local -i tombsize=$(option_value -s)
+#.
+#. _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. > [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#. _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#: tomb:1344
msgid "Size must be an integer (megabytes)"
msgstr "Größe muss eine Ganzzahl sein (Megabytes)"
-#: failure
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#.
+#. _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. > [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#. _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. [[ -e $TOMBPATH ]] && {
+#: tomb:1345
msgid "Tombs can't be smaller than 10 megabytes"
msgstr "Gräber können nicht kleiner als 10 Megabyte sein"
-#: message
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#. _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. [[ -e $TOMBPATH ]] && {
+#. > _warning "A tomb exists already. I'm not digging here:"
+#. ls -lh $TOMBPATH
+#. return 1
+#. }
+#.
+#: tomb:1350
+msgid "A tomb exists already. I'm not digging here:"
+msgstr "Es existiert bereits ein Grab. Hier grabe ich nicht:"
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. [[ -e $TOMBPATH ]] && {
+#. _warning "A tomb exists already. I'm not digging here:"
+#. ls -lh $TOMBPATH
+#. return 1
+#. }
+#.
+#. > _success "Creating a new tomb in ::1 tomb path::" $TOMBPATH
+#.
+#. _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $tombsize
+#.
+#. # Ensure that file permissions are safe even if interrupted
+#: tomb:1355
+msgid "Creating a new tomb in ::1 tomb path::"
+msgstr "Erstelle ein neues Grab in ::1 tomb path::"
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. ls -lh $TOMBPATH
+#. return 1
+#. }
+#.
+#. _success "Creating a new tomb in ::1 tomb path::" $TOMBPATH
+#.
+#. > _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $tombsize
+#.
+#. # Ensure that file permissions are safe even if interrupted
+#. touch $TOMBPATH
+#. [[ $? = 0 ]] || {
+#: tomb:1357
msgid "Generating ::1 tomb file:: of ::2 size::MiB"
msgstr "Grab ::1 tomb file:: wird erstellt, mit der Größe ::2 size::Mb"
-#: warning
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#.
+#. _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $tombsize
+#.
+#. # Ensure that file permissions are safe even if interrupted
+#. touch $TOMBPATH
+#. [[ $? = 0 ]] || {
+#. > _warning "Error creating the tomb ::1 tomb path::" $TOMBPATH
+#. _failure "Operation aborted."
+#. }
+#. chmod 0600 $TOMBPATH
+#.
+#: tomb:1362
msgid "Error creating the tomb ::1 tomb path::"
msgstr "Fehler beim Erzeugen des Grabes ::1 tomb path::"
-#: message
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. ls -lh $TOMBPATH
+#. } || {
+#. _warning "Error creating the tomb ::1 tomb path::" $TOMBPATH
+#. _failure "Operation aborted."
+#. }
+#.
+#. > _success "Done digging ::1 tomb name::" $TOMBNAME
+#. _message "Your tomb is not yet ready, you need to forge a key and lock it:"
+#. _message "tomb forge ::1 tomb path::.key" $TOMBPATH
+#. _message "tomb lock ::1 tomb path:: -k ::1 tomb path::.key" $TOMBPATH
+#.
+#: tomb:1377
+msgid "Done digging ::1 tomb name::"
+msgstr "Fertig mit ausgraben ::1 tomb name::"
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. } || {
+#. _warning "Error creating the tomb ::1 tomb path::" $TOMBPATH
+#. _failure "Operation aborted."
+#. }
+#.
+#. _success "Done digging ::1 tomb name::" $TOMBNAME
+#. > _message "Your tomb is not yet ready, you need to forge a key and lock it:"
+#. _message "tomb forge ::1 tomb path::.key" $TOMBPATH
+#. _message "tomb lock ::1 tomb path:: -k ::1 tomb path::.key" $TOMBPATH
+#.
+#. return 0
+#: tomb:1378
+msgid "Your tomb is not yet ready, you need to forge a key and lock it:"
+msgstr ""
+"Ihr Grab ist noch nicht bereit, erst müssen Sie einen Schlüssel schmieden "
+"und es abschließen:"
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. _warning "Error creating the tomb ::1 tomb path::" $TOMBPATH
+#. _failure "Operation aborted."
+#. }
+#.
+#. _success "Done digging ::1 tomb name::" $TOMBNAME
+#. _message "Your tomb is not yet ready, you need to forge a key and lock it:"
+#. > _message "tomb forge ::1 tomb path::.key" $TOMBPATH
+#. _message "tomb lock ::1 tomb path:: -k ::1 tomb path::.key" $TOMBPATH
+#.
+#. return 0
+#. }
+#: tomb:1379
msgid "tomb forge ::1 tomb path::.key"
msgstr "tomb forge ::1 tomb path::.key "
-#: message
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. _failure "Operation aborted."
+#. }
+#.
+#. _success "Done digging ::1 tomb name::" $TOMBNAME
+#. _message "Your tomb is not yet ready, you need to forge a key and lock it:"
+#. _message "tomb forge ::1 tomb path::.key" $TOMBPATH
+#. > _message "tomb lock ::1 tomb path:: -k ::1 tomb path::.key" $TOMBPATH
+#.
+#. return 0
+#. }
+#.
+#: tomb:1380
msgid "tomb lock ::1 tomb path:: -k ::1 tomb path::.key"
msgstr "tomb lock ::1 tomb path:: -k ::1 tomb path::.key "
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. local destkey="$1"
+#. { option_is_set -k } && { destkey=$(option_value -k) }
+#.
+#. local algo="AES256" # Default encryption algorithm
+#.
+#. [[ -z "$destkey" ]] && {
+#. > _failure "A filename needs to be specified using -k to forge a new key." }
+#.
+#. _message "Commanded to forge key ::1 key::" $destkey
+#.
+#. _check_swap # Ensure the available memory is safe to use
+#: tomb:1401
+msgid "A filename needs to be specified using -k to forge a new key."
+msgstr ""
+"Mit -k muss ein Dateiname angegeben werden, um einen neuen Schlüssel zu "
+"schmieden."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#.
+#. local algo="AES256" # Default encryption algorithm
+#.
+#. [[ -z "$destkey" ]] && {
+#. _failure "A filename needs to be specified using -k to forge a new key." }
+#.
+#. > _message "Commanded to forge key ::1 key::" $destkey
+#.
+#. _check_swap # Ensure the available memory is safe to use
+#.
+#. # Ensure GnuPG won't exit with an error before first run
+#: tomb:1403
msgid "Commanded to forge key ::1 key::"
msgstr "::1 key:: wird geschmiedet"
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. mkdir -m 0700 $HOME/.gnupg
+#. touch $HOME/.gnupg/pubring.gpg }
+#.
+#. # Do not overwrite any files accidentally
+#. [[ -r "$destkey" ]] && {
+#. ls -lh $destkey
+#. > _failure "Forging this key would overwrite an existing file. Operation aborted." }
+#.
+#. touch $destkey
+#. [[ $? == 0 ]] || {
+#. _warning "Cannot generate encryption key."
+#: tomb:1415
+msgid "Forging this key would overwrite an existing file. Operation aborted."
+msgstr ""
+"Diesen Schlüssel zu schmieden würde eine existierende Datei überschreiben. "
+"Aktion abgebrochen."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. [[ -r "$destkey" ]] && {
+#. ls -lh $destkey
+#. _failure "Forging this key would overwrite an existing file. Operation aborted." }
+#.
+#. touch $destkey
+#. [[ $? == 0 ]] || {
+#. > _warning "Cannot generate encryption key."
+#. _failure "Operation aborted." }
+#. chmod 0600 $destkey
+#.
+#. # Update algorithm if it was passed on the command line with -o
+#: tomb:1419
+msgid "Cannot generate encryption key."
+msgstr "Verschlüsselungsschlüssel konnte nicht erstellt werden."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. chmod 0600 $destkey
+#.
+#. # Update algorithm if it was passed on the command line with -o
+#. { option_is_set -o } && algopt="$(option_value -o)"
+#. [[ -n "$algopt" ]] && algo=$algopt
+#.
+#. > _message "Commanded to forge key ::1 key:: with cipher algorithm ::2 algorithm::" #. $destkey $algo
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#: tomb:1427
msgid "Commanded to forge key ::1 key:: with cipher algorithm ::2 algorithm::"
-msgstr "Der Schlüssel ::1 key:: wird mit dem Verschlüsselungsalgorithmus ::2 algorithm:: geschmiedet."
+msgstr ""
+"Der Schlüssel ::1 key:: wird mit dem Verschlüsselungsalgorithmus ::2 "
+"algorithm:: geschmiedet."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#.
+#. _message "Commanded to forge key ::1 key:: with cipher algorithm ::2 algorithm::" #. $destkey $algo
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#. > _message "This operation takes time, keep using this computer on other tasks,"
+#. _message "once done you will be asked to choose a password for your tomb."
+#. _message "To make it faster you can move the mouse around."
+#. _message "If you are on a server, you can use an Entropy Generation Daemon."
+#.
+#: tomb:1432
+msgid "This operation takes time, keep using this computer on other tasks,"
+msgstr ""
+"Dieser Vorgang braucht Zeit, benutzen Sie den Computer für andere Aufgaben,"
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. _message "Commanded to forge key ::1 key:: with cipher algorithm ::2 algorithm::" #. $destkey $algo
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#. _message "This operation takes time, keep using this computer on other tasks,"
+#. > _message "once done you will be asked to choose a password for your tomb."
+#. _message "To make it faster you can move the mouse around."
+#. _message "If you are on a server, you can use an Entropy Generation Daemon."
+#.
+#. # Use /dev/random as the entropy source, unless --use-random is specified
+#: tomb:1433
+msgid "once done you will be asked to choose a password for your tomb."
+msgstr ""
+"wenn der Vorgang einmal abgeschlossen ist, werden Sie gefragt ein Passwort "
+"für ihr Grab anzugeben."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. $destkey $algo
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#. _message "This operation takes time, keep using this computer on other tasks,"
+#. _message "once done you will be asked to choose a password for your tomb."
+#. > _message "To make it faster you can move the mouse around."
+#. _message "If you are on a server, you can use an Entropy Generation Daemon."
+#.
+#. # Use /dev/random as the entropy source, unless --use-random is specified
+#. local random_source=/dev/random
+#: tomb:1434
+msgid "To make it faster you can move the mouse around."
+msgstr ""
+"Um den Vorgang zu Beschleunigen können Sie die Maus hin und her bewegen."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#. _message "This operation takes time, keep using this computer on other tasks,"
+#. _message "once done you will be asked to choose a password for your tomb."
+#. _message "To make it faster you can move the mouse around."
+#. > _message "If you are on a server, you can use an Entropy Generation Daemon."
+#.
+#. # Use /dev/random as the entropy source, unless --use-random is specified
+#. local random_source=/dev/random
+#. { option_is_set --use-urandom } && random_source=/dev/urandom
+#: tomb:1435
+msgid "If you are on a server, you can use an Entropy Generation Daemon."
+msgstr ""
+"Falls Sie auf einem Server sind können Sie einen Daemon benutzen um Entropie "
+"zu erstellen."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. [[ $? == 0 ]] || {
+#. _warning "Cannot generate encryption key."
+#. _failure "Operation aborted." }
+#.
+#. # Here the global variable TOMBSECRET contains the naked secret
+#.
+#. > _success "Choose the password of your key: ::1 tomb key::" $TOMBKEYFILE
+#. _message "(You can also change it later using 'tomb passwd'.)"
+#. # _user_file $TOMBKEYFILE
+#.
+#. tombname="$TOMBKEYFILE" # XXX ???
+#: tomb:1449
+msgid "Choose the password of your key: ::1 tomb key::"
+msgstr "Wählen Sie das Passwort von ihrem Schlüssel: ::1 tomb key::"
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. _warning "Cannot generate encryption key."
+#. _failure "Operation aborted." }
+#.
+#. # Here the global variable TOMBSECRET contains the naked secret
+#.
+#. _success "Choose the password of your key: ::1 tomb key::" $TOMBKEYFILE
+#. > _message "(You can also change it later using 'tomb passwd'.)"
+#. # _user_file $TOMBKEYFILE
+#.
+#. tombname="$TOMBKEYFILE" # XXX ???
+#. # the gen_key() function takes care of the new key's encryption
+#: tomb:1450
+msgid "(You can also change it later using 'tomb passwd'.)"
+msgstr "(Sie können ihn auch später mit 'tomb passwd' wechseln.)"
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#.
+#. # load the key contents (set global variable)
+#. TOMBKEY="${mapfile[$TOMBKEYFILE]}"
+#.
+#. # this does a check on the file header
+#. is_valid_key $TOMBKEY || {
+#. > _warning "The key does not seem to be valid."
+#. _warning "Dumping contents to screen:"
+#. print "${mapfile[$TOMBKEY]}"
+#. _warning "--"
+#. sudo umount ${keytmp}
+#: tomb:1468
+msgid "The key does not seem to be valid."
+msgstr "Der Schlüssel scheint ungültig zu sein."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. # load the key contents (set global variable)
+#. TOMBKEY="${mapfile[$TOMBKEYFILE]}"
+#.
+#. # this does a check on the file header
+#. is_valid_key $TOMBKEY || {
+#. _warning "The key does not seem to be valid."
+#. > _warning "Dumping contents to screen:"
+#. print "${mapfile[$TOMBKEY]}"
+#. _warning "--"
+#. sudo umount ${keytmp}
+#. rm -r $keytmp
+#: tomb:1469
+msgid "Dumping contents to screen:"
+msgstr "Inhalte werden am Bildschirm angezeigt :"
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. _warning "--"
+#. sudo umount ${keytmp}
+#. rm -r $keytmp
+#. _failure "Operation aborted."
+#. }
+#.
+#. > _message "Done forging ::1 key file::" $TOMBKEYFILE
+#. _success "Your key is ready:"
+#. ls -lh $TOMBKEYFILE
+#. }
+#.
+#: tomb:1477
msgid "Done forging ::1 key file::"
msgstr "::1 key file:: fertig geschmiedet"
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. sudo umount ${keytmp}
+#. rm -r $keytmp
+#. _failure "Operation aborted."
+#. }
+#.
+#. _message "Done forging ::1 key file::" $TOMBKEYFILE
+#. > _success "Your key is ready:"
+#. ls -lh $TOMBKEYFILE
+#. }
+#.
+#. # Step three -- Lock tomb
+#: tomb:1478
+msgid "Your key is ready:"
+msgstr "Ihr Schlüssel ist bereit:"
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. # for more alternatives refer to cryptsetup(8)
+#. local cipher="aes-xts-plain64:sha256"
+#.
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. [[ -n $tombpath ]] || {
+#. > _warning "No tomb specified for locking."
+#. _warning "Usage: tomb lock file.tomb file.tomb.key"
+#. return 1
+#. }
+#.
+#: tomb:1498
+msgid "No tomb specified for locking."
+msgstr "Kein Grab zum verschließen angegeben"
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. local cipher="aes-xts-plain64:sha256"
+#.
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. [[ -n $tombpath ]] || {
+#. _warning "No tomb specified for locking."
+#. > _warning "Usage: tomb lock file.tomb file.tomb.key"
+#. return 1
+#. }
+#.
+#. _plot $tombpath
+#: tomb:1499
+msgid "Usage: tomb lock file.tomb file.tomb.key"
+msgstr "Gebrauch: tomb lock file.tomb file.tomb.key"
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _warning "Usage: tomb lock file.tomb file.tomb.key"
+#. return 1
+#. }
+#.
+#. _plot $tombpath
+#.
+#. > _message "Commanded to lock tomb ::1 tomb file::" $TOMBFILE
+#.
+#. [[ -f $TOMBPATH ]] || {
+#. _failure "There is no tomb here. You have to dig it first." }
+#.
+#: tomb:1505
msgid "Commanded to lock tomb ::1 tomb file::"
msgstr "Grab ::1 tomb file:: wird verschlossen"
-#: message
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _plot $tombpath
+#.
+#. _message "Commanded to lock tomb ::1 tomb file::" $TOMBFILE
+#.
+#. [[ -f $TOMBPATH ]] || {
+#. > _failure "There is no tomb here. You have to dig it first." }
+#.
+#. _verbose "Tomb found: ::1 tomb path::" $TOMBPATH
+#.
+#. lo_mount $TOMBPATH
+#: tomb:1508
+msgid "There is no tomb here. You have to dig it first."
+msgstr "Es ist kein Grab an diesem Ort. Sie müssen erst eins graben."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. lo_mount $TOMBPATH
+#. nstloop=`lo_new`
+#.
+#. _verbose "Loop mounted on ::1 mount point::" $nstloop
+#.
+#. > _message "Checking if the tomb is empty (we never step on somebody else's bones)."
+#. sudo cryptsetup isLuks ${nstloop}
+#. if [ $? = 0 ]; then
+#. # is it a LUKS encrypted nest? then bail out and avoid reformatting it
+#. _warning "The tomb was already locked with another key."
+#: tomb:1517
+msgid "Checking if the tomb is empty (we never step on somebody else's bones)."
+msgstr ""
+"Am kontrollieren ob Grab leer ist (wir würden nie fremde Knochen stören)."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _verbose "Loop mounted on ::1 mount point::" $nstloop
+#.
+#. _message "Checking if the tomb is empty (we never step on somebody else's bones)."
+#. sudo cryptsetup isLuks ${nstloop}
+#. if [ $? = 0 ]; then
+#. # is it a LUKS encrypted nest? then bail out and avoid reformatting it
+#. > _warning "The tomb was already locked with another key."
+#. _failure "Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
+#. else
+#. _message "Fine, this tomb seems empty."
+#. fi
+#: tomb:1521
+msgid "The tomb was already locked with another key."
+msgstr "Grab ist schon mit anderem Schlüssel verschlossen."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _message "Checking if the tomb is empty (we never step on somebody else's bones)."
+#. sudo cryptsetup isLuks ${nstloop}
+#. if [ $? = 0 ]; then
+#. # is it a LUKS encrypted nest? then bail out and avoid reformatting it
+#. _warning "The tomb was already locked with another key."
+#. > _failure "Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
+#. else
+#. _message "Fine, this tomb seems empty."
+#. fi
+#.
+#: tomb:1522
+msgid ""
+"Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
+msgstr ""
+"Vorgang abgebrochen. Ich kann kein bereits abgeschlossenes Grab nochmal "
+"abschließen. Graben Sie ein neues."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. sudo cryptsetup isLuks ${nstloop}
+#. if [ $? = 0 ]; then
+#. # is it a LUKS encrypted nest? then bail out and avoid reformatting it
+#. _warning "The tomb was already locked with another key."
+#. _failure "Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
+#. else
+#. > _message "Fine, this tomb seems empty."
+#. fi
+#.
+#. _load_key # Try loading key from option -k and set TOMBKEYFILE
+#.
+#: tomb:1524
+msgid "Fine, this tomb seems empty."
+msgstr "Gut, dieses Grab scheint leer."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _load_key # Try loading key from option -k and set TOMBKEYFILE
+#.
+#. # the encryption cipher for a tomb can be set when locking using -c
+#. { option_is_set -o } && algopt="$(option_value -o)"
+#. [[ -n "$algopt" ]] && cipher=$algopt
+#. > _message "Locking using cipher: ::1 cipher::" $cipher
+#.
+#. # get the pass from the user and check it
+#. if option_is_set --tomb-pwd; then
+#. tomb_pwd="`option_value --tomb-pwd`"
+#: tomb:1532
msgid "Locking using cipher: ::1 cipher::"
msgstr "Abschließen mit Chiffre: ::1 cipher::"
-#: warning
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. ask_key_password "$tomb_pwd"
+#. else
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. > _success "Locking ::1 tomb file:: with ::2 tomb key file::" $TOMBFILE $TOMBKEYFILE
+#.
+#. _message "Formatting Luks mapped device."
+#. _cryptsetup --batch-mode #. --cipher ${cipher} --key-size 256 --key-slot 0 #: tomb:1544
+msgid "Locking ::1 tomb file:: with ::2 tomb key file::"
+msgstr "Schliesse ::1 tomb file:: ab mit ::2 tomb key file::"
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. _success "Locking ::1 tomb file:: with ::2 tomb key file::" $TOMBFILE $TOMBKEYFILE
+#.
+#. > _message "Formatting Luks mapped device."
+#. _cryptsetup --batch-mode #. --cipher ${cipher} --key-size 256 --key-slot 0 #. luksFormat ${nstloop}
+#. [[ $? == 0 ]] || {
+#: tomb:1546
+msgid "Formatting Luks mapped device."
+msgstr "Formatieren des Luks Gerätes."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _message "Formatting Luks mapped device."
+#. _cryptsetup --batch-mode #. --cipher ${cipher} --key-size 256 --key-slot 0 #. luksFormat ${nstloop}
+#. [[ $? == 0 ]] || {
+#. > _warning "cryptsetup luksFormat returned an error."
+#. _failure "Operation aborted." }
+#.
+#. _cryptsetup --cipher ${cipher} luksOpen ${nstloop} tomb.tmp
+#. [[ $? == 0 ]] || {
+#: tomb:1551
+msgid "cryptsetup luksFormat returned an error."
+msgstr "'cryptsetup luksFormat' hat einen Fehler ausgegeben."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. [[ $? == 0 ]] || {
+#. _warning "cryptsetup luksFormat returned an error."
+#. _failure "Operation aborted." }
+#.
+#. _cryptsetup --cipher ${cipher} luksOpen ${nstloop} tomb.tmp
+#. [[ $? == 0 ]] || {
+#. > _warning "cryptsetup luksOpen returned an error."
+#. _failure "Operation aborted." }
+#.
+#. _message "Formatting your Tomb with Ext3/Ext4 filesystem."
+#. ${=MKFS} $TOMBNAME /dev/mapper/tomb.tmp
+#: tomb:1556
msgid "cryptsetup luksOpen returned an error."
msgstr "'cryptsetup luksOpen' hat einen Fehler ausgegeben"
-#: warning
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _cryptsetup --cipher ${cipher} luksOpen ${nstloop} tomb.tmp
+#. [[ $? == 0 ]] || {
+#. _warning "cryptsetup luksOpen returned an error."
+#. _failure "Operation aborted." }
+#.
+#. > _message "Formatting your Tomb with Ext3/Ext4 filesystem."
+#. ${=MKFS} $TOMBNAME /dev/mapper/tomb.tmp
+#.
+#. [[ $? == 0 ]] || {
+#. _warning "Tomb format returned an error."
+#: tomb:1559
+msgid "Formatting your Tomb with Ext3/Ext4 filesystem."
+msgstr "Ihr Grab wird mit Ext3/Ext4 formatiert."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _failure "Operation aborted." }
+#.
+#. _message "Formatting your Tomb with Ext3/Ext4 filesystem."
+#. ${=MKFS} $TOMBNAME /dev/mapper/tomb.tmp
+#.
+#. [[ $? == 0 ]] || {
+#. > _warning "Tomb format returned an error."
+#. _warning "Your tomb ::1 tomb file:: may be corrupted." $TOMBFILE }
+#.
+#. # Sync
+#. sudo cryptsetup luksClose tomb.tmp
+#: tomb:1563
+msgid "Tomb format returned an error."
+msgstr "Beim Formatieren ist ein Fehler aufgetreten."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _message "Formatting your Tomb with Ext3/Ext4 filesystem."
+#. ${=MKFS} $TOMBNAME /dev/mapper/tomb.tmp
+#.
+#. [[ $? == 0 ]] || {
+#. _warning "Tomb format returned an error."
+#. > _warning "Your tomb ::1 tomb file:: may be corrupted." $TOMBFILE }
+#.
+#. # Sync
+#. sudo cryptsetup luksClose tomb.tmp
+#.
+#: tomb:1564
msgid "Your tomb ::1 tomb file:: may be corrupted."
msgstr "Ihr Grab ::1 tomb file:: könnte korrumpiert sein."
-#: message
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _warning "Tomb format returned an error."
+#. _warning "Your tomb ::1 tomb file:: may be corrupted." $TOMBFILE }
+#.
+#. # Sync
+#. sudo cryptsetup luksClose tomb.tmp
+#.
+#. > _message "Done locking ::1 tomb name:: using Luks dm-crypt ::2 cipher::" $TOMBNAME $cipher
+#. _success "Your tomb is ready in ::1 tomb path:: and secured with key ::2 tomb key::" #. $TOMBPATH $TOMBKEYFILE
+#.
+#. }
+#: tomb:1569
msgid "Done locking ::1 tomb name:: using Luks dm-crypt ::2 cipher::"
-msgstr "Grab ::1 tomb name:: wurde erfolgreich verschlüsselt mit LUKS dm-crypt ::2 cipher::"
-
-#: message
+msgstr ""
+"Grab ::1 tomb name:: wurde erfolgreich verschlüsselt mit LUKS dm-crypt ::2 "
+"cipher::"
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _warning "Your tomb ::1 tomb file:: may be corrupted." $TOMBFILE }
+#.
+#. # Sync
+#. sudo cryptsetup luksClose tomb.tmp
+#.
+#. _message "Done locking ::1 tomb name:: using Luks dm-crypt ::2 cipher::" $TOMBNAME $cipher
+#. > _success "Your tomb is ready in ::1 tomb path:: and secured with key ::2 tomb key::" #. $TOMBPATH $TOMBKEYFILE
+#.
+#. }
+#.
+#: tomb:1570
+msgid ""
+"Your tomb is ready in ::1 tomb path:: and secured with key ::2 tomb key::"
+msgstr ""
+"Ihr Grab ist bereit in ::1 tomb path::und gesichert mit dem Schlüssel ::2 "
+"tomb key::"
+
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. # This function changes the key that locks a tomb
+#. change_tomb_key() {
+#. local tombkey="$1" # Path to the tomb's key file
+#. local tombpath="$2" # Path to the tomb
+#.
+#. > _message "Commanded to reset key for tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -z "$tombpath" ]] && {
+#. _warning "Command 'setkey' needs two arguments: the old key file and the tomb."
+#. _warning "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
+#: tomb:1580
msgid "Commanded to reset key for tomb ::1 tomb path::"
-msgstr "Befehl erhalten zum zurücksetzen des Schlüssels fur das Grab ::1 tomb path::"
-
-#: warning
+msgstr ""
+"Befehl erhalten zum zurücksetzen des Schlüssels fur das Grab ::1 tomb path::"
+
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. local tombkey="$1" # Path to the tomb's key file
+#. local tombpath="$2" # Path to the tomb
+#.
+#. _message "Commanded to reset key for tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -z "$tombpath" ]] && {
+#. > _warning "Command 'setkey' needs two arguments: the old key file and the tomb."
+#. _warning "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
+#. _failure "Execution aborted."
+#. }
+#.
+#: tomb:1583
msgid "Command 'setkey' needs two arguments: the old key file and the tomb."
-msgstr "Der Befehl 'setkey' benötigt zwei Argumente: Die alte Schlüsseldatei und das Grab."
-
-#: warning
+msgstr ""
+"Der Befehl 'setkey' benötigt zwei Argumente: Die alte Schlüsseldatei und das "
+"Grab."
+
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. local tombpath="$2" # Path to the tomb
+#.
+#. _message "Commanded to reset key for tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -z "$tombpath" ]] && {
+#. _warning "Command 'setkey' needs two arguments: the old key file and the tomb."
+#. > _warning "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
+#. _failure "Execution aborted."
+#. }
+#.
+#. _check_swap
+#: tomb:1584
msgid "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
msgstr "z.B.: tomb -k new.tomb.key old.tomb.key secret.tomb"
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. _message "Commanded to reset key for tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -z "$tombpath" ]] && {
+#. _warning "Command 'setkey' needs two arguments: the old key file and the tomb."
+#. _warning "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
+#. > _failure "Execution aborted."
+#. }
+#.
+#. _check_swap
+#. is_valid_tomb $tombpath
+#: tomb:1585
msgid "Execution aborted."
msgstr "Vorgang abgebrochen."
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. lo_mount $TOMBPATH
+#. nstloop=`lo_new`
+#. sudo cryptsetup isLuks ${nstloop}
+#. # is it a LUKS encrypted nest? we check one more time
+#. [[ $? == 0 ]] || {
+#. > _failure "Not a valid LUKS encrypted volume: ::1 volume::" $TOMBPATH }
+#.
+#. _load_key $tombkey # Try loading given key and set TOMBKEY and
+#. # TOMBKEYFILE
+#. local oldkey=$TOMBKEY
+#: tomb:1596
msgid "Not a valid LUKS encrypted volume: ::1 volume::"
msgstr "Dieses Grab ist ein gültiges LUKS verschlüsseltes Gerät: ::1 volume::"
-#: message
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. _load_key $tombkey # Try loading given key and set TOMBKEY and
+#. # TOMBKEYFILE
+#. local oldkey=$TOMBKEY
+#. local oldkeyfile=$TOMBKEYFILE
+#.
+#. # we have everything, prepare to mount
+#. > _success "Changing lock on tomb ::1 tomb name::" $TOMBNAME
+#. _message "Old key: ::1 old key::" $oldkeyfile
+#.
+#. # render the mapper
+#. mapdate=`date +%s`
+#: tomb:1604
+msgid "Changing lock on tomb ::1 tomb name::"
+msgstr "Wechsle Schloss am Grab ::1 tomb name::"
+
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. # TOMBKEYFILE
+#. local oldkey=$TOMBKEY
+#. local oldkeyfile=$TOMBKEYFILE
+#.
+#. # we have everything, prepare to mount
+#. _success "Changing lock on tomb ::1 tomb name::" $TOMBNAME
+#. > _message "Old key: ::1 old key::" $oldkeyfile
+#.
+#. # render the mapper
+#. mapdate=`date +%s`
+#. # save date of mount in minutes since 1970
+#: tomb:1605
msgid "Old key: ::1 old key::"
msgstr "Alter Schlüssel: ::1 old key::"
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. _verbose "tomb-old-pwd = ::1 old pass::" $tomb_old_pwd
+#. ask_key_password "$tomb_old_pwd"
+#. else
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || {
+#. > _failure "No valid password supplied for the old key." }
+#. old_secret=$TOMBSECRET
+#.
+#. # luksOpen the tomb (not really mounting, just on the loopback)
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - #: tomb:1621
msgid "No valid password supplied for the old key."
msgstr "Kein gültiges Passwort für den alten Schlüssel angegeben."
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. _failure "No valid password supplied for the old key." }
+#. old_secret=$TOMBSECRET
+#.
+#. # luksOpen the tomb (not really mounting, just on the loopback)
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - #. luksOpen ${nstloop} ${mapper}
+#. > [[ $? == 0 ]] || _failure "Unexpected error in luksOpen."
+#.
+#. _load_key # Try loading new key from option -k and set TOMBKEYFILE
+#.
+#. _message "New key: ::1 key file::" $TOMBKEYFILE
+#: tomb:1627
msgid "Unexpected error in luksOpen."
msgstr "Unerwarteter Fehler in luksOpen."
-#: message
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - #. luksOpen ${nstloop} ${mapper}
+#. [[ $? == 0 ]] || _failure "Unexpected error in luksOpen."
+#.
+#. _load_key # Try loading new key from option -k and set TOMBKEYFILE
+#.
+#. > _message "New key: ::1 key file::" $TOMBKEYFILE
+#.
+#. if option_is_set --tomb-pwd; then
+#. tomb_new_pwd="`option_value --tomb-pwd`"
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tomb_new_pwd
+#: tomb:1631
msgid "New key: ::1 key file::"
msgstr "Neuer Schlüssel: ::1 key file::"
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tomb_new_pwd
+#. ask_key_password "$tomb_new_pwd"
+#. else
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || {
+#. > _failure "No valid password supplied for the new key." }
+#.
+#. _tmp_create
+#. tmpnewkey=$TOMBTMP
+#. print -R -n - "$TOMBSECRET" >> $tmpnewkey
+#: tomb:1641
msgid "No valid password supplied for the new key."
msgstr "Kein gültiges Passwort für den neuen Schlüssel angegeben."
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. tmpnewkey=$TOMBTMP
+#. print -R -n - "$TOMBSECRET" >> $tmpnewkey
+#.
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - #. luksChangeKey "$nstloop" "$tmpnewkey"
+#.
+#. > [[ $? == 0 ]] || _failure "Unexpected error in luksChangeKey."
+#.
+#. sudo cryptsetup luksClose "${mapper}" || _failure "Unexpected error in luksClose."
+#.
+#. _success "Succesfully changed key for tomb: ::1 tomb file::" $TOMBFILE
+#: tomb:1650
msgid "Unexpected error in luksChangeKey."
msgstr "Unerwarteter Fehler in luksChangeKey."
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - #. luksChangeKey "$nstloop" "$tmpnewkey"
+#.
+#. [[ $? == 0 ]] || _failure "Unexpected error in luksChangeKey."
+#.
+#. > sudo cryptsetup luksClose "${mapper}" || _failure "Unexpected error in luksClose."
+#.
+#. _success "Succesfully changed key for tomb: ::1 tomb file::" $TOMBFILE
+#. _message "The new key is: ::1 new key::" $TOMBKEYFILE
+#.
+#: tomb:1652
msgid "Unexpected error in luksClose."
msgstr "Unerwarteter Fehler in luksClose."
-#: message
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. luksChangeKey "$nstloop" "$tmpnewkey"
+#.
+#. [[ $? == 0 ]] || _failure "Unexpected error in luksChangeKey."
+#.
+#. sudo cryptsetup luksClose "${mapper}" || _failure "Unexpected error in luksClose."
+#.
+#. > _success "Succesfully changed key for tomb: ::1 tomb file::" $TOMBFILE
+#. _message "The new key is: ::1 new key::" $TOMBKEYFILE
+#.
+#. return 0
+#. }
+#: tomb:1654
+msgid "Succesfully changed key for tomb: ::1 tomb file::"
+msgstr "Schlüssel Erfolgreich gewechselt für das Grab: : ::1 tomb file::"
+
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. [[ $? == 0 ]] || _failure "Unexpected error in luksChangeKey."
+#.
+#. sudo cryptsetup luksClose "${mapper}" || _failure "Unexpected error in luksClose."
+#.
+#. _success "Succesfully changed key for tomb: ::1 tomb file::" $TOMBFILE
+#. > _message "The new key is: ::1 new key::" $TOMBKEYFILE
+#.
+#. return 0
+#. }
+#.
+#: tomb:1655
msgid "The new key is: ::1 new key::"
msgstr "Der neue Schlüssel ist: ::1 new key::"
-#: failure
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. # {{{ Open
+#.
+#. # $1 = tombfile $2(optional) = mountpoint
+#. mount_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#. > [[ -n "$tombpath" ]] || _failure "No tomb name specified for opening."
+#.
+#. _message "Commanded to open tomb ::1 tomb name::" $1
+#.
+#. _check_swap
+#: tomb:1667
msgid "No tomb name specified for opening."
msgstr "Bitte geben Sie den Namen des zu vöffnenden Grabes an."
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. # $1 = tombfile $2(optional) = mountpoint
+#. mount_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#. [[ -n "$tombpath" ]] || _failure "No tomb name specified for opening."
+#.
+#. > _message "Commanded to open tomb ::1 tomb name::" $1
+#.
+#. _check_swap
+#. is_valid_tomb $tombpath
+#.
+#: tomb:1669
msgid "Commanded to open tomb ::1 tomb name::"
msgstr "Grab ::1 tomb name:: wird geöffnet"
-#: warning
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. _check_swap
+#. is_valid_tomb $tombpath
+#.
+#. # check file type (if its a Luks fs)
+#. [[ "`file $TOMBPATH`" =~ "luks encrypted file" ]] || {
+#. > _warning "::1 tomb file:: is not a valid tomb file" $TOMBFILE
+#. _failure "Operation aborted."
+#. }
+#.
+#. _verbose "Tomb found: ::1 tomb path::" $TOMBPATH
+#: tomb:1676
msgid "::1 tomb file:: is not a valid tomb file"
msgstr "::1 tomb file:: iste keine gültige Grabdatei"
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. _verbose "Tomb found: ::1 tomb path::" $TOMBPATH
+#.
+#. _load_key # Try loading new key from option -k and set TOMBKEYFILE
+#.
+#. tombmount=${2:-/media/$TOMBFILE}
+#. [[ -z "$2" ]] && {
+#. > _message "Mountpoint not specified, using default: ::1 mount point::" $tombmount }
+#.
+#. # Check if its already open
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]" ]] && {
+#. _warning "::1 tomb name:: is already open." $TOMBNAME
+#: tomb:1686
msgid "Mountpoint not specified, using default: ::1 mount point::"
msgstr "Mountpoint nicht angegeben, ::1 mount point:: wird benutzt"
-#: warning
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. tombmount=${2:-/media/$TOMBFILE}
+#. [[ -z "$2" ]] && {
+#. _message "Mountpoint not specified, using default: ::1 mount point::" $tombmount }
+#.
+#. # Check if its already open
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]" ]] && {
+#. > _warning "::1 tomb name:: is already open." $TOMBNAME
+#. _message "Here below its status is reported:"
+#. list_tombs $TOMBNAME
+#. return 0 }
+#.
+#: tomb:1690
msgid "::1 tomb name:: is already open."
msgstr "::1 tomb name:: ist bereits geöffnet."
-#: failure
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. [[ -z "$2" ]] && {
+#. _message "Mountpoint not specified, using default: ::1 mount point::" $tombmount }
+#.
+#. # Check if its already open
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]" ]] && {
+#. _warning "::1 tomb name:: is already open." $TOMBNAME
+#. > _message "Here below its status is reported:"
+#. list_tombs $TOMBNAME
+#. return 0 }
+#.
+#. _success "Opening ::1 tomb file:: on ::2 mount point::" $TOMBFILE $tombmount
+#: tomb:1691
+msgid "Here below its status is reported:"
+msgstr "Zustand des Grabes wie folgt:"
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]" ]] && {
+#. _warning "::1 tomb name:: is already open." $TOMBNAME
+#. _message "Here below its status is reported:"
+#. list_tombs $TOMBNAME
+#. return 0 }
+#.
+#. > _success "Opening ::1 tomb file:: on ::2 mount point::" $TOMBFILE $tombmount
+#.
+#. lo_mount $TOMBPATH
+#. nstloop=`lo_new`
+#.
+#: tomb:1695
+msgid "Opening ::1 tomb file:: on ::2 mount point::"
+msgstr "Öffne ::1 tomb file:: auf ::2 mount point::"
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. lo_mount $TOMBPATH
+#. nstloop=`lo_new`
+#.
+#. sudo cryptsetup isLuks ${nstloop} || {
+#. # is it a LUKS encrypted nest? see cryptsetup(1)
+#. > _failure "::1 tomb file:: is not a valid Luks encrypted storage file." $TOMBFILE }
+#.
+#. _message "This tomb is a valid LUKS encrypted device."
+#.
+#. luksdump="`sudo cryptsetup luksDump ${nstloop}`"
+#: tomb:1702
msgid "::1 tomb file:: is not a valid Luks encrypted storage file."
msgstr "::1 tomb file:: ist keine gültige Luks verschlüsselte Datei."
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. nstloop=`lo_new`
+#.
+#. sudo cryptsetup isLuks ${nstloop} || {
+#. # is it a LUKS encrypted nest? see cryptsetup(1)
+#. _failure "::1 tomb file:: is not a valid Luks encrypted storage file." $TOMBFILE }
+#.
+#. > _message "This tomb is a valid LUKS encrypted device."
+#.
+#. luksdump="`sudo cryptsetup luksDump ${nstloop}`"
+#. tombdump=(`print $luksdump | awk '
+#. /^Cipher name/ {print $3}
+#: tomb:1704
+msgid "This tomb is a valid LUKS encrypted device."
+msgstr "Dieses Grab ist ein gültiges LUKS verschlüsseltes Gerät."
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. luksdump="`sudo cryptsetup luksDump ${nstloop}`"
+#. tombdump=(`print $luksdump | awk '
+#. /^Cipher name/ {print $3}
+#. /^Cipher mode/ {print $3}
+#. /^Hash spec/ {print $3}'`)
+#. > _message "Cipher is \"::1 cipher::\" mode \"::2 mode::\" hash \"::3 hash::\"" $tombdump[1] $tombdump[2] $tombdump[3]
+#.
+#. slotwarn=`print $luksdump | awk '
+#. BEGIN { zero=0 }
+#. /^Key slot 0/ { zero=1 }
+#: tomb:1711
msgid "Cipher is \"::1 cipher::\" mode \"::2 mode::\" hash \"::3 hash::\""
-msgstr "Verschlüsselung \"::1 cipher::\" im Modus \"::2 mode::\" und der Hashfunktion \"::3 hash::\"."
+msgstr ""
+"Verschlüsselung \"::1 cipher::\" im Modus \"::2 mode::\" und der "
+"Hashfunktion \"::3 hash::\"."
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. slotwarn=`print $luksdump | awk '
+#. BEGIN { zero=0 }
+#. /^Key slot 0/ { zero=1 }
+#. /^Key slot.*ENABLED/ { if(zero==1) print "WARN" }'`
+#. [[ "$slotwarn" == "WARN" ]] && {
+#. > _warning "Multiple key slots are enabled on this tomb. Beware: there can be a backdoor." }
+#.
+#. # save date of mount in minutes since 1970
+#. mapdate=`date +%s`
+#.
+#: tomb:1718
+msgid ""
+"Multiple key slots are enabled on this tomb. Beware: there can be a backdoor."
+msgstr ""
+"Mehrere Schlüssellöcher sind an diesem Grab angebracht. Achtung, es könnte "
+"eine Hintertür geben."
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. ask_key_password
+#. }
+#. [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. _cryptsetup luksOpen ${nstloop} ${mapper}
+#. [[ $? = 0 ]] || {
+#. > _failure "Failure mounting the encrypted file." }
+#.
+#. # preserve the loopdev after exit
+#. lo_preserve "$nstloop"
+#.
+#: tomb:1742
+msgid "Failure mounting the encrypted file."
+msgstr "Fehler beim Einhängen der verschlüsselten Datei."
-#: warning
-msgid "Multiple key slots are enabled on this tomb. Beware: there can be a backdoor."
-msgstr "Mehrere Schlüssellöcher sind an diesem Grab angebracht. Achtung, es könnte eine Hintertür geben."
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. # array: [ cipher, keysize, loopdevice ]
+#. tombstat=(`sudo cryptsetup status ${mapper} | awk '
+#. /cipher:/ {print $2}
+#. /keysize:/ {print $2}
+#. /device:/ {print $2}'`)
+#. > _success "Success unlocking tomb ::1 tomb name::" $TOMBNAME
+#. _verbose "Key size is ::1 size:: for cipher ::2 cipher::" $tombstat[2] $tombstat[1]
+#.
+#. _message "Checking filesystem via ::1::" $tombstat[3]
+#. sudo fsck -p -C0 /dev/mapper/${mapper}
+#: tomb:1752
+msgid "Success unlocking tomb ::1 tomb name::"
+msgstr "Entsperren erfolgreich von ::1 tomb name::"
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. /cipher:/ {print $2}
+#. /keysize:/ {print $2}
+#. /device:/ {print $2}'`)
+#. _success "Success unlocking tomb ::1 tomb name::" $TOMBNAME
+#. _verbose "Key size is ::1 size:: for cipher ::2 cipher::" $tombstat[2] $tombstat[1]
+#.
+#. > _message "Checking filesystem via ::1::" $tombstat[3]
+#. sudo fsck -p -C0 /dev/mapper/${mapper}
+#. _verbose "Tomb engraved as ::1 tomb name::" $TOMBNAME
+#. sudo tune2fs -L $TOMBNAME /dev/mapper/${mapper} > /dev/null
+#.
+#: tomb:1755
msgid "Checking filesystem via ::1::"
msgstr "Dateisystem kontrollieren mit ::1::"
-#: message
-msgid "Last visit by ::1 user::(::2 tomb build::) from ::3 tty:: on ::4 host::"
-msgstr "Letzer Besuch von ::1 user::(::2 tomb build::) von ::3 tty:: auf ::4 host::"
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. # TODO: safety check MOUNTOPTS
+#. # safe_mount_options && #. sudo mount -o $MOUNTOPTS /dev/mapper/${mapper} ${tombmount}
+#. # Clean up if the mount failed
+#. [[ $? == 0 ]] || {
+#. > _warning "Error mounting ::1 mapper:: on ::2 tombmount::" $mapper $tombmount
+#. [[ $oldmountopts != $MOUNTOPTS ]] && #. _warning "Are mount options '::1 mount options::' valid?" $MOUNTOPTS
+#. # TODO: move cleanup to _endgame()
+#. [[ -d $tombmount ]] && rmdir $tombmount
+#: tomb:1773
+msgid "Error mounting ::1 mapper:: on ::2 tombmount::"
+msgstr ""
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. # safe_mount_options && #. sudo mount -o $MOUNTOPTS /dev/mapper/${mapper} ${tombmount}
+#. # Clean up if the mount failed
+#. [[ $? == 0 ]] || {
+#. _warning "Error mounting ::1 mapper:: on ::2 tombmount::" $mapper $tombmount
+#. [[ $oldmountopts != $MOUNTOPTS ]] && #. > _warning "Are mount options '::1 mount options::' valid?" $MOUNTOPTS
+#. # TODO: move cleanup to _endgame()
+#. [[ -d $tombmount ]] && rmdir $tombmount
+#. [[ -e /dev/mapper/$mapper ]] && sudo cryptsetup luksClose $mapper
+#. # The loop is taken care of in _endgame()
+#: tomb:1775
+msgid "Are mount options '::1 mount options::' valid?"
+msgstr ""
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. [[ $oldmountopts != $MOUNTOPTS ]] && #. _warning "Are mount options '::1 mount options::' valid?" $MOUNTOPTS
+#. # TODO: move cleanup to _endgame()
+#. [[ -d $tombmount ]] && rmdir $tombmount
+#. [[ -e /dev/mapper/$mapper ]] && sudo cryptsetup luksClose $mapper
+#. # The loop is taken care of in _endgame()
+#. > _failure "Cannot mount ::1 tomb name::" $TOMBNAME
+#. }
+#.
+#. sudo chown $UID:$GID ${tombmount}
+#. sudo chmod 0711 ${tombmount}
+#: tomb:1780
+msgid "Cannot mount ::1 tomb name::"
+msgstr ""
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. _failure "Cannot mount ::1 tomb name::" $TOMBNAME
+#. }
+#.
+#. sudo chown $UID:$GID ${tombmount}
+#. sudo chmod 0711 ${tombmount}
+#.
+#. > _success "Success opening ::1 tomb file:: on ::2 mount point::" $TOMBFILE $tombmount
+#.
+#. local tombtty tombhost tombuid tombuser
+#.
+#. # print out when was opened the last time, by whom and where
+#: tomb:1786
+msgid "Success opening ::1 tomb file:: on ::2 mount point::"
+msgstr "Erfolgreiches Öffnen von ::1 tomb file:: auf ::2 mount point::"
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. tombuid=$(_cat ${tombmount}/.uid | tr -d ' ')
+#. tomblast=$(_cat ${tombmount}/.last | tr -d ' ')
+#. for e in ${(f@)mapfile[/etc/passwd]}; do
+#. [[ "$e" =~ ":$tombuid:" ]] && {
+#. tombuser="${e[(ws@:@)1]}" }
+#. done
+#. > _message "Last visit by ::1 user::(::2 tomb build::) from ::3 tty:: on ::4 host::" $tombuser $tombuid $tombtty $tombhost
+#. _message "on date ::1 date::" "`date --date=@${tomblast} +%c`"
+#. }
+#. # write down the UID and TTY that opened the tomb
+#. rm -f ${tombmount}/.uid
+#: tomb:1800
+msgid "Last visit by ::1 user::(::2 tomb build::) from ::3 tty:: on ::4 host::"
+msgstr ""
+"Letzer Besuch von ::1 user::(::2 tomb build::) von ::3 tty:: auf ::4 host::"
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. tomblast=$(_cat ${tombmount}/.last | tr -d ' ')
+#. for e in ${(f@)mapfile[/etc/passwd]}; do
+#. [[ "$e" =~ ":$tombuid:" ]] && {
+#. tombuser="${e[(ws@:@)1]}" }
+#. done
+#. _message "Last visit by ::1 user::(::2 tomb build::) from ::3 tty:: on ::4 host::" $tombuser $tombuid $tombtty $tombhost
+#. > _message "on date ::1 date::" "`date --date=@${tomblast} +%c`"
+#. }
+#. # write down the UID and TTY that opened the tomb
+#. rm -f ${tombmount}/.uid
+#. print $_UID > ${tombmount}/.uid
+#: tomb:1801
msgid "on date ::1 date::"
msgstr "am ::1 date::"
-#: warning
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#.
+#. # Default mount options are overridden with the -o switch
+#. [[ -n ${(k)OPTS[-o]} ]] && MOUNTOPTS=${OPTS[-o]}
+#.
+#. # No HOME set? Note: this should never happen again.
+#. [[ -z $HOME ]] && {
+#. > _warning "How pitiful! A tomb, and no HOME."
+#. return 1 }
+#.
+#. [[ -z $mnt || ! -d $mnt ]] && {
+#. _warning "Cannot exec bind hooks without a mounted tomb."
+#: tomb:1849
+msgid "How pitiful! A tomb, and no HOME."
+msgstr "Wie bedaurndswert ! Ein Grab aber kein Zuhause."
+
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. # No HOME set? Note: this should never happen again.
+#. [[ -z $HOME ]] && {
+#. _warning "How pitiful! A tomb, and no HOME."
+#. return 1 }
+#.
+#. [[ -z $mnt || ! -d $mnt ]] && {
+#. > _warning "Cannot exec bind hooks without a mounted tomb."
+#. return 1 }
+#.
+#. [[ -r "$mnt/bind-hooks" ]] || {
+#. _verbose "bind-hooks not found in ::1 mount point::" $mnt
+#: tomb:1853
+msgid "Cannot exec bind hooks without a mounted tomb."
+msgstr "'Bind hooks' kann nicht benutzt werden ohne eingehängtes Grab."
+
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. # better parsing for bind hooks checks for two separated words on
+#. # each line, using zsh word separator array subscript
+#. _bindhooks="${mapfile[${mnt}/bind-hooks]}"
+#. for h in ${(f)_bindhooks}; do
+#. s="${h[(w)1]}"
+#. d="${h[(w)2]}"
+#. > [[ "$s" = "" ]] && { _warning "bind-hooks file is broken"; return 1 }
+#. [[ "$d" = "" ]] && { _warning "bind-hooks file is broken"; return 1 }
+#. maps+=($s $d)
+#. _verbose "bind-hook found: $s -> $d"
+#. done
+#: tomb:1869
msgid "bind-hooks file is broken"
msgstr "Datei mit den Bind-Hooks ist korrumpiert"
-#: warning
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. _verbose "bind-hook found: $s -> $d"
+#. done
+#. unset _bindhooks
+#.
+#. for dir in ${(k)maps}; do
+#. [[ "${dir[1]}" == "/" || "${dir[1,2]}" == ".." ]] && {
+#. > _warning "bind-hooks map format: local/to/tomb local/to/\$HOME"
+#. continue }
+#.
+#. [[ "${${maps[$dir]}[1]}" == "/" || "${${maps[$dir]}[1,2]}" == ".." ]] && {
+#. _warning "bind-hooks map format: local/to/tomb local/to/\$HOME. Rolling back"
+#: tomb:1878
msgid "bind-hooks map format: local/to/tomb local/to/$HOME"
msgstr "'bind hooks' map format: local/to/tomb local/to/$HOME"
-#: warning
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. for dir in ${(k)maps}; do
+#. [[ "${dir[1]}" == "/" || "${dir[1,2]}" == ".." ]] && {
+#. _warning "bind-hooks map format: local/to/tomb local/to/\$HOME"
+#. continue }
+#.
+#. [[ "${${maps[$dir]}[1]}" == "/" || "${${maps[$dir]}[1,2]}" == ".." ]] && {
+#. > _warning "bind-hooks map format: local/to/tomb local/to/\$HOME. Rolling back"
+#. for dir in ${mounted}; do sudo umount $dir; done
+#. return 1 }
+#.
+#. if [[ ! -r "$HOME/${maps[$dir]}" ]]; then
+#: tomb:1882
msgid "bind-hooks map format: local/to/tomb local/to/$HOME. Rolling back"
-msgstr "'bind-hooks' map format: local/to/tomb local/to/$HOME. Wird rückgängig gemacht"
-
-#: warning
+msgstr ""
+"'bind-hooks' map format: local/to/tomb local/to/$HOME. Wird rückgängig "
+"gemacht"
+
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. [[ "${${maps[$dir]}[1]}" == "/" || "${${maps[$dir]}[1,2]}" == ".." ]] && {
+#. _warning "bind-hooks map format: local/to/tomb local/to/\$HOME. Rolling back"
+#. for dir in ${mounted}; do sudo umount $dir; done
+#. return 1 }
+#.
+#. if [[ ! -r "$HOME/${maps[$dir]}" ]]; then
+#. > _warning "bind-hook target not existent, skipping ::1 home::/::2 subdir::" $HOME ${maps[$dir]}
+#. elif [[ ! -r "$mnt/$dir" ]]; then
+#. _warning "bind-hook source not found in tomb, skipping ::1 mount point::/::2 subdir::" $mnt $dir
+#. else
+#. sudo mount -o bind,$MOUNTOPTS $mnt/$dir $HOME/${maps[$dir]} #: tomb:1887
msgid "bind-hook target not existent, skipping ::1 home::/::2 subdir::"
msgstr "'bind-hooks' Ziel ungültig, ::1 home::/::2 subdir:: wird ignoriert."
-#: warning
-msgid "bind-hook source not found in tomb, skipping ::1 mount point::/::2 subdir::"
-msgstr "'bind-hooks' Quelle nicht in Grab gefunden, ::1 mount point::/::2 subdir:: wird ignoriert"
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. for dir in ${mounted}; do sudo umount $dir; done
+#. return 1 }
+#.
+#. if [[ ! -r "$HOME/${maps[$dir]}" ]]; then
+#. _warning "bind-hook target not existent, skipping ::1 home::/::2 subdir::" $HOME ${maps[$dir]}
+#. elif [[ ! -r "$mnt/$dir" ]]; then
+#. > _warning "bind-hook source not found in tomb, skipping ::1 mount point::/::2 subdir::" $mnt $dir
+#. else
+#. sudo mount -o bind,$MOUNTOPTS $mnt/$dir $HOME/${maps[$dir]} #. && mounted+=("$HOME/${maps[$dir]}")
+#. fi
+#: tomb:1889
+msgid ""
+"bind-hook source not found in tomb, skipping ::1 mount point::/::2 subdir::"
+msgstr ""
+"'bind-hooks' Quelle nicht in Grab gefunden, ::1 mount point::/::2 subdir:: "
+"wird ignoriert"
+
+#. Fold: Open
+#. Function: exec_safe_post_hooks
+#.
+#. Code sample:
+#. # Only run if post-hooks has the executable bit set
+#. [[ -x $mnt/post-hooks ]] || return
+#.
+#. # If the file starts with a shebang, run it.
+#. cat $mnt/post-hooks | head -n1 | grep '^#!\s*/' &> /dev/null
+#. [[ $? == 0 ]] && {
+#. > _success "Post hooks found, executing as user ::1 user name::." $USERNAME
+#. $mnt/post-hooks $act $mnt
+#. }
+#. }
+#.
+#: tomb:1917
+msgid "Post hooks found, executing as user ::1 user name::."
+msgstr "Post Hooks gefunden, ausführen als Benutzer ::1 user name::."
-#: failure
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. local tombname tombmount tombfs tombfsopts tombloop
+#. local ts tombtot tombused tombavail tombpercent tombp tombsince
+#. local tombtty tombhost tombuid tombuser
+#. # list all open tombs
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. > _failure "I can't see any ::1 status:: tomb, may they all rest in peace." ${1:-open} }
+#.
+#. for t in ${mounted_tombs}; do
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#: tomb:1936
msgid "I can't see any ::1 status:: tomb, may they all rest in peace."
msgstr "Ich sehe keine ::1 status::. Mögen sie alle in Frieden ruhen."
-#: message
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. tombuser="${ee[(ws@:@)1]}" }
+#. done
+#. }
+#.
+#. { option_is_set --get-mountpoint } && { print $tombmount; continue }
+#.
+#. > _message "::1 tombname:: open on ::2 tombmount:: using ::3 tombfsopts::" #. $tombname $tombmount $tombfsopts
+#.
+#. _message "::1 tombname:: open since ::2 tombsince::" $tombname $tombsince
+#.
+#: tomb:1969
msgid "::1 tombname:: open on ::2 tombmount:: using ::3 tombfsopts::"
msgstr "::1 tombname:: geöffnet in ::2 tombmount:: mit ::3 tombfsopts::"
-#: message
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#.
+#. { option_is_set --get-mountpoint } && { print $tombmount; continue }
+#.
+#. _message "::1 tombname:: open on ::2 tombmount:: using ::3 tombfsopts::" #. $tombname $tombmount $tombfsopts
+#.
+#. > _message "::1 tombname:: open since ::2 tombsince::" $tombname $tombsince
+#.
+#. [[ -z "$tombtty" ]] || {
+#. _message "::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::" #. $tombname $tombuser $tombtty $tombhost
+#: tomb:1972
msgid "::1 tombname:: open since ::2 tombsince::"
msgstr "::1 tombname:: geöffnet seit ::2 tombsince::"
-#: message
-msgid "::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::"
-msgstr "::1 tombname:: geöffnet von ::2 tombuser:: von ::3 tombtty:: auf ::4 tombhost::"
-
-#: message
-msgid "::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::%) is used: ::4 tombavail:: free "
-msgstr "::1 tombname:: Grösse ::2 tombtot:: davon ::3 tombused:: (::5 tombpercent::%) is benutzt: ::4 tombavail:: frei␣ "
-
-#: warning
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. _message "::1 tombname:: open on ::2 tombmount:: using ::3 tombfsopts::" #. $tombname $tombmount $tombfsopts
+#.
+#. _message "::1 tombname:: open since ::2 tombsince::" $tombname $tombsince
+#.
+#. [[ -z "$tombtty" ]] || {
+#. > _message "::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::" #. $tombname $tombuser $tombtty $tombhost
+#. }
+#.
+#. _message "::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::%) is used: ::4 tombavail:: free " #: tomb:1975
+msgid ""
+"::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::"
+msgstr ""
+"::1 tombname:: geöffnet von ::2 tombuser:: von ::3 tombtty:: auf ::4 "
+"tombhost::"
+
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#.
+#. [[ -z "$tombtty" ]] || {
+#. _message "::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::" #. $tombname $tombuser $tombtty $tombhost
+#. }
+#.
+#. > _message "::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::%) is used: ::4 tombavail:: free " #. $tombname $tombtot $tombused $tombavail $tombpercent
+#.
+#. [[ ${tombp} -ge 90 ]] && {
+#. _warning "::1 tombname:: warning: your tomb is almost full!" $tombname
+#: tomb:1979
+msgid ""
+"::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::"
+"%) is used: ::4 tombavail:: free "
+msgstr ""
+"::1 tombname:: Grösse ::2 tombtot:: davon ::3 tombused:: (::5 tombpercent::"
+"%) is benutzt: ::4 tombavail:: frei␣ "
+
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. }
+#.
+#. _message "::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::%) is used: ::4 tombavail:: free " #. $tombname $tombtot $tombused $tombavail $tombpercent
+#.
+#. [[ ${tombp} -ge 90 ]] && {
+#. > _warning "::1 tombname:: warning: your tomb is almost full!" $tombname
+#. }
+#.
+#. # Now check hooks
+#. mounted_hooks=(`list_tomb_binds $tombname`)
+#: tomb:1983
msgid "::1 tombname:: warning: your tomb is almost full!"
msgstr "::1 tombname:: Warnung: Ihr Grab ist fast voll!"
-#: message
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. _warning "::1 tombname:: warning: your tomb is almost full!" $tombname
+#. }
+#.
+#. # Now check hooks
+#. mounted_hooks=(`list_tomb_binds $tombname`)
+#. for h in ${mounted_hooks}; do
+#. > _message "::1 tombname:: hooks ::2 hookname:: on ::3 hookdest::" #. $tombname "`basename ${h[(ws:;:)1]}`" ${h[(ws:;:)2]}
+#. done
+#. done
+#. }
+#: tomb:1989
msgid "::1 tombname:: hooks ::2 hookname:: on ::3 hookdest::"
msgstr "::1 tombname:: bindet ::2 hookname:: ein auf ::3 hookdest::"
-#: failure
+#. Fold: List
+#. Function: list_tomb_binds
+#.
+#. Code sample:
+#. # list_tomb_binds
+#. # print out an array of mounted bind hooks (internal use)
+#. # format is semi-colon separated list of attributes
+#. # needs an argument: name of tomb whose hooks belong
+#. list_tomb_binds() {
+#. [[ -z "$1" ]] && {
+#. > _failure "Internal error: list_tomb_binds called without argument." }
+#.
+#. # list bind hooks on util-linux 2.20 (Debian 7)
+#. mount -l #. | awk -vtomb="$1" '
+#: tomb:2044
msgid "Internal error: list_tomb_binds called without argument."
msgstr "Interner Fehler: list_tomb_binds ohne rgumente aufgerufen."
-#: failure
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. # {{{ Index and search
+#.
+#. # index files in all tombs for search
+#. # $1 is optional, to specify a tomb
+#. index_tombs() {
+#. { command -v updatedb 1>/dev/null 2>/dev/null } || {
+#. > _failure "Cannot index tombs on this system: updatedb (mlocate) not installed." }
+#.
+#. updatedbver=`updatedb --version | grep '^updatedb'`
+#. [[ "$updatedbver" =~ "GNU findutils" ]] && {
+#. _warning "Cannot use GNU findutils for index/search commands." }
+#: tomb:2076
msgid "Cannot index tombs on this system: updatedb (mlocate) not installed."
-msgstr "Kann Gräber auf diesem System nicht indexieren: updatedb (mlocate) nicht installiert."
-
-#: warning
+msgstr ""
+"Kann Gräber auf diesem System nicht indexieren: updatedb (mlocate) nicht "
+"installiert."
+
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. index_tombs() {
+#. { command -v updatedb 1>/dev/null 2>/dev/null } || {
+#. _failure "Cannot index tombs on this system: updatedb (mlocate) not installed." }
+#.
+#. updatedbver=`updatedb --version | grep '^updatedb'`
+#. [[ "$updatedbver" =~ "GNU findutils" ]] && {
+#. > _warning "Cannot use GNU findutils for index/search commands." }
+#. [[ "$updatedbver" =~ "mlocate" ]] || {
+#. _failure "Index command needs 'mlocate' to be installed." }
+#.
+#. _verbose "$updatedbver"
+#: tomb:2080
msgid "Cannot use GNU findutils for index/search commands."
msgstr "Kann GNU findutils nicht für Indexierung/Suchbefehle benutzen."
-#: failure
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. _failure "Cannot index tombs on this system: updatedb (mlocate) not installed." }
+#.
+#. updatedbver=`updatedb --version | grep '^updatedb'`
+#. [[ "$updatedbver" =~ "GNU findutils" ]] && {
+#. _warning "Cannot use GNU findutils for index/search commands." }
+#. [[ "$updatedbver" =~ "mlocate" ]] || {
+#. > _failure "Index command needs 'mlocate' to be installed." }
+#.
+#. _verbose "$updatedbver"
+#.
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#: tomb:2082
msgid "Index command needs 'mlocate' to be installed."
msgstr "Index Befehl benötigt installiertes 'mlocate'."
-#: failure
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. _verbose "$updatedbver"
+#.
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. # Considering one tomb
+#. [[ -n "$1" ]] && {
+#. > _failure "There seems to be no open tomb engraved as [::1::]" $1 }
+#. # Or more
+#. _failure "I can't see any open tomb, may they all rest in peace." }
+#.
+#. _success "Creating and updating search indexes."
+#: tomb:2090
msgid "There seems to be no open tomb engraved as [::1::]"
msgstr "Es scheint kein als [::1::] graviertes Grab offen zu sein"
-#: message
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. # Considering one tomb
+#. [[ -n "$1" ]] && {
+#. _failure "There seems to be no open tomb engraved as [::1::]" $1 }
+#. # Or more
+#. > _failure "I can't see any open tomb, may they all rest in peace." }
+#.
+#. _success "Creating and updating search indexes."
+#.
+#. # start the LibreOffice document converter if installed
+#: tomb:2092
+msgid "I can't see any open tomb, may they all rest in peace."
+msgstr "Ich sehe kein geöffnetes Grab. Mögen sie alle in Frieden ruhen."
+
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. # Considering one tomb
+#. [[ -n "$1" ]] && {
+#. _failure "There seems to be no open tomb engraved as [::1::]" $1 }
+#. # Or more
+#. _failure "I can't see any open tomb, may they all rest in peace." }
+#.
+#. > _success "Creating and updating search indexes."
+#.
+#. # start the LibreOffice document converter if installed
+#. { command -v unoconv 1>/dev/null 2>/dev/null } && {
+#. unoconv -l 2>/dev/null &
+#: tomb:2094
+msgid "Creating and updating search indexes."
+msgstr "Kreieren und aktualisieren von Suchindexen"
+
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#.
+#. for t in ${mounted_tombs}; do
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#. tombmount=${t[(ws:;:)2]}
+#. [[ -r ${tombmount}/.noindex ]] && {
+#. > _message "Skipping ::1 tomb name:: (.noindex found)." $tombname
+#. continue }
+#. _message "Indexing ::1 tomb name:: filenames..." $tombname
+#. updatedb -l 0 -o ${tombmount}/.updatedb -U ${tombmount}
+#.
+#: tomb:2107
msgid "Skipping ::1 tomb name:: (.noindex found)."
msgstr "Überspringen von ::1 tomb name:: (.noindex gefunden)."
-#: message
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#. tombmount=${t[(ws:;:)2]}
+#. [[ -r ${tombmount}/.noindex ]] && {
+#. _message "Skipping ::1 tomb name:: (.noindex found)." $tombname
+#. continue }
+#. > _message "Indexing ::1 tomb name:: filenames..." $tombname
+#. updatedb -l 0 -o ${tombmount}/.updatedb -U ${tombmount}
+#.
+#. # here we use swish to index file contents
+#. [[ $SWISH == 1 ]] && {
+#: tomb:2109
msgid "Indexing ::1 tomb name:: filenames..."
msgstr "Indexieren der Dateinamen von ::1 tomb name:: im Gange..."
-#: message
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. continue }
+#. _message "Indexing ::1 tomb name:: filenames..." $tombname
+#. updatedb -l 0 -o ${tombmount}/.updatedb -U ${tombmount}
+#.
+#. # here we use swish to index file contents
+#. [[ $SWISH == 1 ]] && {
+#. > _message "Indexing ::1 tomb name:: contents..." $tombname
+#. [[ -r ${tombmount}/.swishrc ]] || {
+#. _message "Generating a new swish-e configuration file: ::1 swish conf::" ${tombmount}/.swishrc
+#. cat <<EOF > ${tombmount}/.swishrc
+#. # index directives
+#: tomb:2114
msgid "Indexing ::1 tomb name:: contents..."
msgstr "Indexieren der Inhalte von ::1 tomb name:: im Gange..."
-#: message
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. updatedb -l 0 -o ${tombmount}/.updatedb -U ${tombmount}
+#.
+#. # here we use swish to index file contents
+#. [[ $SWISH == 1 ]] && {
+#. _message "Indexing ::1 tomb name:: contents..." $tombname
+#. [[ -r ${tombmount}/.swishrc ]] || {
+#. > _message "Generating a new swish-e configuration file: ::1 swish conf::" ${tombmount}/.swishrc
+#. cat <<EOF > ${tombmount}/.swishrc
+#. # index directives
+#. DefaultContents TXT*
+#. IndexDir $tombmount
+#: tomb:2116
+msgid "Generating a new swish-e configuration file: ::1 swish conf::"
+msgstr "Kreieren einer neuen swish-e Konfigurationsdatei: ::1 swish conf::"
+
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. }
+#.
+#. swish-e -c ${tombmount}/.swishrc -S fs -v3
+#.
+#. }
+#.
+#. > _message "Search index updated."
+#. done
+#. }
+#. search_tombs() {
+#. { command -v locate 1>/dev/null 2>/dev/null } || {
+#: tomb:2190
+msgid "Search index updated."
+msgstr "Such-Index aktualisiert."
+
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#.
+#. # list all open tombs
+#. mounted_tombs=(`list_tomb_mounts`)
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. _failure "I can't see any open tomb, may they all rest in peace." }
+#.
+#. > _success "Searching for: ::1::" ${(f)@}
+#. for t in ${mounted_tombs}; do
+#. _verbose "Checking for index: ::1::" ${t}
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#: tomb:2210
+msgid "Searching for: ::1::"
+msgstr "Suchen nach: ::1::"
+
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. _verbose "Checking for index: ::1::" ${t}
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#. tombmount=${t[(ws:;:)2]}
+#. [[ -r ${tombmount}/.updatedb ]] && {
+#. # Use mlocate to search hits on filenames
+#. > _message "Searching filenames in tomb ::1 tomb name::" $tombname
+#. locate -d ${tombmount}/.updatedb -e -i "${(f)@}"
+#. _message "Matches found: ::1 matches::" #. $(locate -d ${tombmount}/.updatedb -e -i -c ${(f)@})
+#.
+#: tomb:2218
msgid "Searching filenames in tomb ::1 tomb name::"
msgstr "Suche Dateinamen in::1 tomb name::"
-#: message
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. tombname=${t[(ws:;:)5]}
+#. tombmount=${t[(ws:;:)2]}
+#. [[ -r ${tombmount}/.updatedb ]] && {
+#. # Use mlocate to search hits on filenames
+#. _message "Searching filenames in tomb ::1 tomb name::" $tombname
+#. locate -d ${tombmount}/.updatedb -e -i "${(f)@}"
+#. > _message "Matches found: ::1 matches::" #. $(locate -d ${tombmount}/.updatedb -e -i -c ${(f)@})
+#.
+#. # Use swish-e to search over contents
+#. [[ $SWISH == 1 && -r $tombmount/.swish ]] && {
+#: tomb:2220
msgid "Matches found: ::1 matches::"
msgstr "Ergebnisse: ::1 matches::"
-#: message
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. locate -d ${tombmount}/.updatedb -e -i "${(f)@}"
+#. _message "Matches found: ::1 matches::" #. $(locate -d ${tombmount}/.updatedb -e -i -c ${(f)@})
+#.
+#. # Use swish-e to search over contents
+#. [[ $SWISH == 1 && -r $tombmount/.swish ]] && {
+#. > _message "Searching contents in tomb ::1 tomb name::" $tombname
+#. swish-e -w ${=@} -f $tombmount/.swish -H0 }
+#. } || {
+#. _warning "Skipping tomb ::1 tomb name::: not indexed." $tombname
+#. _warning "Run 'tomb index' to create indexes." }
+#: tomb:2225
msgid "Searching contents in tomb ::1 tomb name::"
msgstr "Suche in den Inhalten von ::1 tomb name::"
-#: warning
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#.
+#. # Use swish-e to search over contents
+#. [[ $SWISH == 1 && -r $tombmount/.swish ]] && {
+#. _message "Searching contents in tomb ::1 tomb name::" $tombname
+#. swish-e -w ${=@} -f $tombmount/.swish -H0 }
+#. } || {
+#. > _warning "Skipping tomb ::1 tomb name::: not indexed." $tombname
+#. _warning "Run 'tomb index' to create indexes." }
+#. done
+#. _message "Search completed."
+#. }
+#: tomb:2228
msgid "Skipping tomb ::1 tomb name::: not indexed."
msgstr "Das Grab ::1 tomb name:: ist nicht indexiert und wird ignoriert."
-#: message
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. # Use swish-e to search over contents
+#. [[ $SWISH == 1 && -r $tombmount/.swish ]] && {
+#. _message "Searching contents in tomb ::1 tomb name::" $tombname
+#. swish-e -w ${=@} -f $tombmount/.swish -H0 }
+#. } || {
+#. _warning "Skipping tomb ::1 tomb name::: not indexed." $tombname
+#. > _warning "Run 'tomb index' to create indexes." }
+#. done
+#. _message "Search completed."
+#. }
+#.
+#: tomb:2229
+msgid "Run 'tomb index' to create indexes."
+msgstr "Führen Sie 'tomb index' aus um Suchindexe zu erstellen."
+
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. _message "Searching contents in tomb ::1 tomb name::" $tombname
+#. swish-e -w ${=@} -f $tombmount/.swish -H0 }
+#. } || {
+#. _warning "Skipping tomb ::1 tomb name::: not indexed." $tombname
+#. _warning "Run 'tomb index' to create indexes." }
+#. done
+#. > _message "Search completed."
+#. }
+#.
+#. # }}} - Index and search
+#.
+#: tomb:2231
+msgid "Search completed."
+msgstr "Suche abgeschlossen."
+
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. # {{{ Resize
+#.
+#. # resize tomb file size
+#. resize_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. > _message "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes." $1 $OPTS[-s]
+#.
+#. [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing."
+#. [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath
+#.
+#: tomb:2242
msgid "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes."
msgstr "Grab ::1 tomb name:: wird auf ::2 size:: Mb vergrössert."
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. # resize tomb file size
+#. resize_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. _message "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes." $1 $OPTS[-s]
+#.
+#. > [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing."
+#. [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath
+#.
+#. newtombsize="`option_value -s`"
+#. [[ -z "$newtombsize" ]] && {
+#: tomb:2244
+msgid "No tomb name specified for resizing."
+msgstr "Kein Name für das zu vergrössernde Grab angegeben."
+
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. resize_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. _message "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes." $1 $OPTS[-s]
+#.
+#. [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing."
+#. > [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath
+#.
+#. newtombsize="`option_value -s`"
+#. [[ -z "$newtombsize" ]] && {
+#. _failure "Aborting operations: new size was not specified, use -s" }
+#: tomb:2245
msgid "Cannot find ::1::"
msgstr "::1:: nicht gefunden."
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#.
+#. [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing."
+#. [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath
+#.
+#. newtombsize="`option_value -s`"
+#. [[ -z "$newtombsize" ]] && {
+#. > _failure "Aborting operations: new size was not specified, use -s" }
+#.
+#. is_valid_tomb $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. _load_key # Try loading new key from option -k and set TOMBKEYFILE
+#: tomb:2249
msgid "Aborting operations: new size was not specified, use -s"
msgstr "Operationen werden abgebrochen: Neue Größe nicht mit -s angegeben"
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. local oldtombsize=$(( `stat -c %s "$TOMBPATH" 2>/dev/null` / 1048576 ))
+#. local mounted_tomb=`mount -l |
+#. awk -vtomb="[$TOMBNAME]" '/^\/dev\/mapper\/tomb/ { if($7==tomb) print $1 }'`
+#.
+#. # Tomb must not be open
+#. [[ -z "$mounted_tomb" ]] || {
+#. > _failure "Please close the tomb ::1 tomb name:: before trying to resize it." $TOMBNAME }
+#. # New tomb size must be specified
+#. [[ -n "$newtombsize" ]] || {
+#. _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
+#. # New tomb size must be an integer
+#: tomb:2261
msgid "Please close the tomb ::1 tomb name:: before trying to resize it."
-msgstr "Bitte schließen Sie das Grab ::1 tomb name:: bevor Sie versuchen die Größe zu ändern."
-
-#: failure
+msgstr ""
+"Bitte schließen Sie das Grab ::1 tomb name:: bevor Sie versuchen die Größe "
+"zu ändern."
+
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#.
+#. # Tomb must not be open
+#. [[ -z "$mounted_tomb" ]] || {
+#. _failure "Please close the tomb ::1 tomb name:: before trying to resize it." $TOMBNAME }
+#. # New tomb size must be specified
+#. [[ -n "$newtombsize" ]] || {
+#. > _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
+#. # New tomb size must be an integer
+#. [[ $newtombsize == <-> ]] || _failure "Size is not an integer."
+#. # Tombs can only grow in size
+#. [[ "$newtombsize" -gt "$oldtombsize" ]] || {
+#: tomb:2264
msgid "You must specify the new size of ::1 tomb name::"
msgstr "Sie müssen die neue Grösse von ::1 tomb name:: angeben"
-#: failure
-msgid "Error creating the extra resize ::1 size::, operation aborted."
-msgstr "Fehler beim erstellen der extra Vergrösserung ::1 size::, Operation abgebrochen."
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. [[ -z "$mounted_tomb" ]] || {
+#. _failure "Please close the tomb ::1 tomb name:: before trying to resize it." $TOMBNAME }
+#. # New tomb size must be specified
+#. [[ -n "$newtombsize" ]] || {
+#. _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
+#. # New tomb size must be an integer
+#. > [[ $newtombsize == <-> ]] || _failure "Size is not an integer."
+#. # Tombs can only grow in size
+#. [[ "$newtombsize" -gt "$oldtombsize" ]] || {
+#. _failure "The new size must be greater then old tomb size." }
+#.
+#: tomb:2266
+msgid "Size is not an integer."
+msgstr "Die Grösse muss eine Ganzzahl sein."
+
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. [[ -n "$newtombsize" ]] || {
+#. _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
+#. # New tomb size must be an integer
+#. [[ $newtombsize == <-> ]] || _failure "Size is not an integer."
+#. # Tombs can only grow in size
+#. [[ "$newtombsize" -gt "$oldtombsize" ]] || {
+#. > _failure "The new size must be greater then old tomb size." }
+#.
+#. delta="$(( $newtombsize - $oldtombsize ))"
+#.
+#. _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $newtombsize
+#: tomb:2269
+msgid "The new size must be greater then old tomb size."
+msgstr "Die neue Grösse muss grösser sein als die alte."
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $newtombsize
+#.
+#. _verbose "Data dump using ::1:: from /dev/urandom" ${DD[1]}
+#. ${=DD} if=/dev/urandom bs=1048576 count=${delta} >> $TOMBPATH
+#.
+#. [[ $? == 0 ]] || {
+#. > _failure "Error creating the extra resize ::1 size::, operation aborted." $tmp_resize }
+#.
+#. { option_is_set --tomb-pwd } && {
+#. tomb_pwd="`option_value --tomb-pwd`"
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tomb_pwd
+#: tomb:2279
+msgid "Error creating the extra resize ::1 size::, operation aborted."
+msgstr ""
+"Fehler beim erstellen der extra Vergrösserung ::1 size::, Operation "
+"abgebrochen."
+
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. mapper="tomb.$TOMBNAME.$mapdate.$(basename $nstloop)"
+#.
+#. _cryptsetup luksOpen ${nstloop} ${mapper} || {
+#. _failure "Failure mounting the encrypted file." }
+#.
+#. sudo cryptsetup resize "${mapper}" || {
+#. > _failure "cryptsetup failed to resize ::1 mapper::" $mapper }
+#.
+#. sudo e2fsck -p -f /dev/mapper/${mapper} || {
+#. _failure "e2fsck failed to check ::1 mapper::" $mapper }
+#.
+#: tomb:2300
msgid "cryptsetup failed to resize ::1 mapper::"
msgstr "cryptsetup konnte ::1 mapper:: nicht vergrössern"
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. _failure "Failure mounting the encrypted file." }
+#.
+#. sudo cryptsetup resize "${mapper}" || {
+#. _failure "cryptsetup failed to resize ::1 mapper::" $mapper }
+#.
+#. sudo e2fsck -p -f /dev/mapper/${mapper} || {
+#. > _failure "e2fsck failed to check ::1 mapper::" $mapper }
+#.
+#. sudo resize2fs /dev/mapper/${mapper} || {
+#. _failure "resize2fs failed to resize ::1 mapper::" $mapper }
+#.
+#: tomb:2303
msgid "e2fsck failed to check ::1 mapper::"
msgstr "e2fsck konnte ::1 mapper:: nicht verifizieren"
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. _failure "cryptsetup failed to resize ::1 mapper::" $mapper }
+#.
+#. sudo e2fsck -p -f /dev/mapper/${mapper} || {
+#. _failure "e2fsck failed to check ::1 mapper::" $mapper }
+#.
+#. sudo resize2fs /dev/mapper/${mapper} || {
+#. > _failure "resize2fs failed to resize ::1 mapper::" $mapper }
+#.
+#. # close and free the loop device
+#. sudo cryptsetup luksClose "${mapper}"
+#.
+#: tomb:2306
msgid "resize2fs failed to resize ::1 mapper::"
msgstr "resize2fs konnte ::1 mapper:: nicht vergrössern"
-#: warning
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. mounted_tombs=(`list_tomb_mounts`)
+#. else
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#. fi
+#.
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. > _failure "There is no open tomb to be closed." }
+#.
+#. [[ ${#mounted_tombs} -gt 1 && -z "$1" ]] && {
+#. _warning "Too many tombs mounted, please specify one (see tomb list)"
+#. _warning "or issue the command 'tomb close all' to close them all."
+#: tomb:2330
+msgid "There is no open tomb to be closed."
+msgstr "Es gibt kein zu schließendes Grab."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. fi
+#.
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. _failure "There is no open tomb to be closed." }
+#.
+#. [[ ${#mounted_tombs} -gt 1 && -z "$1" ]] && {
+#. > _warning "Too many tombs mounted, please specify one (see tomb list)"
+#. _warning "or issue the command 'tomb close all' to close them all."
+#. _failure "Operation aborted." }
+#.
+#. for t in ${mounted_tombs}; do
+#: tomb:2333
+msgid "Too many tombs mounted, please specify one (see tomb list)"
+msgstr ""
+"Zu viele Gräber geöffnet, bitte geben sie ein Grab an (siehe 'tomb list')"
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. _failure "There is no open tomb to be closed." }
+#.
+#. [[ ${#mounted_tombs} -gt 1 && -z "$1" ]] && {
+#. _warning "Too many tombs mounted, please specify one (see tomb list)"
+#. > _warning "or issue the command 'tomb close all' to close them all."
+#. _failure "Operation aborted." }
+#.
+#. for t in ${mounted_tombs}; do
+#. mapper=`basename ${t[(ws:;:)1]}`
+#: tomb:2334
+msgid "or issue the command 'tomb close all' to close them all."
+msgstr "oder 'tomb close all' ausführen um alle zu schließen."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. _verbose "Name: ::1 tomb name::" $tombname
+#. _verbose "Mount: ::1 mount point::" $tombmount
+#. _verbose "Mapper: ::1 mapper::" $mapper
+#.
+#. [[ -e "$mapper" ]] && {
+#. > _warning "Tomb not found: ::1 tomb file::" $1
+#. _warning "Please specify an existing tomb."
+#. return 0 }
+#.
+#. [[ -n $SLAM ]] && {
+#: tomb:2350
msgid "Tomb not found: ::1 tomb file::"
msgstr "Grab unauffindbar: ::1 tomb file::"
-#: failure
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _verbose "Name: ::1 tomb name::" $tombname
+#. _verbose "Mount: ::1 mount point::" $tombmount
+#. _verbose "Mapper: ::1 mapper::" $mapper
+#.
+#. [[ -e "$mapper" ]] && {
+#. _warning "Tomb not found: ::1 tomb file::" $1
+#. > _warning "Please specify an existing tomb."
+#. return 0 }
+#.
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" #: tomb:2351
+msgid "Please specify an existing tomb."
+msgstr "Bitte geben Sie ein existierendes Grab an."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. [[ -e "$mapper" ]] && {
+#. _warning "Tomb not found: ::1 tomb file::" $1
+#. _warning "Please specify an existing tomb."
+#. return 0 }
+#.
+#. [[ -n $SLAM ]] && {
+#. > _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount
+#. _message "Kill all processes busy inside the tomb."
+#. { slam_tomb "$tombmount" } || {
+#. _failure "Cannot slam the tomb ::1 tomb name::" $tombname }
+#: tomb:2355
+msgid "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::"
+msgstr ""
+"Abruptes Schließen von ::1 tomb name:: eingehangen in ::2 mount point:: "
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _warning "Please specify an existing tomb."
+#. return 0 }
+#.
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount
+#. > _message "Kill all processes busy inside the tomb."
+#. { slam_tomb "$tombmount" } || {
+#. _failure "Cannot slam the tomb ::1 tomb name::" $tombname }
+#. } || {
+#. _message "Closing tomb ::1 tomb name:: mounted on ::2 mount point::" #: tomb:2357
+msgid "Kill all processes busy inside the tomb."
+msgstr "Abbrechen aller laufenden Prozesse im Grab."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount
+#. _message "Kill all processes busy inside the tomb."
+#. { slam_tomb "$tombmount" } || {
+#. > _failure "Cannot slam the tomb ::1 tomb name::" $tombname }
+#. } || {
+#. _message "Closing tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount }
+#.
+#: tomb:2359
msgid "Cannot slam the tomb ::1 tomb name::"
msgstr "::1 tomb name:: kann nicht abrupt geschlossen werden !"
-#: message
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount
+#. _message "Kill all processes busy inside the tomb."
+#. { slam_tomb "$tombmount" } || {
+#. _failure "Cannot slam the tomb ::1 tomb name::" $tombname }
+#. } || {
+#. > _message "Closing tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount }
+#.
+#. # check if there are binded dirs and close them
+#. bind_tombs=(`list_tomb_binds $tombname`)
+#: tomb:2361
msgid "Closing tomb ::1 tomb name:: mounted on ::2 mount point::"
msgstr "Grab ::1 tomb name:: eingehängt in ::2 mount point:: wird geschlossen."
-#: message
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. # check if there are binded dirs and close them
+#. bind_tombs=(`list_tomb_binds $tombname`)
+#. for b in ${bind_tombs}; do
+#. bind_mapper="${b[(ws:;:)1]}"
+#. bind_mount="${b[(ws:;:)2]}"
+#. > _message "Closing tomb bind hook: ::1 hook::" $bind_mount
+#. sudo umount $bind_mount || {
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb: killing all processes using this hook."
+#. slam_tomb "$bind_mount"
+#: tomb:2369
msgid "Closing tomb bind hook: ::1 hook::"
msgstr "Schliessen des 'bind hooks': ::1 hook::"
-#: failure
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. for b in ${bind_tombs}; do
+#. bind_mapper="${b[(ws:;:)1]}"
+#. bind_mount="${b[(ws:;:)2]}"
+#. _message "Closing tomb bind hook: ::1 hook::" $bind_mount
+#. sudo umount $bind_mount || {
+#. [[ -n $SLAM ]] && {
+#. > _success "Slamming tomb: killing all processes using this hook."
+#. slam_tomb "$bind_mount"
+#. [[ $? == 1 ]] && {
+#. _failure "Cannot slam the bind hook ::1 hook::" $bind_mount }
+#. umount $bind_mount
+#: tomb:2372
+msgid "Slamming tomb: killing all processes using this hook."
+msgstr ""
+"Abruptes Schließen des Grabes: Beenden aller Prozesse die diesen Hook "
+"benutzen."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _message "Closing tomb bind hook: ::1 hook::" $bind_mount
+#. sudo umount $bind_mount || {
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb: killing all processes using this hook."
+#. slam_tomb "$bind_mount"
+#. [[ $? == 1 ]] && {
+#. > _failure "Cannot slam the bind hook ::1 hook::" $bind_mount }
+#. umount $bind_mount
+#. } || {
+#. _warning "Tomb bind hook ::1 hook:: is busy, cannot close tomb." $bind_mount }
+#. }
+#: tomb:2375
msgid "Cannot slam the bind hook ::1 hook::"
msgstr "Abruptes Schliessen des 'bind hooks' ::1 hook:: nicht möglich"
-#: warning
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _success "Slamming tomb: killing all processes using this hook."
+#. slam_tomb "$bind_mount"
+#. [[ $? == 1 ]] && {
+#. _failure "Cannot slam the bind hook ::1 hook::" $bind_mount }
+#. umount $bind_mount
+#. } || {
+#. > _warning "Tomb bind hook ::1 hook:: is busy, cannot close tomb." $bind_mount }
+#. }
+#. done
+#.
+#. # Execute post-hooks for eventual cleanup
+#: tomb:2378
msgid "Tomb bind hook ::1 hook:: is busy, cannot close tomb."
-msgstr "Der 'bind hook' ::1 hook:: ist beschäftigt und kann nicht geschlossen werden."
+msgstr ""
+"Der 'bind hook' ::1 hook:: ist beschäftigt und kann nicht geschlossen werden."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. # Execute post-hooks for eventual cleanup
+#. { option_is_set -n } || {
+#. exec_safe_post_hooks ${tombmount%%/} close }
+#.
+#. _verbose "Performing umount of ::1 mount point::" $tombmount
+#. sudo umount ${tombmount}
+#. > [[ $? = 0 ]] || { _warning "Tomb is busy, cannot umount!"; return 1 }
+#.
+#. # If we used a default mountpoint and is now empty, delete it
+#. [[ "$tombmount" == "/media/$tombname.tomb" ]] && { rmdir $tombmount }
+#.
+#: tomb:2388
+msgid "Tomb is busy, cannot umount!"
+msgstr "Grab ist beschäftigt und kann nicht ausgehänkt werden!"
-#: failure
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. # If we used a default mountpoint and is now empty, delete it
+#. [[ "$tombmount" == "/media/$tombname.tomb" ]] && { rmdir $tombmount }
+#.
+#. sudo cryptsetup luksClose $mapper
+#. [[ $? == 0 ]] || {
+#. > _failure "Error occurred in cryptsetup luksClose ::1 mapper::" $mapper }
+#.
+#. # Normally the loopback device is detached when unused
+#. [[ -e "/dev/$tombloop" ]] && sudo losetup -d "/dev/$tombloop"
+#. [[ $? = 0 ]] || {
+#: tomb:2395
msgid "Error occurred in cryptsetup luksClose ::1 mapper::"
-msgstr "Ein Fehler ist beim Ausführen von 'cryptsetup luksClose ::1 mapper::' aufgetreten."
+msgstr ""
+"Ein Fehler ist beim Ausführen von 'cryptsetup luksClose ::1 mapper::' "
+"aufgetreten."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. # Normally the loopback device is detached when unused
+#. [[ -e "/dev/$tombloop" ]] && sudo losetup -d "/dev/$tombloop"
+#. [[ $? = 0 ]] || {
+#. _verbose "/dev/$tombloop was already closed." }
+#.
+#. > _success "Tomb ::1 tomb name:: closed: your bones will rest in peace." $tombname
+#.
+#. done # loop across mounted tombs
+#.
+#. return 0
+#: tomb:2402
+msgid "Tomb ::1 tomb name:: closed: your bones will rest in peace."
+msgstr ""
+"Grab ::1 tomb name:: geschlossen: Ihre Knochen werden in Frieden ruhen."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. return 1
+#. fi
+#. return 0
+#. fi
+#. unset discardme
+#. if ! zparseopts -M -E -D -Adiscardme ${every_opts}; then
+#. > _failure "Error parsing."
+#. return 127
+#. fi
+#. unset discardme
+#. subcommand=$1
+#: tomb:2522
+msgid "Error parsing."
+msgstr "Syntax Fehler."
-#: warning
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. subcommand=$1
+#. if [[ -z $subcommand ]]; then
+#. subcommand="__default"
+#. fi
+#.
+#. if [[ -z ${(k)subcommands_opts[$subcommand]} ]]; then
+#. > _warning "There's no such command \"::1 subcommand::\"." $subcommand
+#. exitv=127 _failure "Please try -h for help."
+#. fi
+#. argv=("${(@)oldstar}")
+#. unset oldstar
+#: tomb:2532
msgid "There's no such command \"::1 subcommand::\"."
msgstr "Der Befehl \"::1 subcommand::\" existiert nicht."
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. if [[ -z $subcommand ]]; then
+#. subcommand="__default"
+#. fi
+#.
+#. if [[ -z ${(k)subcommands_opts[$subcommand]} ]]; then
+#. _warning "There's no such command \"::1 subcommand::\"." $subcommand
+#. > exitv=127 _failure "Please try -h for help."
+#. fi
+#. argv=("${(@)oldstar}")
+#. unset oldstar
+#.
+#: tomb:2533
msgid "Please try -h for help."
msgstr "Versuchen Sie -h um Hilfe zu erhalten."
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. # zsh magic: ${=string} will split to multiple arguments when spaces occur
+#. set -A cmd_opts ${main_opts} ${=subcommands_opts[$subcommand]}
+#. # if there is no option, we don't need parsing
+#. if [[ -n $cmd_opts ]]; then
+#. zparseopts -M -E -D -AOPTS ${cmd_opts}
+#. if [[ $? != 0 ]]; then
+#. > _warning "Some error occurred during option processing."
+#. exitv=127 _failure "See \"tomb help\" for more info."
+#. fi
+#. fi
+#. #build PARAM (array of arguments) and check if there are unrecognized options
+#: tomb:2545
+msgid "Some error occurred during option processing."
+msgstr "Fehler beim interpretieren der Optionen."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. set -A cmd_opts ${main_opts} ${=subcommands_opts[$subcommand]}
+#. # if there is no option, we don't need parsing
+#. if [[ -n $cmd_opts ]]; then
+#. zparseopts -M -E -D -AOPTS ${cmd_opts}
+#. if [[ $? != 0 ]]; then
+#. _warning "Some error occurred during option processing."
+#. > exitv=127 _failure "See \"tomb help\" for more info."
+#. fi
+#. fi
+#. #build PARAM (array of arguments) and check if there are unrecognized options
+#. ok=0
+#: tomb:2546
msgid "See \"tomb help\" for more info."
msgstr "Sie \"tomb help\" für mehr Infos."
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. for arg in $*; do
+#. if [[ $arg == '--' || $arg == '-' ]]; then
+#. ok=1
+#. continue #it shouldnt be appended to PARAM
+#. elif [[ $arg[1] == '-' ]]; then
+#. if [[ $ok == 0 ]]; then
+#. > exitv=127 _failure "Unrecognized option ::1 arg:: for subcommand ::2 subcommand::" $arg $subcommand
+#. fi
+#. fi
+#. PARAM+=$arg
+#. done
+#: tomb:2558
msgid "Unrecognized option ::1 arg:: for subcommand ::2 subcommand::"
msgstr "Unbekannte Option ::1 arg:: für Unterbefehl ::2 subcommand::"
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. # Use colors unless told not to
+#. { ! option_is_set --no-color } && { autoload -Uz colors && colors }
+#. # Some options are only available during insecure mode
+#. { ! option_is_set --unsafe } && {
+#. for opt in --tomb-pwd --use-urandom --tomb-old-pwd; do
+#. { option_is_set $opt } && {
+#. > exitv=127 _failure "You specified option ::1 option::, which is DANGEROUS and should only be used for testing\nIf you really want so, add --unsafe" $opt }
+#. done
+#. }
+#. # read -t or --tmp flags to set a custom temporary directory
+#. option_is_set --tmp && TMPPREFIX=$(option_value --tmp)
+#: tomb:2574
+msgid ""
+"You specified option ::1 option::, which is DANGEROUS and should only be "
+"used for testing\n"
+"If you really want so, add --unsafe"
+msgstr ""
+"Sie haben die Option ::1 option:: gewählt, welche GEFÄHRLICH ist und nur zum "
+"Testen benutzt werden sollte.\n"
+"Wenn sie dies wollen, benutzen sie --unsafe"
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. help)
+#. usage
+#. ;;
+#.
+#. # DEPRECATION notice (leave here as 'create' is still present in old docs)
+#. create)
+#. > _warning "The create command is deprecated, please use dig, forge and lock instead."
+#. _warning "For more informations see Tomb's manual page (man tomb)."
+#. _failure "Operation aborted."
+#. ;;
+#.
+#: tomb:2608
+msgid ""
+"The create command is deprecated, please use dig, forge and lock instead."
+msgstr ""
+"Der Befehl create ist veraltet, benutzen Sie stattdesseb dig, forge, und "
+"lock."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. usage
+#. ;;
+#.
+#. # DEPRECATION notice (leave here as 'create' is still present in old docs)
+#. create)
+#. _warning "The create command is deprecated, please use dig, forge and lock instead."
+#. > _warning "For more informations see Tomb's manual page (man tomb)."
+#. _failure "Operation aborted."
+#. ;;
+#.
+#. # CREATE Step 1: dig -s NN file.tomb
+#: tomb:2609
+msgid "For more informations see Tomb's manual page (man tomb)."
+msgstr "Für mehr Informationen siehe Benutzerhandbuch (man tomb)."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. umount_tomb $PARAM[1]
+#. ;;
+#.
+#. # Grow tomb's size
+#. resize)
+#. [[ $RESIZER == 0 ]] && {
+#. > _failure "Resize2fs not installed: cannot resize tombs." }
+#. resize_tomb $PARAM[1]
+#. ;;
+#.
+#. ## Contents manipulation
+#: tomb:2643
msgid "Resize2fs not installed: cannot resize tombs."
msgstr "Resize2fs nicht installiert: Gräber können nicht vergrössert werden."
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#.
+#. ## Locking operations
+#.
+#. # Export key to QR Code
+#. engrave)
+#. [[ $QRENCODE == 0 ]] && {
+#. > _failure "QREncode not installed: cannot engrave keys on paper." }
+#. engrave_key ${=PARAM}
+#. ;;
+#.
+#. # Change password on existing key
+#: tomb:2669
msgid "QREncode not installed: cannot engrave keys on paper."
msgstr "QREncode nicht installiert: Kann Grabgravur nicht auf Papier ausgeben."
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. change_tomb_key ${=PARAM}
+#. ;;
+#.
+#. # STEGANOGRAPHY: hide key inside an image
+#. bury)
+#. [[ $STEGHIDE == 0 ]] && {
+#. > _failure "Steghide not installed: cannot bury keys into images." }
+#. bury_key $PARAM[1]
+#. ;;
+#.
+#. # STEGANOGRAPHY: read key hidden in an image
+#: tomb:2686
msgid "Steghide not installed: cannot bury keys into images."
-msgstr "Steghide ist nicht installiert: Schlüssel können nicht in Bilder vergraben werden."
-
-#: failure
+msgstr ""
+"Steghide ist nicht installiert: Schlüssel können nicht in Bilder vergraben "
+"werden."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. bury_key $PARAM[1]
+#. ;;
+#.
+#. # STEGANOGRAPHY: read key hidden in an image
+#. exhume)
+#. [[ $STEGHIDE == 0 ]] && {
+#. > _failure "Steghide not installed: cannot exhume keys from images." }
+#. exhume_key $PARAM[1]
+#. ;;
+#.
+#. ## Internal commands useful to developers
+#: tomb:2693
msgid "Steghide not installed: cannot exhume keys from images."
-msgstr "Steghide ist nicht installiert: Schlüssel können nicht aus Bilder ausgegraben werden."
-
-#: print
+msgstr ""
+"Steghide ist nicht installiert: Schlüssel können nicht aus Bilder "
+"ausgegraben werden."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#.
+#. # Ask user for a password interactively
+#. askpass) ask_password $PARAM[1] $PARAM[2] ;;
+#.
+#. # Default operation: presentation, or version information with -v
+#. __default)
+#. > _print "Tomb ::1 version:: - a strong and gentle undertaker for your secrets" $VERSION
+#. _print "\000"
+#. _print " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+#. _print " This is free software: you are free to change and redistribute it"
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#: tomb:2707
msgid "Tomb ::1 version:: - a strong and gentle undertaker for your secrets"
-msgstr "Tomb ::1 version:: - ein starker und sanfter Totengräber für ihre Geheimnisse"
-
-#: print
-msgid " Copyright (C) 2007-2014 Dyne.org Foundation, License GNU GPL v3+"
-msgstr " Urheberrecht (C) 2007-2014 Dyne.org Foundation, Lizens GNU GPL v3+"
+msgstr ""
+"Tomb ::1 version:: - ein starker und sanfter Totengräber für ihre Geheimnisse"
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. askpass) ask_password $PARAM[1] $PARAM[2] ;;
+#.
+#. # Default operation: presentation, or version information with -v
+#. __default)
+#. _print "Tomb ::1 version:: - a strong and gentle undertaker for your secrets" $VERSION
+#. _print "\000"
+#. > _print " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+#. _print " This is free software: you are free to change and redistribute it"
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#: tomb:2709
+msgid " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+msgstr ""
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#.
+#. # Default operation: presentation, or version information with -v
+#. __default)
+#. _print "Tomb ::1 version:: - a strong and gentle undertaker for your secrets" $VERSION
+#. _print "\000"
+#. _print " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+#. > _print " This is free software: you are free to change and redistribute it"
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#: tomb:2710
msgid " This is free software: you are free to change and redistribute it"
-msgstr " This ist freie Software, Sie sind frei sie zu verändern und weiterzugeben"
-
-#: print
+msgstr ""
+" This ist freie Software, Sie sind frei sie zu verändern und weiterzugeben"
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. # Default operation: presentation, or version information with -v
+#. __default)
+#. _print "Tomb ::1 version:: - a strong and gentle undertaker for your secrets" $VERSION
+#. _print "\000"
+#. _print " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+#. _print " This is free software: you are free to change and redistribute it"
+#. > _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#. LANG=en
+#: tomb:2711
+msgid " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+msgstr ""
+" Für den aktuellsten Quellcode besuchen sie <http://dyne.org/software/tomb>"
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. _print " This is free software: you are free to change and redistribute it"
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#. LANG=en
+#. > _print " This source code is distributed in the hope that it will be useful,"
+#. _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. _print " When in need please refer to <http://dyne.org/support>."
+#: tomb:2716
msgid " This source code is distributed in the hope that it will be useful,"
-msgstr " Dieser Quellcode wird veröffentlicht in der Hoffnung dass er nützlich ist,"
-
-#: print
+msgstr ""
+" Dieser Quellcode wird veröffentlicht in der Hoffnung dass er nützlich ist,"
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#. LANG=en
+#. _print " This source code is distributed in the hope that it will be useful,"
+#. > _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. _print " When in need please refer to <http://dyne.org/support>."
+#. _print "\000"
+#: tomb:2717
msgid " but WITHOUT ANY WARRANTY; without even the implied warranty of"
msgstr " aber OHNE JEDWEGE GARANTIE; inbegriffen die Garantie der"
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#. LANG=en
+#. _print " This source code is distributed in the hope that it will be useful,"
+#. _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. > _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. _print " When in need please refer to <http://dyne.org/support>."
+#. _print "\000"
+#. _print "System utils:"
+#: tomb:2718
msgid " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
msgstr " MARKTGÄNGIGKEIT oder der EIGNUNG ZU EINEM BESTIMMTEN ZWECK."
-#: print
-msgid "System utils:"
-msgstr "Systemwerkzeuge:"
-
-#: warning
-msgid "Command \"::1 subcommand::\" not recognized."
-msgstr "Der Befehl \"::1 subcommand::\" wurde nicht erkannt."
-
-#: print
-msgid " passwd change the password of a KEY (needs old pass)"
-msgstr " passwd ändern des Passworts für einen SCHLÜSSEL (benötigt altes Passwort)"
-
-#: print
-msgid " setkey change the KEY locking a TOMB (needs old key and pass)"
-msgstr " setkey ändern des SCHLÜSSELS von einem GRAB (benötigt alten Schlüssel und Passwort)"
-
-#: print
-msgid " // Backup on paper:"
-msgstr " //Backup auf Papier:"
-
-#: print
-msgid " // Steganography:"
-msgstr " // Steganographie:"
-
-#: print
-msgid " bury hide a KEY inside a JPEG image (for use with -k)"
-msgstr " bury versteckt einen SCHLÜSSEL in einem JPEG Bild (zur Nutzung mit -k)"
-
-#: print
-msgid " exhume extract a KEY from a JPEG image (prints to stdout)"
-msgstr " exhume extrahiert einen SCHLÜSSEL aus einer JPEG Datei (gibt an dei Standardausgabe aus)"
-
-#: failure
-msgid "Exhume failed, no image specified"
-msgstr "Extrahieren fehlgeschlagen, keine Bilddatei angegeben"
-
-#: print
-msgid " For the latest sourcecode go to <http://dyne.org/software/tomb>"
-msgstr " Für den aktuellsten Quellcode besuchen sie <http://dyne.org/software/tomb>"
-
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. local langwas=$LANG
+#. LANG=en
+#. _print " This source code is distributed in the hope that it will be useful,"
+#. _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. > _print " When in need please refer to <http://dyne.org/support>."
+#. _print "\000"
+#. _print "System utils:"
+#. _print "\000"
+#. cat <<EOF
+#: tomb:2720
msgid " When in need please refer to <http://dyne.org/support>."
msgstr " Für Hilfe bitte wenden Sie sich an <http://dyne.org/support>."
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. _print " This source code is distributed in the hope that it will be useful,"
+#. _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. _print " When in need please refer to <http://dyne.org/support>."
+#. _print "\000"
+#. > _print "System utils:"
+#. _print "\000"
+#. cat <<EOF
+#. `sudo -V | head -n1`
+#. `cryptsetup --version`
+#: tomb:2722
+msgid "System utils:"
+msgstr "Systemwerkzeuge:"
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. `cryptsetup --version`
+#. `pinentry --version`
+#. `gpg --version | head -n1` - key forging algorithms (GnuPG symmetric ciphers):
+#. `list_gnupg_ciphers`
+#. EOF
+#. _print "\000"
+#. > _print "Optional utils:"
+#. _print "\000"
+#. _list_optional_tools version
+#. return 0
+#. }
+#: tomb:2732
msgid "Optional utils:"
msgstr "Optionelle Hilfsmittel:"
-#: failure
-msgid "Fatal error setting the permission umask for temporary files"
-msgstr "Fataler Fehler beim Setzen der Berechtigungsmaske für die temporären Dateien"
-
-#: failure
-msgid "Fatal error setting ownership on temporary file: ::1 temp file::"
-msgstr "Fataler Fehler beim Setzen des Besitzers für die temporäre Datei: ::1 temp file::"
-
-#: warning
-msgid "cleartext key from stdin selected: this is unsafe."
-msgstr "Klartext Schlüssel von der Standarteingabe ausgewählt: Dies ist nicht sicher."
-
-#: failure
-msgid "please use --unsafe if you really want to do this."
-msgstr "Bitte benutzen Sie --unsafe wenn Sie dies wirklich tun wollen."
-
-#: warning
-msgid "received key in cleartext from stdin (unsafe mode)"
-msgstr "Empfangen des Schlüssels in Klartext von der Standarteingabe (Nicht sicherer Modus)"
-
-#: failure
-msgid "You specified option ::1 option::, which is DANGEROUS and should only be used for testing\n"
-"If you really want so, add --unsafe"
-msgstr "Sie haben die Option ::1 option:: gewählt, welche GEFÄHRLICH ist und nur zum Testen benutzt werden sollte.\n"
-"Wenn sie dies wollen, benutzen sie --unsafe"
-
-#: failure
-msgid "Failing to identify the user who is calling us"
-msgstr "Fehler beim Identifizieren des uns rufenden Benutzers"
-
-#: failure
-msgid "Fatal error creating the temporary directory: ::1 temp dir::"
-msgstr "Fataler Fehler beim kreieren der temporären Datei: ::1 temp dir::"
-
-#: failure
-msgid "Someone is messing up with us trying to hijack temporary files."
-msgstr "Jemand versucht uns durcheinander zu bringen und unsere temporären Dateien zu kapern."
-
-#: success
-msgid "All your swaps are belong to crypt. Good."
-msgstr "All ihre Auslagerungsdateien gehören Crypt. Gut."
-
-#: success
-msgid "Changing password for ::1 key file::"
-msgstr "Wechsle Passwort für ::1 key file::"
-
-#: success
-msgid "Your passphrase was successfully updated."
-msgstr "Ihr Passphrase wurde erfolgreich auf den neuesten Stand gebracht."
-
-#: success
-msgid "Using KDF, iterations: ::1 microseconds::"
-msgstr "Benutze Schlüsselableitungsverfahren, Durchläufe: ::1 microseconds::"
-
-#: success
-msgid "Encoding key ::1 tomb key:: inside image ::2 image file::"
-msgstr "Enkodiere Schlüssel ::1 tomb key:: im Bild ::2 image file::"
-
-#: success
-msgid "Tomb key encoded succesfully into image ::1 image file::"
-msgstr "Grabschlüssel erfolgreich im Bild ::1 image file:: enkodiert"
-
-#: success
-msgid "Key succesfully exhumed to ::1 key::."
-msgstr "Schlüssel erfolgreich exhumiert in ::1 key::."
-
-#: success
-msgid "Rendering a printable QRCode for key: ::1 tomb key file::"
-msgstr "Rendern eines ausdruckbaren QRCodes für Schlüssel: ::1 tomb key file::"
-
-#: success
-msgid "Operation successful:"
-msgstr "Operation erfolgreich:"
-
-#: success
-msgid "Creating a new tomb in ::1 tomb path::"
-msgstr "Erstelle ein neues Grab in ::1 tomb path::"
-
-#: success
-msgid "Done digging ::1 tomb name::"
-msgstr "Fertig mit ausgraben ::1 tomb name::"
-
-#: success
-msgid "Choose the password of your key: ::1 tomb key::"
-msgstr "Wählen Sie das Passwort von ihrem Schlüssel: ::1 tomb key::"
-
-#: success
-msgid "Your key is ready:"
-msgstr "Ihr Schlüssel ist bereit:"
-
-#: success
-msgid "Locking ::1 tomb file:: with ::2 tomb key file::"
-msgstr "Schliesse ::1 tomb file:: ab mit ::2 tomb key file::"
-
-#: success
-msgid "Your tomb is ready in ::1 tomb path:: and secured with key ::2 tomb key::"
-msgstr "Ihr Grab ist bereit in ::1 tomb path::und gesichert mit dem Schlüssel ::2 tomb key::"
-
-#: success
-msgid "Changing lock on tomb ::1 tomb name::"
-msgstr "Wechsle Schloss am Grab ::1 tomb name::"
-
-#: success
-msgid "Succesfully changed key for tomb: ::1 tomb file::"
-msgstr "Schlüssel Erfolgreich gewechselt für das Grab: : ::1 tomb file::"
-
-#: success
-msgid "Opening ::1 tomb file:: on ::2 mount point::"
-msgstr "Öffne ::1 tomb file:: auf ::2 mount point::"
-
-#: success
-msgid "Success unlocking tomb ::1 tomb name::"
-msgstr "Entsperren erfolgreich von ::1 tomb name::"
-
-#: success
-msgid "Success opening ::1 tomb file:: on ::2 mount point::"
-msgstr "Erfolgreiches Öffnen von ::1 tomb file:: auf ::2 mount point::"
-
-#: success
-msgid "Post hooks found, executing as user ::1 user name::."
-msgstr "Post Hooks gefunden, ausführen als Benutzer ::1 user name::."
-
-#: success
-msgid "Creating and updating search indexes."
-msgstr "Kreieren und aktualisieren von Suchindexen"
-
-#: message
-msgid "Generating a new swish-e configuration file: ::1 swish conf::"
-msgstr "Kreieren einer neuen swish-e Konfigurationsdatei: ::1 swish conf::"
-
-#: success
-msgid "Searching for: ::1::"
-msgstr "Suchen nach: ::1::"
-
-#: success
-msgid "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::"
-msgstr "Abruptes Schließen von ::1 tomb name:: eingehangen in ::2 mount point:: "
-
-#: success
-msgid "Slamming tomb: killing all processes using this hook."
-msgstr "Abruptes Schließen des Grabes: Beenden aller Prozesse die diesen Hook benutzen."
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. }
+#. usage
+#. ;;
+#.
+#. # Reject unknown command and suggest help
+#. *)
+#. > _warning "Command \"::1 subcommand::\" not recognized." $subcommand
+#. _message "Try -h for help."
+#. return 1
+#. ;;
+#. esac
+#: tomb:2742
+msgid "Command \"::1 subcommand::\" not recognized."
+msgstr "Der Befehl \"::1 subcommand::\" wurde nicht erkannt."
-#: success
-msgid "Tomb ::1 tomb name:: closed: your bones will rest in peace."
-msgstr "Grab ::1 tomb name:: geschlossen: Ihre Knochen werden in Frieden ruhen."
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. usage
+#. ;;
+#.
+#. # Reject unknown command and suggest help
+#. *)
+#. _warning "Command \"::1 subcommand::\" not recognized." $subcommand
+#. > _message "Try -h for help."
+#. return 1
+#. ;;
+#. esac
+#. return $?
+#: tomb:2743
+msgid "Try -h for help."
+msgstr "Versuchen Sie -h um Hilfe zu erhalten."
-#: warning
-msgid "Pinentry error: ::1 error::"
-msgstr "Pinentry Fehler: ::1 error::"
+#~ msgid " -o mount options used to open (default: rw,noatime,nodev)"
+#~ msgstr " -o Mount Optionen beim Öffnen (Standart: rw,noatime,nodev)"
-#: warning
-msgid "Empty password"
-msgstr "Leeres Passwort"
+#~ msgid " Copyright (C) 2007-2014 Dyne.org Foundation, License GNU GPL v3+"
+#~ msgstr " Urheberrecht (C) 2007-2014 Dyne.org Foundation, Lizens GNU GPL v3+"
diff --git a/extras/po/es.po b/extras/po/es.po
@@ -1,1130 +1,5499 @@
msgid ""
msgstr ""
+"Project-Id-Version: Tomb the Crypto Undertaker\n"
+"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
-"Project-Id-Version: Tomb the Crypto Undertaker\n"
-"Language: es\n"
-
-#: failure
-msgid "Operation aborted."
-msgstr "Operación abortada."
-
-#: warning
-msgid "often occurs on VPS and kernels that don't provide the loop module."
-msgstr "ocurre frecuentemente en VPS y kernels que no proveen el módulo 'loop'."
-
-#: warning
-msgid "It is impossible to use Tomb on this machine at this conditions."
-msgstr "Es imposible usar Tomb en esta máquina en estas condiciones."
-
-#: message
-msgid "Waiting for the key to be piped from stdin... "
-msgstr "Esperando a recibir la llave a través de stdin... "
-
-#: failure
-msgid "This operation requires a key file to be specified using the -k option."
-msgstr "Esta operación requiere que se especifique una llave con la opción -k."
-
-#: failure
-msgid "Key not found, specify one using -k."
-msgstr "Llave no encontrada, especifica una usando -k."
-
-#: warning
-msgid "User aborted password dialog."
-msgstr "El usuario ha abortado el diálogo de contraseña."
-
-#: message
-msgid "Password OK."
-msgstr "Contraseña OK."
-
-#: failure
-msgid "Error: the newly generated keyfile does not seem valid."
-msgstr "Error: la llave recién generada no parece válida."
-
-#: failure
-msgid "User aborted."
-msgstr "El usuario ha abortado."
-
-#: failure
-msgid "You set empty password, which is not possible."
-msgstr "Has elegido una contraseña vacía, lo que no es posible."
-
-#: failure
-msgid "Wrong argument for --kdf: must be an integer number (iteration seconds)."
-msgstr "Argumento incorrecto para --kdf: debe ser un número entero (segundos por iteración)."
-
-#: failure
-msgid "gpg (GnuPG) is not found, Tomb cannot function without it."
-msgstr "No se encuentra gpg (GnuPG), Tomb no puede funcionar sin ello."
-
-#: message
-msgid "Please confirm the key password for the encoding"
-msgstr "Por favor, confirma la contraseña de la clave para la codificación"
-
-#: warning
-msgid "Wrong password supplied."
-msgstr "Contraseña incorrecta."
-
-#: failure
-msgid "You shall not bury a key whose password is unknown to you."
-msgstr "No deberías enterrar una clave cuya contraseña desconoces."
-
-#: warning
-msgid "Encoding error: steghide reports problems."
-msgstr "Error en la codficación: steghide reporta problemas."
-
-#: warning
-msgid "Make explicit use of --force to overwrite."
-msgstr "Usa --force para sobreescribir."
-
-#: warning
-msgid "Use of --force selected: overwriting."
-msgstr "Usando --force: sobreescribiendo."
-#: failure
-msgid "A filename needs to be specified using -k to forge a new key."
-msgstr "Es necesario especificar un nombre de fichero usando -k para forgar una llave nueva."
-
-#: failure
-msgid "Forging this key would overwrite an existing file. Operation aborted."
-msgstr "Forjar esta llave sobreescribiría un fichero existente. Operación abortada."
-
-#: message
-msgid "This operation takes time, keep using this computer on other tasks,"
-msgstr "Esta operación necesita tiempo, sigue usando el ordenador en otras tareas,"
-
-#: message
-msgid "once done you will be asked to choose a password for your tomb."
-msgstr "cuando termine se te pedirá que elijas una contraseña para tu tumba."
-
-#: message
-msgid "To make it faster you can move the mouse around."
-msgstr "Para acelerarlo puedes mover el ratón por la pantalla."
-
-#: message
-msgid "If you are on a server, you can use an Entropy Generation Daemon."
-msgstr "Si estás en un servidor, puede usar un Entropy Generation Daemon."
-
-#: warning
-msgid "Cannot generate encryption key."
-msgstr "No se puede generar la llave de encriptación."
-
-#: message
-msgid "(You can also change it later using 'tomb passwd'.)"
-msgstr "(También puedes cambiarla más tarde usando 'tomb passwd'.)"
-
-#: warning
-msgid "The key does not seem to be valid."
-msgstr "Parece que la llave no es válida."
-
-#: warning
-msgid "Dumping contents to screen:"
-msgstr "Volcando contenido en la pantalla:"
-
-#: failure
-msgid "Size argument missing, use -s"
-msgstr "Falta el argumento de tamaño, usa -s"
-
-#: warning
-msgid "A tomb exists already. I'm not digging here:"
-msgstr "Ya existe una tumba. No voy a cavar aquí:"
-
-#: message
-msgid "Your tomb is not yet ready, you need to forge a key and lock it:"
-msgstr "Tu tumba no está lista todavía, tienes que forjar una llave y asegurarla:"
-
-#: warning
-msgid "No tomb specified for locking."
-msgstr "No se ha especificado una tumba que asegurar."
-
-#: warning
-msgid "Usage: tomb lock file.tomb file.tomb.key"
-msgstr "Uso: tomb lock file.tomb file.tomb.key"
-
-#: failure
-msgid "There is no tomb here. You have to it dig first."
-msgstr "No hay una tumba aquí. Tienes que cavarla primero."
-
-#: message
-msgid "Checking if the tomb is empty (we never step on somebody else's bones)."
-msgstr "Comprobando que la tumba esté vacía (no queremos pisar los huesos de alguien más)."
-
-#: warning
-msgid "The tomb was already locked with another key."
-msgstr "La tumba ya estaba asegurada con otra llave."
-
-#: failure
-msgid "Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
-msgstr "Operación abortada. No puedo asegurar una tumba que ya tiene un candado. Cava una nueva."
-
-#: message
-msgid "Fine, this tomb seems empty."
-msgstr "Bien, esta tumba parece vacía."
-
-#: message
-msgid "Formatting Luks mapped device."
-msgstr "Formateando dispositivo mapeado con Luks."
-
-#: warning
-msgid "cryptsetup luksFormat returned an error."
-msgstr "cryptsetup luksFormat ha devuelto un error."
-
-#: message
-msgid "Formatting your Tomb with Ext3/Ext4 filesystem."
-msgstr "Formateando tu tumba con el sistema de ficheros Ext3/Ext4."
-
-#: warning
-msgid "Tomb format returned an error."
-msgstr "El formateo de la tumba ha devuelto un error."
-
-#: message
-msgid "Here below its status is reported:"
-msgstr "Su estado se muestra a continuación:"
-
-#: message
-msgid "This tomb is a valid LUKS encrypted device."
-msgstr "Esta tumba es un dispositivo encriptado con LUKS válido."
-
-#: failure
-msgid "Failure mounting the encrypted file."
-msgstr "Fallo al montar el fichero encriptado."
-
-#: warning
-msgid "How pitiful! A tomb, and no HOME."
-msgstr "¡Que lamentable! Una tumba, y ningún HOGAR."
-
-#: warning
-msgid "Cannot exec bind hooks without a mounted tomb."
-msgstr "No se pueden ejecutar los bind-hooks sin una tumba montada."
-
-#: failure
-msgid "I can't see any open tomb, may they all rest in peace."
-msgstr "No puedo ver ninguna tumba abierta. Que todos descansen en paz."
-
-#: message
-msgid "Search index updated."
-msgstr "Índice de búsqueda actualizado."
-
-#: warning
-msgid "Run 'tomb index' to create indexes."
-msgstr "Corre 'tomb index' para crear los índices."
-
-#: message
-msgid "Search completed."
-msgstr "Búsqueda completada."
-
-#: failure
-msgid "No tomb name specified for resizing."
-msgstr "No se ha especificado el nombre de la tumba a la que cambiar el tamaño."
-
-#: failure
-msgid "Size is not an integer."
-msgstr "El tamaño no es un número entero."
-
-#: failure
-msgid "The new size must be greater then old tomb size."
-msgstr "El nuevo tamaño debe ser mayor que el viejo tamaño de la tumba."
-
-#: failure
-msgid "There is no open tomb to be closed."
-msgstr "No hay ninguna tumba abierta que cerrar."
-
-#: warning
-msgid "Too many tombs mounted, please specify one (see tomb list)"
-msgstr "Demasiadas tumbas abietas, por favor, especifica una (véase tomb list)"
-
-#: warning
-msgid "or issue the command 'tomb close all' to close them all."
-msgstr "o utiliza el comando 'tomb close all' para cerrarlas todas."
-
-#: warning
-msgid "Please specify an existing tomb."
-msgstr "Por favor, especifica una tumba existente."
-
-#: message
-msgid "Kill all processes busy inside the tomb."
-msgstr "Mata todos los procesos ocupados dentro de la tumba."
-
-#: warning
-msgid "Tomb is busy, cannot umount!"
-msgstr "La tumba está ocupada, ¡no se puede desmontar!"
+#. Fold: Safety functions
+#. Function: _whoami
+#.
+#. Code sample:
+#.
+#. # Set username from UID or environment
+#. _USER=$SUDO_USER
+#. [[ "$_USER" = "" ]] && { _USER=$USERNAME }
+#. [[ "$_USER" = "" ]] && { _USER=$(id -u) }
+#. [[ "$_USER" = "" ]] && {
+#. > _failure "Failing to identify the user who is calling us" }
+#.
+#. # Get GID from option -G or the environment
+#. option_is_set -G #. && _GID=$(option_value -G) || _GID=$(id -g $_USER)
+#: tomb:189
+msgid "Failing to identify the user who is calling us"
+msgstr "Falló la identificación del usuario que nos llama."
-#: failure
-msgid "Error parsing."
-msgstr "Error al parsear."
+#. Fold: Safety functions
+#. Function: _plot
+#.
+#. Code sample:
+#. TOMBFILE=$(basename $TOMBPATH)
+#.
+#. # The tomb name is TOMBFILE without an extension.
+#. # It can start with dots: ..foo.tomb -> ..foo
+#. TOMBNAME="${TOMBFILE%\.[^\.]*}"
+#. [[ -z $TOMBNAME ]] && {
+#. > _failure "Tomb won't work without a TOMBNAME." }
+#.
+#. # Normalize tomb name
+#. TOMBFILE="$TOMBNAME.tomb"
+#.
+#: tomb:237
+msgid "Tomb won't work without a TOMBNAME."
+msgstr "Tomb no funcionará sin un TOMBNAME (nombre de la tumba)."
-#: warning
-msgid "Some error occurred during option processing."
-msgstr "Ha ocurrido algún error al procesar las opciones."
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#.
+#. # Provide a random filename in shared memory
+#. _tmp_create() {
+#. [[ -d "$TMPPREFIX" ]] || {
+#. # we create the tempdir with the sticky bit on
+#. sudo mkdir -m 1777 "$TMPPREFIX"
+#. > [[ $? == 0 ]] || _failure "Fatal error creating the temporary directory: ::1 temp dir::" "$TMPPREFIX"
+#. }
+#.
+#. # We're going to add one more $RANDOM for each time someone complain
+#. # about this being too weak of a random.
+#: tomb:252
+msgid "Fatal error creating the temporary directory: ::1 temp dir::"
+msgstr "Error fatal al crear el directorio temporal ::1 directorio::"
-#: warning
-msgid "The create command is deprecated, please use dig, forge and lock instead."
-msgstr "El comando create está obsoleto, por favor, usa dig, forge y lock en su lugar."
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#.
+#. # We're going to add one more $RANDOM for each time someone complain
+#. # about this being too weak of a random.
+#. tfile="${TMPPREFIX}/$RANDOM$RANDOM$RANDOM$RANDOM" # Temporary file
+#. umask 066
+#. [[ $? == 0 ]] || {
+#. > _failure "Fatal error setting the permission umask for temporary files" }
+#.
+#. [[ -r "$tfile" ]] && {
+#. _failure "Someone is messing up with us trying to hijack temporary files." }
+#.
+#: tomb:260
+msgid "Fatal error setting the permission umask for temporary files"
+msgstr ""
+"Error fatal al establecer el permiso umask para los ficheros temporales"
+
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#. tfile="${TMPPREFIX}/$RANDOM$RANDOM$RANDOM$RANDOM" # Temporary file
+#. umask 066
+#. [[ $? == 0 ]] || {
+#. _failure "Fatal error setting the permission umask for temporary files" }
+#.
+#. [[ -r "$tfile" ]] && {
+#. > _failure "Someone is messing up with us trying to hijack temporary files." }
+#.
+#. touch "$tfile"
+#. [[ $? == 0 ]] || {
+#. _failure "Fatal error creating a temporary file: ::1 temp file::" "$tfile" }
+#: tomb:263
+msgid "Someone is messing up with us trying to hijack temporary files."
+msgstr "Alguien está intentando secuestrar nuestros ficheros temporales."
-#: warning
-msgid "For more informations see Tomb's manual page (man tomb)."
-msgstr "Para más información mira el manual de Tomb (man tomb)."
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#.
+#. [[ -r "$tfile" ]] && {
+#. _failure "Someone is messing up with us trying to hijack temporary files." }
+#.
+#. touch "$tfile"
+#. [[ $? == 0 ]] || {
+#. > _failure "Fatal error creating a temporary file: ::1 temp file::" "$tfile" }
+#.
+#. [[ $? == 0 ]] || {
+#. _failure "Fatal error setting ownership on temporary file: ::1 temp file::" "$tfile" }
+#.
+#: tomb:267
+msgid "Fatal error creating a temporary file: ::1 temp file::"
+msgstr "Error fatal al crear el fichero temporal ::1 fichero::"
-#: message
-msgid "Try -h for help."
-msgstr "Prueba -h para obtener ayuda."
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#.
+#. touch "$tfile"
+#. [[ $? == 0 ]] || {
+#. _failure "Fatal error creating a temporary file: ::1 temp file::" "$tfile" }
+#.
+#. [[ $? == 0 ]] || {
+#. > _failure "Fatal error setting ownership on temporary file: ::1 temp file::" "$tfile" }
+#.
+#. _verbose "Created tempfile: ::1 temp file::" "$tfile"
+#. TOMBTMP="$tfile"
+#. TOMBTMPFILES+=("$tfile")
+#: tomb:270
+msgid "Fatal error setting ownership on temporary file: ::1 temp file::"
+msgstr ""
+"Error fatal al establecer la posesión del fichero temporal ::1 fichero::"
+
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. r=1
+#. is_crypt=`sudo dmsetup status "$s" | awk '/crypt/ {print $3}'`
+#. [[ $is_crypt == "crypt" ]] && { r=2 } || { break }
+#.
+#. fi
+#. done
+#. > _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#: tomb:316
+msgid "An active swap partition is detected..."
+msgstr ""
-#: failure
-msgid "Tomb won't work without a TOMBNAME."
-msgstr "Tomb no funcionará sin un TOMBNAME (nombre de la tumba)."
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. [[ $is_crypt == "crypt" ]] && { r=2 } || { break }
+#.
+#. fi
+#. done
+#. _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. > _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#. _warning "You can deactivate all swap partitions using the command:"
+#. _warning " swapoff -a"
+#: tomb:318
+msgid "All your swaps are belong to crypt. Good."
+msgstr "Todas tus particiones de intercambio pertenecen a crypt. Bien."
-#: failure
-msgid "Fatal error creating a temporary file: ::1 temp file::"
-msgstr "Error fatal al crear el fichero temporal ::1 fichero::"
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. fi
+#. done
+#. _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. > _warning "This poses a security risk."
+#. _warning "You can deactivate all swap partitions using the command:"
+#. _warning " swapoff -a"
+#. _warning "But if you want to proceed like this, use the -f (force) flag."
+#. fi
+#: tomb:320
+msgid "This poses a security risk."
+msgstr ""
-#: warning
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. done
+#. _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#. > _warning "You can deactivate all swap partitions using the command:"
+#. _warning " swapoff -a"
+#. _warning "But if you want to proceed like this, use the -f (force) flag."
+#. fi
+#. return $r
+#: tomb:321
msgid "You can deactivate all swap partitions using the command:"
-msgstr "Puedes desactivar todas las particiones swap usando el siguiente comando:"
-
-#: warning
+msgstr ""
+"Puedes desactivar todas las particiones swap usando el siguiente comando:"
+
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#. _warning "You can deactivate all swap partitions using the command:"
+#. > _warning " swapoff -a"
+#. _warning "But if you want to proceed like this, use the -f (force) flag."
+#. fi
+#. return $r
+#.
+#: tomb:322
msgid " swapoff -a"
msgstr " swapoff -a"
-#: warning
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#. _warning "You can deactivate all swap partitions using the command:"
+#. _warning " swapoff -a"
+#. > _warning "But if you want to proceed like this, use the -f (force) flag."
+#. fi
+#. return $r
+#.
+#. }
+#: tomb:323
msgid "But if you want to proceed like this, use the -f (force) flag."
msgstr "Pero si deseas continuar tal cual, usa el flag -f (force)."
-#: failure
+#. Fold: Safety functions
+#. Function: _check_swap
+#.
+#. Code sample:
+#. _ensure_safe_swap
+#. case $? in
+#. 0|2) # No, or encrypted swap
+#. return 0
+#. ;;
+#. *) # Unencrypted swap
+#. > _failure "Operation aborted."
+#. ;;
+#. esac
+#. fi
+#. }
+#: tomb:342
+msgid "Operation aborted."
+msgstr "Operación abortada."
+
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#. SETTITLE $title
+#. SETDESC $description
+#. SETPROMPT Password:
+#. GETPIN
+#. EOF`
+#. else
+#. > _failure "Cannot find pinentry-curses and no DISPLAY detected."
+#. fi
+#.
+#. else # a DISPLAY is found to be active
+#.
+#: tomb:379
+msgid "Cannot find pinentry-curses and no DISPLAY detected."
+msgstr "No se puede encontrar pinentry-curses, y no se ha detectado DISPLAY."
+
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#. EOF`
+#.
+#. else
+#.
+#. if _is_found "pinentry-curses"; then
+#.
+#. > _warning "Detected DISPLAY, but only pinentry-curses is found."
+#. output=`cat <<EOF | pinentry-curses
+#. OPTION ttyname=$TTY
+#. OPTION lc-ctype=$LANG
+#. SETTITLE $title
+#: tomb:432
+msgid "Detected DISPLAY, but only pinentry-curses is found."
+msgstr "DISPLAY detectado, pero sólo se ha encontrado pinentry-curses."
+
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#. SETTITLE $title
+#. SETDESC $description
+#. SETPROMPT Password:
+#. GETPIN
+#. EOF`
+#. else
+#. > _failure "Cannot find any pinentry: impossible to ask for password."
+#. fi
+#.
+#. fi
+#.
+#: tomb:442
+msgid "Cannot find any pinentry: impossible to ask for password."
+msgstr ""
+"No se ha encontrado ningún pinentry: es imposible pedir una contraseña."
+
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#.
+#. fi # end of DISPLAY block
+#.
+#. # parse the pinentry output
+#. for i in ${(f)output}; do
+#. [[ "$i" =~ "^ERR.*" ]] && {
+#. > _warning "Pinentry error: ::1 error::" ${i[(w)3]}
+#. print "canceled"
+#. return 1 }
+#.
+#. # here the password is found
+#: tomb:452
+msgid "Pinentry error: ::1 error::"
+msgstr "Error de pinentry: ::1 error::"
+
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#.
+#. # here the password is found
+#. [[ "$i" =~ "^D .*" ]] && password="${i##D }"
+#. done
+#.
+#. [[ "$password" = "" ]] && {
+#. > _warning "Empty password"
+#. print "empty"
+#. return 1 }
+#.
+#. print "$password"
+#: tomb:461
+msgid "Empty password"
+msgstr "Contraseña vacia"
+
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. # Check if a filename is a valid tomb
+#. is_valid_tomb() {
+#. _verbose "is_valid_tomb ::1 tomb file::" $1
+#.
+#. # First argument must be the path to a tomb
+#. [[ -z "$1" ]] && {
+#. > _failure "Tomb file is missing from arguments." }
+#.
+#. # Tomb file must be a readable, writable, not-empty regular file.
+#. [[ ! -r "$1" ]] && {
+#. _failure "Tomb file not found: ::1 tomb file::" $1 }
+#: tomb:477
msgid "Tomb file is missing from arguments."
msgstr "La tumba falta en los argumentos."
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. # First argument must be the path to a tomb
+#. [[ -z "$1" ]] && {
+#. _failure "Tomb file is missing from arguments." }
+#.
+#. # Tomb file must be a readable, writable, not-empty regular file.
+#. [[ ! -r "$1" ]] && {
+#. > _failure "Tomb file not found: ::1 tomb file::" $1 }
+#. [[ ! -f "$1" ]] && {
+#. _failure "Tomb file is not a regular file: ::1 tomb file::" $1 }
+#. [[ ! -s "$1" ]] && {
+#. _failure "Tomb file is empty (zero length): ::1 tomb file::" $1 }
+#: tomb:481
msgid "Tomb file not found: ::1 tomb file::"
msgstr "No se ha encontrado la tumba: ::1 tumba::"
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. _failure "Tomb file is missing from arguments." }
+#.
+#. # Tomb file must be a readable, writable, not-empty regular file.
+#. [[ ! -r "$1" ]] && {
+#. _failure "Tomb file not found: ::1 tomb file::" $1 }
+#. [[ ! -f "$1" ]] && {
+#. > _failure "Tomb file is not a regular file: ::1 tomb file::" $1 }
+#. [[ ! -s "$1" ]] && {
+#. _failure "Tomb file is empty (zero length): ::1 tomb file::" $1 }
+#. [[ ! -w "$1" ]] && {
+#. _failure "Tomb file is not writable: ::1 tomb file::" $1 }
+#: tomb:483
msgid "Tomb file is not a regular file: ::1 tomb file::"
msgstr "La tumba no es un fichero regular: ::1 tumba::"
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. # Tomb file must be a readable, writable, not-empty regular file.
+#. [[ ! -r "$1" ]] && {
+#. _failure "Tomb file not found: ::1 tomb file::" $1 }
+#. [[ ! -f "$1" ]] && {
+#. _failure "Tomb file is not a regular file: ::1 tomb file::" $1 }
+#. [[ ! -s "$1" ]] && {
+#. > _failure "Tomb file is empty (zero length): ::1 tomb file::" $1 }
+#. [[ ! -w "$1" ]] && {
+#. _failure "Tomb file is not writable: ::1 tomb file::" $1 }
+#.
+#. # TODO: split the rest of that function out.
+#: tomb:485
msgid "Tomb file is empty (zero length): ::1 tomb file::"
msgstr "La tumba está vacía (longitud cero): ::1 tumba::"
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. _failure "Tomb file not found: ::1 tomb file::" $1 }
+#. [[ ! -f "$1" ]] && {
+#. _failure "Tomb file is not a regular file: ::1 tomb file::" $1 }
+#. [[ ! -s "$1" ]] && {
+#. _failure "Tomb file is empty (zero length): ::1 tomb file::" $1 }
+#. [[ ! -w "$1" ]] && {
+#. > _failure "Tomb file is not writable: ::1 tomb file::" $1 }
+#.
+#. # TODO: split the rest of that function out.
+#. # We already have a valid tomb, now we're checking
+#. # whether we can alter it.
+#: tomb:487
msgid "Tomb file is not writable: ::1 tomb file::"
msgstr "No se puede escribir en la tumba: ::1 tumba::"
-#: warning
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. # TODO: split the rest of that function out.
+#. # We already have a valid tomb, now we're checking
+#. # whether we can alter it.
+#.
+#. # Tomb file may be a LUKS FS (or we are creating it)
+#. [[ "`file $1`" =~ "luks encrypted file" ]] || {
+#. > _warning "File is not yet a tomb: ::1 tomb file::" $1 }
+#.
+#. _plot $1 # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. # Tomb cannot be already mounted (or we cannot alter it)
+#: tomb:495
msgid "File is not yet a tomb: ::1 tomb file::"
msgstr "El fichero no es una tumba todavía: ::1 tumba::"
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. _warning "File is not yet a tomb: ::1 tomb file::" $1 }
+#.
+#. _plot $1 # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. # Tomb cannot be already mounted (or we cannot alter it)
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]$" ]] && {
+#. > _failure "Tomb is currently in use: ::1 tomb name::" $TOMBNAME
+#. }
+#.
+#. _message "Valid tomb file found: ::1 tomb path::" $TOMBPATH
+#.
+#: tomb:501
msgid "Tomb is currently in use: ::1 tomb name::"
msgstr "La tumba ya está en uso: ::1 tumba::"
-#: message
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#.
+#. # Tomb cannot be already mounted (or we cannot alter it)
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]$" ]] && {
+#. _failure "Tomb is currently in use: ::1 tomb name::" $TOMBNAME
+#. }
+#.
+#. > _message "Valid tomb file found: ::1 tomb path::" $TOMBPATH
+#.
+#. return 0
+#. }
+#.
+#: tomb:504
msgid "Valid tomb file found: ::1 tomb path::"
msgstr "Se ha encontrado una tumba válida en ::1 ruta::"
-#: warning
+#. Fold: Safety functions
+#. Function: lo_mount
+#.
+#. Code sample:
+#. lo_mount() {
+#. tpath="$1"
+#.
+#. # check if we have support for loop mounting
+#. _nstloop=`sudo losetup -f`
+#. [[ $? = 0 ]] || {
+#. > _warning "Loop mount of volumes is not possible on this machine, this error"
+#. _warning "often occurs on VPS and kernels that don't provide the loop module."
+#. _warning "It is impossible to use Tomb on this machine at this conditions."
+#. _failure "Operation aborted."
+#. }
+#: tomb:516
msgid "Loop mount of volumes is not possible on this machine, this error"
-msgstr "No hay soporte para el montaje en loop de volúmenes en esta máquina, este error"
+msgstr ""
+"No hay soporte para el montaje en loop de volúmenes en esta máquina, este "
+"error"
+
+#. Fold: Safety functions
+#. Function: lo_mount
+#.
+#. Code sample:
+#. tpath="$1"
+#.
+#. # check if we have support for loop mounting
+#. _nstloop=`sudo losetup -f`
+#. [[ $? = 0 ]] || {
+#. _warning "Loop mount of volumes is not possible on this machine, this error"
+#. > _warning "often occurs on VPS and kernels that don't provide the loop module."
+#. _warning "It is impossible to use Tomb on this machine at this conditions."
+#. _failure "Operation aborted."
+#. }
+#.
+#: tomb:517
+msgid "often occurs on VPS and kernels that don't provide the loop module."
+msgstr ""
+"ocurre frecuentemente en VPS y kernels que no proveen el módulo 'loop'."
+
+#. Fold: Safety functions
+#. Function: lo_mount
+#.
+#. Code sample:
+#.
+#. # check if we have support for loop mounting
+#. _nstloop=`sudo losetup -f`
+#. [[ $? = 0 ]] || {
+#. _warning "Loop mount of volumes is not possible on this machine, this error"
+#. _warning "often occurs on VPS and kernels that don't provide the loop module."
+#. > _warning "It is impossible to use Tomb on this machine at this conditions."
+#. _failure "Operation aborted."
+#. }
+#.
+#. sudo losetup -f "$tpath" # allocates the next loopback for our file
+#: tomb:518
+msgid "It is impossible to use Tomb on this machine at this conditions."
+msgstr "Es imposible usar Tomb en esta máquina en estas condiciones."
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#.
+#. # }}}
+#.
+#. # {{{ Commandline interaction
+#.
+#. usage() {
+#. > _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#: tomb:558
msgid "Syntax: tomb [options] command [arguments]"
msgstr "Sintaxis: tomb [opciones] comando [argumentos]"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#.
+#. # {{{ Commandline interaction
+#.
+#. usage() {
+#. _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. > _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#: tomb:560
msgid "Commands:"
msgstr "Comandos:"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#.
+#. usage() {
+#. _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. > _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#: tomb:562
msgid " // Creation:"
msgstr "// Creación:"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. usage() {
+#. _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#. > _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#: tomb:563
msgid " dig create a new empty TOMB file of size -s in MB"
msgstr " dig crear una nueva TUMBA vacía de tamaño -s en MB"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. > _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#: tomb:564
msgid " forge create a new KEY file and set its password"
msgstr " forge crear una nueva LLAVE y especificar su contraseña"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. > _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#: tomb:565
msgid " lock installs a lock on a TOMB to use it with KEY"
msgstr " lock instala un candado en una TUMBA para usarlo con la LLAVE"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. > _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#: tomb:567
msgid " // Operations on tombs:"
msgstr "// Operaciones en tumbas:"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. > _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#: tomb:568
msgid " open open an existing TOMB"
msgstr " open abrir una TUMBA existente"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. > _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#: tomb:569
msgid " index update the search indexes of tombs"
msgstr " index actualiza los índices de búsqueda de las tumbas"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. > _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#: tomb:570
msgid " search looks for filenames matching text patterns"
msgstr " search busca nombres de fichero que coincidan con patrones de texto"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. > _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#: tomb:571
msgid " list list of open TOMBs and information on them"
msgstr " list lista de TUMBAs abiertas e información acerca de ellas"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. > _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#: tomb:572
msgid " close close a specific TOMB (or 'all')"
msgstr " close cerrar una TUMBA específica o todas ('all')"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. > _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#: tomb:573
msgid " slam slam a TOMB killing all programs using it"
-msgstr " slam cerrar una TUMBA de un portazo, matando todos los programas que la usan"
-
-#: print
+msgstr ""
+" slam cerrar una TUMBA de un portazo, matando todos los programas que la "
+"usan"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. > _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#. _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#: tomb:575
msgid " resize resize a TOMB to a new size -s (can only grow)"
-msgstr " resize cambia el tamaño de una TUMBA al tamaño -s (sólo puede aumentar)"
-
-#: print
+msgstr ""
+" resize cambia el tamaño de una TUMBA al tamaño -s (sólo puede aumentar)"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#. > _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#. _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#: tomb:578
msgid " // Operations on keys:"
msgstr "// Operaciones en llaves:"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#. _print " // Operations on keys:"
+#. > _print " passwd change the password of a KEY (needs old pass)"
+#. _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#. _print " // Backup on paper:"
+#: tomb:579
+msgid " passwd change the password of a KEY (needs old pass)"
+msgstr ""
+" passwd cambia la contraseña de la LLAVE (necesita la contraseña vieja)"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#. _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#. > _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#. _print " // Backup on paper:"
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#: tomb:580
+msgid " setkey change the KEY locking a TOMB (needs old key and pass)"
+msgstr ""
+" setkey cambia la LLAVE que cierra la TUMBA (necesita la contraseña y llave "
+"viejas)"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#. _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#. > _print " // Backup on paper:"
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#: tomb:583
+msgid " // Backup on paper:"
+msgstr " // Copia de seguridad en papel:"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#. _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#. _print " // Backup on paper:"
+#. > _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#. _print " // Steganography:"
+#: tomb:584
msgid " engrave makes a QR code of a KEY to be saved on paper"
msgstr " engrave crea un código QR de una LLAVE para guardarla en papel"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. [[ $QRENCODE == 1 ]] && {
+#. _print " // Backup on paper:"
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#. > _print " // Steganography:"
+#. _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#: tomb:588
+msgid " // Steganography:"
+msgstr " // Esteganografía:"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " // Backup on paper:"
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#. _print " // Steganography:"
+#. > _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. _print "Options:"
+#: tomb:589
+msgid " bury hide a KEY inside a JPEG image (for use with -k)"
+msgstr ""
+" bury esconde la LLAVE dentro de una imagen JPEG (para usarla con -k)"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#. _print " // Steganography:"
+#. _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. > _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#: tomb:590
+msgid " exhume extract a KEY from a JPEG image (prints to stdout)"
+msgstr " exhume extraer una LLAVE de una imagen JPEG (escribe en stdout)"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. [[ $STEGHIDE == 1 ]] && {
+#. _print " // Steganography:"
+#. _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. > _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#: tomb:593
msgid "Options:"
msgstr "Opciones:"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#. > _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#: tomb:595
msgid " -s size of the tomb file when creating/resizing one (in MB)"
msgstr " -s tamaño de la tumba al crearla o cambiar su tamaño (en MB)"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. > _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#: tomb:596
msgid " -k path to the key to be used ('-k -' to read from stdin)"
msgstr " -k ruta a la llave a utilizar ('-k -' para leerla de stdin)"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. }
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. > _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#: tomb:597
msgid " -n don't process the hooks found in tomb"
msgstr " -n no procesar los hooks encontrados en la tumba"
-#: print
-msgid " -o mount options used to open (default: rw,noatime,nodev)"
-msgstr " -o opciones de montaje usadas al abrir (por defecto: rw,noatime,nodev)"
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. > _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#: tomb:598
+msgid " -o options passed to local command, e.g.:"
+msgstr ""
-#: print
-msgid " -f force operation (i.e. even if swap is active)"
-msgstr " -f forzar operación (incluso si la memoria de intercambio está activa)"
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. > _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#: tomb:599
+msgid " - mount options used to open (default: rw,noatime,nodev)"
+msgstr ""
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. > _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#: tomb:600
+msgid " - an alternate cipher to forge and lock"
+msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. > _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#: tomb:601
+msgid " -f force operation (i.e. even if swap is active)"
+msgstr ""
+" -f forzar operación (incluso si la memoria de intercambio está activa)"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. > _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#. _print "\000"
+#. _print " -h print this help"
+#: tomb:603
msgid " --kdf generate passwords armored against dictionary attacks"
msgstr " --kdf generar contraseñas blindadas contra ataques de diccionario"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#. _print "\000"
+#. > _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#: tomb:607
msgid " -h print this help"
msgstr " -h imprimir este mensaje de ayuda"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#. _print "\000"
+#. _print " -h print this help"
+#. > _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#. _print "For more informations on Tomb read the manual: man tomb"
+#: tomb:608
msgid " -v print version, license and list of available ciphers"
msgstr " -v imprimir versión, licencia y lista de cifrados disponibles"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#. _print "\000"
+#. _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. > _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#. _print "For more informations on Tomb read the manual: man tomb"
+#. _print "Please report bugs on <http://github.com/dyne/tomb/issues>."
+#: tomb:609
msgid " -q run quietly without printing informations"
msgstr " -q correr silenciosamente sin imprimir información"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. }
+#.
+#. _print "\000"
+#. _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. > _print " -D print debugging information at runtime"
+#. _print "\000"
+#. _print "For more informations on Tomb read the manual: man tomb"
+#. _print "Please report bugs on <http://github.com/dyne/tomb/issues>."
+#. }
+#: tomb:610
msgid " -D print debugging information at runtime"
msgstr " -D imprimir información de debugging al correr"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#. > _print "For more informations on Tomb read the manual: man tomb"
+#. _print "Please report bugs on <http://github.com/dyne/tomb/issues>."
+#. }
+#.
+#.
+#: tomb:612
msgid "For more informations on Tomb read the manual: man tomb"
msgstr "Para más información acerca de Tomb lee el manual: man tomb"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#. _print "For more informations on Tomb read the manual: man tomb"
+#. > _print "Please report bugs on <http://github.com/dyne/tomb/issues>."
+#. }
+#.
+#.
+#. # Check whether a commandline option is set.
+#: tomb:613
msgid "Please report bugs on <http://github.com/dyne/tomb/issues>."
msgstr "Por favor, reporta los bugs en <http://github.com/dyne/tomb/issues>."
-#: failure
+#. Fold: Commandline interaction
+#. Function: _ensure_dependencies
+#.
+#. Code sample:
+#. # missing, bail out.
+#. _ensure_dependencies() {
+#.
+#. # Check for required programs
+#. for req in cryptsetup pinentry sudo gpg mkfs.ext4 e2fsck; do
+#. command -v $req 1>/dev/null 2>/dev/null || {
+#. > _failure "Missing required dependency ::1 command::. Please install it." $req }
+#. done
+#.
+#. # Ensure system binaries are available in the PATH
+#. path+=(/sbin /usr/sbin) # zsh magic
+#: tomb:748
msgid "Missing required dependency ::1 command::. Please install it."
msgstr "Falta la dependencia ::1 comando::. Por favor, instálala."
-#: warning
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#.
+#. _verbose "is_valid_key"
+#.
+#. [[ -z $key ]] && key=$TOMBKEY
+#. [[ "$key" = "cleartext" ]] && {
+#. { option_is_set --unsafe } || {
+#. > _warning "cleartext key from stdin selected: this is unsafe."
+#. exitv=127 _failure "please use --unsafe if you really want to do this."
+#. }
+#. _warning "received key in cleartext from stdin (unsafe mode)"
+#. return 0 }
+#: tomb:785
+msgid "cleartext key from stdin selected: this is unsafe."
+msgstr ""
+"se ha seleccionado una clave en texto plano por la entrada estándar: esto es "
+"inseguro."
+
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. _verbose "is_valid_key"
+#.
+#. [[ -z $key ]] && key=$TOMBKEY
+#. [[ "$key" = "cleartext" ]] && {
+#. { option_is_set --unsafe } || {
+#. _warning "cleartext key from stdin selected: this is unsafe."
+#. > exitv=127 _failure "please use --unsafe if you really want to do this."
+#. }
+#. _warning "received key in cleartext from stdin (unsafe mode)"
+#. return 0 }
+#.
+#: tomb:786
+msgid "please use --unsafe if you really want to do this."
+msgstr "por favor, usa --unsafe si estás seguro."
+
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. [[ -z $key ]] && key=$TOMBKEY
+#. [[ "$key" = "cleartext" ]] && {
+#. { option_is_set --unsafe } || {
+#. _warning "cleartext key from stdin selected: this is unsafe."
+#. exitv=127 _failure "please use --unsafe if you really want to do this."
+#. }
+#. > _warning "received key in cleartext from stdin (unsafe mode)"
+#. return 0 }
+#.
+#. [[ -z $key ]] && {
+#. _warning "is_valid_key() called without an argument."
+#: tomb:788
+msgid "received key in cleartext from stdin (unsafe mode)"
+msgstr ""
+"se ha recibido una clave en texto plano por la entrada estándar (modo "
+"inseguro)"
+
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. exitv=127 _failure "please use --unsafe if you really want to do this."
+#. }
+#. _warning "received key in cleartext from stdin (unsafe mode)"
+#. return 0 }
+#.
+#. [[ -z $key ]] && {
+#. > _warning "is_valid_key() called without an argument."
+#. return 1
+#. }
+#.
+#. # If the key file is an image don't check file header
+#: tomb:792
msgid "is_valid_key() called without an argument."
msgstr "Se ha llamado a is_valid_key() sin argumento."
-#: message
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. }
+#.
+#. # If the key file is an image don't check file header
+#. [[ -r $TOMBKEYFILE ]] #. && [[ $(file $TOMBKEYFILE) =~ "JP.G" ]] #. && {
+#. > _message "Key is an image, it might be valid."
+#. return 0 }
+#.
+#. [[ $key =~ "BEGIN PGP" ]] && {
+#. _message "Key is valid."
+#: tomb:800
msgid "Key is an image, it might be valid."
msgstr "La llave es una imagen, puede que sea válida."
-#: message
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. && [[ $(file $TOMBKEYFILE) =~ "JP.G" ]] #. && {
+#. _message "Key is an image, it might be valid."
+#. return 0 }
+#.
+#. [[ $key =~ "BEGIN PGP" ]] && {
+#. > _message "Key is valid."
+#. return 0 }
+#.
+#. return 1
+#. }
+#: tomb:804
msgid "Key is valid."
msgstr "La llave es válida."
-#: warning
+#. Fold: Key operations
+#. Function: _tomb_key_recover recover_key
+#.
+#. Code sample:
+#. }
+#.
+#. # $1 is a string containing an encrypted key
+#. _tomb_key_recover recover_key() {
+#. local key="${1}" # Unique argument is an encrypted key
+#.
+#. > _warning "Attempting key recovery."
+#.
+#. _head="${key[(f)1]}" # take the first line
+#.
+#. TOMBKEY="" # Reset global variable
+#: tomb:814
msgid "Attempting key recovery."
msgstr "Intentando recuperar la llave."
-#: warning
-msgid "The key seems invalid or its format is not known by this version of Tomb."
-msgstr "La llave parece inválida, o este formato no es reconocido por esta versión de Tomb."
+#. Fold: Key operations
+#. Function: _load_key
+#.
+#. Code sample:
+#. # Set global variables TOMBKEY and TOMBKEYFILE.
+#. _load_key() {
+#. local keyfile="$1" # Unique argument is an optional keyfile
+#.
+#. [[ -z $keyfile ]] && keyfile=$(option_value -k)
+#. [[ -z $keyfile ]] && {
+#. > _failure "This operation requires a key file to be specified using the -k option." }
+#.
+#. if [[ $keyfile == "-" ]]; then
+#. _verbose "load_key reading from stdin."
+#. _message "Waiting for the key to be piped from stdin... "
+#: tomb:838
+msgid "This operation requires a key file to be specified using the -k option."
+msgstr "Esta operación requiere que se especifique una llave con la opción -k."
+
+#. Fold: Key operations
+#. Function: _load_key
+#.
+#. Code sample:
+#. [[ -z $keyfile ]] && keyfile=$(option_value -k)
+#. [[ -z $keyfile ]] && {
+#. _failure "This operation requires a key file to be specified using the -k option." }
+#.
+#. if [[ $keyfile == "-" ]]; then
+#. _verbose "load_key reading from stdin."
+#. > _message "Waiting for the key to be piped from stdin... "
+#. TOMBKEYFILE=stdin
+#. TOMBKEY=$(cat)
+#. elif [[ $keyfile == "cleartext" ]]; then
+#. _verbose "load_key reading SECRET from stdin"
+#: tomb:842
+msgid "Waiting for the key to be piped from stdin... "
+msgstr "Esperando a recibir la llave a través de stdin... "
+
+#. Fold: Key operations
+#. Function: _load_key
+#.
+#. Code sample:
+#. _message "Waiting for the key to be piped from stdin... "
+#. TOMBKEYFILE=cleartext
+#. TOMBKEY=cleartext
+#. TOMBSECRET=$(cat)
+#. else
+#. _verbose "load_key argument: ::1 key file::" $keyfile
+#. > [[ -r $keyfile ]] || _failure "Key not found, specify one using -k."
+#. TOMBKEYFILE=$keyfile
+#. TOMBKEY="${mapfile[$TOMBKEYFILE]}"
+#. fi
+#.
+#: tomb:853
+msgid "Key not found, specify one using -k."
+msgstr "Llave no encontrada, especifica una usando -k."
-#: failure
+#. Fold: Key operations
+#. Function: _load_key
+#.
+#. Code sample:
+#. TOMBKEY="${mapfile[$TOMBKEYFILE]}"
+#. fi
+#.
+#. _verbose "load_key: ::1 key::" $TOMBKEYFILE
+#.
+#. is_valid_key $TOMBKEY || {
+#. > _warning "The key seems invalid or its format is not known by this version of Tomb."
+#. _tomb_key_recover $TOMBKEY
+#. }
+#.
+#. # Declared TOMBKEYFILE (path)
+#: tomb:861
+msgid ""
+"The key seems invalid or its format is not known by this version of Tomb."
+msgstr ""
+"La llave parece inválida, o este formato no es reconocido por esta versión "
+"de Tomb."
+
+#. Fold: Key operations
+#. Function: get_lukskey
+#.
+#. Code sample:
+#. _verbose "KDF salt: $kdf_salt"
+#. _verbose "KDF ic: $kdf_ic"
+#. _verbose "KDF len: $kdf_len"
+#. _password=$(tomb-kdb-pbkdf2 $kdf_salt $kdf_ic $kdf_len 2>/dev/null <<<$_password)
+#. ;;
+#. *)
+#. > _failure "No suitable program for KDF ::1 program::." $pbkdf_hash
+#. unset _password
+#. return 1
+#. ;;
+#. esac
+#: tomb:936
msgid "No suitable program for KDF ::1 program::."
msgstr "No hay un programa apropiado para usar KDF: ::1 programa::"
-#: failure
+#. Fold: Key operations
+#. Function: ask_key_password
+#.
+#. Code sample:
+#.
+#. # This function asks the user for the password to use the key it tests
+#. # it against the return code of gpg on success returns 0 and saves
+#. # the password in the global variable $TOMBPASSWORD
+#. ask_key_password() {
+#. [[ -z "$TOMBKEYFILE" ]] && {
+#. > _failure "Internal error: ask_key_password() called before _load_key()." }
+#.
+#. [[ "$TOMBKEYFILE" = "cleartext" ]] && {
+#. _verbose "no password needed, using secret bytes from stdin"
+#. return 0 }
+#: tomb:962
msgid "Internal error: ask_key_password() called before _load_key()."
-msgstr "Error interno: se ha llamado a ask_key_password() antes de _load_key()."
-
-#: message
+msgstr ""
+"Error interno: se ha llamado a ask_key_password() antes de _load_key()."
+
+#. Fold: Key operations
+#. Function: ask_key_password
+#.
+#. Code sample:
+#. _failure "Internal error: ask_key_password() called before _load_key()." }
+#.
+#. [[ "$TOMBKEYFILE" = "cleartext" ]] && {
+#. _verbose "no password needed, using secret bytes from stdin"
+#. return 0 }
+#.
+#. > _message "A password is required to use key ::1 key::" $TOMBKEYFILE
+#. passok=0
+#. tombpass=""
+#. if [[ "$1" = "" ]]; then
+#.
+#: tomb:968
msgid "A password is required to use key ::1 key::"
msgstr "Es necesaria una contraseña para usar la llave ::1 llave::"
-#: message
+#. Fold: Key operations
+#. Function: ask_key_password
+#.
+#. Code sample:
+#. if [[ $c == 1 ]]; then
+#. tombpass=$(ask_password "Insert password to: $TOMBKEYFILE")
+#. else
+#. tombpass=$(ask_password "Insert password to: $TOMBKEYFILE (attempt $c)")
+#. fi
+#. [[ $? = 0 ]] || {
+#. > _warning "User aborted password dialog."
+#. return 1
+#. }
+#.
+#. get_lukskey "$tombpass"
+#: tomb:980
+msgid "User aborted password dialog."
+msgstr "El usuario ha abortado el diálogo de contraseña."
+
+#. Fold: Key operations
+#. Function: ask_key_password
+#.
+#. Code sample:
+#. return 1
+#. }
+#.
+#. get_lukskey "$tombpass"
+#.
+#. [[ $? = 0 ]] && {
+#. > passok=1; _message "Password OK."
+#. break;
+#. }
+#. done
+#.
+#: tomb:987
+msgid "Password OK."
+msgstr "Contraseña OK."
+
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#. change_passwd() {
+#. local tmpnewkey lukskey c tombpass tombpasstmp
+#.
+#. _check_swap # Ensure swap is secure, if any
+#. _load_key # Try loading key from option -k and set TOMBKEYFILE
+#.
+#. > _message "Commanded to change password for tomb key ::1 key::" $TOMBKEYFILE
+#.
+#. _tmp_create
+#. tmpnewkey=$TOMBTMP
+#.
+#: tomb:1025
msgid "Commanded to change password for tomb key ::1 key::"
msgstr "Se ha ordenado cambiar la contraseña de la llave ::1 llave::"
-#: failure
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#. local tomboldpwd="`option_value --tomb-old-pwd`"
+#. _verbose "tomb-old-pwd = ::1 old pass::" $tomboldpwd
+#. ask_key_password "$tomboldpwd"
+#. else
+#. ask_key_password
+#. fi
+#. > [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. _success "Changing password for ::1 key file::" $TOMBKEYFILE
+#.
+#. # Here $TOMBSECRET contains the key material in clear
+#: tomb:1037
msgid "No valid password supplied."
msgstr "Contraseña incorrecta."
-#: message
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#. ask_key_password "$tomboldpwd"
+#. else
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. > _success "Changing password for ::1 key file::" $TOMBKEYFILE
+#.
+#. # Here $TOMBSECRET contains the key material in clear
+#.
+#. { option_is_set --tomb-pwd } && {
+#: tomb:1039
+msgid "Changing password for ::1 key file::"
+msgstr "Cambiando la contraseña para ::1 fichero::"
+
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#. gen_key "$tombpwd" >> "$tmpnewkey"
+#. } || {
+#. gen_key >> "$tmpnewkey"
+#. }
+#.
+#. { is_valid_key "${mapfile[$tmpnewkey]}" } || {
+#. > _failure "Error: the newly generated keyfile does not seem valid." }
+#.
+#. # Copy the new key as the original keyfile name
+#. cp -f "${tmpnewkey}" $TOMBKEYFILE
+#. _success "Your passphrase was successfully updated."
+#: tomb:1052
+msgid "Error: the newly generated keyfile does not seem valid."
+msgstr "Error: la llave recién generada no parece válida."
+
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#.
+#. { is_valid_key "${mapfile[$tmpnewkey]}" } || {
+#. _failure "Error: the newly generated keyfile does not seem valid." }
+#.
+#. # Copy the new key as the original keyfile name
+#. cp -f "${tmpnewkey}" $TOMBKEYFILE
+#. > _success "Your passphrase was successfully updated."
+#.
+#. return 0
+#. }
+#.
+#: tomb:1056
+msgid "Your passphrase was successfully updated."
+msgstr "Tu contraseña ha sido actualizada con éxito."
+
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#.
+#. if [ "$1" = "" ]; then
+#. while true; do
+#. # 3 tries to write two times a matching password
+#. tombpass=`ask_password "Type the new password to secure your key"`
+#. if [[ $? != 0 ]]; then
+#. > _failure "User aborted."
+#. fi
+#. if [ -z $tombpass ]; then
+#. _failure "You set empty password, which is not possible."
+#. fi
+#: tomb:1078
+msgid "User aborted."
+msgstr "El usuario ha abortado."
+
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. # 3 tries to write two times a matching password
+#. tombpass=`ask_password "Type the new password to secure your key"`
+#. if [[ $? != 0 ]]; then
+#. _failure "User aborted."
+#. fi
+#. if [ -z $tombpass ]; then
+#. > _failure "You set empty password, which is not possible."
+#. fi
+#. tombpasstmp=$tombpass
+#. tombpass=`ask_password "Type the new password to secure your key (again)"`
+#. if [[ $? != 0 ]]; then
+#: tomb:1081
+msgid "You set empty password, which is not possible."
+msgstr "Has elegido una contraseña vacía, lo que no es posible."
+
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. # see: https://github.com/dyne/Tomb/issues/82
+#. itertime="`option_value --kdf`"
+#. # removing support of floating points because they can't be type checked well
+#. if [[ "$itertime" != <-> ]]; then
+#. unset tombpass
+#. unset tombpasstmp
+#. > _failure "Wrong argument for --kdf: must be an integer number (iteration seconds)."
+#. fi
+#. # --kdf takes one parameter: iter time (on present machine) in seconds
+#. local -i microseconds
+#. microseconds=$(( itertime * 10000 ))
+#: tomb:1109
+msgid ""
+"Wrong argument for --kdf: must be an integer number (iteration seconds)."
+msgstr ""
+"Argumento incorrecto para --kdf: debe ser un número entero (segundos por "
+"iteración)."
+
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. unset tombpasstmp
+#. _failure "Wrong argument for --kdf: must be an integer number (iteration seconds)."
+#. fi
+#. # --kdf takes one parameter: iter time (on present machine) in seconds
+#. local -i microseconds
+#. microseconds=$(( itertime * 10000 ))
+#. > _success "Using KDF, iterations: ::1 microseconds::" $microseconds
+#. _message "generating salt"
+#. pbkdf2_salt=`tomb-kdb-pbkdf2-gensalt`
+#. _message "calculating iterations"
+#. pbkdf2_iter=`tomb-kdb-pbkdf2-getiter $microseconds`
+#: tomb:1114
+msgid "Using KDF, iterations: ::1 microseconds::"
+msgstr "Usando KDF: ::1 microsegundos:: iteraciones"
+
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. _failure "Wrong argument for --kdf: must be an integer number (iteration seconds)."
+#. fi
+#. # --kdf takes one parameter: iter time (on present machine) in seconds
+#. local -i microseconds
+#. microseconds=$(( itertime * 10000 ))
+#. _success "Using KDF, iterations: ::1 microseconds::" $microseconds
+#. > _message "generating salt"
+#. pbkdf2_salt=`tomb-kdb-pbkdf2-gensalt`
+#. _message "calculating iterations"
+#. pbkdf2_iter=`tomb-kdb-pbkdf2-getiter $microseconds`
+#. _message "encoding the password"
+#: tomb:1115
msgid "generating salt"
msgstr "generando salt"
-#: message
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. # --kdf takes one parameter: iter time (on present machine) in seconds
+#. local -i microseconds
+#. microseconds=$(( itertime * 10000 ))
+#. _success "Using KDF, iterations: ::1 microseconds::" $microseconds
+#. _message "generating salt"
+#. pbkdf2_salt=`tomb-kdb-pbkdf2-gensalt`
+#. > _message "calculating iterations"
+#. pbkdf2_iter=`tomb-kdb-pbkdf2-getiter $microseconds`
+#. _message "encoding the password"
+#. # We use a length of 64bytes = 512bits (more than needed!?)
+#. tombpass=`tomb-kdb-pbkdf2 $pbkdf2_salt $pbkdf2_iter 64 <<<"${tombpass}"`
+#: tomb:1117
msgid "calculating iterations"
msgstr "calculando iteraciones"
-#: message
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. microseconds=$(( itertime * 10000 ))
+#. _success "Using KDF, iterations: ::1 microseconds::" $microseconds
+#. _message "generating salt"
+#. pbkdf2_salt=`tomb-kdb-pbkdf2-gensalt`
+#. _message "calculating iterations"
+#. pbkdf2_iter=`tomb-kdb-pbkdf2-getiter $microseconds`
+#. > _message "encoding the password"
+#. # We use a length of 64bytes = 512bits (more than needed!?)
+#. tombpass=`tomb-kdb-pbkdf2 $pbkdf2_salt $pbkdf2_iter 64 <<<"${tombpass}"`
+#.
+#. header="_KDF_pbkdf2sha1_${pbkdf2_salt}_${pbkdf2_iter}_64\n"
+#: tomb:1119
msgid "encoding the password"
msgstr "codificando la contraseña"
-#: warning
+#. Fold: Key operations
+#. Function: list_gnupg_ciphers
+#.
+#. Code sample:
+#. unset tombpasstmp
+#. }
+#.
+#. # prints an array of ciphers available in gnupg (to encrypt keys)
+#. list_gnupg_ciphers() {
+#. # prints an error if GnuPG is not found
+#. > which gpg 2>/dev/null || _failure "gpg (GnuPG) is not found, Tomb cannot function without it."
+#.
+#. ciphers=(`gpg --version | awk '
+#. BEGIN { ciphers=0 }
+#. /^Cipher:/ { gsub(/,/,""); sub(/^Cipher:/,""); print; ciphers=1; next }
+#: tomb:1150
+msgid "gpg (GnuPG) is not found, Tomb cannot function without it."
+msgstr "No se encuentra gpg (GnuPG), Tomb no puede funcionar sin ello."
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#.
+#. _load_key # Try loading key from option -k and set TOMBKEY
+#.
+#. imagefile=$PARAM
+#.
+#. [[ "`file $imagefile`" =~ "JPEG" ]] || {
+#. > _warning "Encode failed: ::1 image file:: is not a jpeg image." $imagefile
+#. return 1
+#. }
+#.
+#. _success "Encoding key ::1 tomb key:: inside image ::2 image file::" $TOMBKEY $imagefile
+#: tomb:1171
msgid "Encode failed: ::1 image file:: is not a jpeg image."
msgstr "La codificación falló: ::1 fichero:: no es una imagen jpeg."
-#: failure
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#.
+#. [[ "`file $imagefile`" =~ "JPEG" ]] || {
+#. _warning "Encode failed: ::1 image file:: is not a jpeg image." $imagefile
+#. return 1
+#. }
+#.
+#. > _success "Encoding key ::1 tomb key:: inside image ::2 image file::" $TOMBKEY $imagefile
+#. _message "Please confirm the key password for the encoding"
+#. # We ask the password and test if it is the same encoding the
+#. # base key, to insure that the same password is used for the
+#. # encryption and the steganography. This is a standard enforced
+#: tomb:1175
+msgid "Encoding key ::1 tomb key:: inside image ::2 image file::"
+msgstr "Codificando la llave ::1 llave:: en la imagen ::2 imagen::."
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. [[ "`file $imagefile`" =~ "JPEG" ]] || {
+#. _warning "Encode failed: ::1 image file:: is not a jpeg image." $imagefile
+#. return 1
+#. }
+#.
+#. _success "Encoding key ::1 tomb key:: inside image ::2 image file::" $TOMBKEY $imagefile
+#. > _message "Please confirm the key password for the encoding"
+#. # We ask the password and test if it is the same encoding the
+#. # base key, to insure that the same password is used for the
+#. # encryption and the steganography. This is a standard enforced
+#. # by Tomb, but its not strictly necessary (and having different
+#: tomb:1176
+msgid "Please confirm the key password for the encoding"
+msgstr "Por favor, confirma la contraseña de la clave para la codificación"
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tombpwd
+#. ask_key_password "$tombpwd"
+#. } || {
+#. ask_key_password
+#. }
+#. [[ $? != 0 ]] && {
+#. > _warning "Wrong password supplied."
+#. _failure "You shall not bury a key whose password is unknown to you." }
+#.
+#. # We omit armor strings since having them as constants can give
+#. # ground to effective attacks on steganography
+#: tomb:1192
+msgid "Wrong password supplied."
+msgstr "Contraseña incorrecta."
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. ask_key_password "$tombpwd"
+#. } || {
+#. ask_key_password
+#. }
+#. [[ $? != 0 ]] && {
+#. _warning "Wrong password supplied."
+#. > _failure "You shall not bury a key whose password is unknown to you." }
+#.
+#. # We omit armor strings since having them as constants can give
+#. # ground to effective attacks on steganography
+#. print - "$TOMBKEY" | awk '
+#: tomb:1193
+msgid "You shall not bury a key whose password is unknown to you."
+msgstr "No deberías enterrar una clave cuya contraseña desconoces."
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. /^-----/ {next}
+#. /^Version/ {next}
+#. {print $0}' #. | steghide embed --embedfile - --coverfile ${imagefile} #. -p $TOMBPASSWORD -z 9 -e serpent cbc
+#. if [ $? != 0 ]; then
+#. > _warning "Encoding error: steghide reports problems."
+#. res=1
+#. else
+#. _success "Tomb key encoded succesfully into image ::1 image file::" $imagefile
+#. res=0
+#: tomb:1204
+msgid "Encoding error: steghide reports problems."
+msgstr "Error en la codficación: steghide reporta problemas."
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. | steghide embed --embedfile - --coverfile ${imagefile} #. -p $TOMBPASSWORD -z 9 -e serpent cbc
+#. if [ $? != 0 ]; then
+#. _warning "Encoding error: steghide reports problems."
+#. res=1
+#. else
+#. > _success "Tomb key encoded succesfully into image ::1 image file::" $imagefile
+#. res=0
+#. fi
+#.
+#. return $res
+#: tomb:1207
+msgid "Tomb key encoded succesfully into image ::1 image file::"
+msgstr "Llave codificada con éxito en la imagen ::1 fichero::."
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#.
+#. # mandatory 1st arg: the image file where key is supposed to be
+#. # optional 2nd arg: the password to use (same as key, internal use)
+#. # optional 3rd arg: the key where to save the result (- for stdout)
+#. exhume_key() {
+#. [[ "$1" = "" ]] && {
+#. > _failure "Exhume failed, no image specified" }
+#.
+#. local imagefile="$1" # The image file where to look for the key
+#. local tombpass="$2" # (Optional) the password to use (internal use)
+#. local destkey="$3" # (Optional) the key file where to save the
+#: tomb:1219
+msgid "Exhume failed, no image specified"
+msgstr "La exhumación ha fallado, no se ha especificado una imagen"
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. local destkey="$3" # (Optional) the key file where to save the
+#. # result (- for stdout)
+#. local r=1 # Return code (default: fail)
+#.
+#. # Ensure the image file is a readable JPEG
+#. [[ ! -r $imagefile ]] && {
+#. > _failure "Exhume failed, image file not found: ::1 image file::" "${imagefile:-none}" }
+#. [[ ! $(file "$imagefile") =~ "JP.G" ]] && {
+#. _failure "Exhume failed: ::1 image file:: is not a jpeg image." $imagefile }
+#.
+#. # When a password is passed as argument then always print out
+#: tomb:1229
msgid "Exhume failed, image file not found: ::1 image file::"
msgstr "La exhumación ha fallado, no se ha encontrado la imagen: ::1 imagen::"
-#: failure
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. local r=1 # Return code (default: fail)
+#.
+#. # Ensure the image file is a readable JPEG
+#. [[ ! -r $imagefile ]] && {
+#. _failure "Exhume failed, image file not found: ::1 image file::" "${imagefile:-none}" }
+#. [[ ! $(file "$imagefile") =~ "JP.G" ]] && {
+#. > _failure "Exhume failed: ::1 image file:: is not a jpeg image." $imagefile }
+#.
+#. # When a password is passed as argument then always print out
+#. # the exhumed key on stdout without further checks (internal use)
+#. [[ -n "$tombpass" ]] && {
+#: tomb:1231
msgid "Exhume failed: ::1 image file:: is not a jpeg image."
msgstr "La exhumación falló: ::1 imagen:: no es una imagen jpeg."
-#: failure
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#.
+#. # When a password is passed as argument then always print out
+#. # the exhumed key on stdout without further checks (internal use)
+#. [[ -n "$tombpass" ]] && {
+#. TOMBKEY=$(steghide extract -sf $imagefile -p $tombpass -xf -)
+#. [[ $? != 0 ]] && {
+#. > _failure "Wrong password or no steganographic key found" }
+#.
+#. recover_key $TOMBKEY
+#.
+#. return 0
+#: tomb:1238
msgid "Wrong password or no steganographic key found"
msgstr "Contraseña incorrecta o no se ha econtrando una clave esteganográfica"
-#: message
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. }
+#.
+#. # Ensure we have a valid destination for the key
+#. [[ -z $destkey ]] && { option_is_set -k } && destkey=$(option_value -k)
+#. [[ -z $destkey ]] && {
+#. destkey="-" # No key was specified: fallback to stdout
+#. > _message "printing exhumed key on stdout" }
+#.
+#. # Bail out if destination exists, unless -f (force) was passed
+#. [[ $destkey != "-" && -s $destkey ]] && {
+#. _warning "File exists: ::1 tomb key::" $destkey
+#: tomb:1249
msgid "printing exhumed key on stdout"
msgstr "mostrando llave exhumada en stdout"
-#: warning
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. [[ -z $destkey ]] && {
+#. destkey="-" # No key was specified: fallback to stdout
+#. _message "printing exhumed key on stdout" }
+#.
+#. # Bail out if destination exists, unless -f (force) was passed
+#. [[ $destkey != "-" && -s $destkey ]] && {
+#. > _warning "File exists: ::1 tomb key::" $destkey
+#. { option_is_set -f } && {
+#. _warning "Use of --force selected: overwriting."
+#. rm -f $destkey
+#. } || {
+#: tomb:1253
msgid "File exists: ::1 tomb key::"
msgstr "El fichero existe: ::1 clave::"
-#: failure
-msgid "Refusing to overwrite file. Operation aborted."
-msgstr "Crear esta tumba sobreescribiría un fichero existente. Operación abortada."
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. _message "printing exhumed key on stdout" }
+#.
+#. # Bail out if destination exists, unless -f (force) was passed
+#. [[ $destkey != "-" && -s $destkey ]] && {
+#. _warning "File exists: ::1 tomb key::" $destkey
+#. { option_is_set -f } && {
+#. > _warning "Use of --force selected: overwriting."
+#. rm -f $destkey
+#. } || {
+#. _warning "Make explicit use of --force to overwrite."
+#. _failure "Refusing to overwrite file. Operation aborted." }
+#: tomb:1255
+msgid "Use of --force selected: overwriting."
+msgstr "Usando --force: sobreescribiendo."
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. [[ $destkey != "-" && -s $destkey ]] && {
+#. _warning "File exists: ::1 tomb key::" $destkey
+#. { option_is_set -f } && {
+#. _warning "Use of --force selected: overwriting."
+#. rm -f $destkey
+#. } || {
+#. > _warning "Make explicit use of --force to overwrite."
+#. _failure "Refusing to overwrite file. Operation aborted." }
+#. }
+#.
+#. _message "Trying to exhume a key out of image ::1 image file::" $imagefile
+#: tomb:1258
+msgid "Make explicit use of --force to overwrite."
+msgstr "Usa --force para sobreescribir."
-#: message
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. _warning "File exists: ::1 tomb key::" $destkey
+#. { option_is_set -f } && {
+#. _warning "Use of --force selected: overwriting."
+#. rm -f $destkey
+#. } || {
+#. _warning "Make explicit use of --force to overwrite."
+#. > _failure "Refusing to overwrite file. Operation aborted." }
+#. }
+#.
+#. _message "Trying to exhume a key out of image ::1 image file::" $imagefile
+#. { option_is_set --tomb-pwd } && {
+#: tomb:1259
+msgid "Refusing to overwrite file. Operation aborted."
+msgstr ""
+"Crear esta tumba sobreescribiría un fichero existente. Operación abortada."
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. rm -f $destkey
+#. } || {
+#. _warning "Make explicit use of --force to overwrite."
+#. _failure "Refusing to overwrite file. Operation aborted." }
+#. }
+#.
+#. > _message "Trying to exhume a key out of image ::1 image file::" $imagefile
+#. { option_is_set --tomb-pwd } && {
+#. tombpass=$(option_value --tomb-pwd)
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tombpass
+#. } || {
+#: tomb:1262
msgid "Trying to exhume a key out of image ::1 image file::"
msgstr "Intentando exhumar una llave de la imagen ::1 fichero::"
-#: warning
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. steghide extract -sf $imagefile -p ${tombpass} -xf $destkey
+#. r=$?
+#.
+#. # Report to the user
+#. [[ "$destkey" = "-" ]] && destkey="stdout"
+#. [[ $r == 0 ]] && {
+#. > _success "Key succesfully exhumed to ::1 key::." $destkey
+#. } || {
+#. _warning "Nothing found in ::1 image file::" $imagefile
+#. }
+#.
+#: tomb:1283
+msgid "Key succesfully exhumed to ::1 key::."
+msgstr "Llave exhumada con éxito en ::1 llave::."
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#.
+#. # Report to the user
+#. [[ "$destkey" = "-" ]] && destkey="stdout"
+#. [[ $r == 0 ]] && {
+#. _success "Key succesfully exhumed to ::1 key::." $destkey
+#. } || {
+#. > _warning "Nothing found in ::1 image file::" $imagefile
+#. }
+#.
+#. return $r
+#. }
+#: tomb:1285
msgid "Nothing found in ::1 image file::"
msgstr "No se ha encontrado nada en ::1 fichero::"
-#: failure
+#. Fold: Key operations
+#. Function: engrave_key
+#.
+#. Code sample:
+#.
+#. _load_key # Try loading key from option -k and set TOMBKEYFILE
+#.
+#. local keyname=$(basename $TOMBKEYFILE)
+#. local pngname="$keyname.qr.png"
+#.
+#. > _success "Rendering a printable QRCode for key: ::1 tomb key file::" $TOMBKEYFILE
+#. # we omit armor strings to save space
+#. awk '/^-----/ {next}; /^Version/ {next}; {print $0}' $TOMBKEYFILE #. | qrencode --size 4 --level H --casesensitive -o $pngname
+#. [[ $? != 0 ]] && {
+#: tomb:1300
+msgid "Rendering a printable QRCode for key: ::1 tomb key file::"
+msgstr "Creando un código QR imprimible para la llave ::1 fichero::."
+
+#. Fold: Key operations
+#. Function: engrave_key
+#.
+#. Code sample:
+#.
+#. _success "Rendering a printable QRCode for key: ::1 tomb key file::" $TOMBKEYFILE
+#. # we omit armor strings to save space
+#. awk '/^-----/ {next}; /^Version/ {next}; {print $0}' $TOMBKEYFILE #. | qrencode --size 4 --level H --casesensitive -o $pngname
+#. [[ $? != 0 ]] && {
+#. > _failure "QREncode reported an error." }
+#.
+#. _success "Operation successful:"
+#. # TODO: only if verbose and/or not silent
+#. ls -lh $pngname
+#: tomb:1305
msgid "QREncode reported an error."
msgstr "QREncode ha reportado un error."
-#: message
+#. Fold: Key operations
+#. Function: engrave_key
+#.
+#. Code sample:
+#. # we omit armor strings to save space
+#. awk '/^-----/ {next}; /^Version/ {next}; {print $0}' $TOMBKEYFILE #. | qrencode --size 4 --level H --casesensitive -o $pngname
+#. [[ $? != 0 ]] && {
+#. _failure "QREncode reported an error." }
+#.
+#. > _success "Operation successful:"
+#. # TODO: only if verbose and/or not silent
+#. ls -lh $pngname
+#. file $pngname
+#. }
+#: tomb:1307
+msgid "Operation successful:"
+msgstr "Operación con éxito:"
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#.
+#. dig_tomb() {
+#. local tombpath="$1" # Path to tomb
+#. # Require the specification of the size of the tomb (-s) in MB
+#. local -i tombsize=$(option_value -s)
+#.
+#. > _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#: tomb:1340
msgid "Commanded to dig tomb ::1 tomb path::"
msgstr "Se ha ordenado cavar la tubma ::1 ruta::"
-#: failure
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. local tombpath="$1" # Path to tomb
+#. # Require the specification of the size of the tomb (-s) in MB
+#. local -i tombsize=$(option_value -s)
+#.
+#. _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. > [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#: tomb:1342
msgid "Missing path to tomb"
msgstr "Falta la ruta de la tumba"
-#: failure
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. # Require the specification of the size of the tomb (-s) in MB
+#. local -i tombsize=$(option_value -s)
+#.
+#. _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. > [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#. _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#: tomb:1343
+msgid "Size argument missing, use -s"
+msgstr "Falta el argumento de tamaño, usa -s"
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. local -i tombsize=$(option_value -s)
+#.
+#. _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. > [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#. _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#: tomb:1344
msgid "Size must be an integer (megabytes)"
msgstr "El tamaño debe ser un número entero (megabytes)"
-#: failure
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#.
+#. _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. > [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#. _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. [[ -e $TOMBPATH ]] && {
+#: tomb:1345
msgid "Tombs can't be smaller than 10 megabytes"
msgstr "Las tumbas no pueden ser menores de 10 megabytes"
-#: message
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#. _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. [[ -e $TOMBPATH ]] && {
+#. > _warning "A tomb exists already. I'm not digging here:"
+#. ls -lh $TOMBPATH
+#. return 1
+#. }
+#.
+#: tomb:1350
+msgid "A tomb exists already. I'm not digging here:"
+msgstr "Ya existe una tumba. No voy a cavar aquí:"
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. [[ -e $TOMBPATH ]] && {
+#. _warning "A tomb exists already. I'm not digging here:"
+#. ls -lh $TOMBPATH
+#. return 1
+#. }
+#.
+#. > _success "Creating a new tomb in ::1 tomb path::" $TOMBPATH
+#.
+#. _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $tombsize
+#.
+#. # Ensure that file permissions are safe even if interrupted
+#: tomb:1355
+msgid "Creating a new tomb in ::1 tomb path::"
+msgstr "Creando una nueva tumba en ::1 tumba::"
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. ls -lh $TOMBPATH
+#. return 1
+#. }
+#.
+#. _success "Creating a new tomb in ::1 tomb path::" $TOMBPATH
+#.
+#. > _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $tombsize
+#.
+#. # Ensure that file permissions are safe even if interrupted
+#. touch $TOMBPATH
+#. [[ $? = 0 ]] || {
+#: tomb:1357
msgid "Generating ::1 tomb file:: of ::2 size::MiB"
msgstr "Generando ::1 tumba:: de ::2 size::MiB"
-#: warning
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#.
+#. _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $tombsize
+#.
+#. # Ensure that file permissions are safe even if interrupted
+#. touch $TOMBPATH
+#. [[ $? = 0 ]] || {
+#. > _warning "Error creating the tomb ::1 tomb path::" $TOMBPATH
+#. _failure "Operation aborted."
+#. }
+#. chmod 0600 $TOMBPATH
+#.
+#: tomb:1362
msgid "Error creating the tomb ::1 tomb path::"
msgstr "Error al crear la tumba ::1 ruta de la tumba::"
-#: message
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. ls -lh $TOMBPATH
+#. } || {
+#. _warning "Error creating the tomb ::1 tomb path::" $TOMBPATH
+#. _failure "Operation aborted."
+#. }
+#.
+#. > _success "Done digging ::1 tomb name::" $TOMBNAME
+#. _message "Your tomb is not yet ready, you need to forge a key and lock it:"
+#. _message "tomb forge ::1 tomb path::.key" $TOMBPATH
+#. _message "tomb lock ::1 tomb path:: -k ::1 tomb path::.key" $TOMBPATH
+#.
+#: tomb:1377
+msgid "Done digging ::1 tomb name::"
+msgstr "Se ha terminado de cavar ::1 tumba::."
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. } || {
+#. _warning "Error creating the tomb ::1 tomb path::" $TOMBPATH
+#. _failure "Operation aborted."
+#. }
+#.
+#. _success "Done digging ::1 tomb name::" $TOMBNAME
+#. > _message "Your tomb is not yet ready, you need to forge a key and lock it:"
+#. _message "tomb forge ::1 tomb path::.key" $TOMBPATH
+#. _message "tomb lock ::1 tomb path:: -k ::1 tomb path::.key" $TOMBPATH
+#.
+#. return 0
+#: tomb:1378
+msgid "Your tomb is not yet ready, you need to forge a key and lock it:"
+msgstr ""
+"Tu tumba no está lista todavía, tienes que forjar una llave y asegurarla:"
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. _warning "Error creating the tomb ::1 tomb path::" $TOMBPATH
+#. _failure "Operation aborted."
+#. }
+#.
+#. _success "Done digging ::1 tomb name::" $TOMBNAME
+#. _message "Your tomb is not yet ready, you need to forge a key and lock it:"
+#. > _message "tomb forge ::1 tomb path::.key" $TOMBPATH
+#. _message "tomb lock ::1 tomb path:: -k ::1 tomb path::.key" $TOMBPATH
+#.
+#. return 0
+#. }
+#: tomb:1379
msgid "tomb forge ::1 tomb path::.key"
msgstr "tomb forge ::1 ruta::.key"
-#: message
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. _failure "Operation aborted."
+#. }
+#.
+#. _success "Done digging ::1 tomb name::" $TOMBNAME
+#. _message "Your tomb is not yet ready, you need to forge a key and lock it:"
+#. _message "tomb forge ::1 tomb path::.key" $TOMBPATH
+#. > _message "tomb lock ::1 tomb path:: -k ::1 tomb path::.key" $TOMBPATH
+#.
+#. return 0
+#. }
+#.
+#: tomb:1380
msgid "tomb lock ::1 tomb path:: -k ::1 tomb path::.key"
msgstr "tomb lock ::1 ruta:: -k ::1 ruta::.key"
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. local destkey="$1"
+#. { option_is_set -k } && { destkey=$(option_value -k) }
+#.
+#. local algo="AES256" # Default encryption algorithm
+#.
+#. [[ -z "$destkey" ]] && {
+#. > _failure "A filename needs to be specified using -k to forge a new key." }
+#.
+#. _message "Commanded to forge key ::1 key::" $destkey
+#.
+#. _check_swap # Ensure the available memory is safe to use
+#: tomb:1401
+msgid "A filename needs to be specified using -k to forge a new key."
+msgstr ""
+"Es necesario especificar un nombre de fichero usando -k para forgar una "
+"llave nueva."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#.
+#. local algo="AES256" # Default encryption algorithm
+#.
+#. [[ -z "$destkey" ]] && {
+#. _failure "A filename needs to be specified using -k to forge a new key." }
+#.
+#. > _message "Commanded to forge key ::1 key::" $destkey
+#.
+#. _check_swap # Ensure the available memory is safe to use
+#.
+#. # Ensure GnuPG won't exit with an error before first run
+#: tomb:1403
msgid "Commanded to forge key ::1 key::"
msgstr "Se ha ordenado forjar la llave ::1 llave::"
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. mkdir -m 0700 $HOME/.gnupg
+#. touch $HOME/.gnupg/pubring.gpg }
+#.
+#. # Do not overwrite any files accidentally
+#. [[ -r "$destkey" ]] && {
+#. ls -lh $destkey
+#. > _failure "Forging this key would overwrite an existing file. Operation aborted." }
+#.
+#. touch $destkey
+#. [[ $? == 0 ]] || {
+#. _warning "Cannot generate encryption key."
+#: tomb:1415
+msgid "Forging this key would overwrite an existing file. Operation aborted."
+msgstr ""
+"Forjar esta llave sobreescribiría un fichero existente. Operación abortada."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. [[ -r "$destkey" ]] && {
+#. ls -lh $destkey
+#. _failure "Forging this key would overwrite an existing file. Operation aborted." }
+#.
+#. touch $destkey
+#. [[ $? == 0 ]] || {
+#. > _warning "Cannot generate encryption key."
+#. _failure "Operation aborted." }
+#. chmod 0600 $destkey
+#.
+#. # Update algorithm if it was passed on the command line with -o
+#: tomb:1419
+msgid "Cannot generate encryption key."
+msgstr "No se puede generar la llave de encriptación."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. chmod 0600 $destkey
+#.
+#. # Update algorithm if it was passed on the command line with -o
+#. { option_is_set -o } && algopt="$(option_value -o)"
+#. [[ -n "$algopt" ]] && algo=$algopt
+#.
+#. > _message "Commanded to forge key ::1 key:: with cipher algorithm ::2 algorithm::" #. $destkey $algo
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#: tomb:1427
msgid "Commanded to forge key ::1 key:: with cipher algorithm ::2 algorithm::"
-msgstr "Se ha ordenado forjar la llave ::1 llave:: con el algoritmo de cifrado ::2 algoritmo::"
+msgstr ""
+"Se ha ordenado forjar la llave ::1 llave:: con el algoritmo de cifrado ::2 "
+"algoritmo::"
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#.
+#. _message "Commanded to forge key ::1 key:: with cipher algorithm ::2 algorithm::" #. $destkey $algo
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#. > _message "This operation takes time, keep using this computer on other tasks,"
+#. _message "once done you will be asked to choose a password for your tomb."
+#. _message "To make it faster you can move the mouse around."
+#. _message "If you are on a server, you can use an Entropy Generation Daemon."
+#.
+#: tomb:1432
+msgid "This operation takes time, keep using this computer on other tasks,"
+msgstr ""
+"Esta operación necesita tiempo, sigue usando el ordenador en otras tareas,"
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. _message "Commanded to forge key ::1 key:: with cipher algorithm ::2 algorithm::" #. $destkey $algo
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#. _message "This operation takes time, keep using this computer on other tasks,"
+#. > _message "once done you will be asked to choose a password for your tomb."
+#. _message "To make it faster you can move the mouse around."
+#. _message "If you are on a server, you can use an Entropy Generation Daemon."
+#.
+#. # Use /dev/random as the entropy source, unless --use-random is specified
+#: tomb:1433
+msgid "once done you will be asked to choose a password for your tomb."
+msgstr "cuando termine se te pedirá que elijas una contraseña para tu tumba."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. $destkey $algo
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#. _message "This operation takes time, keep using this computer on other tasks,"
+#. _message "once done you will be asked to choose a password for your tomb."
+#. > _message "To make it faster you can move the mouse around."
+#. _message "If you are on a server, you can use an Entropy Generation Daemon."
+#.
+#. # Use /dev/random as the entropy source, unless --use-random is specified
+#. local random_source=/dev/random
+#: tomb:1434
+msgid "To make it faster you can move the mouse around."
+msgstr "Para acelerarlo puedes mover el ratón por la pantalla."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#. _message "This operation takes time, keep using this computer on other tasks,"
+#. _message "once done you will be asked to choose a password for your tomb."
+#. _message "To make it faster you can move the mouse around."
+#. > _message "If you are on a server, you can use an Entropy Generation Daemon."
+#.
+#. # Use /dev/random as the entropy source, unless --use-random is specified
+#. local random_source=/dev/random
+#. { option_is_set --use-urandom } && random_source=/dev/urandom
+#: tomb:1435
+msgid "If you are on a server, you can use an Entropy Generation Daemon."
+msgstr "Si estás en un servidor, puede usar un Entropy Generation Daemon."
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. [[ $? == 0 ]] || {
+#. _warning "Cannot generate encryption key."
+#. _failure "Operation aborted." }
+#.
+#. # Here the global variable TOMBSECRET contains the naked secret
+#.
+#. > _success "Choose the password of your key: ::1 tomb key::" $TOMBKEYFILE
+#. _message "(You can also change it later using 'tomb passwd'.)"
+#. # _user_file $TOMBKEYFILE
+#.
+#. tombname="$TOMBKEYFILE" # XXX ???
+#: tomb:1449
+msgid "Choose the password of your key: ::1 tomb key::"
+msgstr "Elige una contraseña para tu llave: ::1 llave::"
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. _warning "Cannot generate encryption key."
+#. _failure "Operation aborted." }
+#.
+#. # Here the global variable TOMBSECRET contains the naked secret
+#.
+#. _success "Choose the password of your key: ::1 tomb key::" $TOMBKEYFILE
+#. > _message "(You can also change it later using 'tomb passwd'.)"
+#. # _user_file $TOMBKEYFILE
+#.
+#. tombname="$TOMBKEYFILE" # XXX ???
+#. # the gen_key() function takes care of the new key's encryption
+#: tomb:1450
+msgid "(You can also change it later using 'tomb passwd'.)"
+msgstr "(También puedes cambiarla más tarde usando 'tomb passwd'.)"
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#.
+#. # load the key contents (set global variable)
+#. TOMBKEY="${mapfile[$TOMBKEYFILE]}"
+#.
+#. # this does a check on the file header
+#. is_valid_key $TOMBKEY || {
+#. > _warning "The key does not seem to be valid."
+#. _warning "Dumping contents to screen:"
+#. print "${mapfile[$TOMBKEY]}"
+#. _warning "--"
+#. sudo umount ${keytmp}
+#: tomb:1468
+msgid "The key does not seem to be valid."
+msgstr "Parece que la llave no es válida."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. # load the key contents (set global variable)
+#. TOMBKEY="${mapfile[$TOMBKEYFILE]}"
+#.
+#. # this does a check on the file header
+#. is_valid_key $TOMBKEY || {
+#. _warning "The key does not seem to be valid."
+#. > _warning "Dumping contents to screen:"
+#. print "${mapfile[$TOMBKEY]}"
+#. _warning "--"
+#. sudo umount ${keytmp}
+#. rm -r $keytmp
+#: tomb:1469
+msgid "Dumping contents to screen:"
+msgstr "Volcando contenido en la pantalla:"
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. _warning "--"
+#. sudo umount ${keytmp}
+#. rm -r $keytmp
+#. _failure "Operation aborted."
+#. }
+#.
+#. > _message "Done forging ::1 key file::" $TOMBKEYFILE
+#. _success "Your key is ready:"
+#. ls -lh $TOMBKEYFILE
+#. }
+#.
+#: tomb:1477
msgid "Done forging ::1 key file::"
msgstr "Se ha terminado de forjar ::1 llave::"
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. sudo umount ${keytmp}
+#. rm -r $keytmp
+#. _failure "Operation aborted."
+#. }
+#.
+#. _message "Done forging ::1 key file::" $TOMBKEYFILE
+#. > _success "Your key is ready:"
+#. ls -lh $TOMBKEYFILE
+#. }
+#.
+#. # Step three -- Lock tomb
+#: tomb:1478
+msgid "Your key is ready:"
+msgstr "Tu llave está lista:"
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. # for more alternatives refer to cryptsetup(8)
+#. local cipher="aes-xts-plain64:sha256"
+#.
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. [[ -n $tombpath ]] || {
+#. > _warning "No tomb specified for locking."
+#. _warning "Usage: tomb lock file.tomb file.tomb.key"
+#. return 1
+#. }
+#.
+#: tomb:1498
+msgid "No tomb specified for locking."
+msgstr "No se ha especificado una tumba que asegurar."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. local cipher="aes-xts-plain64:sha256"
+#.
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. [[ -n $tombpath ]] || {
+#. _warning "No tomb specified for locking."
+#. > _warning "Usage: tomb lock file.tomb file.tomb.key"
+#. return 1
+#. }
+#.
+#. _plot $tombpath
+#: tomb:1499
+msgid "Usage: tomb lock file.tomb file.tomb.key"
+msgstr "Uso: tomb lock file.tomb file.tomb.key"
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _warning "Usage: tomb lock file.tomb file.tomb.key"
+#. return 1
+#. }
+#.
+#. _plot $tombpath
+#.
+#. > _message "Commanded to lock tomb ::1 tomb file::" $TOMBFILE
+#.
+#. [[ -f $TOMBPATH ]] || {
+#. _failure "There is no tomb here. You have to dig it first." }
+#.
+#: tomb:1505
msgid "Commanded to lock tomb ::1 tomb file::"
msgstr "Se ha ordenado asegurar la tumba ::1 tumba::"
-#: message
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _plot $tombpath
+#.
+#. _message "Commanded to lock tomb ::1 tomb file::" $TOMBFILE
+#.
+#. [[ -f $TOMBPATH ]] || {
+#. > _failure "There is no tomb here. You have to dig it first." }
+#.
+#. _verbose "Tomb found: ::1 tomb path::" $TOMBPATH
+#.
+#. lo_mount $TOMBPATH
+#: tomb:1508
+msgid "There is no tomb here. You have to dig it first."
+msgstr "No hay una tumba aquí. Tienes que cavarla primero."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. lo_mount $TOMBPATH
+#. nstloop=`lo_new`
+#.
+#. _verbose "Loop mounted on ::1 mount point::" $nstloop
+#.
+#. > _message "Checking if the tomb is empty (we never step on somebody else's bones)."
+#. sudo cryptsetup isLuks ${nstloop}
+#. if [ $? = 0 ]; then
+#. # is it a LUKS encrypted nest? then bail out and avoid reformatting it
+#. _warning "The tomb was already locked with another key."
+#: tomb:1517
+msgid "Checking if the tomb is empty (we never step on somebody else's bones)."
+msgstr ""
+"Comprobando que la tumba esté vacía (no queremos pisar los huesos de alguien "
+"más)."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _verbose "Loop mounted on ::1 mount point::" $nstloop
+#.
+#. _message "Checking if the tomb is empty (we never step on somebody else's bones)."
+#. sudo cryptsetup isLuks ${nstloop}
+#. if [ $? = 0 ]; then
+#. # is it a LUKS encrypted nest? then bail out and avoid reformatting it
+#. > _warning "The tomb was already locked with another key."
+#. _failure "Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
+#. else
+#. _message "Fine, this tomb seems empty."
+#. fi
+#: tomb:1521
+msgid "The tomb was already locked with another key."
+msgstr "La tumba ya estaba asegurada con otra llave."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _message "Checking if the tomb is empty (we never step on somebody else's bones)."
+#. sudo cryptsetup isLuks ${nstloop}
+#. if [ $? = 0 ]; then
+#. # is it a LUKS encrypted nest? then bail out and avoid reformatting it
+#. _warning "The tomb was already locked with another key."
+#. > _failure "Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
+#. else
+#. _message "Fine, this tomb seems empty."
+#. fi
+#.
+#: tomb:1522
+msgid ""
+"Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
+msgstr ""
+"Operación abortada. No puedo asegurar una tumba que ya tiene un candado. "
+"Cava una nueva."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. sudo cryptsetup isLuks ${nstloop}
+#. if [ $? = 0 ]; then
+#. # is it a LUKS encrypted nest? then bail out and avoid reformatting it
+#. _warning "The tomb was already locked with another key."
+#. _failure "Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
+#. else
+#. > _message "Fine, this tomb seems empty."
+#. fi
+#.
+#. _load_key # Try loading key from option -k and set TOMBKEYFILE
+#.
+#: tomb:1524
+msgid "Fine, this tomb seems empty."
+msgstr "Bien, esta tumba parece vacía."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _load_key # Try loading key from option -k and set TOMBKEYFILE
+#.
+#. # the encryption cipher for a tomb can be set when locking using -c
+#. { option_is_set -o } && algopt="$(option_value -o)"
+#. [[ -n "$algopt" ]] && cipher=$algopt
+#. > _message "Locking using cipher: ::1 cipher::" $cipher
+#.
+#. # get the pass from the user and check it
+#. if option_is_set --tomb-pwd; then
+#. tomb_pwd="`option_value --tomb-pwd`"
+#: tomb:1532
msgid "Locking using cipher: ::1 cipher::"
msgstr "Asegurando usando el cifrado: ::1::"
-#: warning
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. ask_key_password "$tomb_pwd"
+#. else
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. > _success "Locking ::1 tomb file:: with ::2 tomb key file::" $TOMBFILE $TOMBKEYFILE
+#.
+#. _message "Formatting Luks mapped device."
+#. _cryptsetup --batch-mode #. --cipher ${cipher} --key-size 256 --key-slot 0 #: tomb:1544
+msgid "Locking ::1 tomb file:: with ::2 tomb key file::"
+msgstr "Asegurando ::1 tumba:: con ::2 llave::"
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. _success "Locking ::1 tomb file:: with ::2 tomb key file::" $TOMBFILE $TOMBKEYFILE
+#.
+#. > _message "Formatting Luks mapped device."
+#. _cryptsetup --batch-mode #. --cipher ${cipher} --key-size 256 --key-slot 0 #. luksFormat ${nstloop}
+#. [[ $? == 0 ]] || {
+#: tomb:1546
+msgid "Formatting Luks mapped device."
+msgstr "Formateando dispositivo mapeado con Luks."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _message "Formatting Luks mapped device."
+#. _cryptsetup --batch-mode #. --cipher ${cipher} --key-size 256 --key-slot 0 #. luksFormat ${nstloop}
+#. [[ $? == 0 ]] || {
+#. > _warning "cryptsetup luksFormat returned an error."
+#. _failure "Operation aborted." }
+#.
+#. _cryptsetup --cipher ${cipher} luksOpen ${nstloop} tomb.tmp
+#. [[ $? == 0 ]] || {
+#: tomb:1551
+msgid "cryptsetup luksFormat returned an error."
+msgstr "cryptsetup luksFormat ha devuelto un error."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. [[ $? == 0 ]] || {
+#. _warning "cryptsetup luksFormat returned an error."
+#. _failure "Operation aborted." }
+#.
+#. _cryptsetup --cipher ${cipher} luksOpen ${nstloop} tomb.tmp
+#. [[ $? == 0 ]] || {
+#. > _warning "cryptsetup luksOpen returned an error."
+#. _failure "Operation aborted." }
+#.
+#. _message "Formatting your Tomb with Ext3/Ext4 filesystem."
+#. ${=MKFS} $TOMBNAME /dev/mapper/tomb.tmp
+#: tomb:1556
msgid "cryptsetup luksOpen returned an error."
msgstr "cryptsetup luksOpen ha devuelto un error."
-#: warning
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _cryptsetup --cipher ${cipher} luksOpen ${nstloop} tomb.tmp
+#. [[ $? == 0 ]] || {
+#. _warning "cryptsetup luksOpen returned an error."
+#. _failure "Operation aborted." }
+#.
+#. > _message "Formatting your Tomb with Ext3/Ext4 filesystem."
+#. ${=MKFS} $TOMBNAME /dev/mapper/tomb.tmp
+#.
+#. [[ $? == 0 ]] || {
+#. _warning "Tomb format returned an error."
+#: tomb:1559
+msgid "Formatting your Tomb with Ext3/Ext4 filesystem."
+msgstr "Formateando tu tumba con el sistema de ficheros Ext3/Ext4."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _failure "Operation aborted." }
+#.
+#. _message "Formatting your Tomb with Ext3/Ext4 filesystem."
+#. ${=MKFS} $TOMBNAME /dev/mapper/tomb.tmp
+#.
+#. [[ $? == 0 ]] || {
+#. > _warning "Tomb format returned an error."
+#. _warning "Your tomb ::1 tomb file:: may be corrupted." $TOMBFILE }
+#.
+#. # Sync
+#. sudo cryptsetup luksClose tomb.tmp
+#: tomb:1563
+msgid "Tomb format returned an error."
+msgstr "El formateo de la tumba ha devuelto un error."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _message "Formatting your Tomb with Ext3/Ext4 filesystem."
+#. ${=MKFS} $TOMBNAME /dev/mapper/tomb.tmp
+#.
+#. [[ $? == 0 ]] || {
+#. _warning "Tomb format returned an error."
+#. > _warning "Your tomb ::1 tomb file:: may be corrupted." $TOMBFILE }
+#.
+#. # Sync
+#. sudo cryptsetup luksClose tomb.tmp
+#.
+#: tomb:1564
msgid "Your tomb ::1 tomb file:: may be corrupted."
msgstr "Puede que tu tumba ::1 tumba:: esté corrupta."
-#: message
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _warning "Tomb format returned an error."
+#. _warning "Your tomb ::1 tomb file:: may be corrupted." $TOMBFILE }
+#.
+#. # Sync
+#. sudo cryptsetup luksClose tomb.tmp
+#.
+#. > _message "Done locking ::1 tomb name:: using Luks dm-crypt ::2 cipher::" $TOMBNAME $cipher
+#. _success "Your tomb is ready in ::1 tomb path:: and secured with key ::2 tomb key::" #. $TOMBPATH $TOMBKEYFILE
+#.
+#. }
+#: tomb:1569
msgid "Done locking ::1 tomb name:: using Luks dm-crypt ::2 cipher::"
msgstr "Se ha terminado de asegurar ::1 tumba:: usando Luks dm-crypt ::2::"
-#: message
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _warning "Your tomb ::1 tomb file:: may be corrupted." $TOMBFILE }
+#.
+#. # Sync
+#. sudo cryptsetup luksClose tomb.tmp
+#.
+#. _message "Done locking ::1 tomb name:: using Luks dm-crypt ::2 cipher::" $TOMBNAME $cipher
+#. > _success "Your tomb is ready in ::1 tomb path:: and secured with key ::2 tomb key::" #. $TOMBPATH $TOMBKEYFILE
+#.
+#. }
+#.
+#: tomb:1570
+msgid ""
+"Your tomb is ready in ::1 tomb path:: and secured with key ::2 tomb key::"
+msgstr ""
+"Tu tumba está lista en ::1 tumba:: y asegurada con la llave ::2 llave::"
+
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. # This function changes the key that locks a tomb
+#. change_tomb_key() {
+#. local tombkey="$1" # Path to the tomb's key file
+#. local tombpath="$2" # Path to the tomb
+#.
+#. > _message "Commanded to reset key for tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -z "$tombpath" ]] && {
+#. _warning "Command 'setkey' needs two arguments: the old key file and the tomb."
+#. _warning "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
+#: tomb:1580
msgid "Commanded to reset key for tomb ::1 tomb path::"
msgstr "Se ha ordenado resetear la llave para la tumba ::1 ruta::"
-#: warning
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. local tombkey="$1" # Path to the tomb's key file
+#. local tombpath="$2" # Path to the tomb
+#.
+#. _message "Commanded to reset key for tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -z "$tombpath" ]] && {
+#. > _warning "Command 'setkey' needs two arguments: the old key file and the tomb."
+#. _warning "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
+#. _failure "Execution aborted."
+#. }
+#.
+#: tomb:1583
msgid "Command 'setkey' needs two arguments: the old key file and the tomb."
-msgstr "El comando 'setkey' necesita dos argumentos: la vieja llave y la tumba."
-
-#: warning
+msgstr ""
+"El comando 'setkey' necesita dos argumentos: la vieja llave y la tumba."
+
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. local tombpath="$2" # Path to the tomb
+#.
+#. _message "Commanded to reset key for tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -z "$tombpath" ]] && {
+#. _warning "Command 'setkey' needs two arguments: the old key file and the tomb."
+#. > _warning "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
+#. _failure "Execution aborted."
+#. }
+#.
+#. _check_swap
+#: tomb:1584
msgid "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
msgstr "Por ejemplo: tomb -k new.tomb.key old.tomb.key secret.tomb"
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. _message "Commanded to reset key for tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -z "$tombpath" ]] && {
+#. _warning "Command 'setkey' needs two arguments: the old key file and the tomb."
+#. _warning "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
+#. > _failure "Execution aborted."
+#. }
+#.
+#. _check_swap
+#. is_valid_tomb $tombpath
+#: tomb:1585
msgid "Execution aborted."
msgstr "Ejecución abortada."
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. lo_mount $TOMBPATH
+#. nstloop=`lo_new`
+#. sudo cryptsetup isLuks ${nstloop}
+#. # is it a LUKS encrypted nest? we check one more time
+#. [[ $? == 0 ]] || {
+#. > _failure "Not a valid LUKS encrypted volume: ::1 volume::" $TOMBPATH }
+#.
+#. _load_key $tombkey # Try loading given key and set TOMBKEY and
+#. # TOMBKEYFILE
+#. local oldkey=$TOMBKEY
+#: tomb:1596
msgid "Not a valid LUKS encrypted volume: ::1 volume::"
msgstr "No es un volumen LUKS encriptado válido: ::1 volumen::"
-#: message
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. _load_key $tombkey # Try loading given key and set TOMBKEY and
+#. # TOMBKEYFILE
+#. local oldkey=$TOMBKEY
+#. local oldkeyfile=$TOMBKEYFILE
+#.
+#. # we have everything, prepare to mount
+#. > _success "Changing lock on tomb ::1 tomb name::" $TOMBNAME
+#. _message "Old key: ::1 old key::" $oldkeyfile
+#.
+#. # render the mapper
+#. mapdate=`date +%s`
+#: tomb:1604
+msgid "Changing lock on tomb ::1 tomb name::"
+msgstr "Cambiando el candado en la tumba ::1 tumba::."
+
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. # TOMBKEYFILE
+#. local oldkey=$TOMBKEY
+#. local oldkeyfile=$TOMBKEYFILE
+#.
+#. # we have everything, prepare to mount
+#. _success "Changing lock on tomb ::1 tomb name::" $TOMBNAME
+#. > _message "Old key: ::1 old key::" $oldkeyfile
+#.
+#. # render the mapper
+#. mapdate=`date +%s`
+#. # save date of mount in minutes since 1970
+#: tomb:1605
msgid "Old key: ::1 old key::"
msgstr "Llave vieja: ::1 Llave::"
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. _verbose "tomb-old-pwd = ::1 old pass::" $tomb_old_pwd
+#. ask_key_password "$tomb_old_pwd"
+#. else
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || {
+#. > _failure "No valid password supplied for the old key." }
+#. old_secret=$TOMBSECRET
+#.
+#. # luksOpen the tomb (not really mounting, just on the loopback)
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - #: tomb:1621
msgid "No valid password supplied for the old key."
msgstr "No se ha proporcionado una contraseña válida para la vieja llave."
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. _failure "No valid password supplied for the old key." }
+#. old_secret=$TOMBSECRET
+#.
+#. # luksOpen the tomb (not really mounting, just on the loopback)
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - #. luksOpen ${nstloop} ${mapper}
+#. > [[ $? == 0 ]] || _failure "Unexpected error in luksOpen."
+#.
+#. _load_key # Try loading new key from option -k and set TOMBKEYFILE
+#.
+#. _message "New key: ::1 key file::" $TOMBKEYFILE
+#: tomb:1627
msgid "Unexpected error in luksOpen."
msgstr "Error inesperado en luksOpen."
-#: message
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - #. luksOpen ${nstloop} ${mapper}
+#. [[ $? == 0 ]] || _failure "Unexpected error in luksOpen."
+#.
+#. _load_key # Try loading new key from option -k and set TOMBKEYFILE
+#.
+#. > _message "New key: ::1 key file::" $TOMBKEYFILE
+#.
+#. if option_is_set --tomb-pwd; then
+#. tomb_new_pwd="`option_value --tomb-pwd`"
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tomb_new_pwd
+#: tomb:1631
msgid "New key: ::1 key file::"
msgstr "Nueva llave: ::1 fichero::"
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tomb_new_pwd
+#. ask_key_password "$tomb_new_pwd"
+#. else
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || {
+#. > _failure "No valid password supplied for the new key." }
+#.
+#. _tmp_create
+#. tmpnewkey=$TOMBTMP
+#. print -R -n - "$TOMBSECRET" >> $tmpnewkey
+#: tomb:1641
msgid "No valid password supplied for the new key."
msgstr "No se ha proporcionado una contraseña válida para la nueva llave."
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. tmpnewkey=$TOMBTMP
+#. print -R -n - "$TOMBSECRET" >> $tmpnewkey
+#.
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - #. luksChangeKey "$nstloop" "$tmpnewkey"
+#.
+#. > [[ $? == 0 ]] || _failure "Unexpected error in luksChangeKey."
+#.
+#. sudo cryptsetup luksClose "${mapper}" || _failure "Unexpected error in luksClose."
+#.
+#. _success "Succesfully changed key for tomb: ::1 tomb file::" $TOMBFILE
+#: tomb:1650
msgid "Unexpected error in luksChangeKey."
msgstr "Error inesperado en luksChangeKey."
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - #. luksChangeKey "$nstloop" "$tmpnewkey"
+#.
+#. [[ $? == 0 ]] || _failure "Unexpected error in luksChangeKey."
+#.
+#. > sudo cryptsetup luksClose "${mapper}" || _failure "Unexpected error in luksClose."
+#.
+#. _success "Succesfully changed key for tomb: ::1 tomb file::" $TOMBFILE
+#. _message "The new key is: ::1 new key::" $TOMBKEYFILE
+#.
+#: tomb:1652
msgid "Unexpected error in luksClose."
msgstr "Error inesperado en luksClose."
-#: message
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. luksChangeKey "$nstloop" "$tmpnewkey"
+#.
+#. [[ $? == 0 ]] || _failure "Unexpected error in luksChangeKey."
+#.
+#. sudo cryptsetup luksClose "${mapper}" || _failure "Unexpected error in luksClose."
+#.
+#. > _success "Succesfully changed key for tomb: ::1 tomb file::" $TOMBFILE
+#. _message "The new key is: ::1 new key::" $TOMBKEYFILE
+#.
+#. return 0
+#. }
+#: tomb:1654
+msgid "Succesfully changed key for tomb: ::1 tomb file::"
+msgstr "Se ha cambiado la clave con éxito para la tumba ::1 tumba::"
+
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. [[ $? == 0 ]] || _failure "Unexpected error in luksChangeKey."
+#.
+#. sudo cryptsetup luksClose "${mapper}" || _failure "Unexpected error in luksClose."
+#.
+#. _success "Succesfully changed key for tomb: ::1 tomb file::" $TOMBFILE
+#. > _message "The new key is: ::1 new key::" $TOMBKEYFILE
+#.
+#. return 0
+#. }
+#.
+#: tomb:1655
msgid "The new key is: ::1 new key::"
msgstr "La nueva llave es: ::1 llave::"
-#: failure
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. # {{{ Open
+#.
+#. # $1 = tombfile $2(optional) = mountpoint
+#. mount_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#. > [[ -n "$tombpath" ]] || _failure "No tomb name specified for opening."
+#.
+#. _message "Commanded to open tomb ::1 tomb name::" $1
+#.
+#. _check_swap
+#: tomb:1667
msgid "No tomb name specified for opening."
msgstr "No se ha especificado el nombre de la tumba a abrir."
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. # $1 = tombfile $2(optional) = mountpoint
+#. mount_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#. [[ -n "$tombpath" ]] || _failure "No tomb name specified for opening."
+#.
+#. > _message "Commanded to open tomb ::1 tomb name::" $1
+#.
+#. _check_swap
+#. is_valid_tomb $tombpath
+#.
+#: tomb:1669
msgid "Commanded to open tomb ::1 tomb name::"
msgstr "Se ha ordenado abrir la tumba ::1 tumba::"
-#: warning
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. _check_swap
+#. is_valid_tomb $tombpath
+#.
+#. # check file type (if its a Luks fs)
+#. [[ "`file $TOMBPATH`" =~ "luks encrypted file" ]] || {
+#. > _warning "::1 tomb file:: is not a valid tomb file" $TOMBFILE
+#. _failure "Operation aborted."
+#. }
+#.
+#. _verbose "Tomb found: ::1 tomb path::" $TOMBPATH
+#: tomb:1676
msgid "::1 tomb file:: is not a valid tomb file"
msgstr "::1 fichero:: no es un fichero de tumba válido"
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. _verbose "Tomb found: ::1 tomb path::" $TOMBPATH
+#.
+#. _load_key # Try loading new key from option -k and set TOMBKEYFILE
+#.
+#. tombmount=${2:-/media/$TOMBFILE}
+#. [[ -z "$2" ]] && {
+#. > _message "Mountpoint not specified, using default: ::1 mount point::" $tombmount }
+#.
+#. # Check if its already open
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]" ]] && {
+#. _warning "::1 tomb name:: is already open." $TOMBNAME
+#: tomb:1686
msgid "Mountpoint not specified, using default: ::1 mount point::"
-msgstr "Punto de montaje no especificado, utilizando estándar: ::1 punto de montaje::"
-
-#: warning
+msgstr ""
+"Punto de montaje no especificado, utilizando estándar: ::1 punto de montaje::"
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. tombmount=${2:-/media/$TOMBFILE}
+#. [[ -z "$2" ]] && {
+#. _message "Mountpoint not specified, using default: ::1 mount point::" $tombmount }
+#.
+#. # Check if its already open
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]" ]] && {
+#. > _warning "::1 tomb name:: is already open." $TOMBNAME
+#. _message "Here below its status is reported:"
+#. list_tombs $TOMBNAME
+#. return 0 }
+#.
+#: tomb:1690
msgid "::1 tomb name:: is already open."
msgstr "::1 tumba:: ya está abierta."
-#: failure
-msgid "::1 tomb file:: is not a valid Luks encrypted storage file."
-msgstr "::1 tumba:: no es un fichero encriptado con LUKS válido."
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. [[ -z "$2" ]] && {
+#. _message "Mountpoint not specified, using default: ::1 mount point::" $tombmount }
+#.
+#. # Check if its already open
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]" ]] && {
+#. _warning "::1 tomb name:: is already open." $TOMBNAME
+#. > _message "Here below its status is reported:"
+#. list_tombs $TOMBNAME
+#. return 0 }
+#.
+#. _success "Opening ::1 tomb file:: on ::2 mount point::" $TOMBFILE $tombmount
+#: tomb:1691
+msgid "Here below its status is reported:"
+msgstr "Su estado se muestra a continuación:"
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]" ]] && {
+#. _warning "::1 tomb name:: is already open." $TOMBNAME
+#. _message "Here below its status is reported:"
+#. list_tombs $TOMBNAME
+#. return 0 }
+#.
+#. > _success "Opening ::1 tomb file:: on ::2 mount point::" $TOMBFILE $tombmount
+#.
+#. lo_mount $TOMBPATH
+#. nstloop=`lo_new`
+#.
+#: tomb:1695
+msgid "Opening ::1 tomb file:: on ::2 mount point::"
+msgstr "Abriendo ::1 tumba:: en ::2 punto de montaje::."
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. lo_mount $TOMBPATH
+#. nstloop=`lo_new`
+#.
+#. sudo cryptsetup isLuks ${nstloop} || {
+#. # is it a LUKS encrypted nest? see cryptsetup(1)
+#. > _failure "::1 tomb file:: is not a valid Luks encrypted storage file." $TOMBFILE }
+#.
+#. _message "This tomb is a valid LUKS encrypted device."
+#.
+#. luksdump="`sudo cryptsetup luksDump ${nstloop}`"
+#: tomb:1702
+msgid "::1 tomb file:: is not a valid Luks encrypted storage file."
+msgstr "::1 tumba:: no es un fichero encriptado con LUKS válido."
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. nstloop=`lo_new`
+#.
+#. sudo cryptsetup isLuks ${nstloop} || {
+#. # is it a LUKS encrypted nest? see cryptsetup(1)
+#. _failure "::1 tomb file:: is not a valid Luks encrypted storage file." $TOMBFILE }
+#.
+#. > _message "This tomb is a valid LUKS encrypted device."
+#.
+#. luksdump="`sudo cryptsetup luksDump ${nstloop}`"
+#. tombdump=(`print $luksdump | awk '
+#. /^Cipher name/ {print $3}
+#: tomb:1704
+msgid "This tomb is a valid LUKS encrypted device."
+msgstr "Esta tumba es un dispositivo encriptado con LUKS válido."
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. luksdump="`sudo cryptsetup luksDump ${nstloop}`"
+#. tombdump=(`print $luksdump | awk '
+#. /^Cipher name/ {print $3}
+#. /^Cipher mode/ {print $3}
+#. /^Hash spec/ {print $3}'`)
+#. > _message "Cipher is \"::1 cipher::\" mode \"::2 mode::\" hash \"::3 hash::\"" $tombdump[1] $tombdump[2] $tombdump[3]
+#.
+#. slotwarn=`print $luksdump | awk '
+#. BEGIN { zero=0 }
+#. /^Key slot 0/ { zero=1 }
+#: tomb:1711
+msgid "Cipher is \"::1 cipher::\" mode \"::2 mode::\" hash \"::3 hash::\""
+msgstr ""
+"El cifrado es \"::1 cifrado::\" en modo \"::2 modo::\" y hash \"::3 hash::\""
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. slotwarn=`print $luksdump | awk '
+#. BEGIN { zero=0 }
+#. /^Key slot 0/ { zero=1 }
+#. /^Key slot.*ENABLED/ { if(zero==1) print "WARN" }'`
+#. [[ "$slotwarn" == "WARN" ]] && {
+#. > _warning "Multiple key slots are enabled on this tomb. Beware: there can be a backdoor." }
+#.
+#. # save date of mount in minutes since 1970
+#. mapdate=`date +%s`
+#.
+#: tomb:1718
+msgid ""
+"Multiple key slots are enabled on this tomb. Beware: there can be a backdoor."
+msgstr ""
+"Hay múltiples rarunas para la llave en esta tumba. Cuidado: puede haber una "
+"puerta trasera."
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. ask_key_password
+#. }
+#. [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. _cryptsetup luksOpen ${nstloop} ${mapper}
+#. [[ $? = 0 ]] || {
+#. > _failure "Failure mounting the encrypted file." }
+#.
+#. # preserve the loopdev after exit
+#. lo_preserve "$nstloop"
+#.
+#: tomb:1742
+msgid "Failure mounting the encrypted file."
+msgstr "Fallo al montar el fichero encriptado."
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. # array: [ cipher, keysize, loopdevice ]
+#. tombstat=(`sudo cryptsetup status ${mapper} | awk '
+#. /cipher:/ {print $2}
+#. /keysize:/ {print $2}
+#. /device:/ {print $2}'`)
+#. > _success "Success unlocking tomb ::1 tomb name::" $TOMBNAME
+#. _verbose "Key size is ::1 size:: for cipher ::2 cipher::" $tombstat[2] $tombstat[1]
+#.
+#. _message "Checking filesystem via ::1::" $tombstat[3]
+#. sudo fsck -p -C0 /dev/mapper/${mapper}
+#: tomb:1752
+msgid "Success unlocking tomb ::1 tomb name::"
+msgstr "Se ha abierto el cerrojo de ::1 tumba:: con éxito."
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. /cipher:/ {print $2}
+#. /keysize:/ {print $2}
+#. /device:/ {print $2}'`)
+#. _success "Success unlocking tomb ::1 tomb name::" $TOMBNAME
+#. _verbose "Key size is ::1 size:: for cipher ::2 cipher::" $tombstat[2] $tombstat[1]
+#.
+#. > _message "Checking filesystem via ::1::" $tombstat[3]
+#. sudo fsck -p -C0 /dev/mapper/${mapper}
+#. _verbose "Tomb engraved as ::1 tomb name::" $TOMBNAME
+#. sudo tune2fs -L $TOMBNAME /dev/mapper/${mapper} > /dev/null
+#.
+#: tomb:1755
+msgid "Checking filesystem via ::1::"
+msgstr "Comprobando el sistema de ficheros a través de ::1::"
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. # TODO: safety check MOUNTOPTS
+#. # safe_mount_options && #. sudo mount -o $MOUNTOPTS /dev/mapper/${mapper} ${tombmount}
+#. # Clean up if the mount failed
+#. [[ $? == 0 ]] || {
+#. > _warning "Error mounting ::1 mapper:: on ::2 tombmount::" $mapper $tombmount
+#. [[ $oldmountopts != $MOUNTOPTS ]] && #. _warning "Are mount options '::1 mount options::' valid?" $MOUNTOPTS
+#. # TODO: move cleanup to _endgame()
+#. [[ -d $tombmount ]] && rmdir $tombmount
+#: tomb:1773
+msgid "Error mounting ::1 mapper:: on ::2 tombmount::"
+msgstr ""
-#: message
-msgid "Cipher is \"::1 cipher::\" mode \"::2 mode::\" hash \"::3 hash::\""
-msgstr "El cifrado es \"::1 cifrado::\" en modo \"::2 modo::\" y hash \"::3 hash::\""
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. # safe_mount_options && #. sudo mount -o $MOUNTOPTS /dev/mapper/${mapper} ${tombmount}
+#. # Clean up if the mount failed
+#. [[ $? == 0 ]] || {
+#. _warning "Error mounting ::1 mapper:: on ::2 tombmount::" $mapper $tombmount
+#. [[ $oldmountopts != $MOUNTOPTS ]] && #. > _warning "Are mount options '::1 mount options::' valid?" $MOUNTOPTS
+#. # TODO: move cleanup to _endgame()
+#. [[ -d $tombmount ]] && rmdir $tombmount
+#. [[ -e /dev/mapper/$mapper ]] && sudo cryptsetup luksClose $mapper
+#. # The loop is taken care of in _endgame()
+#: tomb:1775
+msgid "Are mount options '::1 mount options::' valid?"
+msgstr ""
-#: warning
-msgid "Multiple key slots are enabled on this tomb. Beware: there can be a backdoor."
-msgstr "Hay múltiples rarunas para la llave en esta tumba. Cuidado: puede haber una puerta trasera."
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. [[ $oldmountopts != $MOUNTOPTS ]] && #. _warning "Are mount options '::1 mount options::' valid?" $MOUNTOPTS
+#. # TODO: move cleanup to _endgame()
+#. [[ -d $tombmount ]] && rmdir $tombmount
+#. [[ -e /dev/mapper/$mapper ]] && sudo cryptsetup luksClose $mapper
+#. # The loop is taken care of in _endgame()
+#. > _failure "Cannot mount ::1 tomb name::" $TOMBNAME
+#. }
+#.
+#. sudo chown $UID:$GID ${tombmount}
+#. sudo chmod 0711 ${tombmount}
+#: tomb:1780
+msgid "Cannot mount ::1 tomb name::"
+msgstr ""
-#: message
-msgid "Checking filesystem via ::1::"
-msgstr "Comprobando el sistema de ficheros a través de ::1::"
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. _failure "Cannot mount ::1 tomb name::" $TOMBNAME
+#. }
+#.
+#. sudo chown $UID:$GID ${tombmount}
+#. sudo chmod 0711 ${tombmount}
+#.
+#. > _success "Success opening ::1 tomb file:: on ::2 mount point::" $TOMBFILE $tombmount
+#.
+#. local tombtty tombhost tombuid tombuser
+#.
+#. # print out when was opened the last time, by whom and where
+#: tomb:1786
+msgid "Success opening ::1 tomb file:: on ::2 mount point::"
+msgstr "Se ha abierto ::1 tumba:: en ::2 punto de montaje:: con éxito."
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. tombuid=$(_cat ${tombmount}/.uid | tr -d ' ')
+#. tomblast=$(_cat ${tombmount}/.last | tr -d ' ')
+#. for e in ${(f@)mapfile[/etc/passwd]}; do
+#. [[ "$e" =~ ":$tombuid:" ]] && {
+#. tombuser="${e[(ws@:@)1]}" }
+#. done
+#. > _message "Last visit by ::1 user::(::2 tomb build::) from ::3 tty:: on ::4 host::" $tombuser $tombuid $tombtty $tombhost
+#. _message "on date ::1 date::" "`date --date=@${tomblast} +%c`"
+#. }
+#. # write down the UID and TTY that opened the tomb
+#. rm -f ${tombmount}/.uid
+#: tomb:1800
msgid "Last visit by ::1 user::(::2 tomb build::) from ::3 tty:: on ::4 host::"
-msgstr "Última visita de ::1 usuario::(::2 versión de tomb::) desde ::3 tty:: en ::4 host::"
-
-#: message
+msgstr ""
+"Última visita de ::1 usuario::(::2 versión de tomb::) desde ::3 tty:: en ::4 "
+"host::"
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. tomblast=$(_cat ${tombmount}/.last | tr -d ' ')
+#. for e in ${(f@)mapfile[/etc/passwd]}; do
+#. [[ "$e" =~ ":$tombuid:" ]] && {
+#. tombuser="${e[(ws@:@)1]}" }
+#. done
+#. _message "Last visit by ::1 user::(::2 tomb build::) from ::3 tty:: on ::4 host::" $tombuser $tombuid $tombtty $tombhost
+#. > _message "on date ::1 date::" "`date --date=@${tomblast} +%c`"
+#. }
+#. # write down the UID and TTY that opened the tomb
+#. rm -f ${tombmount}/.uid
+#. print $_UID > ${tombmount}/.uid
+#: tomb:1801
msgid "on date ::1 date::"
msgstr "el ::1 fecha::"
-#: warning
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#.
+#. # Default mount options are overridden with the -o switch
+#. [[ -n ${(k)OPTS[-o]} ]] && MOUNTOPTS=${OPTS[-o]}
+#.
+#. # No HOME set? Note: this should never happen again.
+#. [[ -z $HOME ]] && {
+#. > _warning "How pitiful! A tomb, and no HOME."
+#. return 1 }
+#.
+#. [[ -z $mnt || ! -d $mnt ]] && {
+#. _warning "Cannot exec bind hooks without a mounted tomb."
+#: tomb:1849
+msgid "How pitiful! A tomb, and no HOME."
+msgstr "¡Que lamentable! Una tumba, y ningún HOGAR."
+
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. # No HOME set? Note: this should never happen again.
+#. [[ -z $HOME ]] && {
+#. _warning "How pitiful! A tomb, and no HOME."
+#. return 1 }
+#.
+#. [[ -z $mnt || ! -d $mnt ]] && {
+#. > _warning "Cannot exec bind hooks without a mounted tomb."
+#. return 1 }
+#.
+#. [[ -r "$mnt/bind-hooks" ]] || {
+#. _verbose "bind-hooks not found in ::1 mount point::" $mnt
+#: tomb:1853
+msgid "Cannot exec bind hooks without a mounted tomb."
+msgstr "No se pueden ejecutar los bind-hooks sin una tumba montada."
+
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. # better parsing for bind hooks checks for two separated words on
+#. # each line, using zsh word separator array subscript
+#. _bindhooks="${mapfile[${mnt}/bind-hooks]}"
+#. for h in ${(f)_bindhooks}; do
+#. s="${h[(w)1]}"
+#. d="${h[(w)2]}"
+#. > [[ "$s" = "" ]] && { _warning "bind-hooks file is broken"; return 1 }
+#. [[ "$d" = "" ]] && { _warning "bind-hooks file is broken"; return 1 }
+#. maps+=($s $d)
+#. _verbose "bind-hook found: $s -> $d"
+#. done
+#: tomb:1869
msgid "bind-hooks file is broken"
msgstr "El fichero de bind-hooks está roto."
-#: warning
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. _verbose "bind-hook found: $s -> $d"
+#. done
+#. unset _bindhooks
+#.
+#. for dir in ${(k)maps}; do
+#. [[ "${dir[1]}" == "/" || "${dir[1,2]}" == ".." ]] && {
+#. > _warning "bind-hooks map format: local/to/tomb local/to/\$HOME"
+#. continue }
+#.
+#. [[ "${${maps[$dir]}[1]}" == "/" || "${${maps[$dir]}[1,2]}" == ".." ]] && {
+#. _warning "bind-hooks map format: local/to/tomb local/to/\$HOME. Rolling back"
+#: tomb:1878
msgid "bind-hooks map format: local/to/tomb local/to/$HOME"
msgstr "Formato de mapeo de los bind-hooks: local/to/tomb local/to/$HOME"
-#: warning
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. for dir in ${(k)maps}; do
+#. [[ "${dir[1]}" == "/" || "${dir[1,2]}" == ".." ]] && {
+#. _warning "bind-hooks map format: local/to/tomb local/to/\$HOME"
+#. continue }
+#.
+#. [[ "${${maps[$dir]}[1]}" == "/" || "${${maps[$dir]}[1,2]}" == ".." ]] && {
+#. > _warning "bind-hooks map format: local/to/tomb local/to/\$HOME. Rolling back"
+#. for dir in ${mounted}; do sudo umount $dir; done
+#. return 1 }
+#.
+#. if [[ ! -r "$HOME/${maps[$dir]}" ]]; then
+#: tomb:1882
msgid "bind-hooks map format: local/to/tomb local/to/$HOME. Rolling back"
-msgstr "Formato de mapeo de los bind-hooks: local/to/tomb local/to/HOME. Restaurando"
-
-#: warning
+msgstr ""
+"Formato de mapeo de los bind-hooks: local/to/tomb local/to/HOME. Restaurando"
+
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. [[ "${${maps[$dir]}[1]}" == "/" || "${${maps[$dir]}[1,2]}" == ".." ]] && {
+#. _warning "bind-hooks map format: local/to/tomb local/to/\$HOME. Rolling back"
+#. for dir in ${mounted}; do sudo umount $dir; done
+#. return 1 }
+#.
+#. if [[ ! -r "$HOME/${maps[$dir]}" ]]; then
+#. > _warning "bind-hook target not existent, skipping ::1 home::/::2 subdir::" $HOME ${maps[$dir]}
+#. elif [[ ! -r "$mnt/$dir" ]]; then
+#. _warning "bind-hook source not found in tomb, skipping ::1 mount point::/::2 subdir::" $mnt $dir
+#. else
+#. sudo mount -o bind,$MOUNTOPTS $mnt/$dir $HOME/${maps[$dir]} #: tomb:1887
msgid "bind-hook target not existent, skipping ::1 home::/::2 subdir::"
-msgstr "No existe un objetivo para el bind-hook, omitiendo ::1 hogar::/::2 directorio::"
-
-#: warning
-msgid "bind-hook source not found in tomb, skipping ::1 mount point::/::2 subdir::"
-msgstr "No se ha encontrado la fuente para el bind-hook en la tumba, omitiendo ::1 punto de montaje::/::2 directorio::"
-
-#: failure
+msgstr ""
+"No existe un objetivo para el bind-hook, omitiendo ::1 hogar::/::2 "
+"directorio::"
+
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. for dir in ${mounted}; do sudo umount $dir; done
+#. return 1 }
+#.
+#. if [[ ! -r "$HOME/${maps[$dir]}" ]]; then
+#. _warning "bind-hook target not existent, skipping ::1 home::/::2 subdir::" $HOME ${maps[$dir]}
+#. elif [[ ! -r "$mnt/$dir" ]]; then
+#. > _warning "bind-hook source not found in tomb, skipping ::1 mount point::/::2 subdir::" $mnt $dir
+#. else
+#. sudo mount -o bind,$MOUNTOPTS $mnt/$dir $HOME/${maps[$dir]} #. && mounted+=("$HOME/${maps[$dir]}")
+#. fi
+#: tomb:1889
+msgid ""
+"bind-hook source not found in tomb, skipping ::1 mount point::/::2 subdir::"
+msgstr ""
+"No se ha encontrado la fuente para el bind-hook en la tumba, omitiendo ::1 "
+"punto de montaje::/::2 directorio::"
+
+#. Fold: Open
+#. Function: exec_safe_post_hooks
+#.
+#. Code sample:
+#. # Only run if post-hooks has the executable bit set
+#. [[ -x $mnt/post-hooks ]] || return
+#.
+#. # If the file starts with a shebang, run it.
+#. cat $mnt/post-hooks | head -n1 | grep '^#!\s*/' &> /dev/null
+#. [[ $? == 0 ]] && {
+#. > _success "Post hooks found, executing as user ::1 user name::." $USERNAME
+#. $mnt/post-hooks $act $mnt
+#. }
+#. }
+#.
+#: tomb:1917
+msgid "Post hooks found, executing as user ::1 user name::."
+msgstr ""
+"Se han encontrado post-hooks, se ejecutarán con el usuario ::1 usuario::."
+
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. local tombname tombmount tombfs tombfsopts tombloop
+#. local ts tombtot tombused tombavail tombpercent tombp tombsince
+#. local tombtty tombhost tombuid tombuser
+#. # list all open tombs
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. > _failure "I can't see any ::1 status:: tomb, may they all rest in peace." ${1:-open} }
+#.
+#. for t in ${mounted_tombs}; do
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#: tomb:1936
msgid "I can't see any ::1 status:: tomb, may they all rest in peace."
msgstr "No puedo ver ninguna tumba ::1 estado::. Que todos descansen en paz."
-#: message
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. tombuser="${ee[(ws@:@)1]}" }
+#. done
+#. }
+#.
+#. { option_is_set --get-mountpoint } && { print $tombmount; continue }
+#.
+#. > _message "::1 tombname:: open on ::2 tombmount:: using ::3 tombfsopts::" #. $tombname $tombmount $tombfsopts
+#.
+#. _message "::1 tombname:: open since ::2 tombsince::" $tombname $tombsince
+#.
+#: tomb:1969
msgid "::1 tombname:: open on ::2 tombmount:: using ::3 tombfsopts::"
-msgstr "Se ha abierto ::1 nombre:: en ::2 punto de montaje:: usando ::3 opciones::"
-
-#: message
+msgstr ""
+"Se ha abierto ::1 nombre:: en ::2 punto de montaje:: usando ::3 opciones::"
+
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#.
+#. { option_is_set --get-mountpoint } && { print $tombmount; continue }
+#.
+#. _message "::1 tombname:: open on ::2 tombmount:: using ::3 tombfsopts::" #. $tombname $tombmount $tombfsopts
+#.
+#. > _message "::1 tombname:: open since ::2 tombsince::" $tombname $tombsince
+#.
+#. [[ -z "$tombtty" ]] || {
+#. _message "::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::" #. $tombname $tombuser $tombtty $tombhost
+#: tomb:1972
msgid "::1 tombname:: open since ::2 tombsince::"
msgstr "::1 nombre:: abierto desde ::2 cuando::"
-#: message
-msgid "::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::"
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. _message "::1 tombname:: open on ::2 tombmount:: using ::3 tombfsopts::" #. $tombname $tombmount $tombfsopts
+#.
+#. _message "::1 tombname:: open since ::2 tombsince::" $tombname $tombsince
+#.
+#. [[ -z "$tombtty" ]] || {
+#. > _message "::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::" #. $tombname $tombuser $tombtty $tombhost
+#. }
+#.
+#. _message "::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::%) is used: ::4 tombavail:: free " #: tomb:1975
+msgid ""
+"::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::"
msgstr "::1 nombre:: abierto por ::2 usuario:: desde ::3 tty:: en ::4 host::"
-#: message
-msgid "::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::%) is used: ::4 tombavail:: free "
-msgstr "::1 nombre:: de tamaño ::2 total:: del que ::3 usado:: (::5 porcentaje::%) se usa y ::4 disponible:: está libre "
-
-#: warning
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#.
+#. [[ -z "$tombtty" ]] || {
+#. _message "::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::" #. $tombname $tombuser $tombtty $tombhost
+#. }
+#.
+#. > _message "::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::%) is used: ::4 tombavail:: free " #. $tombname $tombtot $tombused $tombavail $tombpercent
+#.
+#. [[ ${tombp} -ge 90 ]] && {
+#. _warning "::1 tombname:: warning: your tomb is almost full!" $tombname
+#: tomb:1979
+msgid ""
+"::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::"
+"%) is used: ::4 tombavail:: free "
+msgstr ""
+"::1 nombre:: de tamaño ::2 total:: del que ::3 usado:: (::5 porcentaje::%) "
+"se usa y ::4 disponible:: está libre "
+
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. }
+#.
+#. _message "::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::%) is used: ::4 tombavail:: free " #. $tombname $tombtot $tombused $tombavail $tombpercent
+#.
+#. [[ ${tombp} -ge 90 ]] && {
+#. > _warning "::1 tombname:: warning: your tomb is almost full!" $tombname
+#. }
+#.
+#. # Now check hooks
+#. mounted_hooks=(`list_tomb_binds $tombname`)
+#: tomb:1983
msgid "::1 tombname:: warning: your tomb is almost full!"
msgstr "Advertencia: ¡tu tumba (::1 nombre::) está casi llena!"
-#: message
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. _warning "::1 tombname:: warning: your tomb is almost full!" $tombname
+#. }
+#.
+#. # Now check hooks
+#. mounted_hooks=(`list_tomb_binds $tombname`)
+#. for h in ${mounted_hooks}; do
+#. > _message "::1 tombname:: hooks ::2 hookname:: on ::3 hookdest::" #. $tombname "`basename ${h[(ws:;:)1]}`" ${h[(ws:;:)2]}
+#. done
+#. done
+#. }
+#: tomb:1989
msgid "::1 tombname:: hooks ::2 hookname:: on ::3 hookdest::"
msgstr "::1 tumba:: englaza ::2 hook:: en ::3 destino::"
-#: failure
+#. Fold: List
+#. Function: list_tomb_binds
+#.
+#. Code sample:
+#. # list_tomb_binds
+#. # print out an array of mounted bind hooks (internal use)
+#. # format is semi-colon separated list of attributes
+#. # needs an argument: name of tomb whose hooks belong
+#. list_tomb_binds() {
+#. [[ -z "$1" ]] && {
+#. > _failure "Internal error: list_tomb_binds called without argument." }
+#.
+#. # list bind hooks on util-linux 2.20 (Debian 7)
+#. mount -l #. | awk -vtomb="$1" '
+#: tomb:2044
msgid "Internal error: list_tomb_binds called without argument."
msgstr "Error interno: se ha llamado a list_tomb_binds sin argumento."
-#: failure
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. # {{{ Index and search
+#.
+#. # index files in all tombs for search
+#. # $1 is optional, to specify a tomb
+#. index_tombs() {
+#. { command -v updatedb 1>/dev/null 2>/dev/null } || {
+#. > _failure "Cannot index tombs on this system: updatedb (mlocate) not installed." }
+#.
+#. updatedbver=`updatedb --version | grep '^updatedb'`
+#. [[ "$updatedbver" =~ "GNU findutils" ]] && {
+#. _warning "Cannot use GNU findutils for index/search commands." }
+#: tomb:2076
msgid "Cannot index tombs on this system: updatedb (mlocate) not installed."
-msgstr "No se pueden indexar la tumbas en este sistema: updatedb (mlocate) no está instalado."
-
-#: warning
+msgstr ""
+"No se pueden indexar la tumbas en este sistema: updatedb (mlocate) no está "
+"instalado."
+
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. index_tombs() {
+#. { command -v updatedb 1>/dev/null 2>/dev/null } || {
+#. _failure "Cannot index tombs on this system: updatedb (mlocate) not installed." }
+#.
+#. updatedbver=`updatedb --version | grep '^updatedb'`
+#. [[ "$updatedbver" =~ "GNU findutils" ]] && {
+#. > _warning "Cannot use GNU findutils for index/search commands." }
+#. [[ "$updatedbver" =~ "mlocate" ]] || {
+#. _failure "Index command needs 'mlocate' to be installed." }
+#.
+#. _verbose "$updatedbver"
+#: tomb:2080
msgid "Cannot use GNU findutils for index/search commands."
msgstr "No se puede usar GNU findutils para los comandos index/search."
-#: failure
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. _failure "Cannot index tombs on this system: updatedb (mlocate) not installed." }
+#.
+#. updatedbver=`updatedb --version | grep '^updatedb'`
+#. [[ "$updatedbver" =~ "GNU findutils" ]] && {
+#. _warning "Cannot use GNU findutils for index/search commands." }
+#. [[ "$updatedbver" =~ "mlocate" ]] || {
+#. > _failure "Index command needs 'mlocate' to be installed." }
+#.
+#. _verbose "$updatedbver"
+#.
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#: tomb:2082
msgid "Index command needs 'mlocate' to be installed."
msgstr "El comando index necesita que 'mlocate' esté instalado."
-#: failure
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. _verbose "$updatedbver"
+#.
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. # Considering one tomb
+#. [[ -n "$1" ]] && {
+#. > _failure "There seems to be no open tomb engraved as [::1::]" $1 }
+#. # Or more
+#. _failure "I can't see any open tomb, may they all rest in peace." }
+#.
+#. _success "Creating and updating search indexes."
+#: tomb:2090
msgid "There seems to be no open tomb engraved as [::1::]"
msgstr "Parece que existe una tumba con el grabado [::1::]"
-#: message
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. # Considering one tomb
+#. [[ -n "$1" ]] && {
+#. _failure "There seems to be no open tomb engraved as [::1::]" $1 }
+#. # Or more
+#. > _failure "I can't see any open tomb, may they all rest in peace." }
+#.
+#. _success "Creating and updating search indexes."
+#.
+#. # start the LibreOffice document converter if installed
+#: tomb:2092
+msgid "I can't see any open tomb, may they all rest in peace."
+msgstr "No puedo ver ninguna tumba abierta. Que todos descansen en paz."
+
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. # Considering one tomb
+#. [[ -n "$1" ]] && {
+#. _failure "There seems to be no open tomb engraved as [::1::]" $1 }
+#. # Or more
+#. _failure "I can't see any open tomb, may they all rest in peace." }
+#.
+#. > _success "Creating and updating search indexes."
+#.
+#. # start the LibreOffice document converter if installed
+#. { command -v unoconv 1>/dev/null 2>/dev/null } && {
+#. unoconv -l 2>/dev/null &
+#: tomb:2094
+msgid "Creating and updating search indexes."
+msgstr "Creando y actualizando índices de búsqueda."
+
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#.
+#. for t in ${mounted_tombs}; do
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#. tombmount=${t[(ws:;:)2]}
+#. [[ -r ${tombmount}/.noindex ]] && {
+#. > _message "Skipping ::1 tomb name:: (.noindex found)." $tombname
+#. continue }
+#. _message "Indexing ::1 tomb name:: filenames..." $tombname
+#. updatedb -l 0 -o ${tombmount}/.updatedb -U ${tombmount}
+#.
+#: tomb:2107
msgid "Skipping ::1 tomb name:: (.noindex found)."
msgstr "Omitiendo ::1 tumba:: (se ha econtrado .noindex)."
-#: message
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#. tombmount=${t[(ws:;:)2]}
+#. [[ -r ${tombmount}/.noindex ]] && {
+#. _message "Skipping ::1 tomb name:: (.noindex found)." $tombname
+#. continue }
+#. > _message "Indexing ::1 tomb name:: filenames..." $tombname
+#. updatedb -l 0 -o ${tombmount}/.updatedb -U ${tombmount}
+#.
+#. # here we use swish to index file contents
+#. [[ $SWISH == 1 ]] && {
+#: tomb:2109
msgid "Indexing ::1 tomb name:: filenames..."
msgstr "Indexando los nombre de fichero de ::1 tumba::..."
-#: message
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. continue }
+#. _message "Indexing ::1 tomb name:: filenames..." $tombname
+#. updatedb -l 0 -o ${tombmount}/.updatedb -U ${tombmount}
+#.
+#. # here we use swish to index file contents
+#. [[ $SWISH == 1 ]] && {
+#. > _message "Indexing ::1 tomb name:: contents..." $tombname
+#. [[ -r ${tombmount}/.swishrc ]] || {
+#. _message "Generating a new swish-e configuration file: ::1 swish conf::" ${tombmount}/.swishrc
+#. cat <<EOF > ${tombmount}/.swishrc
+#. # index directives
+#: tomb:2114
msgid "Indexing ::1 tomb name:: contents..."
msgstr "Indexando el contenido de ::1 tumba::..."
-#: message
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. updatedb -l 0 -o ${tombmount}/.updatedb -U ${tombmount}
+#.
+#. # here we use swish to index file contents
+#. [[ $SWISH == 1 ]] && {
+#. _message "Indexing ::1 tomb name:: contents..." $tombname
+#. [[ -r ${tombmount}/.swishrc ]] || {
+#. > _message "Generating a new swish-e configuration file: ::1 swish conf::" ${tombmount}/.swishrc
+#. cat <<EOF > ${tombmount}/.swishrc
+#. # index directives
+#. DefaultContents TXT*
+#. IndexDir $tombmount
+#: tomb:2116
+msgid "Generating a new swish-e configuration file: ::1 swish conf::"
+msgstr "Generando un nuevo fichero de configuración de swish-e: ::1 conf::"
+
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. }
+#.
+#. swish-e -c ${tombmount}/.swishrc -S fs -v3
+#.
+#. }
+#.
+#. > _message "Search index updated."
+#. done
+#. }
+#. search_tombs() {
+#. { command -v locate 1>/dev/null 2>/dev/null } || {
+#: tomb:2190
+msgid "Search index updated."
+msgstr "Índice de búsqueda actualizado."
+
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#.
+#. # list all open tombs
+#. mounted_tombs=(`list_tomb_mounts`)
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. _failure "I can't see any open tomb, may they all rest in peace." }
+#.
+#. > _success "Searching for: ::1::" ${(f)@}
+#. for t in ${mounted_tombs}; do
+#. _verbose "Checking for index: ::1::" ${t}
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#: tomb:2210
+msgid "Searching for: ::1::"
+msgstr "Buscando ::1::"
+
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. _verbose "Checking for index: ::1::" ${t}
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#. tombmount=${t[(ws:;:)2]}
+#. [[ -r ${tombmount}/.updatedb ]] && {
+#. # Use mlocate to search hits on filenames
+#. > _message "Searching filenames in tomb ::1 tomb name::" $tombname
+#. locate -d ${tombmount}/.updatedb -e -i "${(f)@}"
+#. _message "Matches found: ::1 matches::" #. $(locate -d ${tombmount}/.updatedb -e -i -c ${(f)@})
+#.
+#: tomb:2218
msgid "Searching filenames in tomb ::1 tomb name::"
msgstr "Buscando nombres de fichero en la tumba ::1 tumba::"
-#: message
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. tombname=${t[(ws:;:)5]}
+#. tombmount=${t[(ws:;:)2]}
+#. [[ -r ${tombmount}/.updatedb ]] && {
+#. # Use mlocate to search hits on filenames
+#. _message "Searching filenames in tomb ::1 tomb name::" $tombname
+#. locate -d ${tombmount}/.updatedb -e -i "${(f)@}"
+#. > _message "Matches found: ::1 matches::" #. $(locate -d ${tombmount}/.updatedb -e -i -c ${(f)@})
+#.
+#. # Use swish-e to search over contents
+#. [[ $SWISH == 1 && -r $tombmount/.swish ]] && {
+#: tomb:2220
msgid "Matches found: ::1 matches::"
msgstr "Se han encontrado coindicencias: ::1::"
-#: message
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. locate -d ${tombmount}/.updatedb -e -i "${(f)@}"
+#. _message "Matches found: ::1 matches::" #. $(locate -d ${tombmount}/.updatedb -e -i -c ${(f)@})
+#.
+#. # Use swish-e to search over contents
+#. [[ $SWISH == 1 && -r $tombmount/.swish ]] && {
+#. > _message "Searching contents in tomb ::1 tomb name::" $tombname
+#. swish-e -w ${=@} -f $tombmount/.swish -H0 }
+#. } || {
+#. _warning "Skipping tomb ::1 tomb name::: not indexed." $tombname
+#. _warning "Run 'tomb index' to create indexes." }
+#: tomb:2225
msgid "Searching contents in tomb ::1 tomb name::"
msgstr "Buscando contenido en la tumba ::1 tumba::"
-#: warning
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#.
+#. # Use swish-e to search over contents
+#. [[ $SWISH == 1 && -r $tombmount/.swish ]] && {
+#. _message "Searching contents in tomb ::1 tomb name::" $tombname
+#. swish-e -w ${=@} -f $tombmount/.swish -H0 }
+#. } || {
+#. > _warning "Skipping tomb ::1 tomb name::: not indexed." $tombname
+#. _warning "Run 'tomb index' to create indexes." }
+#. done
+#. _message "Search completed."
+#. }
+#: tomb:2228
msgid "Skipping tomb ::1 tomb name::: not indexed."
msgstr "Omitiendo tumba ::1 tomb name::: no se ha indexado."
-#: message
-msgid "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes."
-msgstr "Se ha ordenado cambiar el tamaño de la tumba ::1 tumba:: a ::2 tamaño:: megabytes."
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. # Use swish-e to search over contents
+#. [[ $SWISH == 1 && -r $tombmount/.swish ]] && {
+#. _message "Searching contents in tomb ::1 tomb name::" $tombname
+#. swish-e -w ${=@} -f $tombmount/.swish -H0 }
+#. } || {
+#. _warning "Skipping tomb ::1 tomb name::: not indexed." $tombname
+#. > _warning "Run 'tomb index' to create indexes." }
+#. done
+#. _message "Search completed."
+#. }
+#.
+#: tomb:2229
+msgid "Run 'tomb index' to create indexes."
+msgstr "Corre 'tomb index' para crear los índices."
+
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. _message "Searching contents in tomb ::1 tomb name::" $tombname
+#. swish-e -w ${=@} -f $tombmount/.swish -H0 }
+#. } || {
+#. _warning "Skipping tomb ::1 tomb name::: not indexed." $tombname
+#. _warning "Run 'tomb index' to create indexes." }
+#. done
+#. > _message "Search completed."
+#. }
+#.
+#. # }}} - Index and search
+#.
+#: tomb:2231
+msgid "Search completed."
+msgstr "Búsqueda completada."
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. # {{{ Resize
+#.
+#. # resize tomb file size
+#. resize_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. > _message "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes." $1 $OPTS[-s]
+#.
+#. [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing."
+#. [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath
+#.
+#: tomb:2242
+msgid "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes."
+msgstr ""
+"Se ha ordenado cambiar el tamaño de la tumba ::1 tumba:: a ::2 tamaño:: "
+"megabytes."
+
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. # resize tomb file size
+#. resize_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. _message "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes." $1 $OPTS[-s]
+#.
+#. > [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing."
+#. [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath
+#.
+#. newtombsize="`option_value -s`"
+#. [[ -z "$newtombsize" ]] && {
+#: tomb:2244
+msgid "No tomb name specified for resizing."
+msgstr ""
+"No se ha especificado el nombre de la tumba a la que cambiar el tamaño."
+
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. resize_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. _message "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes." $1 $OPTS[-s]
+#.
+#. [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing."
+#. > [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath
+#.
+#. newtombsize="`option_value -s`"
+#. [[ -z "$newtombsize" ]] && {
+#. _failure "Aborting operations: new size was not specified, use -s" }
+#: tomb:2245
msgid "Cannot find ::1::"
msgstr "No se puede encontrar ::1::"
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#.
+#. [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing."
+#. [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath
+#.
+#. newtombsize="`option_value -s`"
+#. [[ -z "$newtombsize" ]] && {
+#. > _failure "Aborting operations: new size was not specified, use -s" }
+#.
+#. is_valid_tomb $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. _load_key # Try loading new key from option -k and set TOMBKEYFILE
+#: tomb:2249
msgid "Aborting operations: new size was not specified, use -s"
msgstr "Abortando operaciones: no se ha especificado un nuevo tamaño, usa -s"
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. local oldtombsize=$(( `stat -c %s "$TOMBPATH" 2>/dev/null` / 1048576 ))
+#. local mounted_tomb=`mount -l |
+#. awk -vtomb="[$TOMBNAME]" '/^\/dev\/mapper\/tomb/ { if($7==tomb) print $1 }'`
+#.
+#. # Tomb must not be open
+#. [[ -z "$mounted_tomb" ]] || {
+#. > _failure "Please close the tomb ::1 tomb name:: before trying to resize it." $TOMBNAME }
+#. # New tomb size must be specified
+#. [[ -n "$newtombsize" ]] || {
+#. _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
+#. # New tomb size must be an integer
+#: tomb:2261
msgid "Please close the tomb ::1 tomb name:: before trying to resize it."
msgstr "Por favor, cierra la tumba ::1 nombre:: antes de cambiar su tamaño."
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#.
+#. # Tomb must not be open
+#. [[ -z "$mounted_tomb" ]] || {
+#. _failure "Please close the tomb ::1 tomb name:: before trying to resize it." $TOMBNAME }
+#. # New tomb size must be specified
+#. [[ -n "$newtombsize" ]] || {
+#. > _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
+#. # New tomb size must be an integer
+#. [[ $newtombsize == <-> ]] || _failure "Size is not an integer."
+#. # Tombs can only grow in size
+#. [[ "$newtombsize" -gt "$oldtombsize" ]] || {
+#: tomb:2264
msgid "You must specify the new size of ::1 tomb name::"
msgstr "Debes especificar el nuevo tamaño de ::1 tumba::"
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. [[ -z "$mounted_tomb" ]] || {
+#. _failure "Please close the tomb ::1 tomb name:: before trying to resize it." $TOMBNAME }
+#. # New tomb size must be specified
+#. [[ -n "$newtombsize" ]] || {
+#. _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
+#. # New tomb size must be an integer
+#. > [[ $newtombsize == <-> ]] || _failure "Size is not an integer."
+#. # Tombs can only grow in size
+#. [[ "$newtombsize" -gt "$oldtombsize" ]] || {
+#. _failure "The new size must be greater then old tomb size." }
+#.
+#: tomb:2266
+msgid "Size is not an integer."
+msgstr "El tamaño no es un número entero."
+
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. [[ -n "$newtombsize" ]] || {
+#. _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
+#. # New tomb size must be an integer
+#. [[ $newtombsize == <-> ]] || _failure "Size is not an integer."
+#. # Tombs can only grow in size
+#. [[ "$newtombsize" -gt "$oldtombsize" ]] || {
+#. > _failure "The new size must be greater then old tomb size." }
+#.
+#. delta="$(( $newtombsize - $oldtombsize ))"
+#.
+#. _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $newtombsize
+#: tomb:2269
+msgid "The new size must be greater then old tomb size."
+msgstr "El nuevo tamaño debe ser mayor que el viejo tamaño de la tumba."
+
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $newtombsize
+#.
+#. _verbose "Data dump using ::1:: from /dev/urandom" ${DD[1]}
+#. ${=DD} if=/dev/urandom bs=1048576 count=${delta} >> $TOMBPATH
+#.
+#. [[ $? == 0 ]] || {
+#. > _failure "Error creating the extra resize ::1 size::, operation aborted." $tmp_resize }
+#.
+#. { option_is_set --tomb-pwd } && {
+#. tomb_pwd="`option_value --tomb-pwd`"
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tomb_pwd
+#: tomb:2279
msgid "Error creating the extra resize ::1 size::, operation aborted."
msgstr "Error al crear el espacio extra ::1 tamaño::, operación abortada."
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. mapper="tomb.$TOMBNAME.$mapdate.$(basename $nstloop)"
+#.
+#. _cryptsetup luksOpen ${nstloop} ${mapper} || {
+#. _failure "Failure mounting the encrypted file." }
+#.
+#. sudo cryptsetup resize "${mapper}" || {
+#. > _failure "cryptsetup failed to resize ::1 mapper::" $mapper }
+#.
+#. sudo e2fsck -p -f /dev/mapper/${mapper} || {
+#. _failure "e2fsck failed to check ::1 mapper::" $mapper }
+#.
+#: tomb:2300
msgid "cryptsetup failed to resize ::1 mapper::"
msgstr "cryptsetup ha fallado al cambiar el tamaño de ::1 mapper::"
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. _failure "Failure mounting the encrypted file." }
+#.
+#. sudo cryptsetup resize "${mapper}" || {
+#. _failure "cryptsetup failed to resize ::1 mapper::" $mapper }
+#.
+#. sudo e2fsck -p -f /dev/mapper/${mapper} || {
+#. > _failure "e2fsck failed to check ::1 mapper::" $mapper }
+#.
+#. sudo resize2fs /dev/mapper/${mapper} || {
+#. _failure "resize2fs failed to resize ::1 mapper::" $mapper }
+#.
+#: tomb:2303
msgid "e2fsck failed to check ::1 mapper::"
msgstr "e2fsck ha fallado al comprobar ::1::"
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. _failure "cryptsetup failed to resize ::1 mapper::" $mapper }
+#.
+#. sudo e2fsck -p -f /dev/mapper/${mapper} || {
+#. _failure "e2fsck failed to check ::1 mapper::" $mapper }
+#.
+#. sudo resize2fs /dev/mapper/${mapper} || {
+#. > _failure "resize2fs failed to resize ::1 mapper::" $mapper }
+#.
+#. # close and free the loop device
+#. sudo cryptsetup luksClose "${mapper}"
+#.
+#: tomb:2306
msgid "resize2fs failed to resize ::1 mapper::"
msgstr "resize2fs ha fallado al cambiar el tamaño de ::1::"
-#: warning
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. mounted_tombs=(`list_tomb_mounts`)
+#. else
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#. fi
+#.
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. > _failure "There is no open tomb to be closed." }
+#.
+#. [[ ${#mounted_tombs} -gt 1 && -z "$1" ]] && {
+#. _warning "Too many tombs mounted, please specify one (see tomb list)"
+#. _warning "or issue the command 'tomb close all' to close them all."
+#: tomb:2330
+msgid "There is no open tomb to be closed."
+msgstr "No hay ninguna tumba abierta que cerrar."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. fi
+#.
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. _failure "There is no open tomb to be closed." }
+#.
+#. [[ ${#mounted_tombs} -gt 1 && -z "$1" ]] && {
+#. > _warning "Too many tombs mounted, please specify one (see tomb list)"
+#. _warning "or issue the command 'tomb close all' to close them all."
+#. _failure "Operation aborted." }
+#.
+#. for t in ${mounted_tombs}; do
+#: tomb:2333
+msgid "Too many tombs mounted, please specify one (see tomb list)"
+msgstr "Demasiadas tumbas abietas, por favor, especifica una (véase tomb list)"
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. _failure "There is no open tomb to be closed." }
+#.
+#. [[ ${#mounted_tombs} -gt 1 && -z "$1" ]] && {
+#. _warning "Too many tombs mounted, please specify one (see tomb list)"
+#. > _warning "or issue the command 'tomb close all' to close them all."
+#. _failure "Operation aborted." }
+#.
+#. for t in ${mounted_tombs}; do
+#. mapper=`basename ${t[(ws:;:)1]}`
+#: tomb:2334
+msgid "or issue the command 'tomb close all' to close them all."
+msgstr "o utiliza el comando 'tomb close all' para cerrarlas todas."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. _verbose "Name: ::1 tomb name::" $tombname
+#. _verbose "Mount: ::1 mount point::" $tombmount
+#. _verbose "Mapper: ::1 mapper::" $mapper
+#.
+#. [[ -e "$mapper" ]] && {
+#. > _warning "Tomb not found: ::1 tomb file::" $1
+#. _warning "Please specify an existing tomb."
+#. return 0 }
+#.
+#. [[ -n $SLAM ]] && {
+#: tomb:2350
msgid "Tomb not found: ::1 tomb file::"
msgstr "No se ha encontrado la tumba: ::1 tumba::"
-#: failure
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _verbose "Name: ::1 tomb name::" $tombname
+#. _verbose "Mount: ::1 mount point::" $tombmount
+#. _verbose "Mapper: ::1 mapper::" $mapper
+#.
+#. [[ -e "$mapper" ]] && {
+#. _warning "Tomb not found: ::1 tomb file::" $1
+#. > _warning "Please specify an existing tomb."
+#. return 0 }
+#.
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" #: tomb:2351
+msgid "Please specify an existing tomb."
+msgstr "Por favor, especifica una tumba existente."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. [[ -e "$mapper" ]] && {
+#. _warning "Tomb not found: ::1 tomb file::" $1
+#. _warning "Please specify an existing tomb."
+#. return 0 }
+#.
+#. [[ -n $SLAM ]] && {
+#. > _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount
+#. _message "Kill all processes busy inside the tomb."
+#. { slam_tomb "$tombmount" } || {
+#. _failure "Cannot slam the tomb ::1 tomb name::" $tombname }
+#: tomb:2355
+msgid "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::"
+msgstr ""
+"Cerrando de un portazo la tumba ::1 nombre:: montada en ::2 punto de "
+"montaje::."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _warning "Please specify an existing tomb."
+#. return 0 }
+#.
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount
+#. > _message "Kill all processes busy inside the tomb."
+#. { slam_tomb "$tombmount" } || {
+#. _failure "Cannot slam the tomb ::1 tomb name::" $tombname }
+#. } || {
+#. _message "Closing tomb ::1 tomb name:: mounted on ::2 mount point::" #: tomb:2357
+msgid "Kill all processes busy inside the tomb."
+msgstr "Mata todos los procesos ocupados dentro de la tumba."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount
+#. _message "Kill all processes busy inside the tomb."
+#. { slam_tomb "$tombmount" } || {
+#. > _failure "Cannot slam the tomb ::1 tomb name::" $tombname }
+#. } || {
+#. _message "Closing tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount }
+#.
+#: tomb:2359
msgid "Cannot slam the tomb ::1 tomb name::"
msgstr "No se puede cerrar de un portazo la tumba ::1 tumba::"
-#: message
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount
+#. _message "Kill all processes busy inside the tomb."
+#. { slam_tomb "$tombmount" } || {
+#. _failure "Cannot slam the tomb ::1 tomb name::" $tombname }
+#. } || {
+#. > _message "Closing tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount }
+#.
+#. # check if there are binded dirs and close them
+#. bind_tombs=(`list_tomb_binds $tombname`)
+#: tomb:2361
msgid "Closing tomb ::1 tomb name:: mounted on ::2 mount point::"
msgstr "Cerrando la tumba ::1 tumba:: montada en ::2 punto de montaje::"
-#: message
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. # check if there are binded dirs and close them
+#. bind_tombs=(`list_tomb_binds $tombname`)
+#. for b in ${bind_tombs}; do
+#. bind_mapper="${b[(ws:;:)1]}"
+#. bind_mount="${b[(ws:;:)2]}"
+#. > _message "Closing tomb bind hook: ::1 hook::" $bind_mount
+#. sudo umount $bind_mount || {
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb: killing all processes using this hook."
+#. slam_tomb "$bind_mount"
+#: tomb:2369
msgid "Closing tomb bind hook: ::1 hook::"
msgstr "Cerrando el bind-hook: ::1::"
-#: failure
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. for b in ${bind_tombs}; do
+#. bind_mapper="${b[(ws:;:)1]}"
+#. bind_mount="${b[(ws:;:)2]}"
+#. _message "Closing tomb bind hook: ::1 hook::" $bind_mount
+#. sudo umount $bind_mount || {
+#. [[ -n $SLAM ]] && {
+#. > _success "Slamming tomb: killing all processes using this hook."
+#. slam_tomb "$bind_mount"
+#. [[ $? == 1 ]] && {
+#. _failure "Cannot slam the bind hook ::1 hook::" $bind_mount }
+#. umount $bind_mount
+#: tomb:2372
+msgid "Slamming tomb: killing all processes using this hook."
+msgstr ""
+"Cerrando tumba de un portazo: matando todos los procesos que usan este hook."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _message "Closing tomb bind hook: ::1 hook::" $bind_mount
+#. sudo umount $bind_mount || {
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb: killing all processes using this hook."
+#. slam_tomb "$bind_mount"
+#. [[ $? == 1 ]] && {
+#. > _failure "Cannot slam the bind hook ::1 hook::" $bind_mount }
+#. umount $bind_mount
+#. } || {
+#. _warning "Tomb bind hook ::1 hook:: is busy, cannot close tomb." $bind_mount }
+#. }
+#: tomb:2375
msgid "Cannot slam the bind hook ::1 hook::"
msgstr "No se puede cerrar de un portazo el bind-hook ::1::"
-#: warning
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _success "Slamming tomb: killing all processes using this hook."
+#. slam_tomb "$bind_mount"
+#. [[ $? == 1 ]] && {
+#. _failure "Cannot slam the bind hook ::1 hook::" $bind_mount }
+#. umount $bind_mount
+#. } || {
+#. > _warning "Tomb bind hook ::1 hook:: is busy, cannot close tomb." $bind_mount }
+#. }
+#. done
+#.
+#. # Execute post-hooks for eventual cleanup
+#: tomb:2378
msgid "Tomb bind hook ::1 hook:: is busy, cannot close tomb."
msgstr "El bind-hook ::1:: está ocupado, no se puede cerrar la tumba."
-#: failure
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. # Execute post-hooks for eventual cleanup
+#. { option_is_set -n } || {
+#. exec_safe_post_hooks ${tombmount%%/} close }
+#.
+#. _verbose "Performing umount of ::1 mount point::" $tombmount
+#. sudo umount ${tombmount}
+#. > [[ $? = 0 ]] || { _warning "Tomb is busy, cannot umount!"; return 1 }
+#.
+#. # If we used a default mountpoint and is now empty, delete it
+#. [[ "$tombmount" == "/media/$tombname.tomb" ]] && { rmdir $tombmount }
+#.
+#: tomb:2388
+msgid "Tomb is busy, cannot umount!"
+msgstr "La tumba está ocupada, ¡no se puede desmontar!"
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. # If we used a default mountpoint and is now empty, delete it
+#. [[ "$tombmount" == "/media/$tombname.tomb" ]] && { rmdir $tombmount }
+#.
+#. sudo cryptsetup luksClose $mapper
+#. [[ $? == 0 ]] || {
+#. > _failure "Error occurred in cryptsetup luksClose ::1 mapper::" $mapper }
+#.
+#. # Normally the loopback device is detached when unused
+#. [[ -e "/dev/$tombloop" ]] && sudo losetup -d "/dev/$tombloop"
+#. [[ $? = 0 ]] || {
+#: tomb:2395
msgid "Error occurred in cryptsetup luksClose ::1 mapper::"
msgstr "Ha ocurrido un error en cryptsetup luksClose ::1::"
-#: warning
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. # Normally the loopback device is detached when unused
+#. [[ -e "/dev/$tombloop" ]] && sudo losetup -d "/dev/$tombloop"
+#. [[ $? = 0 ]] || {
+#. _verbose "/dev/$tombloop was already closed." }
+#.
+#. > _success "Tomb ::1 tomb name:: closed: your bones will rest in peace." $tombname
+#.
+#. done # loop across mounted tombs
+#.
+#. return 0
+#: tomb:2402
+msgid "Tomb ::1 tomb name:: closed: your bones will rest in peace."
+msgstr "Tumba ::1 tumba:: cerrada: tu huesos descansarán en paz."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. return 1
+#. fi
+#. return 0
+#. fi
+#. unset discardme
+#. if ! zparseopts -M -E -D -Adiscardme ${every_opts}; then
+#. > _failure "Error parsing."
+#. return 127
+#. fi
+#. unset discardme
+#. subcommand=$1
+#: tomb:2522
+msgid "Error parsing."
+msgstr "Error al parsear."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. subcommand=$1
+#. if [[ -z $subcommand ]]; then
+#. subcommand="__default"
+#. fi
+#.
+#. if [[ -z ${(k)subcommands_opts[$subcommand]} ]]; then
+#. > _warning "There's no such command \"::1 subcommand::\"." $subcommand
+#. exitv=127 _failure "Please try -h for help."
+#. fi
+#. argv=("${(@)oldstar}")
+#. unset oldstar
+#: tomb:2532
msgid "There's no such command \"::1 subcommand::\"."
msgstr "No existe el comando \"::1 comando::\"."
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. if [[ -z $subcommand ]]; then
+#. subcommand="__default"
+#. fi
+#.
+#. if [[ -z ${(k)subcommands_opts[$subcommand]} ]]; then
+#. _warning "There's no such command \"::1 subcommand::\"." $subcommand
+#. > exitv=127 _failure "Please try -h for help."
+#. fi
+#. argv=("${(@)oldstar}")
+#. unset oldstar
+#.
+#: tomb:2533
msgid "Please try -h for help."
msgstr "Prueba -h para obtener ayuda."
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. # zsh magic: ${=string} will split to multiple arguments when spaces occur
+#. set -A cmd_opts ${main_opts} ${=subcommands_opts[$subcommand]}
+#. # if there is no option, we don't need parsing
+#. if [[ -n $cmd_opts ]]; then
+#. zparseopts -M -E -D -AOPTS ${cmd_opts}
+#. if [[ $? != 0 ]]; then
+#. > _warning "Some error occurred during option processing."
+#. exitv=127 _failure "See \"tomb help\" for more info."
+#. fi
+#. fi
+#. #build PARAM (array of arguments) and check if there are unrecognized options
+#: tomb:2545
+msgid "Some error occurred during option processing."
+msgstr "Ha ocurrido algún error al procesar las opciones."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. set -A cmd_opts ${main_opts} ${=subcommands_opts[$subcommand]}
+#. # if there is no option, we don't need parsing
+#. if [[ -n $cmd_opts ]]; then
+#. zparseopts -M -E -D -AOPTS ${cmd_opts}
+#. if [[ $? != 0 ]]; then
+#. _warning "Some error occurred during option processing."
+#. > exitv=127 _failure "See \"tomb help\" for more info."
+#. fi
+#. fi
+#. #build PARAM (array of arguments) and check if there are unrecognized options
+#. ok=0
+#: tomb:2546
msgid "See \"tomb help\" for more info."
msgstr "Véase \"tomb help\" par más información."
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. for arg in $*; do
+#. if [[ $arg == '--' || $arg == '-' ]]; then
+#. ok=1
+#. continue #it shouldnt be appended to PARAM
+#. elif [[ $arg[1] == '-' ]]; then
+#. if [[ $ok == 0 ]]; then
+#. > exitv=127 _failure "Unrecognized option ::1 arg:: for subcommand ::2 subcommand::" $arg $subcommand
+#. fi
+#. fi
+#. PARAM+=$arg
+#. done
+#: tomb:2558
msgid "Unrecognized option ::1 arg:: for subcommand ::2 subcommand::"
-msgstr "No se reconoce la opción ::1 argumento:: para el subcomando ::2 subcomando::"
+msgstr ""
+"No se reconoce la opción ::1 argumento:: para el subcomando ::2 subcomando::"
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. # Use colors unless told not to
+#. { ! option_is_set --no-color } && { autoload -Uz colors && colors }
+#. # Some options are only available during insecure mode
+#. { ! option_is_set --unsafe } && {
+#. for opt in --tomb-pwd --use-urandom --tomb-old-pwd; do
+#. { option_is_set $opt } && {
+#. > exitv=127 _failure "You specified option ::1 option::, which is DANGEROUS and should only be used for testing\nIf you really want so, add --unsafe" $opt }
+#. done
+#. }
+#. # read -t or --tmp flags to set a custom temporary directory
+#. option_is_set --tmp && TMPPREFIX=$(option_value --tmp)
+#: tomb:2574
+msgid ""
+"You specified option ::1 option::, which is DANGEROUS and should only be "
+"used for testing\n"
+"If you really want so, add --unsafe"
+msgstr ""
+"Has especificado la opción ::1 opción::, que es PELIGROSA y debería usarse "
+"sólo en testeo\n"
+"Si estás seguro, añade --unsafe"
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. help)
+#. usage
+#. ;;
+#.
+#. # DEPRECATION notice (leave here as 'create' is still present in old docs)
+#. create)
+#. > _warning "The create command is deprecated, please use dig, forge and lock instead."
+#. _warning "For more informations see Tomb's manual page (man tomb)."
+#. _failure "Operation aborted."
+#. ;;
+#.
+#: tomb:2608
+msgid ""
+"The create command is deprecated, please use dig, forge and lock instead."
+msgstr ""
+"El comando create está obsoleto, por favor, usa dig, forge y lock en su "
+"lugar."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. usage
+#. ;;
+#.
+#. # DEPRECATION notice (leave here as 'create' is still present in old docs)
+#. create)
+#. _warning "The create command is deprecated, please use dig, forge and lock instead."
+#. > _warning "For more informations see Tomb's manual page (man tomb)."
+#. _failure "Operation aborted."
+#. ;;
+#.
+#. # CREATE Step 1: dig -s NN file.tomb
+#: tomb:2609
+msgid "For more informations see Tomb's manual page (man tomb)."
+msgstr "Para más información mira el manual de Tomb (man tomb)."
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. umount_tomb $PARAM[1]
+#. ;;
+#.
+#. # Grow tomb's size
+#. resize)
+#. [[ $RESIZER == 0 ]] && {
+#. > _failure "Resize2fs not installed: cannot resize tombs." }
+#. resize_tomb $PARAM[1]
+#. ;;
+#.
+#. ## Contents manipulation
+#: tomb:2643
msgid "Resize2fs not installed: cannot resize tombs."
-msgstr "Resize2fs no está instalado: no se puede cambiar el tamaño de las tumbas."
-
-#: failure
+msgstr ""
+"Resize2fs no está instalado: no se puede cambiar el tamaño de las tumbas."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#.
+#. ## Locking operations
+#.
+#. # Export key to QR Code
+#. engrave)
+#. [[ $QRENCODE == 0 ]] && {
+#. > _failure "QREncode not installed: cannot engrave keys on paper." }
+#. engrave_key ${=PARAM}
+#. ;;
+#.
+#. # Change password on existing key
+#: tomb:2669
msgid "QREncode not installed: cannot engrave keys on paper."
msgstr "QREncode no está instalado: no se pueden grabar las llave en papel."
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. change_tomb_key ${=PARAM}
+#. ;;
+#.
+#. # STEGANOGRAPHY: hide key inside an image
+#. bury)
+#. [[ $STEGHIDE == 0 ]] && {
+#. > _failure "Steghide not installed: cannot bury keys into images." }
+#. bury_key $PARAM[1]
+#. ;;
+#.
+#. # STEGANOGRAPHY: read key hidden in an image
+#: tomb:2686
msgid "Steghide not installed: cannot bury keys into images."
-msgstr "Steghide no está instalado: no se pueden enterrar llaves en las imágenes."
-
-#: failure
+msgstr ""
+"Steghide no está instalado: no se pueden enterrar llaves en las imágenes."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. bury_key $PARAM[1]
+#. ;;
+#.
+#. # STEGANOGRAPHY: read key hidden in an image
+#. exhume)
+#. [[ $STEGHIDE == 0 ]] && {
+#. > _failure "Steghide not installed: cannot exhume keys from images." }
+#. exhume_key $PARAM[1]
+#. ;;
+#.
+#. ## Internal commands useful to developers
+#: tomb:2693
msgid "Steghide not installed: cannot exhume keys from images."
-msgstr "Setghide no está instalado: no se pueden exhumar llaves de las imágenes."
-
-#: print
+msgstr ""
+"Setghide no está instalado: no se pueden exhumar llaves de las imágenes."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#.
+#. # Ask user for a password interactively
+#. askpass) ask_password $PARAM[1] $PARAM[2] ;;
+#.
+#. # Default operation: presentation, or version information with -v
+#. __default)
+#. > _print "Tomb ::1 version:: - a strong and gentle undertaker for your secrets" $VERSION
+#. _print "\000"
+#. _print " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+#. _print " This is free software: you are free to change and redistribute it"
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#: tomb:2707
msgid "Tomb ::1 version:: - a strong and gentle undertaker for your secrets"
msgstr "Tomb ::1 versión:: - un enterrador fuerte y amable para tus secretos"
-#: print
-msgid " Copyright (C) 2007-2014 Dyne.org Foundation, License GNU GPL v3+"
-msgstr " Copyright (C) 2007-2014 Fundación Dyne.org, Licencia GNU GPL v3+"
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. askpass) ask_password $PARAM[1] $PARAM[2] ;;
+#.
+#. # Default operation: presentation, or version information with -v
+#. __default)
+#. _print "Tomb ::1 version:: - a strong and gentle undertaker for your secrets" $VERSION
+#. _print "\000"
+#. > _print " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+#. _print " This is free software: you are free to change and redistribute it"
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#: tomb:2709
+msgid " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+msgstr ""
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#.
+#. # Default operation: presentation, or version information with -v
+#. __default)
+#. _print "Tomb ::1 version:: - a strong and gentle undertaker for your secrets" $VERSION
+#. _print "\000"
+#. _print " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+#. > _print " This is free software: you are free to change and redistribute it"
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#: tomb:2710
msgid " This is free software: you are free to change and redistribute it"
msgstr " Esto es software libre: eres libre de modificarlo y redistribuirlo"
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. # Default operation: presentation, or version information with -v
+#. __default)
+#. _print "Tomb ::1 version:: - a strong and gentle undertaker for your secrets" $VERSION
+#. _print "\000"
+#. _print " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+#. _print " This is free software: you are free to change and redistribute it"
+#. > _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#. LANG=en
+#: tomb:2711
+msgid " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+msgstr ""
+" Para encontrar el código fuente más reciente visita <http://dyne.org/"
+"software/tomb>"
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. _print " This is free software: you are free to change and redistribute it"
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#. LANG=en
+#. > _print " This source code is distributed in the hope that it will be useful,"
+#. _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. _print " When in need please refer to <http://dyne.org/support>."
+#: tomb:2716
msgid " This source code is distributed in the hope that it will be useful,"
msgstr " Este código fuente se distribuye con la esperanza de que sea util,"
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#. LANG=en
+#. _print " This source code is distributed in the hope that it will be useful,"
+#. > _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. _print " When in need please refer to <http://dyne.org/support>."
+#. _print "\000"
+#: tomb:2717
msgid " but WITHOUT ANY WARRANTY; without even the implied warranty of"
msgstr " pero SIN NINGUNA GARANTÍA; ni siquiera la garantía tácita de"
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#. LANG=en
+#. _print " This source code is distributed in the hope that it will be useful,"
+#. _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. > _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. _print " When in need please refer to <http://dyne.org/support>."
+#. _print "\000"
+#. _print "System utils:"
+#: tomb:2718
msgid " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
msgstr " MERCANTIBILIDAD or APTITUD PARA UN PROPÓSITO PARTICULAR."
-#: print
-msgid "System utils:"
-msgstr "Utilidades del sistema:"
-
-#: warning
-msgid "Command \"::1 subcommand::\" not recognized."
-msgstr "No se ha reconocido el commando \"::1 comando::\"."
-
-#: print
-msgid " passwd change the password of a KEY (needs old pass)"
-msgstr " passwd cambia la contraseña de la LLAVE (necesita la contraseña vieja)"
-
-#: print
-msgid " setkey change the KEY locking a TOMB (needs old key and pass)"
-msgstr " setkey cambia la LLAVE que cierra la TUMBA (necesita la contraseña y llave viejas)"
-
-#: print
-msgid " // Backup on paper:"
-msgstr " // Copia de seguridad en papel:"
-
-#: print
-msgid " // Steganography:"
-msgstr " // Esteganografía:"
-
-#: print
-msgid " bury hide a KEY inside a JPEG image (for use with -k)"
-msgstr " bury esconde la LLAVE dentro de una imagen JPEG (para usarla con -k)"
-
-#: print
-msgid " exhume extract a KEY from a JPEG image (prints to stdout)"
-msgstr " exhume extraer una LLAVE de una imagen JPEG (escribe en stdout)"
-
-#: failure
-msgid "Exhume failed, no image specified"
-msgstr "La exhumación ha fallado, no se ha especificado una imagen"
-
-#: print
-msgid " For the latest sourcecode go to <http://dyne.org/software/tomb>"
-msgstr " Para encontrar el código fuente más reciente visita <http://dyne.org/software/tomb>"
-
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. local langwas=$LANG
+#. LANG=en
+#. _print " This source code is distributed in the hope that it will be useful,"
+#. _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. > _print " When in need please refer to <http://dyne.org/support>."
+#. _print "\000"
+#. _print "System utils:"
+#. _print "\000"
+#. cat <<EOF
+#: tomb:2720
msgid " When in need please refer to <http://dyne.org/support>."
msgstr " Cuando sea necesario por favor dirígete a <http://dyne.org/support>."
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. _print " This source code is distributed in the hope that it will be useful,"
+#. _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. _print " When in need please refer to <http://dyne.org/support>."
+#. _print "\000"
+#. > _print "System utils:"
+#. _print "\000"
+#. cat <<EOF
+#. `sudo -V | head -n1`
+#. `cryptsetup --version`
+#: tomb:2722
+msgid "System utils:"
+msgstr "Utilidades del sistema:"
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. `cryptsetup --version`
+#. `pinentry --version`
+#. `gpg --version | head -n1` - key forging algorithms (GnuPG symmetric ciphers):
+#. `list_gnupg_ciphers`
+#. EOF
+#. _print "\000"
+#. > _print "Optional utils:"
+#. _print "\000"
+#. _list_optional_tools version
+#. return 0
+#. }
+#: tomb:2732
msgid "Optional utils:"
msgstr "Utilidades opcionales:"
-#: failure
-msgid "Fatal error setting the permission umask for temporary files"
-msgstr "Error fatal al establecer el permiso umask para los ficheros temporales"
-
-#: failure
-msgid "Fatal error setting ownership on temporary file: ::1 temp file::"
-msgstr "Error fatal al establecer la posesión del fichero temporal ::1 fichero::"
-
-#: warning
-msgid "cleartext key from stdin selected: this is unsafe."
-msgstr "se ha seleccionado una clave en texto plano por la entrada estándar: esto es inseguro."
-
-#: failure
-msgid "please use --unsafe if you really want to do this."
-msgstr "por favor, usa --unsafe si estás seguro."
-
-#: warning
-msgid "received key in cleartext from stdin (unsafe mode)"
-msgstr "se ha recibido una clave en texto plano por la entrada estándar (modo inseguro)"
-
-#: failure
-msgid "You specified option ::1 option::, which is DANGEROUS and should only be used for testing\n"
-"If you really want so, add --unsafe"
-msgstr "Has especificado la opción ::1 opción::, que es PELIGROSA y debería usarse sólo en testeo\nSi estás seguro, añade --unsafe"
-
-#: failure
-msgid "Failing to identify the user who is calling us"
-msgstr "Falló la identificación del usuario que nos llama."
-
-#: failure
-msgid "Fatal error creating the temporary directory: ::1 temp dir::"
-msgstr "Error fatal al crear el directorio temporal ::1 directorio::"
-
-#: failure
-msgid "Someone is messing up with us trying to hijack temporary files."
-msgstr "Alguien está intentando secuestrar nuestros ficheros temporales."
-
-#: success
-msgid "All your swaps are belong to crypt. Good."
-msgstr "Todas tus particiones de intercambio pertenecen a crypt. Bien."
-
-#: success
-msgid "Changing password for ::1 key file::"
-msgstr "Cambiando la contraseña para ::1 fichero::"
-
-#: success
-msgid "Your passphrase was successfully updated."
-msgstr "Tu contraseña ha sido actualizada con éxito."
-
-#: success
-msgid "Using KDF, iterations: ::1 microseconds::"
-msgstr "Usando KDF: ::1 microsegundos:: iteraciones"
-
-#: success
-msgid "Encoding key ::1 tomb key:: inside image ::2 image file::"
-msgstr "Codificando la llave ::1 llave:: en la imagen ::2 imagen::."
-
-#: success
-msgid "Tomb key encoded succesfully into image ::1 image file::"
-msgstr "Llave codificada con éxito en la imagen ::1 fichero::."
-
-#: success
-msgid "Key succesfully exhumed to ::1 key::."
-msgstr "Llave exhumada con éxito en ::1 llave::."
-
-#: success
-msgid "Rendering a printable QRCode for key: ::1 tomb key file::"
-msgstr "Creando un código QR imprimible para la llave ::1 fichero::."
-
-#: success
-msgid "Operation successful:"
-msgstr "Operación con éxito:"
-
-#: success
-msgid "Creating a new tomb in ::1 tomb path::"
-msgstr "Creando una nueva tumba en ::1 tumba::"
-
-#: success
-msgid "Done digging ::1 tomb name::"
-msgstr "Se ha terminado de cavar ::1 tumba::."
-
-#: success
-msgid "Choose the password of your key: ::1 tomb key::"
-msgstr "Elige una contraseña para tu llave: ::1 llave::"
-
-#: success
-msgid "Your key is ready:"
-msgstr "Tu llave está lista:"
-
-#: success
-msgid "Locking ::1 tomb file:: with ::2 tomb key file::"
-msgstr "Asegurando ::1 tumba:: con ::2 llave::"
-
-#: success
-msgid "Your tomb is ready in ::1 tomb path:: and secured with key ::2 tomb key::"
-msgstr "Tu tumba está lista en ::1 tumba:: y asegurada con la llave ::2 llave::"
-
-#: success
-msgid "Changing lock on tomb ::1 tomb name::"
-msgstr "Cambiando el candado en la tumba ::1 tumba::."
-
-#: success
-msgid "Succesfully changed key for tomb: ::1 tomb file::"
-msgstr "Se ha cambiado la clave con éxito para la tumba ::1 tumba::"
-
-#: success
-msgid "Opening ::1 tomb file:: on ::2 mount point::"
-msgstr "Abriendo ::1 tumba:: en ::2 punto de montaje::."
-
-#: success
-msgid "Success unlocking tomb ::1 tomb name::"
-msgstr "Se ha abierto el cerrojo de ::1 tumba:: con éxito."
-
-#: success
-msgid "Success opening ::1 tomb file:: on ::2 mount point::"
-msgstr "Se ha abierto ::1 tumba:: en ::2 punto de montaje:: con éxito."
-
-#: success
-msgid "Post hooks found, executing as user ::1 user name::."
-msgstr "Se han encontrado post-hooks, se ejecutarán con el usuario ::1 usuario::."
-
-#: success
-msgid "Creating and updating search indexes."
-msgstr "Creando y actualizando índices de búsqueda."
-
-#: message
-msgid "Generating a new swish-e configuration file: ::1 swish conf::"
-msgstr "Generando un nuevo fichero de configuración de swish-e: ::1 conf::"
-
-#: success
-msgid "Searching for: ::1::"
-msgstr "Buscando ::1::"
-
-#: success
-msgid "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::"
-msgstr "Cerrando de un portazo la tumba ::1 nombre:: montada en ::2 punto de montaje::."
-
-#: success
-msgid "Slamming tomb: killing all processes using this hook."
-msgstr "Cerrando tumba de un portazo: matando todos los procesos que usan este hook."
-
-#: success
-msgid "Tomb ::1 tomb name:: closed: your bones will rest in peace."
-msgstr "Tumba ::1 tumba:: cerrada: tu huesos descansarán en paz."
-
-#: warning
-msgid "Pinentry error: ::1 error::"
-msgstr "Error de pinentry: ::1 error::"
-
-#: warning
-msgid "Empty password"
-msgstr "Contraseña vacia"
-
-#: failure
-msgid "Cannot find pinentry-curses and no DISPLAY detected."
-msgstr "No se puede encontrar pinentry-curses, y no se ha detectado DISPLAY."
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. }
+#. usage
+#. ;;
+#.
+#. # Reject unknown command and suggest help
+#. *)
+#. > _warning "Command \"::1 subcommand::\" not recognized." $subcommand
+#. _message "Try -h for help."
+#. return 1
+#. ;;
+#. esac
+#: tomb:2742
+msgid "Command \"::1 subcommand::\" not recognized."
+msgstr "No se ha reconocido el commando \"::1 comando::\"."
-#: warning
-msgid "Detected DISPLAY, but only pinentry-curses is found."
-msgstr "DISPLAY detectado, pero sólo se ha encontrado pinentry-curses."
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. usage
+#. ;;
+#.
+#. # Reject unknown command and suggest help
+#. *)
+#. _warning "Command \"::1 subcommand::\" not recognized." $subcommand
+#. > _message "Try -h for help."
+#. return 1
+#. ;;
+#. esac
+#. return $?
+#: tomb:2743
+msgid "Try -h for help."
+msgstr "Prueba -h para obtener ayuda."
-#: failure
-msgid "Cannot find any pinentry: impossible to ask for password."
-msgstr "No se ha encontrado ningún pinentry: es imposible pedir una contraseña."
+#~ msgid " -o mount options used to open (default: rw,noatime,nodev)"
+#~ msgstr ""
+#~ " -o opciones de montaje usadas al abrir (por defecto: rw,noatime,"
+#~ "nodev)"
+#~ msgid " Copyright (C) 2007-2014 Dyne.org Foundation, License GNU GPL v3+"
+#~ msgstr " Copyright (C) 2007-2014 Fundación Dyne.org, Licencia GNU GPL v3+"
diff --git a/extras/po/fr.po b/extras/po/fr.po
@@ -1,1164 +1,5561 @@
msgid ""
msgstr ""
+"Project-Id-Version: Tomb the Crypto Undertaker\n"
+"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
-"Project-Id-Version: Tomb the Crypto Undertaker\n"
-"Language: fr\n"
-
-#: failure
-msgid "Operation aborted."
-msgstr "L'opération est interrompue."
-
-#: warning
-msgid "often occurs on VPS and kernels that don't provide the loop module."
-msgstr "se produit souvent sur les machines virtuelles et avec les noyaux qui ne fournissent pas le module loop."
-
-#: warning
-msgid "It is impossible to use Tomb on this machine at this conditions."
-msgstr "Il est impossible d'utiliser Tomb dans les conditions offertes par cette machine."
-
-#: message
-msgid "Waiting for the key to be piped from stdin... "
-msgstr "En attente d'une clé à lire sur l'entrée standard... "
-
-#: failure
-msgid "This operation requires a key file to be specified using the -k option."
-msgstr "Cette opération requiert la spécification du chemin de la clé par l'option -k."
-
-#: failure
-msgid "Key not found, specify one using -k."
-msgstr "Aucune clé n'a été trouvée, merci d'en spécifier une avec -k."
-
-#: warning
-msgid "User aborted password dialog."
-msgstr "L'utilisateur a interrompu le dialogue du mot de passe."
-
-#: message
-msgid "Password OK."
-msgstr "Le mot de passe est valide."
-
-#: failure
-msgid "Error: the newly generated keyfile does not seem valid."
-msgstr "Erreur : le fichier de clé nouvellement créé semble invalide."
-
-#: failure
-msgid "User aborted."
-msgstr "L'utilisateur a interrompu l'opération."
-
-#: failure
-msgid "You set empty password, which is not possible."
-msgstr "Vous ne pouvez pas saisir un mot de passe vide."
-
-#: failure
-msgid "Wrong argument for --kdf: must be an integer number (iteration seconds)."
-msgstr "Argument invalide pour --kdf : ce doit être un nombre entier (de secondes d'itérations)."
-
-#: failure
-msgid "gpg (GnuPG) is not found, Tomb cannot function without it."
-msgstr "gpg (GnuPG) n'est pas disponible, mais il est requis pour le fonctionnement de Tomb."
-
-#: message
-msgid "Please confirm the key password for the encoding"
-msgstr "Merci de confirmer le mot de passe de la clé en vue de l'encodage"
-
-#: warning
-msgid "Wrong password supplied."
-msgstr "Le mot de passe fourni est invalide."
-
-#: failure
-msgid "You shall not bury a key whose password is unknown to you."
-msgstr "Vous ne pouvez pas enterrer une clé dont vous ignorez le mot de passe."
-
-#: warning
-msgid "Encoding error: steghide reports problems."
-msgstr "Erreur à l'encodage : steghide rapporte des problèmes."
-
-#: warning
-msgid "Make explicit use of --force to overwrite."
-msgstr "Pour l'ignorer et l'écrire de nouveau, utiliser --force."
-
-#: warning
-msgid "Use of --force selected: overwriting."
-msgstr "L'option --force est sélectionnée : ré-écriture en cours."
-
-#: failure
-msgid "A filename needs to be specified using -k to forge a new key."
-msgstr "Pour forger une nouvelle clé, vous devez préciser un nom de fichier avec -k."
-
-#: failure
-msgid "Forging this key would overwrite an existing file. Operation aborted."
-msgstr "Forger cette clé détruirait un fichier existant. Opération annulée."
-
-#: message
-msgid "This operation takes time, keep using this computer on other tasks,"
-msgstr "Cette opération prend du temps, continuez à utiliser l'ordinateur pour d'autres tâches,"
-
-#: message
-msgid "once done you will be asked to choose a password for your tomb."
-msgstr "une fois l'opération terminée, vous devrez choisir un mot de passe pour votre tombe."
-
-#: message
-msgid "To make it faster you can move the mouse around."
-msgstr "Vous pouvez accélérer l'opération en bougeant la souris."
-
-#: message
-msgid "If you are on a server, you can use an Entropy Generation Daemon."
-msgstr "Si vous effectuez l'opération sur un serveur, vous pouvez utiliser un démon générateur d'entropie."
-
-#: warning
-msgid "Cannot generate encryption key."
-msgstr "La clé de chiffrement ne peut être générée."
-
-#: message
-msgid "(You can also change it later using 'tomb passwd'.)"
-msgstr "(Vous pouvez le modifier ultérieurement avec la commande 'tomb passwd'.)"
-
-#: warning
-msgid "The key does not seem to be valid."
-msgstr "La clé semble être invalide."
-#: warning
-msgid "Dumping contents to screen:"
-msgstr "Capture des contenus à l'écran :"
-
-#: failure
-msgid "Size argument missing, use -s"
-msgstr "Utiliser -s pour préciser la taille de la tombe en Mo."
-
-#: warning
-msgid "A tomb exists already. I'm not digging here:"
-msgstr "Une tombe existe déjà à cet endroit. Je n'y creuse pas !"
-
-#: message
-msgid "Your tomb is not yet ready, you need to forge a key and lock it:"
-msgstr "Votre tombe n'est pas encore prête, vous devez en forger la clé et la vérouiller :"
-
-#: warning
-msgid "No tomb specified for locking."
-msgstr "Quelle tombe dois-je vérouiller ?"
-
-#: warning
-msgid "Usage: tomb lock file.tomb file.tomb.key"
-msgstr "Usage : tomb lock file.tomb file.tomb.key"
-
-#: failure
-msgid "There is no tomb here. You have to it dig first."
-msgstr "Il n'y a pas de tombe à cet endroit. Vous devez d'abord la creuser ('dig')."
-
-#: message
-msgid "Checking if the tomb is empty (we never step on somebody else's bones)."
-msgstr "Sondage de la tombe (nous ne piétinons jamais les os d'autrui)."
-
-#: warning
-msgid "The tomb was already locked with another key."
-msgstr "La tombe est déjà vérouillée avec une autre clé."
-
-#: failure
-msgid "Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
-msgstr "Opération abandonnée. Je ne peux pas vérouiller une tombe déjà vérouillée. Vous pouvez en creuser une autre (avec 'dig')."
-
-#: message
-msgid "Fine, this tomb seems empty."
-msgstr "Bien, la tombe semble être vide."
-
-#: message
-msgid "Formatting Luks mapped device."
-msgstr "Formatage du dispositif LUKS désigné."
-
-#: warning
-msgid "cryptsetup luksFormat returned an error."
-msgstr "Une erreur s'est produite à l'exécution de cryptsetup luksFormat"
-
-#: message
-msgid "Formatting your Tomb with Ext3/Ext4 filesystem."
-msgstr "Formatage de votre tombe avec un système de fichier Ext3/Ext4."
-
-#: warning
-msgid "Tomb format returned an error."
-msgstr "Une erreur s'est produite à l'exécution du formatage."
-
-#: message
-msgid "Here below its status is reported:"
-msgstr "L'état de la tombe suit :"
-
-#: message
-msgid "This tomb is a valid LUKS encrypted device."
-msgstr "Cette tombe est un dispositif chiffré LUKS valide."
-
-#: failure
-msgid "Failure mounting the encrypted file."
-msgstr "Le montage du fichier chiffré a échoué."
-
-#: warning
-msgid "How pitiful! A tomb, and no HOME."
-msgstr "C'est pitoyable ! Une tombe, mais sans abri (HOME n'est pas défini)."
-
-#: warning
-msgid "Cannot exec bind hooks without a mounted tomb."
-msgstr "L'exécution des ordres de montage ne peut se faire que si la tombe est montée."
-
-#: failure
-msgid "I can't see any open tomb, may they all rest in peace."
-msgstr "Je ne vois aucune tombe ouverte, qu'ils reposent tous en paix."
-
-#: message
-msgid "Search index updated."
-msgstr "L'index de recherche a été mis à jour."
-
-#: warning
-msgid "Run 'tomb index' to create indexes."
-msgstr "Exécuter 'tomb index' pour générer les index."
-
-#: message
-msgid "Search completed."
-msgstr "La recherche est terminée."
-
-#: failure
-msgid "No tomb name specified for resizing."
-msgstr "Merci de spécifier le nom de la tombe à agrandir."
-
-#: failure
-msgid "Size is not an integer."
-msgstr "La taille doit être un nombre entier."
-
-#: failure
-msgid "The new size must be greater then old tomb size."
-msgstr "La nouvelle taille doit être supérieure à l'ancienne."
-
-#: failure
-msgid "There is no open tomb to be closed."
-msgstr "Il n'y a pas de tombe à fermer."
+#. Fold: Safety functions
+#. Function: _whoami
+#.
+#. Code sample:
+#.
+#. # Set username from UID or environment
+#. _USER=$SUDO_USER
+#. [[ "$_USER" = "" ]] && { _USER=$USERNAME }
+#. [[ "$_USER" = "" ]] && { _USER=$(id -u) }
+#. [[ "$_USER" = "" ]] && {
+#. > _failure "Failing to identify the user who is calling us" }
+#.
+#. # Get GID from option -G or the environment
+#. option_is_set -G #. && _GID=$(option_value -G) || _GID=$(id -g $_USER)
+#: tomb:189
+msgid "Failing to identify the user who is calling us"
+msgstr ""
-#: warning
-msgid "Too many tombs mounted, please specify one (see tomb list)"
-msgstr "Trop de tombes sont montées, merci d'en choisir une (voir 'tomb list')"
+#. Fold: Safety functions
+#. Function: _plot
+#.
+#. Code sample:
+#. TOMBFILE=$(basename $TOMBPATH)
+#.
+#. # The tomb name is TOMBFILE without an extension.
+#. # It can start with dots: ..foo.tomb -> ..foo
+#. TOMBNAME="${TOMBFILE%\.[^\.]*}"
+#. [[ -z $TOMBNAME ]] && {
+#. > _failure "Tomb won't work without a TOMBNAME." }
+#.
+#. # Normalize tomb name
+#. TOMBFILE="$TOMBNAME.tomb"
+#.
+#: tomb:237
+msgid "Tomb won't work without a TOMBNAME."
+msgstr "Tomb ne va pas fonctionner sans le nom d'une tombe."
-#: warning
-msgid "or issue the command 'tomb close all' to close them all."
-msgstr "ou bien exécuter 'tomb close all' pour les fermer toutes."
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#.
+#. # Provide a random filename in shared memory
+#. _tmp_create() {
+#. [[ -d "$TMPPREFIX" ]] || {
+#. # we create the tempdir with the sticky bit on
+#. sudo mkdir -m 1777 "$TMPPREFIX"
+#. > [[ $? == 0 ]] || _failure "Fatal error creating the temporary directory: ::1 temp dir::" "$TMPPREFIX"
+#. }
+#.
+#. # We're going to add one more $RANDOM for each time someone complain
+#. # about this being too weak of a random.
+#: tomb:252
+msgid "Fatal error creating the temporary directory: ::1 temp dir::"
+msgstr ""
-#: warning
-msgid "Please specify an existing tomb."
-msgstr "Merci d'indiquer une tombe existante."
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#.
+#. # We're going to add one more $RANDOM for each time someone complain
+#. # about this being too weak of a random.
+#. tfile="${TMPPREFIX}/$RANDOM$RANDOM$RANDOM$RANDOM" # Temporary file
+#. umask 066
+#. [[ $? == 0 ]] || {
+#. > _failure "Fatal error setting the permission umask for temporary files" }
+#.
+#. [[ -r "$tfile" ]] && {
+#. _failure "Someone is messing up with us trying to hijack temporary files." }
+#.
+#: tomb:260
+msgid "Fatal error setting the permission umask for temporary files"
+msgstr ""
-#: message
-msgid "Kill all processes busy inside the tomb."
-msgstr "Exécution (sommaire) de tous les processus en cours dans la tombe."
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#. tfile="${TMPPREFIX}/$RANDOM$RANDOM$RANDOM$RANDOM" # Temporary file
+#. umask 066
+#. [[ $? == 0 ]] || {
+#. _failure "Fatal error setting the permission umask for temporary files" }
+#.
+#. [[ -r "$tfile" ]] && {
+#. > _failure "Someone is messing up with us trying to hijack temporary files." }
+#.
+#. touch "$tfile"
+#. [[ $? == 0 ]] || {
+#. _failure "Fatal error creating a temporary file: ::1 temp file::" "$tfile" }
+#: tomb:263
+msgid "Someone is messing up with us trying to hijack temporary files."
+msgstr ""
-#: warning
-msgid "Tomb is busy, cannot umount!"
-msgstr "La tombe est occupée et ne peut pas être démontée !"
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#.
+#. [[ -r "$tfile" ]] && {
+#. _failure "Someone is messing up with us trying to hijack temporary files." }
+#.
+#. touch "$tfile"
+#. [[ $? == 0 ]] || {
+#. > _failure "Fatal error creating a temporary file: ::1 temp file::" "$tfile" }
+#.
+#. [[ $? == 0 ]] || {
+#. _failure "Fatal error setting ownership on temporary file: ::1 temp file::" "$tfile" }
+#.
+#: tomb:267
+msgid "Fatal error creating a temporary file: ::1 temp file::"
+msgstr ""
+"Erreur fatale lors de la création d'un fichier temporaire : ::1 temp file::"
+
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#.
+#. touch "$tfile"
+#. [[ $? == 0 ]] || {
+#. _failure "Fatal error creating a temporary file: ::1 temp file::" "$tfile" }
+#.
+#. [[ $? == 0 ]] || {
+#. > _failure "Fatal error setting ownership on temporary file: ::1 temp file::" "$tfile" }
+#.
+#. _verbose "Created tempfile: ::1 temp file::" "$tfile"
+#. TOMBTMP="$tfile"
+#. TOMBTMPFILES+=("$tfile")
+#: tomb:270
+msgid "Fatal error setting ownership on temporary file: ::1 temp file::"
+msgstr ""
-#: failure
-msgid "Error parsing."
-msgstr "Erreur de syntaxe."
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. r=1
+#. is_crypt=`sudo dmsetup status "$s" | awk '/crypt/ {print $3}'`
+#. [[ $is_crypt == "crypt" ]] && { r=2 } || { break }
+#.
+#. fi
+#. done
+#. > _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#: tomb:316
+msgid "An active swap partition is detected..."
+msgstr ""
-#: warning
-msgid "Some error occurred during option processing."
-msgstr "L'interprétation des options a échoué."
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. [[ $is_crypt == "crypt" ]] && { r=2 } || { break }
+#.
+#. fi
+#. done
+#. _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. > _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#. _warning "You can deactivate all swap partitions using the command:"
+#. _warning " swapoff -a"
+#: tomb:318
+msgid "All your swaps are belong to crypt. Good."
+msgstr ""
-#: warning
-msgid "The create command is deprecated, please use dig, forge and lock instead."
-msgstr "La commande \"create\" est obsolète : il convient à présent d'utiliser \"dig\", \"forge\", et \"lock\"."
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. fi
+#. done
+#. _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. > _warning "This poses a security risk."
+#. _warning "You can deactivate all swap partitions using the command:"
+#. _warning " swapoff -a"
+#. _warning "But if you want to proceed like this, use the -f (force) flag."
+#. fi
+#: tomb:320
+msgid "This poses a security risk."
+msgstr ""
-#: warning
-msgid "For more informations see Tomb's manual page (man tomb)."
-msgstr "Pour de plus amples informations, se référer au manuel de Tomb (man tomb)."
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. done
+#. _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#. > _warning "You can deactivate all swap partitions using the command:"
+#. _warning " swapoff -a"
+#. _warning "But if you want to proceed like this, use the -f (force) flag."
+#. fi
+#. return $r
+#: tomb:321
+msgid "You can deactivate all swap partitions using the command:"
+msgstr ""
+"Vous pouvez désactiver l'ensemble des partitions de mémoire d'échange avec "
+"la commande :"
+
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#. _warning "You can deactivate all swap partitions using the command:"
+#. > _warning " swapoff -a"
+#. _warning "But if you want to proceed like this, use the -f (force) flag."
+#. fi
+#. return $r
+#.
+#: tomb:322
+msgid " swapoff -a"
+msgstr " swapoff -a"
-#: message
-msgid "Try -h for help."
-msgstr "Essayer -h pour obtenir l'aide."
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#. _warning "You can deactivate all swap partitions using the command:"
+#. _warning " swapoff -a"
+#. > _warning "But if you want to proceed like this, use the -f (force) flag."
+#. fi
+#. return $r
+#.
+#. }
+#: tomb:323
+msgid "But if you want to proceed like this, use the -f (force) flag."
+msgstr ""
+"Mais si vous préférez continuer sans le faire, utilisez l'option -f (forcer)."
+
+#. Fold: Safety functions
+#. Function: _check_swap
+#.
+#. Code sample:
+#. _ensure_safe_swap
+#. case $? in
+#. 0|2) # No, or encrypted swap
+#. return 0
+#. ;;
+#. *) # Unencrypted swap
+#. > _failure "Operation aborted."
+#. ;;
+#. esac
+#. fi
+#. }
+#: tomb:342
+msgid "Operation aborted."
+msgstr "L'opération est interrompue."
-#: failure
-msgid "Tomb won't work without a TOMBNAME."
-msgstr "Tomb ne va pas fonctionner sans le nom d'une tombe."
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#. SETTITLE $title
+#. SETDESC $description
+#. SETPROMPT Password:
+#. GETPIN
+#. EOF`
+#. else
+#. > _failure "Cannot find pinentry-curses and no DISPLAY detected."
+#. fi
+#.
+#. else # a DISPLAY is found to be active
+#.
+#: tomb:379
+msgid "Cannot find pinentry-curses and no DISPLAY detected."
+msgstr ""
-#: failure
-msgid "Fatal error creating a temporary file: ::1 temp file::"
-msgstr "Erreur fatale lors de la création d'un fichier temporaire : ::1 temp file::"
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#. EOF`
+#.
+#. else
+#.
+#. if _is_found "pinentry-curses"; then
+#.
+#. > _warning "Detected DISPLAY, but only pinentry-curses is found."
+#. output=`cat <<EOF | pinentry-curses
+#. OPTION ttyname=$TTY
+#. OPTION lc-ctype=$LANG
+#. SETTITLE $title
+#: tomb:432
+msgid "Detected DISPLAY, but only pinentry-curses is found."
+msgstr ""
-#: warning
-msgid "You can deactivate all swap partitions using the command:"
-msgstr "Vous pouvez désactiver l'ensemble des partitions de mémoire d'échange avec la commande :"
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#. SETTITLE $title
+#. SETDESC $description
+#. SETPROMPT Password:
+#. GETPIN
+#. EOF`
+#. else
+#. > _failure "Cannot find any pinentry: impossible to ask for password."
+#. fi
+#.
+#. fi
+#.
+#: tomb:442
+msgid "Cannot find any pinentry: impossible to ask for password."
+msgstr ""
-#: warning
-msgid " swapoff -a"
-msgstr " swapoff -a"
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#.
+#. fi # end of DISPLAY block
+#.
+#. # parse the pinentry output
+#. for i in ${(f)output}; do
+#. [[ "$i" =~ "^ERR.*" ]] && {
+#. > _warning "Pinentry error: ::1 error::" ${i[(w)3]}
+#. print "canceled"
+#. return 1 }
+#.
+#. # here the password is found
+#: tomb:452
+msgid "Pinentry error: ::1 error::"
+msgstr ""
-#: warning
-msgid "But if you want to proceed like this, use the -f (force) flag."
-msgstr "Mais si vous préférez continuer sans le faire, utilisez l'option -f (forcer)."
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#.
+#. # here the password is found
+#. [[ "$i" =~ "^D .*" ]] && password="${i##D }"
+#. done
+#.
+#. [[ "$password" = "" ]] && {
+#. > _warning "Empty password"
+#. print "empty"
+#. return 1 }
+#.
+#. print "$password"
+#: tomb:461
+msgid "Empty password"
+msgstr ""
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. # Check if a filename is a valid tomb
+#. is_valid_tomb() {
+#. _verbose "is_valid_tomb ::1 tomb file::" $1
+#.
+#. # First argument must be the path to a tomb
+#. [[ -z "$1" ]] && {
+#. > _failure "Tomb file is missing from arguments." }
+#.
+#. # Tomb file must be a readable, writable, not-empty regular file.
+#. [[ ! -r "$1" ]] && {
+#. _failure "Tomb file not found: ::1 tomb file::" $1 }
+#: tomb:477
msgid "Tomb file is missing from arguments."
msgstr "Les arguments ne comportent pas le nom du fichier de la tombe."
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. # First argument must be the path to a tomb
+#. [[ -z "$1" ]] && {
+#. _failure "Tomb file is missing from arguments." }
+#.
+#. # Tomb file must be a readable, writable, not-empty regular file.
+#. [[ ! -r "$1" ]] && {
+#. > _failure "Tomb file not found: ::1 tomb file::" $1 }
+#. [[ ! -f "$1" ]] && {
+#. _failure "Tomb file is not a regular file: ::1 tomb file::" $1 }
+#. [[ ! -s "$1" ]] && {
+#. _failure "Tomb file is empty (zero length): ::1 tomb file::" $1 }
+#: tomb:481
#, fuzzy
msgid "Tomb file not found: ::1 tomb file::"
msgstr "Le fichier valide d'une tombe a été trouvé : ::1 tomb file::"
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. _failure "Tomb file is missing from arguments." }
+#.
+#. # Tomb file must be a readable, writable, not-empty regular file.
+#. [[ ! -r "$1" ]] && {
+#. _failure "Tomb file not found: ::1 tomb file::" $1 }
+#. [[ ! -f "$1" ]] && {
+#. > _failure "Tomb file is not a regular file: ::1 tomb file::" $1 }
+#. [[ ! -s "$1" ]] && {
+#. _failure "Tomb file is empty (zero length): ::1 tomb file::" $1 }
+#. [[ ! -w "$1" ]] && {
+#. _failure "Tomb file is not writable: ::1 tomb file::" $1 }
+#: tomb:483
#, fuzzy
msgid "Tomb file is not a regular file: ::1 tomb file::"
msgstr "Le fichier valide d'une tombe a été trouvé : ::1 tomb file::"
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. # Tomb file must be a readable, writable, not-empty regular file.
+#. [[ ! -r "$1" ]] && {
+#. _failure "Tomb file not found: ::1 tomb file::" $1 }
+#. [[ ! -f "$1" ]] && {
+#. _failure "Tomb file is not a regular file: ::1 tomb file::" $1 }
+#. [[ ! -s "$1" ]] && {
+#. > _failure "Tomb file is empty (zero length): ::1 tomb file::" $1 }
+#. [[ ! -w "$1" ]] && {
+#. _failure "Tomb file is not writable: ::1 tomb file::" $1 }
+#.
+#. # TODO: split the rest of that function out.
+#: tomb:485
#, fuzzy
msgid "Tomb file is empty (zero length): ::1 tomb file::"
msgstr "Le fichier valide d'une tombe a été trouvé : ::1 tomb file::"
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. _failure "Tomb file not found: ::1 tomb file::" $1 }
+#. [[ ! -f "$1" ]] && {
+#. _failure "Tomb file is not a regular file: ::1 tomb file::" $1 }
+#. [[ ! -s "$1" ]] && {
+#. _failure "Tomb file is empty (zero length): ::1 tomb file::" $1 }
+#. [[ ! -w "$1" ]] && {
+#. > _failure "Tomb file is not writable: ::1 tomb file::" $1 }
+#.
+#. # TODO: split the rest of that function out.
+#. # We already have a valid tomb, now we're checking
+#. # whether we can alter it.
+#: tomb:487
#, fuzzy
msgid "Tomb file is not writable: ::1 tomb file::"
msgstr "Le fichier valide d'une tombe a été trouvé : ::1 tomb file::"
-#: warning
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. # TODO: split the rest of that function out.
+#. # We already have a valid tomb, now we're checking
+#. # whether we can alter it.
+#.
+#. # Tomb file may be a LUKS FS (or we are creating it)
+#. [[ "`file $1`" =~ "luks encrypted file" ]] || {
+#. > _warning "File is not yet a tomb: ::1 tomb file::" $1 }
+#.
+#. _plot $1 # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. # Tomb cannot be already mounted (or we cannot alter it)
+#: tomb:495
#, fuzzy
msgid "File is not yet a tomb: ::1 tomb file::"
msgstr "Ouverture de la tombe ::1 tomb file::"
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. _warning "File is not yet a tomb: ::1 tomb file::" $1 }
+#.
+#. _plot $1 # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. # Tomb cannot be already mounted (or we cannot alter it)
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]$" ]] && {
+#. > _failure "Tomb is currently in use: ::1 tomb name::" $TOMBNAME
+#. }
+#.
+#. _message "Valid tomb file found: ::1 tomb path::" $TOMBPATH
+#.
+#: tomb:501
#, fuzzy
msgid "Tomb is currently in use: ::1 tomb name::"
msgstr "Fermons la tombe ::1 tomb name::"
-#: message
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#.
+#. # Tomb cannot be already mounted (or we cannot alter it)
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]$" ]] && {
+#. _failure "Tomb is currently in use: ::1 tomb name::" $TOMBNAME
+#. }
+#.
+#. > _message "Valid tomb file found: ::1 tomb path::" $TOMBPATH
+#.
+#. return 0
+#. }
+#.
+#: tomb:504
msgid "Valid tomb file found: ::1 tomb path::"
msgstr "Un fichier de tombe valide a été trouvé à : ::1 tomb path::"
-#: warning
+#. Fold: Safety functions
+#. Function: lo_mount
+#.
+#. Code sample:
+#. lo_mount() {
+#. tpath="$1"
+#.
+#. # check if we have support for loop mounting
+#. _nstloop=`sudo losetup -f`
+#. [[ $? = 0 ]] || {
+#. > _warning "Loop mount of volumes is not possible on this machine, this error"
+#. _warning "often occurs on VPS and kernels that don't provide the loop module."
+#. _warning "It is impossible to use Tomb on this machine at this conditions."
+#. _failure "Operation aborted."
+#. }
+#: tomb:516
#, fuzzy
msgid "Loop mount of volumes is not possible on this machine, this error"
-msgstr "Le montage en boucle des volumes n'est pas supporté sur cette machine, cette erreur"
-
-#: print
+msgstr ""
+"Le montage en boucle des volumes n'est pas supporté sur cette machine, cette "
+"erreur"
+
+#. Fold: Safety functions
+#. Function: lo_mount
+#.
+#. Code sample:
+#. tpath="$1"
+#.
+#. # check if we have support for loop mounting
+#. _nstloop=`sudo losetup -f`
+#. [[ $? = 0 ]] || {
+#. _warning "Loop mount of volumes is not possible on this machine, this error"
+#. > _warning "often occurs on VPS and kernels that don't provide the loop module."
+#. _warning "It is impossible to use Tomb on this machine at this conditions."
+#. _failure "Operation aborted."
+#. }
+#.
+#: tomb:517
+msgid "often occurs on VPS and kernels that don't provide the loop module."
+msgstr ""
+"se produit souvent sur les machines virtuelles et avec les noyaux qui ne "
+"fournissent pas le module loop."
+
+#. Fold: Safety functions
+#. Function: lo_mount
+#.
+#. Code sample:
+#.
+#. # check if we have support for loop mounting
+#. _nstloop=`sudo losetup -f`
+#. [[ $? = 0 ]] || {
+#. _warning "Loop mount of volumes is not possible on this machine, this error"
+#. _warning "often occurs on VPS and kernels that don't provide the loop module."
+#. > _warning "It is impossible to use Tomb on this machine at this conditions."
+#. _failure "Operation aborted."
+#. }
+#.
+#. sudo losetup -f "$tpath" # allocates the next loopback for our file
+#: tomb:518
+msgid "It is impossible to use Tomb on this machine at this conditions."
+msgstr ""
+"Il est impossible d'utiliser Tomb dans les conditions offertes par cette "
+"machine."
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#.
+#. # }}}
+#.
+#. # {{{ Commandline interaction
+#.
+#. usage() {
+#. > _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#: tomb:558
msgid "Syntax: tomb [options] command [arguments]"
msgstr "Syntaxe : tomb [options] commande [arguments]"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#.
+#. # {{{ Commandline interaction
+#.
+#. usage() {
+#. _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. > _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#: tomb:560
msgid "Commands:"
msgstr "Commandes :"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#.
+#. usage() {
+#. _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. > _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#: tomb:562
msgid " // Creation:"
msgstr " // Création :"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. usage() {
+#. _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#. > _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#: tomb:563
msgid " dig create a new empty TOMB file of size -s in MB"
msgstr " dig (creuser) Créer une nouvelle TOMBE de taille -s Mo"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. > _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#: tomb:564
msgid " forge create a new KEY file and set its password"
-msgstr " forge (forger) Créer une nouvelle CLÉ et lui assigner un mot de passe"
-
-#: print
+msgstr ""
+" forge (forger) Créer une nouvelle CLÉ et lui assigner un mot de "
+"passe"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. > _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#: tomb:565
msgid " lock installs a lock on a TOMB to use it with KEY"
msgstr " lock (vérouiller) Vérouiller une TOMBE avec une CLÉ"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. > _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#: tomb:567
msgid " // Operations on tombs:"
msgstr " // Opérations sur les tombes :"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. > _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#: tomb:568
msgid " open open an existing TOMB"
msgstr " open (ouvrir) Ouvrir une TOMBE existante"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. > _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#: tomb:569
msgid " index update the search indexes of tombs"
-msgstr " index (indéxer) Mettre à jour les indices de recherche des tombes"
-
-#: print
+msgstr ""
+" index (indéxer) Mettre à jour les indices de recherche des tombes"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. > _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#: tomb:570
msgid " search looks for filenames matching text patterns"
-msgstr " search (rechercher) Rechercher des noms de fichiers selon des motifs textuels"
-
-#: print
+msgstr ""
+" search (rechercher) Rechercher des noms de fichiers selon des motifs "
+"textuels"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. > _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#: tomb:571
msgid " list list of open TOMBs and information on them"
-msgstr " list (énumérer) Établir une liste informative des TOMBES ouvertes"
-
-#: print
+msgstr ""
+" list (énumérer) Établir une liste informative des TOMBES ouvertes"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. > _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#: tomb:572
msgid " close close a specific TOMB (or 'all')"
-msgstr " close (fermer) Sceller une TOMBE en fermant tous les programmes associés"
-
-#: print
+msgstr ""
+" close (fermer) Sceller une TOMBE en fermant tous les programmes "
+"associés"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. > _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#: tomb:573
msgid " slam slam a TOMB killing all programs using it"
-msgstr " slam referme une tombe brutalement, tuant tous les programmes qui l'utilisent"
-
-#: print
+msgstr ""
+" slam referme une tombe brutalement, tuant tous les programmes qui "
+"l'utilisent"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. > _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#. _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#: tomb:575
msgid " resize resize a TOMB to a new size -s (can only grow)"
msgstr " resize (élargir) Augmenter la taille d'une TOMBE à -s Mo"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#. > _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#. _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#: tomb:578
msgid " // Operations on keys:"
msgstr " // Opération sur les clés :"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#. _print " // Operations on keys:"
+#. > _print " passwd change the password of a KEY (needs old pass)"
+#. _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#. _print " // Backup on paper:"
+#: tomb:579
+msgid " passwd change the password of a KEY (needs old pass)"
+msgstr ""
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#. _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#. > _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#. _print " // Backup on paper:"
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#: tomb:580
+msgid " setkey change the KEY locking a TOMB (needs old key and pass)"
+msgstr ""
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#. _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#. > _print " // Backup on paper:"
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#: tomb:583
+msgid " // Backup on paper:"
+msgstr ""
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#. _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#. _print " // Backup on paper:"
+#. > _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#. _print " // Steganography:"
+#: tomb:584
msgid " engrave makes a QR code of a KEY to be saved on paper"
-msgstr " engrave (graver) Grave une empreinte de la CLÉ pour impression papier au format QR code"
+msgstr ""
+" engrave (graver) Grave une empreinte de la CLÉ pour impression papier "
+"au format QR code"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. [[ $QRENCODE == 1 ]] && {
+#. _print " // Backup on paper:"
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#. > _print " // Steganography:"
+#. _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#: tomb:588
+msgid " // Steganography:"
+msgstr ""
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " // Backup on paper:"
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#. _print " // Steganography:"
+#. > _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. _print "Options:"
+#: tomb:589
+msgid " bury hide a KEY inside a JPEG image (for use with -k)"
+msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#. _print " // Steganography:"
+#. _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. > _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#: tomb:590
+msgid " exhume extract a KEY from a JPEG image (prints to stdout)"
+msgstr ""
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. [[ $STEGHIDE == 1 ]] && {
+#. _print " // Steganography:"
+#. _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. > _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#: tomb:593
msgid "Options:"
msgstr "Options :"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#. > _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#: tomb:595
msgid " -s size of the tomb file when creating/resizing one (in MB)"
-msgstr " -s taille de la tombe lors de sa création ou son agrandissement (en Mo)"
-
-#: print
+msgstr ""
+" -s taille de la tombe lors de sa création ou son agrandissement (en "
+"Mo)"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. > _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#: tomb:596
msgid " -k path to the key to be used ('-k -' to read from stdin)"
-msgstr " -k chemin de la clé à utiliser ('-k -' pour la lire depuis l'entrée standard)"
-
-#: print
+msgstr ""
+" -k chemin de la clé à utiliser ('-k -' pour la lire depuis l'entrée "
+"standard)"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. }
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. > _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#: tomb:597
msgid " -n don't process the hooks found in tomb"
msgstr " -n ne pas utiliser les 'crochets' trouvés dans la tombe"
-#: print
-msgid " -o mount options used to open (default: rw,noatime,nodev)"
-msgstr " -o options de montage à l'ouverture (par défaut : rw,noatime,nodev)"
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. > _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#: tomb:598
+msgid " -o options passed to local command, e.g.:"
+msgstr ""
-#: print
-msgid " -f force operation (i.e. even if swap is active)"
-msgstr " -f forcer l'opération (c-à-d même si la partition d'échange est activée)"
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. > _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#: tomb:599
+msgid " - mount options used to open (default: rw,noatime,nodev)"
+msgstr ""
-#: print
-msgid " --kdf generate passwords armored against dictionary attacks"
-msgstr " --kdf générer des mots de passe protégés contre les attaques par dictionnaire"
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. > _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#: tomb:600
+msgid " - an alternate cipher to forge and lock"
+msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. > _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#: tomb:601
+msgid " -f force operation (i.e. even if swap is active)"
+msgstr ""
+" -f forcer l'opération (c-à-d même si la partition d'échange est "
+"activée)"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. > _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#. _print "\000"
+#. _print " -h print this help"
+#: tomb:603
+msgid " --kdf generate passwords armored against dictionary attacks"
+msgstr ""
+" --kdf générer des mots de passe protégés contre les attaques par "
+"dictionnaire"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#. _print "\000"
+#. > _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#: tomb:607
msgid " -h print this help"
msgstr " -h imprimer cette aide"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#. _print "\000"
+#. _print " -h print this help"
+#. > _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#. _print "For more informations on Tomb read the manual: man tomb"
+#: tomb:608
msgid " -v print version, license and list of available ciphers"
-msgstr " -v imprimer la version, la licence, et la liste des codes disponibles"
-
-#: print
+msgstr ""
+" -v imprimer la version, la licence, et la liste des codes disponibles"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#. _print "\000"
+#. _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. > _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#. _print "For more informations on Tomb read the manual: man tomb"
+#. _print "Please report bugs on <http://github.com/dyne/tomb/issues>."
+#: tomb:609
msgid " -q run quietly without printing informations"
msgstr " -q exécuter silencieusement sans imprimer les informations"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. }
+#.
+#. _print "\000"
+#. _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. > _print " -D print debugging information at runtime"
+#. _print "\000"
+#. _print "For more informations on Tomb read the manual: man tomb"
+#. _print "Please report bugs on <http://github.com/dyne/tomb/issues>."
+#. }
+#: tomb:610
msgid " -D print debugging information at runtime"
msgstr " -D imprimer les information de débogage durant l'exécution"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#. > _print "For more informations on Tomb read the manual: man tomb"
+#. _print "Please report bugs on <http://github.com/dyne/tomb/issues>."
+#. }
+#.
+#.
+#: tomb:612
msgid "For more informations on Tomb read the manual: man tomb"
-msgstr "Pour de plus amples information sur Tomb, se reporter au manuel : man tomb"
-
-#: print
+msgstr ""
+"Pour de plus amples information sur Tomb, se reporter au manuel : man tomb"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#. _print "For more informations on Tomb read the manual: man tomb"
+#. > _print "Please report bugs on <http://github.com/dyne/tomb/issues>."
+#. }
+#.
+#.
+#. # Check whether a commandline option is set.
+#: tomb:613
msgid "Please report bugs on <http://github.com/dyne/tomb/issues>."
-msgstr "Merci de rapporter les erreurs sur <https://github.com/dyne/tomb/issues>."
-
-#: failure
+msgstr ""
+"Merci de rapporter les erreurs sur <https://github.com/dyne/tomb/issues>."
+
+#. Fold: Commandline interaction
+#. Function: _ensure_dependencies
+#.
+#. Code sample:
+#. # missing, bail out.
+#. _ensure_dependencies() {
+#.
+#. # Check for required programs
+#. for req in cryptsetup pinentry sudo gpg mkfs.ext4 e2fsck; do
+#. command -v $req 1>/dev/null 2>/dev/null || {
+#. > _failure "Missing required dependency ::1 command::. Please install it." $req }
+#. done
+#.
+#. # Ensure system binaries are available in the PATH
+#. path+=(/sbin /usr/sbin) # zsh magic
+#: tomb:748
msgid "Missing required dependency ::1 command::. Please install it."
msgstr "Il manque la dépendance requise ::1 command::. Merci de l'installer."
-#: warning
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#.
+#. _verbose "is_valid_key"
+#.
+#. [[ -z $key ]] && key=$TOMBKEY
+#. [[ "$key" = "cleartext" ]] && {
+#. { option_is_set --unsafe } || {
+#. > _warning "cleartext key from stdin selected: this is unsafe."
+#. exitv=127 _failure "please use --unsafe if you really want to do this."
+#. }
+#. _warning "received key in cleartext from stdin (unsafe mode)"
+#. return 0 }
+#: tomb:785
+msgid "cleartext key from stdin selected: this is unsafe."
+msgstr ""
+
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. _verbose "is_valid_key"
+#.
+#. [[ -z $key ]] && key=$TOMBKEY
+#. [[ "$key" = "cleartext" ]] && {
+#. { option_is_set --unsafe } || {
+#. _warning "cleartext key from stdin selected: this is unsafe."
+#. > exitv=127 _failure "please use --unsafe if you really want to do this."
+#. }
+#. _warning "received key in cleartext from stdin (unsafe mode)"
+#. return 0 }
+#.
+#: tomb:786
+msgid "please use --unsafe if you really want to do this."
+msgstr ""
+
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. [[ -z $key ]] && key=$TOMBKEY
+#. [[ "$key" = "cleartext" ]] && {
+#. { option_is_set --unsafe } || {
+#. _warning "cleartext key from stdin selected: this is unsafe."
+#. exitv=127 _failure "please use --unsafe if you really want to do this."
+#. }
+#. > _warning "received key in cleartext from stdin (unsafe mode)"
+#. return 0 }
+#.
+#. [[ -z $key ]] && {
+#. _warning "is_valid_key() called without an argument."
+#: tomb:788
+msgid "received key in cleartext from stdin (unsafe mode)"
+msgstr ""
+
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. exitv=127 _failure "please use --unsafe if you really want to do this."
+#. }
+#. _warning "received key in cleartext from stdin (unsafe mode)"
+#. return 0 }
+#.
+#. [[ -z $key ]] && {
+#. > _warning "is_valid_key() called without an argument."
+#. return 1
+#. }
+#.
+#. # If the key file is an image don't check file header
+#: tomb:792
msgid "is_valid_key() called without an argument."
msgstr "La fonction is_valid_key() a été appelée sans argument."
-#: message
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. }
+#.
+#. # If the key file is an image don't check file header
+#. [[ -r $TOMBKEYFILE ]] #. && [[ $(file $TOMBKEYFILE) =~ "JP.G" ]] #. && {
+#. > _message "Key is an image, it might be valid."
+#. return 0 }
+#.
+#. [[ $key =~ "BEGIN PGP" ]] && {
+#. _message "Key is valid."
+#: tomb:800
msgid "Key is an image, it might be valid."
msgstr "La clé est une image et pourrait être valide."
-#: message
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. && [[ $(file $TOMBKEYFILE) =~ "JP.G" ]] #. && {
+#. _message "Key is an image, it might be valid."
+#. return 0 }
+#.
+#. [[ $key =~ "BEGIN PGP" ]] && {
+#. > _message "Key is valid."
+#. return 0 }
+#.
+#. return 1
+#. }
+#: tomb:804
msgid "Key is valid."
msgstr "La clé est valide."
-#: warning
+#. Fold: Key operations
+#. Function: _tomb_key_recover recover_key
+#.
+#. Code sample:
+#. }
+#.
+#. # $1 is a string containing an encrypted key
+#. _tomb_key_recover recover_key() {
+#. local key="${1}" # Unique argument is an encrypted key
+#.
+#. > _warning "Attempting key recovery."
+#.
+#. _head="${key[(f)1]}" # take the first line
+#.
+#. TOMBKEY="" # Reset global variable
+#: tomb:814
msgid "Attempting key recovery."
msgstr "Tentative de récupération de la clé."
-#: warning
-msgid "The key seems invalid or its format is not known by this version of Tomb."
-msgstr "La clé semble invalide ou son format n'est pas reconnu par cette version de Tomb."
+#. Fold: Key operations
+#. Function: _load_key
+#.
+#. Code sample:
+#. # Set global variables TOMBKEY and TOMBKEYFILE.
+#. _load_key() {
+#. local keyfile="$1" # Unique argument is an optional keyfile
+#.
+#. [[ -z $keyfile ]] && keyfile=$(option_value -k)
+#. [[ -z $keyfile ]] && {
+#. > _failure "This operation requires a key file to be specified using the -k option." }
+#.
+#. if [[ $keyfile == "-" ]]; then
+#. _verbose "load_key reading from stdin."
+#. _message "Waiting for the key to be piped from stdin... "
+#: tomb:838
+msgid "This operation requires a key file to be specified using the -k option."
+msgstr ""
+"Cette opération requiert la spécification du chemin de la clé par l'option -"
+"k."
+
+#. Fold: Key operations
+#. Function: _load_key
+#.
+#. Code sample:
+#. [[ -z $keyfile ]] && keyfile=$(option_value -k)
+#. [[ -z $keyfile ]] && {
+#. _failure "This operation requires a key file to be specified using the -k option." }
+#.
+#. if [[ $keyfile == "-" ]]; then
+#. _verbose "load_key reading from stdin."
+#. > _message "Waiting for the key to be piped from stdin... "
+#. TOMBKEYFILE=stdin
+#. TOMBKEY=$(cat)
+#. elif [[ $keyfile == "cleartext" ]]; then
+#. _verbose "load_key reading SECRET from stdin"
+#: tomb:842
+msgid "Waiting for the key to be piped from stdin... "
+msgstr "En attente d'une clé à lire sur l'entrée standard... "
-#: failure
+#. Fold: Key operations
+#. Function: _load_key
+#.
+#. Code sample:
+#. _message "Waiting for the key to be piped from stdin... "
+#. TOMBKEYFILE=cleartext
+#. TOMBKEY=cleartext
+#. TOMBSECRET=$(cat)
+#. else
+#. _verbose "load_key argument: ::1 key file::" $keyfile
+#. > [[ -r $keyfile ]] || _failure "Key not found, specify one using -k."
+#. TOMBKEYFILE=$keyfile
+#. TOMBKEY="${mapfile[$TOMBKEYFILE]}"
+#. fi
+#.
+#: tomb:853
+msgid "Key not found, specify one using -k."
+msgstr "Aucune clé n'a été trouvée, merci d'en spécifier une avec -k."
+
+#. Fold: Key operations
+#. Function: _load_key
+#.
+#. Code sample:
+#. TOMBKEY="${mapfile[$TOMBKEYFILE]}"
+#. fi
+#.
+#. _verbose "load_key: ::1 key::" $TOMBKEYFILE
+#.
+#. is_valid_key $TOMBKEY || {
+#. > _warning "The key seems invalid or its format is not known by this version of Tomb."
+#. _tomb_key_recover $TOMBKEY
+#. }
+#.
+#. # Declared TOMBKEYFILE (path)
+#: tomb:861
+msgid ""
+"The key seems invalid or its format is not known by this version of Tomb."
+msgstr ""
+"La clé semble invalide ou son format n'est pas reconnu par cette version de "
+"Tomb."
+
+#. Fold: Key operations
+#. Function: get_lukskey
+#.
+#. Code sample:
+#. _verbose "KDF salt: $kdf_salt"
+#. _verbose "KDF ic: $kdf_ic"
+#. _verbose "KDF len: $kdf_len"
+#. _password=$(tomb-kdb-pbkdf2 $kdf_salt $kdf_ic $kdf_len 2>/dev/null <<<$_password)
+#. ;;
+#. *)
+#. > _failure "No suitable program for KDF ::1 program::." $pbkdf_hash
+#. unset _password
+#. return 1
+#. ;;
+#. esac
+#: tomb:936
#, fuzzy
msgid "No suitable program for KDF ::1 program::."
msgstr "Pas de programme approprié pour la dérivation de clé ::1 kdf::."
-#: failure
+#. Fold: Key operations
+#. Function: ask_key_password
+#.
+#. Code sample:
+#.
+#. # This function asks the user for the password to use the key it tests
+#. # it against the return code of gpg on success returns 0 and saves
+#. # the password in the global variable $TOMBPASSWORD
+#. ask_key_password() {
+#. [[ -z "$TOMBKEYFILE" ]] && {
+#. > _failure "Internal error: ask_key_password() called before _load_key()." }
+#.
+#. [[ "$TOMBKEYFILE" = "cleartext" ]] && {
+#. _verbose "no password needed, using secret bytes from stdin"
+#. return 0 }
+#: tomb:962
msgid "Internal error: ask_key_password() called before _load_key()."
-msgstr "Erreur interne : la fonction ask_key_password() a été appelée avant _load_key()."
-
-#: message
+msgstr ""
+"Erreur interne : la fonction ask_key_password() a été appelée avant "
+"_load_key()."
+
+#. Fold: Key operations
+#. Function: ask_key_password
+#.
+#. Code sample:
+#. _failure "Internal error: ask_key_password() called before _load_key()." }
+#.
+#. [[ "$TOMBKEYFILE" = "cleartext" ]] && {
+#. _verbose "no password needed, using secret bytes from stdin"
+#. return 0 }
+#.
+#. > _message "A password is required to use key ::1 key::" $TOMBKEYFILE
+#. passok=0
+#. tombpass=""
+#. if [[ "$1" = "" ]]; then
+#.
+#: tomb:968
msgid "A password is required to use key ::1 key::"
msgstr "Un mot de passe est nécessaire pour utiliser la clé ::1 key::"
-#: message
-msgid "Commanded to change password for tomb key ::1 key::"
-msgstr "L'utilisateur a requis un changement du mot de passe de la clé ::1 key::."
+#. Fold: Key operations
+#. Function: ask_key_password
+#.
+#. Code sample:
+#. if [[ $c == 1 ]]; then
+#. tombpass=$(ask_password "Insert password to: $TOMBKEYFILE")
+#. else
+#. tombpass=$(ask_password "Insert password to: $TOMBKEYFILE (attempt $c)")
+#. fi
+#. [[ $? = 0 ]] || {
+#. > _warning "User aborted password dialog."
+#. return 1
+#. }
+#.
+#. get_lukskey "$tombpass"
+#: tomb:980
+msgid "User aborted password dialog."
+msgstr "L'utilisateur a interrompu le dialogue du mot de passe."
+
+#. Fold: Key operations
+#. Function: ask_key_password
+#.
+#. Code sample:
+#. return 1
+#. }
+#.
+#. get_lukskey "$tombpass"
+#.
+#. [[ $? = 0 ]] && {
+#. > passok=1; _message "Password OK."
+#. break;
+#. }
+#. done
+#.
+#: tomb:987
+msgid "Password OK."
+msgstr "Le mot de passe est valide."
-#: failure
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#. change_passwd() {
+#. local tmpnewkey lukskey c tombpass tombpasstmp
+#.
+#. _check_swap # Ensure swap is secure, if any
+#. _load_key # Try loading key from option -k and set TOMBKEYFILE
+#.
+#. > _message "Commanded to change password for tomb key ::1 key::" $TOMBKEYFILE
+#.
+#. _tmp_create
+#. tmpnewkey=$TOMBTMP
+#.
+#: tomb:1025
+msgid "Commanded to change password for tomb key ::1 key::"
+msgstr ""
+"L'utilisateur a requis un changement du mot de passe de la clé ::1 key::."
+
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#. local tomboldpwd="`option_value --tomb-old-pwd`"
+#. _verbose "tomb-old-pwd = ::1 old pass::" $tomboldpwd
+#. ask_key_password "$tomboldpwd"
+#. else
+#. ask_key_password
+#. fi
+#. > [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. _success "Changing password for ::1 key file::" $TOMBKEYFILE
+#.
+#. # Here $TOMBSECRET contains the key material in clear
+#: tomb:1037
#, fuzzy
msgid "No valid password supplied."
msgstr "Le mot de passe fourni est invalide."
-#: message
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#. ask_key_password "$tomboldpwd"
+#. else
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. > _success "Changing password for ::1 key file::" $TOMBKEYFILE
+#.
+#. # Here $TOMBSECRET contains the key material in clear
+#.
+#. { option_is_set --tomb-pwd } && {
+#: tomb:1039
+msgid "Changing password for ::1 key file::"
+msgstr ""
+
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#. gen_key "$tombpwd" >> "$tmpnewkey"
+#. } || {
+#. gen_key >> "$tmpnewkey"
+#. }
+#.
+#. { is_valid_key "${mapfile[$tmpnewkey]}" } || {
+#. > _failure "Error: the newly generated keyfile does not seem valid." }
+#.
+#. # Copy the new key as the original keyfile name
+#. cp -f "${tmpnewkey}" $TOMBKEYFILE
+#. _success "Your passphrase was successfully updated."
+#: tomb:1052
+msgid "Error: the newly generated keyfile does not seem valid."
+msgstr "Erreur : le fichier de clé nouvellement créé semble invalide."
+
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#.
+#. { is_valid_key "${mapfile[$tmpnewkey]}" } || {
+#. _failure "Error: the newly generated keyfile does not seem valid." }
+#.
+#. # Copy the new key as the original keyfile name
+#. cp -f "${tmpnewkey}" $TOMBKEYFILE
+#. > _success "Your passphrase was successfully updated."
+#.
+#. return 0
+#. }
+#.
+#: tomb:1056
+msgid "Your passphrase was successfully updated."
+msgstr ""
+
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#.
+#. if [ "$1" = "" ]; then
+#. while true; do
+#. # 3 tries to write two times a matching password
+#. tombpass=`ask_password "Type the new password to secure your key"`
+#. if [[ $? != 0 ]]; then
+#. > _failure "User aborted."
+#. fi
+#. if [ -z $tombpass ]; then
+#. _failure "You set empty password, which is not possible."
+#. fi
+#: tomb:1078
+msgid "User aborted."
+msgstr "L'utilisateur a interrompu l'opération."
+
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. # 3 tries to write two times a matching password
+#. tombpass=`ask_password "Type the new password to secure your key"`
+#. if [[ $? != 0 ]]; then
+#. _failure "User aborted."
+#. fi
+#. if [ -z $tombpass ]; then
+#. > _failure "You set empty password, which is not possible."
+#. fi
+#. tombpasstmp=$tombpass
+#. tombpass=`ask_password "Type the new password to secure your key (again)"`
+#. if [[ $? != 0 ]]; then
+#: tomb:1081
+msgid "You set empty password, which is not possible."
+msgstr "Vous ne pouvez pas saisir un mot de passe vide."
+
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. # see: https://github.com/dyne/Tomb/issues/82
+#. itertime="`option_value --kdf`"
+#. # removing support of floating points because they can't be type checked well
+#. if [[ "$itertime" != <-> ]]; then
+#. unset tombpass
+#. unset tombpasstmp
+#. > _failure "Wrong argument for --kdf: must be an integer number (iteration seconds)."
+#. fi
+#. # --kdf takes one parameter: iter time (on present machine) in seconds
+#. local -i microseconds
+#. microseconds=$(( itertime * 10000 ))
+#: tomb:1109
+msgid ""
+"Wrong argument for --kdf: must be an integer number (iteration seconds)."
+msgstr ""
+"Argument invalide pour --kdf : ce doit être un nombre entier (de secondes "
+"d'itérations)."
+
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. unset tombpasstmp
+#. _failure "Wrong argument for --kdf: must be an integer number (iteration seconds)."
+#. fi
+#. # --kdf takes one parameter: iter time (on present machine) in seconds
+#. local -i microseconds
+#. microseconds=$(( itertime * 10000 ))
+#. > _success "Using KDF, iterations: ::1 microseconds::" $microseconds
+#. _message "generating salt"
+#. pbkdf2_salt=`tomb-kdb-pbkdf2-gensalt`
+#. _message "calculating iterations"
+#. pbkdf2_iter=`tomb-kdb-pbkdf2-getiter $microseconds`
+#: tomb:1114
+msgid "Using KDF, iterations: ::1 microseconds::"
+msgstr ""
+
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. _failure "Wrong argument for --kdf: must be an integer number (iteration seconds)."
+#. fi
+#. # --kdf takes one parameter: iter time (on present machine) in seconds
+#. local -i microseconds
+#. microseconds=$(( itertime * 10000 ))
+#. _success "Using KDF, iterations: ::1 microseconds::" $microseconds
+#. > _message "generating salt"
+#. pbkdf2_salt=`tomb-kdb-pbkdf2-gensalt`
+#. _message "calculating iterations"
+#. pbkdf2_iter=`tomb-kdb-pbkdf2-getiter $microseconds`
+#. _message "encoding the password"
+#: tomb:1115
msgid "generating salt"
msgstr "Génération du sel en cours"
-#: message
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. # --kdf takes one parameter: iter time (on present machine) in seconds
+#. local -i microseconds
+#. microseconds=$(( itertime * 10000 ))
+#. _success "Using KDF, iterations: ::1 microseconds::" $microseconds
+#. _message "generating salt"
+#. pbkdf2_salt=`tomb-kdb-pbkdf2-gensalt`
+#. > _message "calculating iterations"
+#. pbkdf2_iter=`tomb-kdb-pbkdf2-getiter $microseconds`
+#. _message "encoding the password"
+#. # We use a length of 64bytes = 512bits (more than needed!?)
+#. tombpass=`tomb-kdb-pbkdf2 $pbkdf2_salt $pbkdf2_iter 64 <<<"${tombpass}"`
+#: tomb:1117
msgid "calculating iterations"
msgstr "Calcul des itérations en cours"
-#: message
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. microseconds=$(( itertime * 10000 ))
+#. _success "Using KDF, iterations: ::1 microseconds::" $microseconds
+#. _message "generating salt"
+#. pbkdf2_salt=`tomb-kdb-pbkdf2-gensalt`
+#. _message "calculating iterations"
+#. pbkdf2_iter=`tomb-kdb-pbkdf2-getiter $microseconds`
+#. > _message "encoding the password"
+#. # We use a length of 64bytes = 512bits (more than needed!?)
+#. tombpass=`tomb-kdb-pbkdf2 $pbkdf2_salt $pbkdf2_iter 64 <<<"${tombpass}"`
+#.
+#. header="_KDF_pbkdf2sha1_${pbkdf2_salt}_${pbkdf2_iter}_64\n"
+#: tomb:1119
msgid "encoding the password"
msgstr "Codage du mot de passe en cours"
-#: warning
+#. Fold: Key operations
+#. Function: list_gnupg_ciphers
+#.
+#. Code sample:
+#. unset tombpasstmp
+#. }
+#.
+#. # prints an array of ciphers available in gnupg (to encrypt keys)
+#. list_gnupg_ciphers() {
+#. # prints an error if GnuPG is not found
+#. > which gpg 2>/dev/null || _failure "gpg (GnuPG) is not found, Tomb cannot function without it."
+#.
+#. ciphers=(`gpg --version | awk '
+#. BEGIN { ciphers=0 }
+#. /^Cipher:/ { gsub(/,/,""); sub(/^Cipher:/,""); print; ciphers=1; next }
+#: tomb:1150
+msgid "gpg (GnuPG) is not found, Tomb cannot function without it."
+msgstr ""
+"gpg (GnuPG) n'est pas disponible, mais il est requis pour le fonctionnement "
+"de Tomb."
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#.
+#. _load_key # Try loading key from option -k and set TOMBKEY
+#.
+#. imagefile=$PARAM
+#.
+#. [[ "`file $imagefile`" =~ "JPEG" ]] || {
+#. > _warning "Encode failed: ::1 image file:: is not a jpeg image." $imagefile
+#. return 1
+#. }
+#.
+#. _success "Encoding key ::1 tomb key:: inside image ::2 image file::" $TOMBKEY $imagefile
+#: tomb:1171
msgid "Encode failed: ::1 image file:: is not a jpeg image."
msgstr "L'encodage a échoué : ::1 image file:: n'est pas une image JPEG."
-#: failure
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#.
+#. [[ "`file $imagefile`" =~ "JPEG" ]] || {
+#. _warning "Encode failed: ::1 image file:: is not a jpeg image." $imagefile
+#. return 1
+#. }
+#.
+#. > _success "Encoding key ::1 tomb key:: inside image ::2 image file::" $TOMBKEY $imagefile
+#. _message "Please confirm the key password for the encoding"
+#. # We ask the password and test if it is the same encoding the
+#. # base key, to insure that the same password is used for the
+#. # encryption and the steganography. This is a standard enforced
+#: tomb:1175
+msgid "Encoding key ::1 tomb key:: inside image ::2 image file::"
+msgstr ""
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. [[ "`file $imagefile`" =~ "JPEG" ]] || {
+#. _warning "Encode failed: ::1 image file:: is not a jpeg image." $imagefile
+#. return 1
+#. }
+#.
+#. _success "Encoding key ::1 tomb key:: inside image ::2 image file::" $TOMBKEY $imagefile
+#. > _message "Please confirm the key password for the encoding"
+#. # We ask the password and test if it is the same encoding the
+#. # base key, to insure that the same password is used for the
+#. # encryption and the steganography. This is a standard enforced
+#. # by Tomb, but its not strictly necessary (and having different
+#: tomb:1176
+msgid "Please confirm the key password for the encoding"
+msgstr "Merci de confirmer le mot de passe de la clé en vue de l'encodage"
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tombpwd
+#. ask_key_password "$tombpwd"
+#. } || {
+#. ask_key_password
+#. }
+#. [[ $? != 0 ]] && {
+#. > _warning "Wrong password supplied."
+#. _failure "You shall not bury a key whose password is unknown to you." }
+#.
+#. # We omit armor strings since having them as constants can give
+#. # ground to effective attacks on steganography
+#: tomb:1192
+msgid "Wrong password supplied."
+msgstr "Le mot de passe fourni est invalide."
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. ask_key_password "$tombpwd"
+#. } || {
+#. ask_key_password
+#. }
+#. [[ $? != 0 ]] && {
+#. _warning "Wrong password supplied."
+#. > _failure "You shall not bury a key whose password is unknown to you." }
+#.
+#. # We omit armor strings since having them as constants can give
+#. # ground to effective attacks on steganography
+#. print - "$TOMBKEY" | awk '
+#: tomb:1193
+msgid "You shall not bury a key whose password is unknown to you."
+msgstr "Vous ne pouvez pas enterrer une clé dont vous ignorez le mot de passe."
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. /^-----/ {next}
+#. /^Version/ {next}
+#. {print $0}' #. | steghide embed --embedfile - --coverfile ${imagefile} #. -p $TOMBPASSWORD -z 9 -e serpent cbc
+#. if [ $? != 0 ]; then
+#. > _warning "Encoding error: steghide reports problems."
+#. res=1
+#. else
+#. _success "Tomb key encoded succesfully into image ::1 image file::" $imagefile
+#. res=0
+#: tomb:1204
+msgid "Encoding error: steghide reports problems."
+msgstr "Erreur à l'encodage : steghide rapporte des problèmes."
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. | steghide embed --embedfile - --coverfile ${imagefile} #. -p $TOMBPASSWORD -z 9 -e serpent cbc
+#. if [ $? != 0 ]; then
+#. _warning "Encoding error: steghide reports problems."
+#. res=1
+#. else
+#. > _success "Tomb key encoded succesfully into image ::1 image file::" $imagefile
+#. res=0
+#. fi
+#.
+#. return $res
+#: tomb:1207
+msgid "Tomb key encoded succesfully into image ::1 image file::"
+msgstr ""
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#.
+#. # mandatory 1st arg: the image file where key is supposed to be
+#. # optional 2nd arg: the password to use (same as key, internal use)
+#. # optional 3rd arg: the key where to save the result (- for stdout)
+#. exhume_key() {
+#. [[ "$1" = "" ]] && {
+#. > _failure "Exhume failed, no image specified" }
+#.
+#. local imagefile="$1" # The image file where to look for the key
+#. local tombpass="$2" # (Optional) the password to use (internal use)
+#. local destkey="$3" # (Optional) the key file where to save the
+#: tomb:1219
+msgid "Exhume failed, no image specified"
+msgstr ""
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. local destkey="$3" # (Optional) the key file where to save the
+#. # result (- for stdout)
+#. local r=1 # Return code (default: fail)
+#.
+#. # Ensure the image file is a readable JPEG
+#. [[ ! -r $imagefile ]] && {
+#. > _failure "Exhume failed, image file not found: ::1 image file::" "${imagefile:-none}" }
+#. [[ ! $(file "$imagefile") =~ "JP.G" ]] && {
+#. _failure "Exhume failed: ::1 image file:: is not a jpeg image." $imagefile }
+#.
+#. # When a password is passed as argument then always print out
+#: tomb:1229
#, fuzzy
msgid "Exhume failed, image file not found: ::1 image file::"
msgstr "Le fichier valide d'une tombe a été trouvé : ::1 tomb file::"
-#: failure
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. local r=1 # Return code (default: fail)
+#.
+#. # Ensure the image file is a readable JPEG
+#. [[ ! -r $imagefile ]] && {
+#. _failure "Exhume failed, image file not found: ::1 image file::" "${imagefile:-none}" }
+#. [[ ! $(file "$imagefile") =~ "JP.G" ]] && {
+#. > _failure "Exhume failed: ::1 image file:: is not a jpeg image." $imagefile }
+#.
+#. # When a password is passed as argument then always print out
+#. # the exhumed key on stdout without further checks (internal use)
+#. [[ -n "$tombpass" ]] && {
+#: tomb:1231
#, fuzzy
msgid "Exhume failed: ::1 image file:: is not a jpeg image."
msgstr "L'encodage a échoué : ::1 image file:: n'est pas une image JPEG."
-#: failure
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#.
+#. # When a password is passed as argument then always print out
+#. # the exhumed key on stdout without further checks (internal use)
+#. [[ -n "$tombpass" ]] && {
+#. TOMBKEY=$(steghide extract -sf $imagefile -p $tombpass -xf -)
+#. [[ $? != 0 ]] && {
+#. > _failure "Wrong password or no steganographic key found" }
+#.
+#. recover_key $TOMBKEY
+#.
+#. return 0
+#: tomb:1238
msgid "Wrong password or no steganographic key found"
msgstr "Mot de passe invalide ou clé stéganographique introuvable"
-#: message
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. }
+#.
+#. # Ensure we have a valid destination for the key
+#. [[ -z $destkey ]] && { option_is_set -k } && destkey=$(option_value -k)
+#. [[ -z $destkey ]] && {
+#. destkey="-" # No key was specified: fallback to stdout
+#. > _message "printing exhumed key on stdout" }
+#.
+#. # Bail out if destination exists, unless -f (force) was passed
+#. [[ $destkey != "-" && -s $destkey ]] && {
+#. _warning "File exists: ::1 tomb key::" $destkey
+#: tomb:1249
msgid "printing exhumed key on stdout"
msgstr "Impression de la clé exhumée sur la sortie standard"
-#: warning
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. [[ -z $destkey ]] && {
+#. destkey="-" # No key was specified: fallback to stdout
+#. _message "printing exhumed key on stdout" }
+#.
+#. # Bail out if destination exists, unless -f (force) was passed
+#. [[ $destkey != "-" && -s $destkey ]] && {
+#. > _warning "File exists: ::1 tomb key::" $destkey
+#. { option_is_set -f } && {
+#. _warning "Use of --force selected: overwriting."
+#. rm -f $destkey
+#. } || {
+#: tomb:1253
#, fuzzy
msgid "File exists: ::1 tomb key::"
msgstr "Le fichier existe : ::1 key::"
-#: failure
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. _message "printing exhumed key on stdout" }
+#.
+#. # Bail out if destination exists, unless -f (force) was passed
+#. [[ $destkey != "-" && -s $destkey ]] && {
+#. _warning "File exists: ::1 tomb key::" $destkey
+#. { option_is_set -f } && {
+#. > _warning "Use of --force selected: overwriting."
+#. rm -f $destkey
+#. } || {
+#. _warning "Make explicit use of --force to overwrite."
+#. _failure "Refusing to overwrite file. Operation aborted." }
+#: tomb:1255
+msgid "Use of --force selected: overwriting."
+msgstr "L'option --force est sélectionnée : ré-écriture en cours."
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. [[ $destkey != "-" && -s $destkey ]] && {
+#. _warning "File exists: ::1 tomb key::" $destkey
+#. { option_is_set -f } && {
+#. _warning "Use of --force selected: overwriting."
+#. rm -f $destkey
+#. } || {
+#. > _warning "Make explicit use of --force to overwrite."
+#. _failure "Refusing to overwrite file. Operation aborted." }
+#. }
+#.
+#. _message "Trying to exhume a key out of image ::1 image file::" $imagefile
+#: tomb:1258
+msgid "Make explicit use of --force to overwrite."
+msgstr "Pour l'ignorer et l'écrire de nouveau, utiliser --force."
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. _warning "File exists: ::1 tomb key::" $destkey
+#. { option_is_set -f } && {
+#. _warning "Use of --force selected: overwriting."
+#. rm -f $destkey
+#. } || {
+#. _warning "Make explicit use of --force to overwrite."
+#. > _failure "Refusing to overwrite file. Operation aborted." }
+#. }
+#.
+#. _message "Trying to exhume a key out of image ::1 image file::" $imagefile
+#. { option_is_set --tomb-pwd } && {
+#: tomb:1259
#, fuzzy
msgid "Refusing to overwrite file. Operation aborted."
-msgstr "La création de cette tombe écraserait un fichier existant. Opération annulée."
-
-#: message
+msgstr ""
+"La création de cette tombe écraserait un fichier existant. Opération annulée."
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. rm -f $destkey
+#. } || {
+#. _warning "Make explicit use of --force to overwrite."
+#. _failure "Refusing to overwrite file. Operation aborted." }
+#. }
+#.
+#. > _message "Trying to exhume a key out of image ::1 image file::" $imagefile
+#. { option_is_set --tomb-pwd } && {
+#. tombpass=$(option_value --tomb-pwd)
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tombpass
+#. } || {
+#: tomb:1262
msgid "Trying to exhume a key out of image ::1 image file::"
msgstr "Tentative d'exhumer une clé de l'image ::1 image file::"
-#: warning
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. steghide extract -sf $imagefile -p ${tombpass} -xf $destkey
+#. r=$?
+#.
+#. # Report to the user
+#. [[ "$destkey" = "-" ]] && destkey="stdout"
+#. [[ $r == 0 ]] && {
+#. > _success "Key succesfully exhumed to ::1 key::." $destkey
+#. } || {
+#. _warning "Nothing found in ::1 image file::" $imagefile
+#. }
+#.
+#: tomb:1283
+msgid "Key succesfully exhumed to ::1 key::."
+msgstr ""
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#.
+#. # Report to the user
+#. [[ "$destkey" = "-" ]] && destkey="stdout"
+#. [[ $r == 0 ]] && {
+#. _success "Key succesfully exhumed to ::1 key::." $destkey
+#. } || {
+#. > _warning "Nothing found in ::1 image file::" $imagefile
+#. }
+#.
+#. return $r
+#. }
+#: tomb:1285
msgid "Nothing found in ::1 image file::"
msgstr "Aucune clé n'a été trouvée dans ::1 image file::"
-#: failure
+#. Fold: Key operations
+#. Function: engrave_key
+#.
+#. Code sample:
+#.
+#. _load_key # Try loading key from option -k and set TOMBKEYFILE
+#.
+#. local keyname=$(basename $TOMBKEYFILE)
+#. local pngname="$keyname.qr.png"
+#.
+#. > _success "Rendering a printable QRCode for key: ::1 tomb key file::" $TOMBKEYFILE
+#. # we omit armor strings to save space
+#. awk '/^-----/ {next}; /^Version/ {next}; {print $0}' $TOMBKEYFILE #. | qrencode --size 4 --level H --casesensitive -o $pngname
+#. [[ $? != 0 ]] && {
+#: tomb:1300
+msgid "Rendering a printable QRCode for key: ::1 tomb key file::"
+msgstr ""
+
+#. Fold: Key operations
+#. Function: engrave_key
+#.
+#. Code sample:
+#.
+#. _success "Rendering a printable QRCode for key: ::1 tomb key file::" $TOMBKEYFILE
+#. # we omit armor strings to save space
+#. awk '/^-----/ {next}; /^Version/ {next}; {print $0}' $TOMBKEYFILE #. | qrencode --size 4 --level H --casesensitive -o $pngname
+#. [[ $? != 0 ]] && {
+#. > _failure "QREncode reported an error." }
+#.
+#. _success "Operation successful:"
+#. # TODO: only if verbose and/or not silent
+#. ls -lh $pngname
+#: tomb:1305
msgid "QREncode reported an error."
msgstr "QREncode a retourné une erreur."
-#: message
+#. Fold: Key operations
+#. Function: engrave_key
+#.
+#. Code sample:
+#. # we omit armor strings to save space
+#. awk '/^-----/ {next}; /^Version/ {next}; {print $0}' $TOMBKEYFILE #. | qrencode --size 4 --level H --casesensitive -o $pngname
+#. [[ $? != 0 ]] && {
+#. _failure "QREncode reported an error." }
+#.
+#. > _success "Operation successful:"
+#. # TODO: only if verbose and/or not silent
+#. ls -lh $pngname
+#. file $pngname
+#. }
+#: tomb:1307
+msgid "Operation successful:"
+msgstr ""
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#.
+#. dig_tomb() {
+#. local tombpath="$1" # Path to tomb
+#. # Require the specification of the size of the tomb (-s) in MB
+#. local -i tombsize=$(option_value -s)
+#.
+#. > _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#: tomb:1340
msgid "Commanded to dig tomb ::1 tomb path::"
msgstr "L'ordre est de creuser une tombe à ::1 tomb path::"
-#: failure
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. local tombpath="$1" # Path to tomb
+#. # Require the specification of the size of the tomb (-s) in MB
+#. local -i tombsize=$(option_value -s)
+#.
+#. _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. > [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#: tomb:1342
msgid "Missing path to tomb"
msgstr "Il manque le chemin vers la tombe."
-#: failure
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. # Require the specification of the size of the tomb (-s) in MB
+#. local -i tombsize=$(option_value -s)
+#.
+#. _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. > [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#. _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#: tomb:1343
+msgid "Size argument missing, use -s"
+msgstr "Utiliser -s pour préciser la taille de la tombe en Mo."
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. local -i tombsize=$(option_value -s)
+#.
+#. _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. > [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#. _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#: tomb:1344
msgid "Size must be an integer (megabytes)"
msgstr "La taille doit être un entier (en megaoctets)"
-#: failure
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#.
+#. _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. > [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#. _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. [[ -e $TOMBPATH ]] && {
+#: tomb:1345
msgid "Tombs can't be smaller than 10 megabytes"
msgstr "Les tombes ne peuvent être plus petites que 10 Mo"
-#: message
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#. _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. [[ -e $TOMBPATH ]] && {
+#. > _warning "A tomb exists already. I'm not digging here:"
+#. ls -lh $TOMBPATH
+#. return 1
+#. }
+#.
+#: tomb:1350
+msgid "A tomb exists already. I'm not digging here:"
+msgstr "Une tombe existe déjà à cet endroit. Je n'y creuse pas !"
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. [[ -e $TOMBPATH ]] && {
+#. _warning "A tomb exists already. I'm not digging here:"
+#. ls -lh $TOMBPATH
+#. return 1
+#. }
+#.
+#. > _success "Creating a new tomb in ::1 tomb path::" $TOMBPATH
+#.
+#. _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $tombsize
+#.
+#. # Ensure that file permissions are safe even if interrupted
+#: tomb:1355
+msgid "Creating a new tomb in ::1 tomb path::"
+msgstr ""
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. ls -lh $TOMBPATH
+#. return 1
+#. }
+#.
+#. _success "Creating a new tomb in ::1 tomb path::" $TOMBPATH
+#.
+#. > _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $tombsize
+#.
+#. # Ensure that file permissions are safe even if interrupted
+#. touch $TOMBPATH
+#. [[ $? = 0 ]] || {
+#: tomb:1357
msgid "Generating ::1 tomb file:: of ::2 size::MiB"
msgstr "Tombe en cours de création ::1 tomb file::, de taille ::2 size::Mo"
-#: warning
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#.
+#. _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $tombsize
+#.
+#. # Ensure that file permissions are safe even if interrupted
+#. touch $TOMBPATH
+#. [[ $? = 0 ]] || {
+#. > _warning "Error creating the tomb ::1 tomb path::" $TOMBPATH
+#. _failure "Operation aborted."
+#. }
+#. chmod 0600 $TOMBPATH
+#.
+#: tomb:1362
msgid "Error creating the tomb ::1 tomb path::"
-msgstr "Une erreur s'est produite lors de la création de la tombe à ::1 tomb path::"
+msgstr ""
+"Une erreur s'est produite lors de la création de la tombe à ::1 tomb path::"
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. ls -lh $TOMBPATH
+#. } || {
+#. _warning "Error creating the tomb ::1 tomb path::" $TOMBPATH
+#. _failure "Operation aborted."
+#. }
+#.
+#. > _success "Done digging ::1 tomb name::" $TOMBNAME
+#. _message "Your tomb is not yet ready, you need to forge a key and lock it:"
+#. _message "tomb forge ::1 tomb path::.key" $TOMBPATH
+#. _message "tomb lock ::1 tomb path:: -k ::1 tomb path::.key" $TOMBPATH
+#.
+#: tomb:1377
+msgid "Done digging ::1 tomb name::"
+msgstr ""
-#: message
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. } || {
+#. _warning "Error creating the tomb ::1 tomb path::" $TOMBPATH
+#. _failure "Operation aborted."
+#. }
+#.
+#. _success "Done digging ::1 tomb name::" $TOMBNAME
+#. > _message "Your tomb is not yet ready, you need to forge a key and lock it:"
+#. _message "tomb forge ::1 tomb path::.key" $TOMBPATH
+#. _message "tomb lock ::1 tomb path:: -k ::1 tomb path::.key" $TOMBPATH
+#.
+#. return 0
+#: tomb:1378
+msgid "Your tomb is not yet ready, you need to forge a key and lock it:"
+msgstr ""
+"Votre tombe n'est pas encore prête, vous devez en forger la clé et la "
+"vérouiller :"
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. _warning "Error creating the tomb ::1 tomb path::" $TOMBPATH
+#. _failure "Operation aborted."
+#. }
+#.
+#. _success "Done digging ::1 tomb name::" $TOMBNAME
+#. _message "Your tomb is not yet ready, you need to forge a key and lock it:"
+#. > _message "tomb forge ::1 tomb path::.key" $TOMBPATH
+#. _message "tomb lock ::1 tomb path:: -k ::1 tomb path::.key" $TOMBPATH
+#.
+#. return 0
+#. }
+#: tomb:1379
msgid "tomb forge ::1 tomb path::.key"
msgstr "Forge de la clé ::1 tomb path::.key en cours"
-#: message
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. _failure "Operation aborted."
+#. }
+#.
+#. _success "Done digging ::1 tomb name::" $TOMBNAME
+#. _message "Your tomb is not yet ready, you need to forge a key and lock it:"
+#. _message "tomb forge ::1 tomb path::.key" $TOMBPATH
+#. > _message "tomb lock ::1 tomb path:: -k ::1 tomb path::.key" $TOMBPATH
+#.
+#. return 0
+#. }
+#.
+#: tomb:1380
msgid "tomb lock ::1 tomb path:: -k ::1 tomb path::.key"
msgstr "tomb lock ::1 tomb path:: -k ::1 tomb path::.key"
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. local destkey="$1"
+#. { option_is_set -k } && { destkey=$(option_value -k) }
+#.
+#. local algo="AES256" # Default encryption algorithm
+#.
+#. [[ -z "$destkey" ]] && {
+#. > _failure "A filename needs to be specified using -k to forge a new key." }
+#.
+#. _message "Commanded to forge key ::1 key::" $destkey
+#.
+#. _check_swap # Ensure the available memory is safe to use
+#: tomb:1401
+msgid "A filename needs to be specified using -k to forge a new key."
+msgstr ""
+"Pour forger une nouvelle clé, vous devez préciser un nom de fichier avec -k."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#.
+#. local algo="AES256" # Default encryption algorithm
+#.
+#. [[ -z "$destkey" ]] && {
+#. _failure "A filename needs to be specified using -k to forge a new key." }
+#.
+#. > _message "Commanded to forge key ::1 key::" $destkey
+#.
+#. _check_swap # Ensure the available memory is safe to use
+#.
+#. # Ensure GnuPG won't exit with an error before first run
+#: tomb:1403
msgid "Commanded to forge key ::1 key::"
msgstr "Forge de la clé ::1 key::"
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. mkdir -m 0700 $HOME/.gnupg
+#. touch $HOME/.gnupg/pubring.gpg }
+#.
+#. # Do not overwrite any files accidentally
+#. [[ -r "$destkey" ]] && {
+#. ls -lh $destkey
+#. > _failure "Forging this key would overwrite an existing file. Operation aborted." }
+#.
+#. touch $destkey
+#. [[ $? == 0 ]] || {
+#. _warning "Cannot generate encryption key."
+#: tomb:1415
+msgid "Forging this key would overwrite an existing file. Operation aborted."
+msgstr "Forger cette clé détruirait un fichier existant. Opération annulée."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. [[ -r "$destkey" ]] && {
+#. ls -lh $destkey
+#. _failure "Forging this key would overwrite an existing file. Operation aborted." }
+#.
+#. touch $destkey
+#. [[ $? == 0 ]] || {
+#. > _warning "Cannot generate encryption key."
+#. _failure "Operation aborted." }
+#. chmod 0600 $destkey
+#.
+#. # Update algorithm if it was passed on the command line with -o
+#: tomb:1419
+msgid "Cannot generate encryption key."
+msgstr "La clé de chiffrement ne peut être générée."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. chmod 0600 $destkey
+#.
+#. # Update algorithm if it was passed on the command line with -o
+#. { option_is_set -o } && algopt="$(option_value -o)"
+#. [[ -n "$algopt" ]] && algo=$algopt
+#.
+#. > _message "Commanded to forge key ::1 key:: with cipher algorithm ::2 algorithm::" #. $destkey $algo
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#: tomb:1427
msgid "Commanded to forge key ::1 key:: with cipher algorithm ::2 algorithm::"
-msgstr "Forge de la clé ::1 key:: avec l'algorithme de chiffrement ::2 algorithm::"
+msgstr ""
+"Forge de la clé ::1 key:: avec l'algorithme de chiffrement ::2 algorithm::"
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#.
+#. _message "Commanded to forge key ::1 key:: with cipher algorithm ::2 algorithm::" #. $destkey $algo
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#. > _message "This operation takes time, keep using this computer on other tasks,"
+#. _message "once done you will be asked to choose a password for your tomb."
+#. _message "To make it faster you can move the mouse around."
+#. _message "If you are on a server, you can use an Entropy Generation Daemon."
+#.
+#: tomb:1432
+msgid "This operation takes time, keep using this computer on other tasks,"
+msgstr ""
+"Cette opération prend du temps, continuez à utiliser l'ordinateur pour "
+"d'autres tâches,"
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. _message "Commanded to forge key ::1 key:: with cipher algorithm ::2 algorithm::" #. $destkey $algo
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#. _message "This operation takes time, keep using this computer on other tasks,"
+#. > _message "once done you will be asked to choose a password for your tomb."
+#. _message "To make it faster you can move the mouse around."
+#. _message "If you are on a server, you can use an Entropy Generation Daemon."
+#.
+#. # Use /dev/random as the entropy source, unless --use-random is specified
+#: tomb:1433
+msgid "once done you will be asked to choose a password for your tomb."
+msgstr ""
+"une fois l'opération terminée, vous devrez choisir un mot de passe pour "
+"votre tombe."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. $destkey $algo
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#. _message "This operation takes time, keep using this computer on other tasks,"
+#. _message "once done you will be asked to choose a password for your tomb."
+#. > _message "To make it faster you can move the mouse around."
+#. _message "If you are on a server, you can use an Entropy Generation Daemon."
+#.
+#. # Use /dev/random as the entropy source, unless --use-random is specified
+#. local random_source=/dev/random
+#: tomb:1434
+msgid "To make it faster you can move the mouse around."
+msgstr "Vous pouvez accélérer l'opération en bougeant la souris."
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#. _message "This operation takes time, keep using this computer on other tasks,"
+#. _message "once done you will be asked to choose a password for your tomb."
+#. _message "To make it faster you can move the mouse around."
+#. > _message "If you are on a server, you can use an Entropy Generation Daemon."
+#.
+#. # Use /dev/random as the entropy source, unless --use-random is specified
+#. local random_source=/dev/random
+#. { option_is_set --use-urandom } && random_source=/dev/urandom
+#: tomb:1435
+msgid "If you are on a server, you can use an Entropy Generation Daemon."
+msgstr ""
+"Si vous effectuez l'opération sur un serveur, vous pouvez utiliser un démon "
+"générateur d'entropie."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. [[ $? == 0 ]] || {
+#. _warning "Cannot generate encryption key."
+#. _failure "Operation aborted." }
+#.
+#. # Here the global variable TOMBSECRET contains the naked secret
+#.
+#. > _success "Choose the password of your key: ::1 tomb key::" $TOMBKEYFILE
+#. _message "(You can also change it later using 'tomb passwd'.)"
+#. # _user_file $TOMBKEYFILE
+#.
+#. tombname="$TOMBKEYFILE" # XXX ???
+#: tomb:1449
+msgid "Choose the password of your key: ::1 tomb key::"
+msgstr ""
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. _warning "Cannot generate encryption key."
+#. _failure "Operation aborted." }
+#.
+#. # Here the global variable TOMBSECRET contains the naked secret
+#.
+#. _success "Choose the password of your key: ::1 tomb key::" $TOMBKEYFILE
+#. > _message "(You can also change it later using 'tomb passwd'.)"
+#. # _user_file $TOMBKEYFILE
+#.
+#. tombname="$TOMBKEYFILE" # XXX ???
+#. # the gen_key() function takes care of the new key's encryption
+#: tomb:1450
+msgid "(You can also change it later using 'tomb passwd'.)"
+msgstr ""
+"(Vous pouvez le modifier ultérieurement avec la commande 'tomb passwd'.)"
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#.
+#. # load the key contents (set global variable)
+#. TOMBKEY="${mapfile[$TOMBKEYFILE]}"
+#.
+#. # this does a check on the file header
+#. is_valid_key $TOMBKEY || {
+#. > _warning "The key does not seem to be valid."
+#. _warning "Dumping contents to screen:"
+#. print "${mapfile[$TOMBKEY]}"
+#. _warning "--"
+#. sudo umount ${keytmp}
+#: tomb:1468
+msgid "The key does not seem to be valid."
+msgstr "La clé semble être invalide."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. # load the key contents (set global variable)
+#. TOMBKEY="${mapfile[$TOMBKEYFILE]}"
+#.
+#. # this does a check on the file header
+#. is_valid_key $TOMBKEY || {
+#. _warning "The key does not seem to be valid."
+#. > _warning "Dumping contents to screen:"
+#. print "${mapfile[$TOMBKEY]}"
+#. _warning "--"
+#. sudo umount ${keytmp}
+#. rm -r $keytmp
+#: tomb:1469
+msgid "Dumping contents to screen:"
+msgstr "Capture des contenus à l'écran :"
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. _warning "--"
+#. sudo umount ${keytmp}
+#. rm -r $keytmp
+#. _failure "Operation aborted."
+#. }
+#.
+#. > _message "Done forging ::1 key file::" $TOMBKEYFILE
+#. _success "Your key is ready:"
+#. ls -lh $TOMBKEYFILE
+#. }
+#.
+#: tomb:1477
msgid "Done forging ::1 key file::"
msgstr "La clé est forgée : ::1 key file::"
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. sudo umount ${keytmp}
+#. rm -r $keytmp
+#. _failure "Operation aborted."
+#. }
+#.
+#. _message "Done forging ::1 key file::" $TOMBKEYFILE
+#. > _success "Your key is ready:"
+#. ls -lh $TOMBKEYFILE
+#. }
+#.
+#. # Step three -- Lock tomb
+#: tomb:1478
+msgid "Your key is ready:"
+msgstr ""
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. # for more alternatives refer to cryptsetup(8)
+#. local cipher="aes-xts-plain64:sha256"
+#.
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. [[ -n $tombpath ]] || {
+#. > _warning "No tomb specified for locking."
+#. _warning "Usage: tomb lock file.tomb file.tomb.key"
+#. return 1
+#. }
+#.
+#: tomb:1498
+msgid "No tomb specified for locking."
+msgstr "Quelle tombe dois-je vérouiller ?"
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. local cipher="aes-xts-plain64:sha256"
+#.
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. [[ -n $tombpath ]] || {
+#. _warning "No tomb specified for locking."
+#. > _warning "Usage: tomb lock file.tomb file.tomb.key"
+#. return 1
+#. }
+#.
+#. _plot $tombpath
+#: tomb:1499
+msgid "Usage: tomb lock file.tomb file.tomb.key"
+msgstr "Usage : tomb lock file.tomb file.tomb.key"
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _warning "Usage: tomb lock file.tomb file.tomb.key"
+#. return 1
+#. }
+#.
+#. _plot $tombpath
+#.
+#. > _message "Commanded to lock tomb ::1 tomb file::" $TOMBFILE
+#.
+#. [[ -f $TOMBPATH ]] || {
+#. _failure "There is no tomb here. You have to dig it first." }
+#.
+#: tomb:1505
msgid "Commanded to lock tomb ::1 tomb file::"
msgstr "Vérouillage de la tombe ::1 tomb file:: en cours"
-#: message
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _plot $tombpath
+#.
+#. _message "Commanded to lock tomb ::1 tomb file::" $TOMBFILE
+#.
+#. [[ -f $TOMBPATH ]] || {
+#. > _failure "There is no tomb here. You have to dig it first." }
+#.
+#. _verbose "Tomb found: ::1 tomb path::" $TOMBPATH
+#.
+#. lo_mount $TOMBPATH
+#: tomb:1508
+msgid "There is no tomb here. You have to dig it first."
+msgstr ""
+"Il n'y a pas de tombe à cet endroit. Vous devez d'abord la creuser ('dig')."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. lo_mount $TOMBPATH
+#. nstloop=`lo_new`
+#.
+#. _verbose "Loop mounted on ::1 mount point::" $nstloop
+#.
+#. > _message "Checking if the tomb is empty (we never step on somebody else's bones)."
+#. sudo cryptsetup isLuks ${nstloop}
+#. if [ $? = 0 ]; then
+#. # is it a LUKS encrypted nest? then bail out and avoid reformatting it
+#. _warning "The tomb was already locked with another key."
+#: tomb:1517
+msgid "Checking if the tomb is empty (we never step on somebody else's bones)."
+msgstr "Sondage de la tombe (nous ne piétinons jamais les os d'autrui)."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _verbose "Loop mounted on ::1 mount point::" $nstloop
+#.
+#. _message "Checking if the tomb is empty (we never step on somebody else's bones)."
+#. sudo cryptsetup isLuks ${nstloop}
+#. if [ $? = 0 ]; then
+#. # is it a LUKS encrypted nest? then bail out and avoid reformatting it
+#. > _warning "The tomb was already locked with another key."
+#. _failure "Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
+#. else
+#. _message "Fine, this tomb seems empty."
+#. fi
+#: tomb:1521
+msgid "The tomb was already locked with another key."
+msgstr "La tombe est déjà vérouillée avec une autre clé."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _message "Checking if the tomb is empty (we never step on somebody else's bones)."
+#. sudo cryptsetup isLuks ${nstloop}
+#. if [ $? = 0 ]; then
+#. # is it a LUKS encrypted nest? then bail out and avoid reformatting it
+#. _warning "The tomb was already locked with another key."
+#. > _failure "Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
+#. else
+#. _message "Fine, this tomb seems empty."
+#. fi
+#.
+#: tomb:1522
+msgid ""
+"Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
+msgstr ""
+"Opération abandonnée. Je ne peux pas vérouiller une tombe déjà vérouillée. "
+"Vous pouvez en creuser une autre (avec 'dig')."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. sudo cryptsetup isLuks ${nstloop}
+#. if [ $? = 0 ]; then
+#. # is it a LUKS encrypted nest? then bail out and avoid reformatting it
+#. _warning "The tomb was already locked with another key."
+#. _failure "Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
+#. else
+#. > _message "Fine, this tomb seems empty."
+#. fi
+#.
+#. _load_key # Try loading key from option -k and set TOMBKEYFILE
+#.
+#: tomb:1524
+msgid "Fine, this tomb seems empty."
+msgstr "Bien, la tombe semble être vide."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _load_key # Try loading key from option -k and set TOMBKEYFILE
+#.
+#. # the encryption cipher for a tomb can be set when locking using -c
+#. { option_is_set -o } && algopt="$(option_value -o)"
+#. [[ -n "$algopt" ]] && cipher=$algopt
+#. > _message "Locking using cipher: ::1 cipher::" $cipher
+#.
+#. # get the pass from the user and check it
+#. if option_is_set --tomb-pwd; then
+#. tomb_pwd="`option_value --tomb-pwd`"
+#: tomb:1532
msgid "Locking using cipher: ::1 cipher::"
msgstr "Vérouillage avec l'algorithme de chiffrement : ::1 cipher::"
-#: warning
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. ask_key_password "$tomb_pwd"
+#. else
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. > _success "Locking ::1 tomb file:: with ::2 tomb key file::" $TOMBFILE $TOMBKEYFILE
+#.
+#. _message "Formatting Luks mapped device."
+#. _cryptsetup --batch-mode #. --cipher ${cipher} --key-size 256 --key-slot 0 #: tomb:1544
+msgid "Locking ::1 tomb file:: with ::2 tomb key file::"
+msgstr ""
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. _success "Locking ::1 tomb file:: with ::2 tomb key file::" $TOMBFILE $TOMBKEYFILE
+#.
+#. > _message "Formatting Luks mapped device."
+#. _cryptsetup --batch-mode #. --cipher ${cipher} --key-size 256 --key-slot 0 #. luksFormat ${nstloop}
+#. [[ $? == 0 ]] || {
+#: tomb:1546
+msgid "Formatting Luks mapped device."
+msgstr "Formatage du dispositif LUKS désigné."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _message "Formatting Luks mapped device."
+#. _cryptsetup --batch-mode #. --cipher ${cipher} --key-size 256 --key-slot 0 #. luksFormat ${nstloop}
+#. [[ $? == 0 ]] || {
+#. > _warning "cryptsetup luksFormat returned an error."
+#. _failure "Operation aborted." }
+#.
+#. _cryptsetup --cipher ${cipher} luksOpen ${nstloop} tomb.tmp
+#. [[ $? == 0 ]] || {
+#: tomb:1551
+msgid "cryptsetup luksFormat returned an error."
+msgstr "Une erreur s'est produite à l'exécution de cryptsetup luksFormat"
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. [[ $? == 0 ]] || {
+#. _warning "cryptsetup luksFormat returned an error."
+#. _failure "Operation aborted." }
+#.
+#. _cryptsetup --cipher ${cipher} luksOpen ${nstloop} tomb.tmp
+#. [[ $? == 0 ]] || {
+#. > _warning "cryptsetup luksOpen returned an error."
+#. _failure "Operation aborted." }
+#.
+#. _message "Formatting your Tomb with Ext3/Ext4 filesystem."
+#. ${=MKFS} $TOMBNAME /dev/mapper/tomb.tmp
+#: tomb:1556
#, fuzzy
msgid "cryptsetup luksOpen returned an error."
msgstr "Une erreur s'est produite à l'exécution de cryptsetup luksFormat"
-#: warning
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _cryptsetup --cipher ${cipher} luksOpen ${nstloop} tomb.tmp
+#. [[ $? == 0 ]] || {
+#. _warning "cryptsetup luksOpen returned an error."
+#. _failure "Operation aborted." }
+#.
+#. > _message "Formatting your Tomb with Ext3/Ext4 filesystem."
+#. ${=MKFS} $TOMBNAME /dev/mapper/tomb.tmp
+#.
+#. [[ $? == 0 ]] || {
+#. _warning "Tomb format returned an error."
+#: tomb:1559
+msgid "Formatting your Tomb with Ext3/Ext4 filesystem."
+msgstr "Formatage de votre tombe avec un système de fichier Ext3/Ext4."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _failure "Operation aborted." }
+#.
+#. _message "Formatting your Tomb with Ext3/Ext4 filesystem."
+#. ${=MKFS} $TOMBNAME /dev/mapper/tomb.tmp
+#.
+#. [[ $? == 0 ]] || {
+#. > _warning "Tomb format returned an error."
+#. _warning "Your tomb ::1 tomb file:: may be corrupted." $TOMBFILE }
+#.
+#. # Sync
+#. sudo cryptsetup luksClose tomb.tmp
+#: tomb:1563
+msgid "Tomb format returned an error."
+msgstr "Une erreur s'est produite à l'exécution du formatage."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _message "Formatting your Tomb with Ext3/Ext4 filesystem."
+#. ${=MKFS} $TOMBNAME /dev/mapper/tomb.tmp
+#.
+#. [[ $? == 0 ]] || {
+#. _warning "Tomb format returned an error."
+#. > _warning "Your tomb ::1 tomb file:: may be corrupted." $TOMBFILE }
+#.
+#. # Sync
+#. sudo cryptsetup luksClose tomb.tmp
+#.
+#: tomb:1564
msgid "Your tomb ::1 tomb file:: may be corrupted."
msgstr "Votre tombe ::1 tomb file:: pourrait être corrompu."
-#: message
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _warning "Tomb format returned an error."
+#. _warning "Your tomb ::1 tomb file:: may be corrupted." $TOMBFILE }
+#.
+#. # Sync
+#. sudo cryptsetup luksClose tomb.tmp
+#.
+#. > _message "Done locking ::1 tomb name:: using Luks dm-crypt ::2 cipher::" $TOMBNAME $cipher
+#. _success "Your tomb is ready in ::1 tomb path:: and secured with key ::2 tomb key::" #. $TOMBPATH $TOMBKEYFILE
+#.
+#. }
+#: tomb:1569
#, fuzzy
msgid "Done locking ::1 tomb name:: using Luks dm-crypt ::2 cipher::"
-msgstr "Vérouillage accompli de ::1 tomb name:: avec LUKS dm-crypt ::1 cipher::"
+msgstr ""
+"Vérouillage accompli de ::1 tomb name:: avec LUKS dm-crypt ::1 cipher::"
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _warning "Your tomb ::1 tomb file:: may be corrupted." $TOMBFILE }
+#.
+#. # Sync
+#. sudo cryptsetup luksClose tomb.tmp
+#.
+#. _message "Done locking ::1 tomb name:: using Luks dm-crypt ::2 cipher::" $TOMBNAME $cipher
+#. > _success "Your tomb is ready in ::1 tomb path:: and secured with key ::2 tomb key::" #. $TOMBPATH $TOMBKEYFILE
+#.
+#. }
+#.
+#: tomb:1570
+msgid ""
+"Your tomb is ready in ::1 tomb path:: and secured with key ::2 tomb key::"
+msgstr ""
-#: message
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. # This function changes the key that locks a tomb
+#. change_tomb_key() {
+#. local tombkey="$1" # Path to the tomb's key file
+#. local tombpath="$2" # Path to the tomb
+#.
+#. > _message "Commanded to reset key for tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -z "$tombpath" ]] && {
+#. _warning "Command 'setkey' needs two arguments: the old key file and the tomb."
+#. _warning "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
+#: tomb:1580
msgid "Commanded to reset key for tomb ::1 tomb path::"
msgstr "L'ordre est de réinitialiser la clé pour la tomb ::1 tomb path::"
-#: warning
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. local tombkey="$1" # Path to the tomb's key file
+#. local tombpath="$2" # Path to the tomb
+#.
+#. _message "Commanded to reset key for tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -z "$tombpath" ]] && {
+#. > _warning "Command 'setkey' needs two arguments: the old key file and the tomb."
+#. _warning "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
+#. _failure "Execution aborted."
+#. }
+#.
+#: tomb:1583
msgid "Command 'setkey' needs two arguments: the old key file and the tomb."
-msgstr "La commande 'setkey' requiert deux arguments : le chemin de l'ancienne clé, et celui de la tombe."
-
-#: warning
+msgstr ""
+"La commande 'setkey' requiert deux arguments : le chemin de l'ancienne clé, "
+"et celui de la tombe."
+
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. local tombpath="$2" # Path to the tomb
+#.
+#. _message "Commanded to reset key for tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -z "$tombpath" ]] && {
+#. _warning "Command 'setkey' needs two arguments: the old key file and the tomb."
+#. > _warning "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
+#. _failure "Execution aborted."
+#. }
+#.
+#. _check_swap
+#: tomb:1584
msgid "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
msgstr "c-à-d. : tomb -k nouvelle.clé.key ancienne.clé.key mes.secrets.tomb"
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. _message "Commanded to reset key for tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -z "$tombpath" ]] && {
+#. _warning "Command 'setkey' needs two arguments: the old key file and the tomb."
+#. _warning "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
+#. > _failure "Execution aborted."
+#. }
+#.
+#. _check_swap
+#. is_valid_tomb $tombpath
+#: tomb:1585
#, fuzzy
msgid "Execution aborted."
msgstr "L'opération est interrompue."
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. lo_mount $TOMBPATH
+#. nstloop=`lo_new`
+#. sudo cryptsetup isLuks ${nstloop}
+#. # is it a LUKS encrypted nest? we check one more time
+#. [[ $? == 0 ]] || {
+#. > _failure "Not a valid LUKS encrypted volume: ::1 volume::" $TOMBPATH }
+#.
+#. _load_key $tombkey # Try loading given key and set TOMBKEY and
+#. # TOMBKEYFILE
+#. local oldkey=$TOMBKEY
+#: tomb:1596
#, fuzzy
msgid "Not a valid LUKS encrypted volume: ::1 volume::"
msgstr "Cette tombe est un dispositif chiffré LUKS valide."
-#: message
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. _load_key $tombkey # Try loading given key and set TOMBKEY and
+#. # TOMBKEYFILE
+#. local oldkey=$TOMBKEY
+#. local oldkeyfile=$TOMBKEYFILE
+#.
+#. # we have everything, prepare to mount
+#. > _success "Changing lock on tomb ::1 tomb name::" $TOMBNAME
+#. _message "Old key: ::1 old key::" $oldkeyfile
+#.
+#. # render the mapper
+#. mapdate=`date +%s`
+#: tomb:1604
+msgid "Changing lock on tomb ::1 tomb name::"
+msgstr ""
+
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. # TOMBKEYFILE
+#. local oldkey=$TOMBKEY
+#. local oldkeyfile=$TOMBKEYFILE
+#.
+#. # we have everything, prepare to mount
+#. _success "Changing lock on tomb ::1 tomb name::" $TOMBNAME
+#. > _message "Old key: ::1 old key::" $oldkeyfile
+#.
+#. # render the mapper
+#. mapdate=`date +%s`
+#. # save date of mount in minutes since 1970
+#: tomb:1605
#, fuzzy
msgid "Old key: ::1 old key::"
msgstr "Clé précédente : ::1 key::"
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. _verbose "tomb-old-pwd = ::1 old pass::" $tomb_old_pwd
+#. ask_key_password "$tomb_old_pwd"
+#. else
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || {
+#. > _failure "No valid password supplied for the old key." }
+#. old_secret=$TOMBSECRET
+#.
+#. # luksOpen the tomb (not really mounting, just on the loopback)
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - #: tomb:1621
msgid "No valid password supplied for the old key."
msgstr "Aucun mot de passe valide n'a été fourni pour l'ancienne clé."
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. _failure "No valid password supplied for the old key." }
+#. old_secret=$TOMBSECRET
+#.
+#. # luksOpen the tomb (not really mounting, just on the loopback)
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - #. luksOpen ${nstloop} ${mapper}
+#. > [[ $? == 0 ]] || _failure "Unexpected error in luksOpen."
+#.
+#. _load_key # Try loading new key from option -k and set TOMBKEYFILE
+#.
+#. _message "New key: ::1 key file::" $TOMBKEYFILE
+#: tomb:1627
msgid "Unexpected error in luksOpen."
msgstr "Une erreur inattendue s'est produite lors de luksOpen."
-#: message
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - #. luksOpen ${nstloop} ${mapper}
+#. [[ $? == 0 ]] || _failure "Unexpected error in luksOpen."
+#.
+#. _load_key # Try loading new key from option -k and set TOMBKEYFILE
+#.
+#. > _message "New key: ::1 key file::" $TOMBKEYFILE
+#.
+#. if option_is_set --tomb-pwd; then
+#. tomb_new_pwd="`option_value --tomb-pwd`"
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tomb_new_pwd
+#: tomb:1631
msgid "New key: ::1 key file::"
msgstr "Nouvelle clé : ::1 key file::"
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tomb_new_pwd
+#. ask_key_password "$tomb_new_pwd"
+#. else
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || {
+#. > _failure "No valid password supplied for the new key." }
+#.
+#. _tmp_create
+#. tmpnewkey=$TOMBTMP
+#. print -R -n - "$TOMBSECRET" >> $tmpnewkey
+#: tomb:1641
msgid "No valid password supplied for the new key."
msgstr "Aucun mot de passe n'a été fourni pour la nouvelle clé."
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. tmpnewkey=$TOMBTMP
+#. print -R -n - "$TOMBSECRET" >> $tmpnewkey
+#.
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - #. luksChangeKey "$nstloop" "$tmpnewkey"
+#.
+#. > [[ $? == 0 ]] || _failure "Unexpected error in luksChangeKey."
+#.
+#. sudo cryptsetup luksClose "${mapper}" || _failure "Unexpected error in luksClose."
+#.
+#. _success "Succesfully changed key for tomb: ::1 tomb file::" $TOMBFILE
+#: tomb:1650
msgid "Unexpected error in luksChangeKey."
msgstr "Une erreur inattendue s'est produite lors de luksChangeKey."
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - #. luksChangeKey "$nstloop" "$tmpnewkey"
+#.
+#. [[ $? == 0 ]] || _failure "Unexpected error in luksChangeKey."
+#.
+#. > sudo cryptsetup luksClose "${mapper}" || _failure "Unexpected error in luksClose."
+#.
+#. _success "Succesfully changed key for tomb: ::1 tomb file::" $TOMBFILE
+#. _message "The new key is: ::1 new key::" $TOMBKEYFILE
+#.
+#: tomb:1652
msgid "Unexpected error in luksClose."
msgstr "Une erreur inattendue s'est produite lors de luksClose."
-#: message
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. luksChangeKey "$nstloop" "$tmpnewkey"
+#.
+#. [[ $? == 0 ]] || _failure "Unexpected error in luksChangeKey."
+#.
+#. sudo cryptsetup luksClose "${mapper}" || _failure "Unexpected error in luksClose."
+#.
+#. > _success "Succesfully changed key for tomb: ::1 tomb file::" $TOMBFILE
+#. _message "The new key is: ::1 new key::" $TOMBKEYFILE
+#.
+#. return 0
+#. }
+#: tomb:1654
+msgid "Succesfully changed key for tomb: ::1 tomb file::"
+msgstr ""
+
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. [[ $? == 0 ]] || _failure "Unexpected error in luksChangeKey."
+#.
+#. sudo cryptsetup luksClose "${mapper}" || _failure "Unexpected error in luksClose."
+#.
+#. _success "Succesfully changed key for tomb: ::1 tomb file::" $TOMBFILE
+#. > _message "The new key is: ::1 new key::" $TOMBKEYFILE
+#.
+#. return 0
+#. }
+#.
+#: tomb:1655
#, fuzzy
msgid "The new key is: ::1 new key::"
msgstr "La nouvelle clé est : ::1 key::"
-#: failure
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. # {{{ Open
+#.
+#. # $1 = tombfile $2(optional) = mountpoint
+#. mount_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#. > [[ -n "$tombpath" ]] || _failure "No tomb name specified for opening."
+#.
+#. _message "Commanded to open tomb ::1 tomb name::" $1
+#.
+#. _check_swap
+#: tomb:1667
#, fuzzy
msgid "No tomb name specified for opening."
msgstr "Merci de spécifier le nom de la tombe à agrandir."
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. # $1 = tombfile $2(optional) = mountpoint
+#. mount_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#. [[ -n "$tombpath" ]] || _failure "No tomb name specified for opening."
+#.
+#. > _message "Commanded to open tomb ::1 tomb name::" $1
+#.
+#. _check_swap
+#. is_valid_tomb $tombpath
+#.
+#: tomb:1669
#, fuzzy
msgid "Commanded to open tomb ::1 tomb name::"
msgstr "Ouverture de la tombe ::1 tomb file::"
-#: warning
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. _check_swap
+#. is_valid_tomb $tombpath
+#.
+#. # check file type (if its a Luks fs)
+#. [[ "`file $TOMBPATH`" =~ "luks encrypted file" ]] || {
+#. > _warning "::1 tomb file:: is not a valid tomb file" $TOMBFILE
+#. _failure "Operation aborted."
+#. }
+#.
+#. _verbose "Tomb found: ::1 tomb path::" $TOMBPATH
+#: tomb:1676
msgid "::1 tomb file:: is not a valid tomb file"
msgstr "::1 tomb file:: n'est pas un fichier de tombe valide."
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. _verbose "Tomb found: ::1 tomb path::" $TOMBPATH
+#.
+#. _load_key # Try loading new key from option -k and set TOMBKEYFILE
+#.
+#. tombmount=${2:-/media/$TOMBFILE}
+#. [[ -z "$2" ]] && {
+#. > _message "Mountpoint not specified, using default: ::1 mount point::" $tombmount }
+#.
+#. # Check if its already open
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]" ]] && {
+#. _warning "::1 tomb name:: is already open." $TOMBNAME
+#: tomb:1686
msgid "Mountpoint not specified, using default: ::1 mount point::"
-msgstr "Le point de montage n'a pas été précisé, nous utilisons donc ::1 mount point::"
-
-#: warning
+msgstr ""
+"Le point de montage n'a pas été précisé, nous utilisons donc ::1 mount "
+"point::"
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. tombmount=${2:-/media/$TOMBFILE}
+#. [[ -z "$2" ]] && {
+#. _message "Mountpoint not specified, using default: ::1 mount point::" $tombmount }
+#.
+#. # Check if its already open
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]" ]] && {
+#. > _warning "::1 tomb name:: is already open." $TOMBNAME
+#. _message "Here below its status is reported:"
+#. list_tombs $TOMBNAME
+#. return 0 }
+#.
+#: tomb:1690
msgid "::1 tomb name:: is already open."
msgstr "::1 tomb name:: est déjà ouverte."
-#: failure
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. [[ -z "$2" ]] && {
+#. _message "Mountpoint not specified, using default: ::1 mount point::" $tombmount }
+#.
+#. # Check if its already open
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]" ]] && {
+#. _warning "::1 tomb name:: is already open." $TOMBNAME
+#. > _message "Here below its status is reported:"
+#. list_tombs $TOMBNAME
+#. return 0 }
+#.
+#. _success "Opening ::1 tomb file:: on ::2 mount point::" $TOMBFILE $tombmount
+#: tomb:1691
+msgid "Here below its status is reported:"
+msgstr "L'état de la tombe suit :"
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]" ]] && {
+#. _warning "::1 tomb name:: is already open." $TOMBNAME
+#. _message "Here below its status is reported:"
+#. list_tombs $TOMBNAME
+#. return 0 }
+#.
+#. > _success "Opening ::1 tomb file:: on ::2 mount point::" $TOMBFILE $tombmount
+#.
+#. lo_mount $TOMBPATH
+#. nstloop=`lo_new`
+#.
+#: tomb:1695
+msgid "Opening ::1 tomb file:: on ::2 mount point::"
+msgstr ""
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. lo_mount $TOMBPATH
+#. nstloop=`lo_new`
+#.
+#. sudo cryptsetup isLuks ${nstloop} || {
+#. # is it a LUKS encrypted nest? see cryptsetup(1)
+#. > _failure "::1 tomb file:: is not a valid Luks encrypted storage file." $TOMBFILE }
+#.
+#. _message "This tomb is a valid LUKS encrypted device."
+#.
+#. luksdump="`sudo cryptsetup luksDump ${nstloop}`"
+#: tomb:1702
msgid "::1 tomb file:: is not a valid Luks encrypted storage file."
msgstr "::1 tomb file:: n'est pas un fichier chiffré de stockage LUKS valide."
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. nstloop=`lo_new`
+#.
+#. sudo cryptsetup isLuks ${nstloop} || {
+#. # is it a LUKS encrypted nest? see cryptsetup(1)
+#. _failure "::1 tomb file:: is not a valid Luks encrypted storage file." $TOMBFILE }
+#.
+#. > _message "This tomb is a valid LUKS encrypted device."
+#.
+#. luksdump="`sudo cryptsetup luksDump ${nstloop}`"
+#. tombdump=(`print $luksdump | awk '
+#. /^Cipher name/ {print $3}
+#: tomb:1704
+msgid "This tomb is a valid LUKS encrypted device."
+msgstr "Cette tombe est un dispositif chiffré LUKS valide."
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. luksdump="`sudo cryptsetup luksDump ${nstloop}`"
+#. tombdump=(`print $luksdump | awk '
+#. /^Cipher name/ {print $3}
+#. /^Cipher mode/ {print $3}
+#. /^Hash spec/ {print $3}'`)
+#. > _message "Cipher is \"::1 cipher::\" mode \"::2 mode::\" hash \"::3 hash::\"" $tombdump[1] $tombdump[2] $tombdump[3]
+#.
+#. slotwarn=`print $luksdump | awk '
+#. BEGIN { zero=0 }
+#. /^Key slot 0/ { zero=1 }
+#: tomb:1711
msgid "Cipher is \"::1 cipher::\" mode \"::2 mode::\" hash \"::3 hash::\""
-msgstr "Algorithme de chiffrement \"::1 cipher::\" en mode \"::2 mode::\" et la fonction de hachage \"::3 hash::\"."
+msgstr ""
+"Algorithme de chiffrement \"::1 cipher::\" en mode \"::2 mode::\" et la "
+"fonction de hachage \"::3 hash::\"."
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. slotwarn=`print $luksdump | awk '
+#. BEGIN { zero=0 }
+#. /^Key slot 0/ { zero=1 }
+#. /^Key slot.*ENABLED/ { if(zero==1) print "WARN" }'`
+#. [[ "$slotwarn" == "WARN" ]] && {
+#. > _warning "Multiple key slots are enabled on this tomb. Beware: there can be a backdoor." }
+#.
+#. # save date of mount in minutes since 1970
+#. mapdate=`date +%s`
+#.
+#: tomb:1718
+msgid ""
+"Multiple key slots are enabled on this tomb. Beware: there can be a backdoor."
+msgstr ""
+"Plusieurs serrures sont disponibles pour cette tombe. Attention : il "
+"pourrait s'agit de portes dérobées."
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. ask_key_password
+#. }
+#. [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. _cryptsetup luksOpen ${nstloop} ${mapper}
+#. [[ $? = 0 ]] || {
+#. > _failure "Failure mounting the encrypted file." }
+#.
+#. # preserve the loopdev after exit
+#. lo_preserve "$nstloop"
+#.
+#: tomb:1742
+msgid "Failure mounting the encrypted file."
+msgstr "Le montage du fichier chiffré a échoué."
-#: warning
-msgid "Multiple key slots are enabled on this tomb. Beware: there can be a backdoor."
-msgstr "Plusieurs serrures sont disponibles pour cette tombe. Attention : il pourrait s'agit de portes dérobées."
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. # array: [ cipher, keysize, loopdevice ]
+#. tombstat=(`sudo cryptsetup status ${mapper} | awk '
+#. /cipher:/ {print $2}
+#. /keysize:/ {print $2}
+#. /device:/ {print $2}'`)
+#. > _success "Success unlocking tomb ::1 tomb name::" $TOMBNAME
+#. _verbose "Key size is ::1 size:: for cipher ::2 cipher::" $tombstat[2] $tombstat[1]
+#.
+#. _message "Checking filesystem via ::1::" $tombstat[3]
+#. sudo fsck -p -C0 /dev/mapper/${mapper}
+#: tomb:1752
+msgid "Success unlocking tomb ::1 tomb name::"
+msgstr ""
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. /cipher:/ {print $2}
+#. /keysize:/ {print $2}
+#. /device:/ {print $2}'`)
+#. _success "Success unlocking tomb ::1 tomb name::" $TOMBNAME
+#. _verbose "Key size is ::1 size:: for cipher ::2 cipher::" $tombstat[2] $tombstat[1]
+#.
+#. > _message "Checking filesystem via ::1::" $tombstat[3]
+#. sudo fsck -p -C0 /dev/mapper/${mapper}
+#. _verbose "Tomb engraved as ::1 tomb name::" $TOMBNAME
+#. sudo tune2fs -L $TOMBNAME /dev/mapper/${mapper} > /dev/null
+#.
+#: tomb:1755
msgid "Checking filesystem via ::1::"
msgstr "Vérification du système de fichiers avec ::1::"
-#: message
-msgid "Last visit by ::1 user::(::2 tomb build::) from ::3 tty:: on ::4 host::"
-msgstr "Dernière visite par ::1 user::(::2 tomb build) depuis ::3 tty:: sur ::4 host::"
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. # TODO: safety check MOUNTOPTS
+#. # safe_mount_options && #. sudo mount -o $MOUNTOPTS /dev/mapper/${mapper} ${tombmount}
+#. # Clean up if the mount failed
+#. [[ $? == 0 ]] || {
+#. > _warning "Error mounting ::1 mapper:: on ::2 tombmount::" $mapper $tombmount
+#. [[ $oldmountopts != $MOUNTOPTS ]] && #. _warning "Are mount options '::1 mount options::' valid?" $MOUNTOPTS
+#. # TODO: move cleanup to _endgame()
+#. [[ -d $tombmount ]] && rmdir $tombmount
+#: tomb:1773
+msgid "Error mounting ::1 mapper:: on ::2 tombmount::"
+msgstr ""
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. # safe_mount_options && #. sudo mount -o $MOUNTOPTS /dev/mapper/${mapper} ${tombmount}
+#. # Clean up if the mount failed
+#. [[ $? == 0 ]] || {
+#. _warning "Error mounting ::1 mapper:: on ::2 tombmount::" $mapper $tombmount
+#. [[ $oldmountopts != $MOUNTOPTS ]] && #. > _warning "Are mount options '::1 mount options::' valid?" $MOUNTOPTS
+#. # TODO: move cleanup to _endgame()
+#. [[ -d $tombmount ]] && rmdir $tombmount
+#. [[ -e /dev/mapper/$mapper ]] && sudo cryptsetup luksClose $mapper
+#. # The loop is taken care of in _endgame()
+#: tomb:1775
+msgid "Are mount options '::1 mount options::' valid?"
+msgstr ""
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. [[ $oldmountopts != $MOUNTOPTS ]] && #. _warning "Are mount options '::1 mount options::' valid?" $MOUNTOPTS
+#. # TODO: move cleanup to _endgame()
+#. [[ -d $tombmount ]] && rmdir $tombmount
+#. [[ -e /dev/mapper/$mapper ]] && sudo cryptsetup luksClose $mapper
+#. # The loop is taken care of in _endgame()
+#. > _failure "Cannot mount ::1 tomb name::" $TOMBNAME
+#. }
+#.
+#. sudo chown $UID:$GID ${tombmount}
+#. sudo chmod 0711 ${tombmount}
+#: tomb:1780
+msgid "Cannot mount ::1 tomb name::"
+msgstr ""
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. _failure "Cannot mount ::1 tomb name::" $TOMBNAME
+#. }
+#.
+#. sudo chown $UID:$GID ${tombmount}
+#. sudo chmod 0711 ${tombmount}
+#.
+#. > _success "Success opening ::1 tomb file:: on ::2 mount point::" $TOMBFILE $tombmount
+#.
+#. local tombtty tombhost tombuid tombuser
+#.
+#. # print out when was opened the last time, by whom and where
+#: tomb:1786
+msgid "Success opening ::1 tomb file:: on ::2 mount point::"
+msgstr ""
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. tombuid=$(_cat ${tombmount}/.uid | tr -d ' ')
+#. tomblast=$(_cat ${tombmount}/.last | tr -d ' ')
+#. for e in ${(f@)mapfile[/etc/passwd]}; do
+#. [[ "$e" =~ ":$tombuid:" ]] && {
+#. tombuser="${e[(ws@:@)1]}" }
+#. done
+#. > _message "Last visit by ::1 user::(::2 tomb build::) from ::3 tty:: on ::4 host::" $tombuser $tombuid $tombtty $tombhost
+#. _message "on date ::1 date::" "`date --date=@${tomblast} +%c`"
+#. }
+#. # write down the UID and TTY that opened the tomb
+#. rm -f ${tombmount}/.uid
+#: tomb:1800
+msgid "Last visit by ::1 user::(::2 tomb build::) from ::3 tty:: on ::4 host::"
+msgstr ""
+"Dernière visite par ::1 user::(::2 tomb build) depuis ::3 tty:: sur ::4 "
+"host::"
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. tomblast=$(_cat ${tombmount}/.last | tr -d ' ')
+#. for e in ${(f@)mapfile[/etc/passwd]}; do
+#. [[ "$e" =~ ":$tombuid:" ]] && {
+#. tombuser="${e[(ws@:@)1]}" }
+#. done
+#. _message "Last visit by ::1 user::(::2 tomb build::) from ::3 tty:: on ::4 host::" $tombuser $tombuid $tombtty $tombhost
+#. > _message "on date ::1 date::" "`date --date=@${tomblast} +%c`"
+#. }
+#. # write down the UID and TTY that opened the tomb
+#. rm -f ${tombmount}/.uid
+#. print $_UID > ${tombmount}/.uid
+#: tomb:1801
msgid "on date ::1 date::"
msgstr "le ::1 date::"
-#: warning
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#.
+#. # Default mount options are overridden with the -o switch
+#. [[ -n ${(k)OPTS[-o]} ]] && MOUNTOPTS=${OPTS[-o]}
+#.
+#. # No HOME set? Note: this should never happen again.
+#. [[ -z $HOME ]] && {
+#. > _warning "How pitiful! A tomb, and no HOME."
+#. return 1 }
+#.
+#. [[ -z $mnt || ! -d $mnt ]] && {
+#. _warning "Cannot exec bind hooks without a mounted tomb."
+#: tomb:1849
+msgid "How pitiful! A tomb, and no HOME."
+msgstr "C'est pitoyable ! Une tombe, mais sans abri (HOME n'est pas défini)."
+
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. # No HOME set? Note: this should never happen again.
+#. [[ -z $HOME ]] && {
+#. _warning "How pitiful! A tomb, and no HOME."
+#. return 1 }
+#.
+#. [[ -z $mnt || ! -d $mnt ]] && {
+#. > _warning "Cannot exec bind hooks without a mounted tomb."
+#. return 1 }
+#.
+#. [[ -r "$mnt/bind-hooks" ]] || {
+#. _verbose "bind-hooks not found in ::1 mount point::" $mnt
+#: tomb:1853
+msgid "Cannot exec bind hooks without a mounted tomb."
+msgstr ""
+"L'exécution des ordres de montage ne peut se faire que si la tombe est "
+"montée."
+
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. # better parsing for bind hooks checks for two separated words on
+#. # each line, using zsh word separator array subscript
+#. _bindhooks="${mapfile[${mnt}/bind-hooks]}"
+#. for h in ${(f)_bindhooks}; do
+#. s="${h[(w)1]}"
+#. d="${h[(w)2]}"
+#. > [[ "$s" = "" ]] && { _warning "bind-hooks file is broken"; return 1 }
+#. [[ "$d" = "" ]] && { _warning "bind-hooks file is broken"; return 1 }
+#. maps+=($s $d)
+#. _verbose "bind-hook found: $s -> $d"
+#. done
+#: tomb:1869
msgid "bind-hooks file is broken"
msgstr "Le fichier bind-hooks comporte des erreurs."
-#: warning
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. _verbose "bind-hook found: $s -> $d"
+#. done
+#. unset _bindhooks
+#.
+#. for dir in ${(k)maps}; do
+#. [[ "${dir[1]}" == "/" || "${dir[1,2]}" == ".." ]] && {
+#. > _warning "bind-hooks map format: local/to/tomb local/to/\$HOME"
+#. continue }
+#.
+#. [[ "${${maps[$dir]}[1]}" == "/" || "${${maps[$dir]}[1,2]}" == ".." ]] && {
+#. _warning "bind-hooks map format: local/to/tomb local/to/\$HOME. Rolling back"
+#: tomb:1878
#, fuzzy
msgid "bind-hooks map format: local/to/tomb local/to/$HOME"
-msgstr "La correspondance de montage suit le format : local/à/la/tombe local/à/HOME"
-
-#: warning
+msgstr ""
+"La correspondance de montage suit le format : local/à/la/tombe local/à/HOME"
+
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. for dir in ${(k)maps}; do
+#. [[ "${dir[1]}" == "/" || "${dir[1,2]}" == ".." ]] && {
+#. _warning "bind-hooks map format: local/to/tomb local/to/\$HOME"
+#. continue }
+#.
+#. [[ "${${maps[$dir]}[1]}" == "/" || "${${maps[$dir]}[1,2]}" == ".." ]] && {
+#. > _warning "bind-hooks map format: local/to/tomb local/to/\$HOME. Rolling back"
+#. for dir in ${mounted}; do sudo umount $dir; done
+#. return 1 }
+#.
+#. if [[ ! -r "$HOME/${maps[$dir]}" ]]; then
+#: tomb:1882
#, fuzzy
msgid "bind-hooks map format: local/to/tomb local/to/$HOME. Rolling back"
-msgstr "Les montages doivent s'annoncer localement : local/à/la/tombe local/à/HOME. Annulation."
-
-#: warning
+msgstr ""
+"Les montages doivent s'annoncer localement : local/à/la/tombe local/à/HOME. "
+"Annulation."
+
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. [[ "${${maps[$dir]}[1]}" == "/" || "${${maps[$dir]}[1,2]}" == ".." ]] && {
+#. _warning "bind-hooks map format: local/to/tomb local/to/\$HOME. Rolling back"
+#. for dir in ${mounted}; do sudo umount $dir; done
+#. return 1 }
+#.
+#. if [[ ! -r "$HOME/${maps[$dir]}" ]]; then
+#. > _warning "bind-hook target not existent, skipping ::1 home::/::2 subdir::" $HOME ${maps[$dir]}
+#. elif [[ ! -r "$mnt/$dir" ]]; then
+#. _warning "bind-hook source not found in tomb, skipping ::1 mount point::/::2 subdir::" $mnt $dir
+#. else
+#. sudo mount -o bind,$MOUNTOPTS $mnt/$dir $HOME/${maps[$dir]} #: tomb:1887
#, fuzzy
msgid "bind-hook target not existent, skipping ::1 home::/::2 subdir::"
-msgstr "La cible du point de montage n'existe pas. Le chemin ::1 home::/::2 dir:: est ignoré."
-
-#: warning
+msgstr ""
+"La cible du point de montage n'existe pas. Le chemin ::1 home::/::2 dir:: "
+"est ignoré."
+
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. for dir in ${mounted}; do sudo umount $dir; done
+#. return 1 }
+#.
+#. if [[ ! -r "$HOME/${maps[$dir]}" ]]; then
+#. _warning "bind-hook target not existent, skipping ::1 home::/::2 subdir::" $HOME ${maps[$dir]}
+#. elif [[ ! -r "$mnt/$dir" ]]; then
+#. > _warning "bind-hook source not found in tomb, skipping ::1 mount point::/::2 subdir::" $mnt $dir
+#. else
+#. sudo mount -o bind,$MOUNTOPTS $mnt/$dir $HOME/${maps[$dir]} #. && mounted+=("$HOME/${maps[$dir]}")
+#. fi
+#: tomb:1889
#, fuzzy
-msgid "bind-hook source not found in tomb, skipping ::1 mount point::/::2 subdir::"
-msgstr "L'origine du point de montage n'est pas relatif à la tombe : le chemin ::1 mount point::/::2 dir:: est ignoré."
+msgid ""
+"bind-hook source not found in tomb, skipping ::1 mount point::/::2 subdir::"
+msgstr ""
+"L'origine du point de montage n'est pas relatif à la tombe : le chemin ::1 "
+"mount point::/::2 dir:: est ignoré."
+
+#. Fold: Open
+#. Function: exec_safe_post_hooks
+#.
+#. Code sample:
+#. # Only run if post-hooks has the executable bit set
+#. [[ -x $mnt/post-hooks ]] || return
+#.
+#. # If the file starts with a shebang, run it.
+#. cat $mnt/post-hooks | head -n1 | grep '^#!\s*/' &> /dev/null
+#. [[ $? == 0 ]] && {
+#. > _success "Post hooks found, executing as user ::1 user name::." $USERNAME
+#. $mnt/post-hooks $act $mnt
+#. }
+#. }
+#.
+#: tomb:1917
+msgid "Post hooks found, executing as user ::1 user name::."
+msgstr ""
-#: failure
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. local tombname tombmount tombfs tombfsopts tombloop
+#. local ts tombtot tombused tombavail tombpercent tombp tombsince
+#. local tombtty tombhost tombuid tombuser
+#. # list all open tombs
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. > _failure "I can't see any ::1 status:: tomb, may they all rest in peace." ${1:-open} }
+#.
+#. for t in ${mounted_tombs}; do
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#: tomb:1936
#, fuzzy
msgid "I can't see any ::1 status:: tomb, may they all rest in peace."
msgstr "Je ne vois aucune tombe ouverte, qu'ils reposent tous en paix."
-#: message
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. tombuser="${ee[(ws@:@)1]}" }
+#. done
+#. }
+#.
+#. { option_is_set --get-mountpoint } && { print $tombmount; continue }
+#.
+#. > _message "::1 tombname:: open on ::2 tombmount:: using ::3 tombfsopts::" #. $tombname $tombmount $tombfsopts
+#.
+#. _message "::1 tombname:: open since ::2 tombsince::" $tombname $tombsince
+#.
+#: tomb:1969
msgid "::1 tombname:: open on ::2 tombmount:: using ::3 tombfsopts::"
-msgstr "La tombe ::1 tombname:: est ouverte sur ::2 tombmount:: avec les options ::3 tombfsopts::"
-
-#: message
+msgstr ""
+"La tombe ::1 tombname:: est ouverte sur ::2 tombmount:: avec les options ::3 "
+"tombfsopts::"
+
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#.
+#. { option_is_set --get-mountpoint } && { print $tombmount; continue }
+#.
+#. _message "::1 tombname:: open on ::2 tombmount:: using ::3 tombfsopts::" #. $tombname $tombmount $tombfsopts
+#.
+#. > _message "::1 tombname:: open since ::2 tombsince::" $tombname $tombsince
+#.
+#. [[ -z "$tombtty" ]] || {
+#. _message "::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::" #. $tombname $tombuser $tombtty $tombhost
+#: tomb:1972
msgid "::1 tombname:: open since ::2 tombsince::"
msgstr "La tombe ::1 tombname:: est ouverte depuis ::2 tombsince::"
-#: message
-msgid "::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::"
-msgstr "La tombe ::1 tombname:: a été ouverte par ::2 tombuser:: depuis ::3 tombtty:: sur ::4 tombhost::"
-
-#: message
-msgid "::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::%) is used: ::4 tombavail:: free "
-msgstr "La tombe ::1 tombname:: est de taille ::2 tombtot:: dont ::3 tombused:: (::5 tombpercent::%) sont utilisés. Il reste ::4 tombavail:: libres "
-
-#: warning
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. _message "::1 tombname:: open on ::2 tombmount:: using ::3 tombfsopts::" #. $tombname $tombmount $tombfsopts
+#.
+#. _message "::1 tombname:: open since ::2 tombsince::" $tombname $tombsince
+#.
+#. [[ -z "$tombtty" ]] || {
+#. > _message "::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::" #. $tombname $tombuser $tombtty $tombhost
+#. }
+#.
+#. _message "::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::%) is used: ::4 tombavail:: free " #: tomb:1975
+msgid ""
+"::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::"
+msgstr ""
+"La tombe ::1 tombname:: a été ouverte par ::2 tombuser:: depuis ::3 "
+"tombtty:: sur ::4 tombhost::"
+
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#.
+#. [[ -z "$tombtty" ]] || {
+#. _message "::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::" #. $tombname $tombuser $tombtty $tombhost
+#. }
+#.
+#. > _message "::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::%) is used: ::4 tombavail:: free " #. $tombname $tombtot $tombused $tombavail $tombpercent
+#.
+#. [[ ${tombp} -ge 90 ]] && {
+#. _warning "::1 tombname:: warning: your tomb is almost full!" $tombname
+#: tomb:1979
+msgid ""
+"::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::"
+"%) is used: ::4 tombavail:: free "
+msgstr ""
+"La tombe ::1 tombname:: est de taille ::2 tombtot:: dont ::3 tombused:: (::5 "
+"tombpercent::%) sont utilisés. Il reste ::4 tombavail:: libres "
+
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. }
+#.
+#. _message "::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::%) is used: ::4 tombavail:: free " #. $tombname $tombtot $tombused $tombavail $tombpercent
+#.
+#. [[ ${tombp} -ge 90 ]] && {
+#. > _warning "::1 tombname:: warning: your tomb is almost full!" $tombname
+#. }
+#.
+#. # Now check hooks
+#. mounted_hooks=(`list_tomb_binds $tombname`)
+#: tomb:1983
msgid "::1 tombname:: warning: your tomb is almost full!"
msgstr "::1 tombname:: attention : votre tombe est presque pleine !"
-#: message
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. _warning "::1 tombname:: warning: your tomb is almost full!" $tombname
+#. }
+#.
+#. # Now check hooks
+#. mounted_hooks=(`list_tomb_binds $tombname`)
+#. for h in ${mounted_hooks}; do
+#. > _message "::1 tombname:: hooks ::2 hookname:: on ::3 hookdest::" #. $tombname "`basename ${h[(ws:;:)1]}`" ${h[(ws:;:)2]}
+#. done
+#. done
+#. }
+#: tomb:1989
msgid "::1 tombname:: hooks ::2 hookname:: on ::3 hookdest::"
msgstr "::1 tombname:: montage de ::2 hookname:: sur ::3 hookdest::"
-#: failure
+#. Fold: List
+#. Function: list_tomb_binds
+#.
+#. Code sample:
+#. # list_tomb_binds
+#. # print out an array of mounted bind hooks (internal use)
+#. # format is semi-colon separated list of attributes
+#. # needs an argument: name of tomb whose hooks belong
+#. list_tomb_binds() {
+#. [[ -z "$1" ]] && {
+#. > _failure "Internal error: list_tomb_binds called without argument." }
+#.
+#. # list bind hooks on util-linux 2.20 (Debian 7)
+#. mount -l #. | awk -vtomb="$1" '
+#: tomb:2044
msgid "Internal error: list_tomb_binds called without argument."
-msgstr "Erreur interne : la fonction list_tomb_binds a été appelée sans argument."
-
-#: failure
+msgstr ""
+"Erreur interne : la fonction list_tomb_binds a été appelée sans argument."
+
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. # {{{ Index and search
+#.
+#. # index files in all tombs for search
+#. # $1 is optional, to specify a tomb
+#. index_tombs() {
+#. { command -v updatedb 1>/dev/null 2>/dev/null } || {
+#. > _failure "Cannot index tombs on this system: updatedb (mlocate) not installed." }
+#.
+#. updatedbver=`updatedb --version | grep '^updatedb'`
+#. [[ "$updatedbver" =~ "GNU findutils" ]] && {
+#. _warning "Cannot use GNU findutils for index/search commands." }
+#: tomb:2076
msgid "Cannot index tombs on this system: updatedb (mlocate) not installed."
-msgstr "L'indexation des fichiers de la tombe ne peut se faire sur ce système : updatedb (mlocate) n'est pas installé."
-
-#: warning
+msgstr ""
+"L'indexation des fichiers de la tombe ne peut se faire sur ce système : "
+"updatedb (mlocate) n'est pas installé."
+
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. index_tombs() {
+#. { command -v updatedb 1>/dev/null 2>/dev/null } || {
+#. _failure "Cannot index tombs on this system: updatedb (mlocate) not installed." }
+#.
+#. updatedbver=`updatedb --version | grep '^updatedb'`
+#. [[ "$updatedbver" =~ "GNU findutils" ]] && {
+#. > _warning "Cannot use GNU findutils for index/search commands." }
+#. [[ "$updatedbver" =~ "mlocate" ]] || {
+#. _failure "Index command needs 'mlocate' to be installed." }
+#.
+#. _verbose "$updatedbver"
+#: tomb:2080
msgid "Cannot use GNU findutils for index/search commands."
-msgstr "Impossible d'utiliser GNU findutils pour les commandes d'indexation et de recherche."
-
-#: failure
+msgstr ""
+"Impossible d'utiliser GNU findutils pour les commandes d'indexation et de "
+"recherche."
+
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. _failure "Cannot index tombs on this system: updatedb (mlocate) not installed." }
+#.
+#. updatedbver=`updatedb --version | grep '^updatedb'`
+#. [[ "$updatedbver" =~ "GNU findutils" ]] && {
+#. _warning "Cannot use GNU findutils for index/search commands." }
+#. [[ "$updatedbver" =~ "mlocate" ]] || {
+#. > _failure "Index command needs 'mlocate' to be installed." }
+#.
+#. _verbose "$updatedbver"
+#.
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#: tomb:2082
msgid "Index command needs 'mlocate' to be installed."
-msgstr "La commande d'indexation nécessite que le programme 'mlocate' soit installé."
-
-#: failure
+msgstr ""
+"La commande d'indexation nécessite que le programme 'mlocate' soit installé."
+
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. _verbose "$updatedbver"
+#.
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. # Considering one tomb
+#. [[ -n "$1" ]] && {
+#. > _failure "There seems to be no open tomb engraved as [::1::]" $1 }
+#. # Or more
+#. _failure "I can't see any open tomb, may they all rest in peace." }
+#.
+#. _success "Creating and updating search indexes."
+#: tomb:2090
#, fuzzy
msgid "There seems to be no open tomb engraved as [::1::]"
msgstr "Il ne semble pas y avoir de tombe ouverte comme [::1 tomb name::]"
-#: message
-msgid "Skipping ::1 tomb name:: (.noindex found)."
-msgstr "::1 tomb name:: comporte in fichier .noindex : ses fichiers n'apparaîtront pas dans les résultats de recherche."
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. # Considering one tomb
+#. [[ -n "$1" ]] && {
+#. _failure "There seems to be no open tomb engraved as [::1::]" $1 }
+#. # Or more
+#. > _failure "I can't see any open tomb, may they all rest in peace." }
+#.
+#. _success "Creating and updating search indexes."
+#.
+#. # start the LibreOffice document converter if installed
+#: tomb:2092
+msgid "I can't see any open tomb, may they all rest in peace."
+msgstr "Je ne vois aucune tombe ouverte, qu'ils reposent tous en paix."
-#: message
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. # Considering one tomb
+#. [[ -n "$1" ]] && {
+#. _failure "There seems to be no open tomb engraved as [::1::]" $1 }
+#. # Or more
+#. _failure "I can't see any open tomb, may they all rest in peace." }
+#.
+#. > _success "Creating and updating search indexes."
+#.
+#. # start the LibreOffice document converter if installed
+#. { command -v unoconv 1>/dev/null 2>/dev/null } && {
+#. unoconv -l 2>/dev/null &
+#: tomb:2094
+msgid "Creating and updating search indexes."
+msgstr ""
+
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#.
+#. for t in ${mounted_tombs}; do
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#. tombmount=${t[(ws:;:)2]}
+#. [[ -r ${tombmount}/.noindex ]] && {
+#. > _message "Skipping ::1 tomb name:: (.noindex found)." $tombname
+#. continue }
+#. _message "Indexing ::1 tomb name:: filenames..." $tombname
+#. updatedb -l 0 -o ${tombmount}/.updatedb -U ${tombmount}
+#.
+#: tomb:2107
+msgid "Skipping ::1 tomb name:: (.noindex found)."
+msgstr ""
+"::1 tomb name:: comporte in fichier .noindex : ses fichiers n'apparaîtront "
+"pas dans les résultats de recherche."
+
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#. tombmount=${t[(ws:;:)2]}
+#. [[ -r ${tombmount}/.noindex ]] && {
+#. _message "Skipping ::1 tomb name:: (.noindex found)." $tombname
+#. continue }
+#. > _message "Indexing ::1 tomb name:: filenames..." $tombname
+#. updatedb -l 0 -o ${tombmount}/.updatedb -U ${tombmount}
+#.
+#. # here we use swish to index file contents
+#. [[ $SWISH == 1 ]] && {
+#: tomb:2109
msgid "Indexing ::1 tomb name:: filenames..."
msgstr "Index des fichiers dans ::1 tomb name:: en cours..."
-#: message
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. continue }
+#. _message "Indexing ::1 tomb name:: filenames..." $tombname
+#. updatedb -l 0 -o ${tombmount}/.updatedb -U ${tombmount}
+#.
+#. # here we use swish to index file contents
+#. [[ $SWISH == 1 ]] && {
+#. > _message "Indexing ::1 tomb name:: contents..." $tombname
+#. [[ -r ${tombmount}/.swishrc ]] || {
+#. _message "Generating a new swish-e configuration file: ::1 swish conf::" ${tombmount}/.swishrc
+#. cat <<EOF > ${tombmount}/.swishrc
+#. # index directives
+#: tomb:2114
msgid "Indexing ::1 tomb name:: contents..."
msgstr "Index des contenus de ::1 tomb name:: en cours..."
-#: message
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. updatedb -l 0 -o ${tombmount}/.updatedb -U ${tombmount}
+#.
+#. # here we use swish to index file contents
+#. [[ $SWISH == 1 ]] && {
+#. _message "Indexing ::1 tomb name:: contents..." $tombname
+#. [[ -r ${tombmount}/.swishrc ]] || {
+#. > _message "Generating a new swish-e configuration file: ::1 swish conf::" ${tombmount}/.swishrc
+#. cat <<EOF > ${tombmount}/.swishrc
+#. # index directives
+#. DefaultContents TXT*
+#. IndexDir $tombmount
+#: tomb:2116
+msgid "Generating a new swish-e configuration file: ::1 swish conf::"
+msgstr ""
+
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. }
+#.
+#. swish-e -c ${tombmount}/.swishrc -S fs -v3
+#.
+#. }
+#.
+#. > _message "Search index updated."
+#. done
+#. }
+#. search_tombs() {
+#. { command -v locate 1>/dev/null 2>/dev/null } || {
+#: tomb:2190
+msgid "Search index updated."
+msgstr "L'index de recherche a été mis à jour."
+
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#.
+#. # list all open tombs
+#. mounted_tombs=(`list_tomb_mounts`)
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. _failure "I can't see any open tomb, may they all rest in peace." }
+#.
+#. > _success "Searching for: ::1::" ${(f)@}
+#. for t in ${mounted_tombs}; do
+#. _verbose "Checking for index: ::1::" ${t}
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#: tomb:2210
+msgid "Searching for: ::1::"
+msgstr ""
+
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. _verbose "Checking for index: ::1::" ${t}
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#. tombmount=${t[(ws:;:)2]}
+#. [[ -r ${tombmount}/.updatedb ]] && {
+#. # Use mlocate to search hits on filenames
+#. > _message "Searching filenames in tomb ::1 tomb name::" $tombname
+#. locate -d ${tombmount}/.updatedb -e -i "${(f)@}"
+#. _message "Matches found: ::1 matches::" #. $(locate -d ${tombmount}/.updatedb -e -i -c ${(f)@})
+#.
+#: tomb:2218
msgid "Searching filenames in tomb ::1 tomb name::"
msgstr "Recherche parmi les fichiers dans la tombe ::1 tomb name::"
-#: message
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. tombname=${t[(ws:;:)5]}
+#. tombmount=${t[(ws:;:)2]}
+#. [[ -r ${tombmount}/.updatedb ]] && {
+#. # Use mlocate to search hits on filenames
+#. _message "Searching filenames in tomb ::1 tomb name::" $tombname
+#. locate -d ${tombmount}/.updatedb -e -i "${(f)@}"
+#. > _message "Matches found: ::1 matches::" #. $(locate -d ${tombmount}/.updatedb -e -i -c ${(f)@})
+#.
+#. # Use swish-e to search over contents
+#. [[ $SWISH == 1 && -r $tombmount/.swish ]] && {
+#: tomb:2220
msgid "Matches found: ::1 matches::"
msgstr "Résultats trouvés : ::1 matches::"
-#: message
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. locate -d ${tombmount}/.updatedb -e -i "${(f)@}"
+#. _message "Matches found: ::1 matches::" #. $(locate -d ${tombmount}/.updatedb -e -i -c ${(f)@})
+#.
+#. # Use swish-e to search over contents
+#. [[ $SWISH == 1 && -r $tombmount/.swish ]] && {
+#. > _message "Searching contents in tomb ::1 tomb name::" $tombname
+#. swish-e -w ${=@} -f $tombmount/.swish -H0 }
+#. } || {
+#. _warning "Skipping tomb ::1 tomb name::: not indexed." $tombname
+#. _warning "Run 'tomb index' to create indexes." }
+#: tomb:2225
msgid "Searching contents in tomb ::1 tomb name::"
msgstr "Recherche parmi les contenus de la tombe ::1 tomb name::"
-#: warning
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#.
+#. # Use swish-e to search over contents
+#. [[ $SWISH == 1 && -r $tombmount/.swish ]] && {
+#. _message "Searching contents in tomb ::1 tomb name::" $tombname
+#. swish-e -w ${=@} -f $tombmount/.swish -H0 }
+#. } || {
+#. > _warning "Skipping tomb ::1 tomb name::: not indexed." $tombname
+#. _warning "Run 'tomb index' to create indexes." }
+#. done
+#. _message "Search completed."
+#. }
+#: tomb:2228
msgid "Skipping tomb ::1 tomb name::: not indexed."
msgstr "La tombe ::1 tomb name:: n'est pas indexée, et donc ignorée."
-#: message
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. # Use swish-e to search over contents
+#. [[ $SWISH == 1 && -r $tombmount/.swish ]] && {
+#. _message "Searching contents in tomb ::1 tomb name::" $tombname
+#. swish-e -w ${=@} -f $tombmount/.swish -H0 }
+#. } || {
+#. _warning "Skipping tomb ::1 tomb name::: not indexed." $tombname
+#. > _warning "Run 'tomb index' to create indexes." }
+#. done
+#. _message "Search completed."
+#. }
+#.
+#: tomb:2229
+msgid "Run 'tomb index' to create indexes."
+msgstr "Exécuter 'tomb index' pour générer les index."
+
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. _message "Searching contents in tomb ::1 tomb name::" $tombname
+#. swish-e -w ${=@} -f $tombmount/.swish -H0 }
+#. } || {
+#. _warning "Skipping tomb ::1 tomb name::: not indexed." $tombname
+#. _warning "Run 'tomb index' to create indexes." }
+#. done
+#. > _message "Search completed."
+#. }
+#.
+#. # }}} - Index and search
+#.
+#: tomb:2231
+msgid "Search completed."
+msgstr "La recherche est terminée."
+
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. # {{{ Resize
+#.
+#. # resize tomb file size
+#. resize_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. > _message "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes." $1 $OPTS[-s]
+#.
+#. [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing."
+#. [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath
+#.
+#: tomb:2242
#, fuzzy
msgid "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes."
msgstr "Agrandissement de la tombe ::1 tomb file:: ::2 size::s] Mo."
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. # resize tomb file size
+#. resize_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. _message "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes." $1 $OPTS[-s]
+#.
+#. > [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing."
+#. [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath
+#.
+#. newtombsize="`option_value -s`"
+#. [[ -z "$newtombsize" ]] && {
+#: tomb:2244
+msgid "No tomb name specified for resizing."
+msgstr "Merci de spécifier le nom de la tombe à agrandir."
+
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. resize_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. _message "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes." $1 $OPTS[-s]
+#.
+#. [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing."
+#. > [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath
+#.
+#. newtombsize="`option_value -s`"
+#. [[ -z "$newtombsize" ]] && {
+#. _failure "Aborting operations: new size was not specified, use -s" }
+#: tomb:2245
msgid "Cannot find ::1::"
msgstr "::1:: reste introuvable."
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#.
+#. [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing."
+#. [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath
+#.
+#. newtombsize="`option_value -s`"
+#. [[ -z "$newtombsize" ]] && {
+#. > _failure "Aborting operations: new size was not specified, use -s" }
+#.
+#. is_valid_tomb $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. _load_key # Try loading new key from option -k and set TOMBKEYFILE
+#: tomb:2249
msgid "Aborting operations: new size was not specified, use -s"
msgstr ""
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. local oldtombsize=$(( `stat -c %s "$TOMBPATH" 2>/dev/null` / 1048576 ))
+#. local mounted_tomb=`mount -l |
+#. awk -vtomb="[$TOMBNAME]" '/^\/dev\/mapper\/tomb/ { if($7==tomb) print $1 }'`
+#.
+#. # Tomb must not be open
+#. [[ -z "$mounted_tomb" ]] || {
+#. > _failure "Please close the tomb ::1 tomb name:: before trying to resize it." $TOMBNAME }
+#. # New tomb size must be specified
+#. [[ -n "$newtombsize" ]] || {
+#. _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
+#. # New tomb size must be an integer
+#: tomb:2261
msgid "Please close the tomb ::1 tomb name:: before trying to resize it."
msgstr ""
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#.
+#. # Tomb must not be open
+#. [[ -z "$mounted_tomb" ]] || {
+#. _failure "Please close the tomb ::1 tomb name:: before trying to resize it." $TOMBNAME }
+#. # New tomb size must be specified
+#. [[ -n "$newtombsize" ]] || {
+#. > _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
+#. # New tomb size must be an integer
+#. [[ $newtombsize == <-> ]] || _failure "Size is not an integer."
+#. # Tombs can only grow in size
+#. [[ "$newtombsize" -gt "$oldtombsize" ]] || {
+#: tomb:2264
msgid "You must specify the new size of ::1 tomb name::"
msgstr "Vous devez spécifier la nouvelle taille de ::1 tomb name::"
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. [[ -z "$mounted_tomb" ]] || {
+#. _failure "Please close the tomb ::1 tomb name:: before trying to resize it." $TOMBNAME }
+#. # New tomb size must be specified
+#. [[ -n "$newtombsize" ]] || {
+#. _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
+#. # New tomb size must be an integer
+#. > [[ $newtombsize == <-> ]] || _failure "Size is not an integer."
+#. # Tombs can only grow in size
+#. [[ "$newtombsize" -gt "$oldtombsize" ]] || {
+#. _failure "The new size must be greater then old tomb size." }
+#.
+#: tomb:2266
+msgid "Size is not an integer."
+msgstr "La taille doit être un nombre entier."
+
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. [[ -n "$newtombsize" ]] || {
+#. _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
+#. # New tomb size must be an integer
+#. [[ $newtombsize == <-> ]] || _failure "Size is not an integer."
+#. # Tombs can only grow in size
+#. [[ "$newtombsize" -gt "$oldtombsize" ]] || {
+#. > _failure "The new size must be greater then old tomb size." }
+#.
+#. delta="$(( $newtombsize - $oldtombsize ))"
+#.
+#. _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $newtombsize
+#: tomb:2269
+msgid "The new size must be greater then old tomb size."
+msgstr "La nouvelle taille doit être supérieure à l'ancienne."
+
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $newtombsize
+#.
+#. _verbose "Data dump using ::1:: from /dev/urandom" ${DD[1]}
+#. ${=DD} if=/dev/urandom bs=1048576 count=${delta} >> $TOMBPATH
+#.
+#. [[ $? == 0 ]] || {
+#. > _failure "Error creating the extra resize ::1 size::, operation aborted." $tmp_resize }
+#.
+#. { option_is_set --tomb-pwd } && {
+#. tomb_pwd="`option_value --tomb-pwd`"
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tomb_pwd
+#: tomb:2279
#, fuzzy
msgid "Error creating the extra resize ::1 size::, operation aborted."
-msgstr "Erreur lors de la création de la tombe ::1 dir::/::2 tomb file::. Opération annulée."
-
-#: failure
+msgstr ""
+"Erreur lors de la création de la tombe ::1 dir::/::2 tomb file::. Opération "
+"annulée."
+
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. mapper="tomb.$TOMBNAME.$mapdate.$(basename $nstloop)"
+#.
+#. _cryptsetup luksOpen ${nstloop} ${mapper} || {
+#. _failure "Failure mounting the encrypted file." }
+#.
+#. sudo cryptsetup resize "${mapper}" || {
+#. > _failure "cryptsetup failed to resize ::1 mapper::" $mapper }
+#.
+#. sudo e2fsck -p -f /dev/mapper/${mapper} || {
+#. _failure "e2fsck failed to check ::1 mapper::" $mapper }
+#.
+#: tomb:2300
#, fuzzy
msgid "cryptsetup failed to resize ::1 mapper::"
msgstr "resize2fs n'a pas pu redimensionner ::1 mapper::"
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. _failure "Failure mounting the encrypted file." }
+#.
+#. sudo cryptsetup resize "${mapper}" || {
+#. _failure "cryptsetup failed to resize ::1 mapper::" $mapper }
+#.
+#. sudo e2fsck -p -f /dev/mapper/${mapper} || {
+#. > _failure "e2fsck failed to check ::1 mapper::" $mapper }
+#.
+#. sudo resize2fs /dev/mapper/${mapper} || {
+#. _failure "resize2fs failed to resize ::1 mapper::" $mapper }
+#.
+#: tomb:2303
msgid "e2fsck failed to check ::1 mapper::"
msgstr "e2fsck n'a pas pu vérifier ::1 mapper::"
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. _failure "cryptsetup failed to resize ::1 mapper::" $mapper }
+#.
+#. sudo e2fsck -p -f /dev/mapper/${mapper} || {
+#. _failure "e2fsck failed to check ::1 mapper::" $mapper }
+#.
+#. sudo resize2fs /dev/mapper/${mapper} || {
+#. > _failure "resize2fs failed to resize ::1 mapper::" $mapper }
+#.
+#. # close and free the loop device
+#. sudo cryptsetup luksClose "${mapper}"
+#.
+#: tomb:2306
msgid "resize2fs failed to resize ::1 mapper::"
msgstr "resize2fs n'a pas pu redimensionner ::1 mapper::"
-#: warning
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. mounted_tombs=(`list_tomb_mounts`)
+#. else
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#. fi
+#.
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. > _failure "There is no open tomb to be closed." }
+#.
+#. [[ ${#mounted_tombs} -gt 1 && -z "$1" ]] && {
+#. _warning "Too many tombs mounted, please specify one (see tomb list)"
+#. _warning "or issue the command 'tomb close all' to close them all."
+#: tomb:2330
+msgid "There is no open tomb to be closed."
+msgstr "Il n'y a pas de tombe à fermer."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. fi
+#.
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. _failure "There is no open tomb to be closed." }
+#.
+#. [[ ${#mounted_tombs} -gt 1 && -z "$1" ]] && {
+#. > _warning "Too many tombs mounted, please specify one (see tomb list)"
+#. _warning "or issue the command 'tomb close all' to close them all."
+#. _failure "Operation aborted." }
+#.
+#. for t in ${mounted_tombs}; do
+#: tomb:2333
+msgid "Too many tombs mounted, please specify one (see tomb list)"
+msgstr "Trop de tombes sont montées, merci d'en choisir une (voir 'tomb list')"
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. _failure "There is no open tomb to be closed." }
+#.
+#. [[ ${#mounted_tombs} -gt 1 && -z "$1" ]] && {
+#. _warning "Too many tombs mounted, please specify one (see tomb list)"
+#. > _warning "or issue the command 'tomb close all' to close them all."
+#. _failure "Operation aborted." }
+#.
+#. for t in ${mounted_tombs}; do
+#. mapper=`basename ${t[(ws:;:)1]}`
+#: tomb:2334
+msgid "or issue the command 'tomb close all' to close them all."
+msgstr "ou bien exécuter 'tomb close all' pour les fermer toutes."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. _verbose "Name: ::1 tomb name::" $tombname
+#. _verbose "Mount: ::1 mount point::" $tombmount
+#. _verbose "Mapper: ::1 mapper::" $mapper
+#.
+#. [[ -e "$mapper" ]] && {
+#. > _warning "Tomb not found: ::1 tomb file::" $1
+#. _warning "Please specify an existing tomb."
+#. return 0 }
+#.
+#. [[ -n $SLAM ]] && {
+#: tomb:2350
#, fuzzy
msgid "Tomb not found: ::1 tomb file::"
msgstr "Tombe introuvable : ::1 tomb name::"
-#: failure
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _verbose "Name: ::1 tomb name::" $tombname
+#. _verbose "Mount: ::1 mount point::" $tombmount
+#. _verbose "Mapper: ::1 mapper::" $mapper
+#.
+#. [[ -e "$mapper" ]] && {
+#. _warning "Tomb not found: ::1 tomb file::" $1
+#. > _warning "Please specify an existing tomb."
+#. return 0 }
+#.
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" #: tomb:2351
+msgid "Please specify an existing tomb."
+msgstr "Merci d'indiquer une tombe existante."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. [[ -e "$mapper" ]] && {
+#. _warning "Tomb not found: ::1 tomb file::" $1
+#. _warning "Please specify an existing tomb."
+#. return 0 }
+#.
+#. [[ -n $SLAM ]] && {
+#. > _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount
+#. _message "Kill all processes busy inside the tomb."
+#. { slam_tomb "$tombmount" } || {
+#. _failure "Cannot slam the tomb ::1 tomb name::" $tombname }
+#: tomb:2355
+msgid "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::"
+msgstr ""
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _warning "Please specify an existing tomb."
+#. return 0 }
+#.
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount
+#. > _message "Kill all processes busy inside the tomb."
+#. { slam_tomb "$tombmount" } || {
+#. _failure "Cannot slam the tomb ::1 tomb name::" $tombname }
+#. } || {
+#. _message "Closing tomb ::1 tomb name:: mounted on ::2 mount point::" #: tomb:2357
+msgid "Kill all processes busy inside the tomb."
+msgstr "Exécution (sommaire) de tous les processus en cours dans la tombe."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount
+#. _message "Kill all processes busy inside the tomb."
+#. { slam_tomb "$tombmount" } || {
+#. > _failure "Cannot slam the tomb ::1 tomb name::" $tombname }
+#. } || {
+#. _message "Closing tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount }
+#.
+#: tomb:2359
msgid "Cannot slam the tomb ::1 tomb name::"
msgstr "La tombe ::1 tomb name:: ne peut pas être fermée !"
-#: message
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount
+#. _message "Kill all processes busy inside the tomb."
+#. { slam_tomb "$tombmount" } || {
+#. _failure "Cannot slam the tomb ::1 tomb name::" $tombname }
+#. } || {
+#. > _message "Closing tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount }
+#.
+#. # check if there are binded dirs and close them
+#. bind_tombs=(`list_tomb_binds $tombname`)
+#: tomb:2361
msgid "Closing tomb ::1 tomb name:: mounted on ::2 mount point::"
msgstr "Fermeture de la tombe ::1 tomb name:: montée sur ::2 mount point::."
-#: message
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. # check if there are binded dirs and close them
+#. bind_tombs=(`list_tomb_binds $tombname`)
+#. for b in ${bind_tombs}; do
+#. bind_mapper="${b[(ws:;:)1]}"
+#. bind_mount="${b[(ws:;:)2]}"
+#. > _message "Closing tomb bind hook: ::1 hook::" $bind_mount
+#. sudo umount $bind_mount || {
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb: killing all processes using this hook."
+#. slam_tomb "$bind_mount"
+#: tomb:2369
msgid "Closing tomb bind hook: ::1 hook::"
msgstr "Retrait du point de montage : ::1 hook::"
-#: failure
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. for b in ${bind_tombs}; do
+#. bind_mapper="${b[(ws:;:)1]}"
+#. bind_mount="${b[(ws:;:)2]}"
+#. _message "Closing tomb bind hook: ::1 hook::" $bind_mount
+#. sudo umount $bind_mount || {
+#. [[ -n $SLAM ]] && {
+#. > _success "Slamming tomb: killing all processes using this hook."
+#. slam_tomb "$bind_mount"
+#. [[ $? == 1 ]] && {
+#. _failure "Cannot slam the bind hook ::1 hook::" $bind_mount }
+#. umount $bind_mount
+#: tomb:2372
+msgid "Slamming tomb: killing all processes using this hook."
+msgstr ""
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _message "Closing tomb bind hook: ::1 hook::" $bind_mount
+#. sudo umount $bind_mount || {
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb: killing all processes using this hook."
+#. slam_tomb "$bind_mount"
+#. [[ $? == 1 ]] && {
+#. > _failure "Cannot slam the bind hook ::1 hook::" $bind_mount }
+#. umount $bind_mount
+#. } || {
+#. _warning "Tomb bind hook ::1 hook:: is busy, cannot close tomb." $bind_mount }
+#. }
+#: tomb:2375
#, fuzzy
msgid "Cannot slam the bind hook ::1 hook::"
msgstr "Quelque chose coince à ::1 mount point::."
-#: warning
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _success "Slamming tomb: killing all processes using this hook."
+#. slam_tomb "$bind_mount"
+#. [[ $? == 1 ]] && {
+#. _failure "Cannot slam the bind hook ::1 hook::" $bind_mount }
+#. umount $bind_mount
+#. } || {
+#. > _warning "Tomb bind hook ::1 hook:: is busy, cannot close tomb." $bind_mount }
+#. }
+#. done
+#.
+#. # Execute post-hooks for eventual cleanup
+#: tomb:2378
#, fuzzy
msgid "Tomb bind hook ::1 hook:: is busy, cannot close tomb."
-msgstr "Le point de montage ::1 mount point:: est occupé et ne peut pas être fermé."
+msgstr ""
+"Le point de montage ::1 mount point:: est occupé et ne peut pas être fermé."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. # Execute post-hooks for eventual cleanup
+#. { option_is_set -n } || {
+#. exec_safe_post_hooks ${tombmount%%/} close }
+#.
+#. _verbose "Performing umount of ::1 mount point::" $tombmount
+#. sudo umount ${tombmount}
+#. > [[ $? = 0 ]] || { _warning "Tomb is busy, cannot umount!"; return 1 }
+#.
+#. # If we used a default mountpoint and is now empty, delete it
+#. [[ "$tombmount" == "/media/$tombname.tomb" ]] && { rmdir $tombmount }
+#.
+#: tomb:2388
+msgid "Tomb is busy, cannot umount!"
+msgstr "La tombe est occupée et ne peut pas être démontée !"
-#: failure
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. # If we used a default mountpoint and is now empty, delete it
+#. [[ "$tombmount" == "/media/$tombname.tomb" ]] && { rmdir $tombmount }
+#.
+#. sudo cryptsetup luksClose $mapper
+#. [[ $? == 0 ]] || {
+#. > _failure "Error occurred in cryptsetup luksClose ::1 mapper::" $mapper }
+#.
+#. # Normally the loopback device is detached when unused
+#. [[ -e "/dev/$tombloop" ]] && sudo losetup -d "/dev/$tombloop"
+#. [[ $? = 0 ]] || {
+#: tomb:2395
msgid "Error occurred in cryptsetup luksClose ::1 mapper::"
-msgstr "Une erreur s'est produite lors de l'exécution de cryptsetup luksClose ::1 mapper::."
+msgstr ""
+"Une erreur s'est produite lors de l'exécution de cryptsetup luksClose ::1 "
+"mapper::."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. # Normally the loopback device is detached when unused
+#. [[ -e "/dev/$tombloop" ]] && sudo losetup -d "/dev/$tombloop"
+#. [[ $? = 0 ]] || {
+#. _verbose "/dev/$tombloop was already closed." }
+#.
+#. > _success "Tomb ::1 tomb name:: closed: your bones will rest in peace." $tombname
+#.
+#. done # loop across mounted tombs
+#.
+#. return 0
+#: tomb:2402
+msgid "Tomb ::1 tomb name:: closed: your bones will rest in peace."
+msgstr ""
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. return 1
+#. fi
+#. return 0
+#. fi
+#. unset discardme
+#. if ! zparseopts -M -E -D -Adiscardme ${every_opts}; then
+#. > _failure "Error parsing."
+#. return 127
+#. fi
+#. unset discardme
+#. subcommand=$1
+#: tomb:2522
+msgid "Error parsing."
+msgstr "Erreur de syntaxe."
-#: warning
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. subcommand=$1
+#. if [[ -z $subcommand ]]; then
+#. subcommand="__default"
+#. fi
+#.
+#. if [[ -z ${(k)subcommands_opts[$subcommand]} ]]; then
+#. > _warning "There's no such command \"::1 subcommand::\"." $subcommand
+#. exitv=127 _failure "Please try -h for help."
+#. fi
+#. argv=("${(@)oldstar}")
+#. unset oldstar
+#: tomb:2532
msgid "There's no such command \"::1 subcommand::\"."
msgstr "La commande \"::1 subcommand::\" n'est pas implémentée."
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. if [[ -z $subcommand ]]; then
+#. subcommand="__default"
+#. fi
+#.
+#. if [[ -z ${(k)subcommands_opts[$subcommand]} ]]; then
+#. _warning "There's no such command \"::1 subcommand::\"." $subcommand
+#. > exitv=127 _failure "Please try -h for help."
+#. fi
+#. argv=("${(@)oldstar}")
+#. unset oldstar
+#.
+#: tomb:2533
#, fuzzy
msgid "Please try -h for help."
msgstr "Essayer -h pour obtenir l'aide."
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. # zsh magic: ${=string} will split to multiple arguments when spaces occur
+#. set -A cmd_opts ${main_opts} ${=subcommands_opts[$subcommand]}
+#. # if there is no option, we don't need parsing
+#. if [[ -n $cmd_opts ]]; then
+#. zparseopts -M -E -D -AOPTS ${cmd_opts}
+#. if [[ $? != 0 ]]; then
+#. > _warning "Some error occurred during option processing."
+#. exitv=127 _failure "See \"tomb help\" for more info."
+#. fi
+#. fi
+#. #build PARAM (array of arguments) and check if there are unrecognized options
+#: tomb:2545
+msgid "Some error occurred during option processing."
+msgstr "L'interprétation des options a échoué."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. set -A cmd_opts ${main_opts} ${=subcommands_opts[$subcommand]}
+#. # if there is no option, we don't need parsing
+#. if [[ -n $cmd_opts ]]; then
+#. zparseopts -M -E -D -AOPTS ${cmd_opts}
+#. if [[ $? != 0 ]]; then
+#. _warning "Some error occurred during option processing."
+#. > exitv=127 _failure "See \"tomb help\" for more info."
+#. fi
+#. fi
+#. #build PARAM (array of arguments) and check if there are unrecognized options
+#. ok=0
+#: tomb:2546
msgid "See \"tomb help\" for more info."
msgstr "Voir \"tomb help\" pour plus d'info"
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. for arg in $*; do
+#. if [[ $arg == '--' || $arg == '-' ]]; then
+#. ok=1
+#. continue #it shouldnt be appended to PARAM
+#. elif [[ $arg[1] == '-' ]]; then
+#. if [[ $ok == 0 ]]; then
+#. > exitv=127 _failure "Unrecognized option ::1 arg:: for subcommand ::2 subcommand::" $arg $subcommand
+#. fi
+#. fi
+#. PARAM+=$arg
+#. done
+#: tomb:2558
msgid "Unrecognized option ::1 arg:: for subcommand ::2 subcommand::"
msgstr ""
-#: failure
-msgid "Resize2fs not installed: cannot resize tombs."
-msgstr "Resize2fs n'est pas installé: impossible de changer la taille d'une tombe"
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. # Use colors unless told not to
+#. { ! option_is_set --no-color } && { autoload -Uz colors && colors }
+#. # Some options are only available during insecure mode
+#. { ! option_is_set --unsafe } && {
+#. for opt in --tomb-pwd --use-urandom --tomb-old-pwd; do
+#. { option_is_set $opt } && {
+#. > exitv=127 _failure "You specified option ::1 option::, which is DANGEROUS and should only be used for testing\nIf you really want so, add --unsafe" $opt }
+#. done
+#. }
+#. # read -t or --tmp flags to set a custom temporary directory
+#. option_is_set --tmp && TMPPREFIX=$(option_value --tmp)
+#: tomb:2574
+msgid ""
+"You specified option ::1 option::, which is DANGEROUS and should only be "
+"used for testing\n"
+"If you really want so, add --unsafe"
+msgstr ""
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. help)
+#. usage
+#. ;;
+#.
+#. # DEPRECATION notice (leave here as 'create' is still present in old docs)
+#. create)
+#. > _warning "The create command is deprecated, please use dig, forge and lock instead."
+#. _warning "For more informations see Tomb's manual page (man tomb)."
+#. _failure "Operation aborted."
+#. ;;
+#.
+#: tomb:2608
+msgid ""
+"The create command is deprecated, please use dig, forge and lock instead."
+msgstr ""
+"La commande \"create\" est obsolète : il convient à présent d'utiliser \"dig"
+"\", \"forge\", et \"lock\"."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. usage
+#. ;;
+#.
+#. # DEPRECATION notice (leave here as 'create' is still present in old docs)
+#. create)
+#. _warning "The create command is deprecated, please use dig, forge and lock instead."
+#. > _warning "For more informations see Tomb's manual page (man tomb)."
+#. _failure "Operation aborted."
+#. ;;
+#.
+#. # CREATE Step 1: dig -s NN file.tomb
+#: tomb:2609
+msgid "For more informations see Tomb's manual page (man tomb)."
+msgstr ""
+"Pour de plus amples informations, se référer au manuel de Tomb (man tomb)."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. umount_tomb $PARAM[1]
+#. ;;
+#.
+#. # Grow tomb's size
+#. resize)
+#. [[ $RESIZER == 0 ]] && {
+#. > _failure "Resize2fs not installed: cannot resize tombs." }
+#. resize_tomb $PARAM[1]
+#. ;;
+#.
+#. ## Contents manipulation
+#: tomb:2643
+msgid "Resize2fs not installed: cannot resize tombs."
+msgstr ""
+"Resize2fs n'est pas installé: impossible de changer la taille d'une tombe"
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#.
+#. ## Locking operations
+#.
+#. # Export key to QR Code
+#. engrave)
+#. [[ $QRENCODE == 0 ]] && {
+#. > _failure "QREncode not installed: cannot engrave keys on paper." }
+#. engrave_key ${=PARAM}
+#. ;;
+#.
+#. # Change password on existing key
+#: tomb:2669
msgid "QREncode not installed: cannot engrave keys on paper."
msgstr ""
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. change_tomb_key ${=PARAM}
+#. ;;
+#.
+#. # STEGANOGRAPHY: hide key inside an image
+#. bury)
+#. [[ $STEGHIDE == 0 ]] && {
+#. > _failure "Steghide not installed: cannot bury keys into images." }
+#. bury_key $PARAM[1]
+#. ;;
+#.
+#. # STEGANOGRAPHY: read key hidden in an image
+#: tomb:2686
msgid "Steghide not installed: cannot bury keys into images."
msgstr ""
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. bury_key $PARAM[1]
+#. ;;
+#.
+#. # STEGANOGRAPHY: read key hidden in an image
+#. exhume)
+#. [[ $STEGHIDE == 0 ]] && {
+#. > _failure "Steghide not installed: cannot exhume keys from images." }
+#. exhume_key $PARAM[1]
+#. ;;
+#.
+#. ## Internal commands useful to developers
+#: tomb:2693
msgid "Steghide not installed: cannot exhume keys from images."
msgstr ""
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#.
+#. # Ask user for a password interactively
+#. askpass) ask_password $PARAM[1] $PARAM[2] ;;
+#.
+#. # Default operation: presentation, or version information with -v
+#. __default)
+#. > _print "Tomb ::1 version:: - a strong and gentle undertaker for your secrets" $VERSION
+#. _print "\000"
+#. _print " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+#. _print " This is free software: you are free to change and redistribute it"
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#: tomb:2707
msgid "Tomb ::1 version:: - a strong and gentle undertaker for your secrets"
msgstr ""
-#: print
-msgid " Copyright (C) 2007-2014 Dyne.org Foundation, License GNU GPL v3+"
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. askpass) ask_password $PARAM[1] $PARAM[2] ;;
+#.
+#. # Default operation: presentation, or version information with -v
+#. __default)
+#. _print "Tomb ::1 version:: - a strong and gentle undertaker for your secrets" $VERSION
+#. _print "\000"
+#. > _print " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+#. _print " This is free software: you are free to change and redistribute it"
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#: tomb:2709
+msgid " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
msgstr ""
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#.
+#. # Default operation: presentation, or version information with -v
+#. __default)
+#. _print "Tomb ::1 version:: - a strong and gentle undertaker for your secrets" $VERSION
+#. _print "\000"
+#. _print " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+#. > _print " This is free software: you are free to change and redistribute it"
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#: tomb:2710
msgid " This is free software: you are free to change and redistribute it"
msgstr ""
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. # Default operation: presentation, or version information with -v
+#. __default)
+#. _print "Tomb ::1 version:: - a strong and gentle undertaker for your secrets" $VERSION
+#. _print "\000"
+#. _print " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+#. _print " This is free software: you are free to change and redistribute it"
+#. > _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#. LANG=en
+#: tomb:2711
+msgid " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+msgstr ""
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. _print " This is free software: you are free to change and redistribute it"
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#. LANG=en
+#. > _print " This source code is distributed in the hope that it will be useful,"
+#. _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. _print " When in need please refer to <http://dyne.org/support>."
+#: tomb:2716
msgid " This source code is distributed in the hope that it will be useful,"
msgstr ""
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#. LANG=en
+#. _print " This source code is distributed in the hope that it will be useful,"
+#. > _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. _print " When in need please refer to <http://dyne.org/support>."
+#. _print "\000"
+#: tomb:2717
msgid " but WITHOUT ANY WARRANTY; without even the implied warranty of"
msgstr ""
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#. LANG=en
+#. _print " This source code is distributed in the hope that it will be useful,"
+#. _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. > _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. _print " When in need please refer to <http://dyne.org/support>."
+#. _print "\000"
+#. _print "System utils:"
+#: tomb:2718
msgid " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
msgstr ""
-#: print
-msgid "System utils:"
-msgstr ""
-
-#: warning
-msgid "Command \"::1 subcommand::\" not recognized."
-msgstr "La command \"::1 subcommand::\" n'est pas reconnue."
-
-#: print
-msgid " passwd change the password of a KEY (needs old pass)"
-msgstr ""
-
-#: print
-msgid " setkey change the KEY locking a TOMB (needs old key and pass)"
-msgstr ""
-
-#: print
-msgid " // Backup on paper:"
-msgstr ""
-
-#: print
-msgid " // Steganography:"
-msgstr ""
-
-#: print
-msgid " bury hide a KEY inside a JPEG image (for use with -k)"
-msgstr ""
-
-#: print
-msgid " exhume extract a KEY from a JPEG image (prints to stdout)"
-msgstr ""
-
-#: failure
-msgid "Exhume failed, no image specified"
-msgstr ""
-
-#: print
-msgid " For the latest sourcecode go to <http://dyne.org/software/tomb>"
-msgstr ""
-
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. local langwas=$LANG
+#. LANG=en
+#. _print " This source code is distributed in the hope that it will be useful,"
+#. _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. > _print " When in need please refer to <http://dyne.org/support>."
+#. _print "\000"
+#. _print "System utils:"
+#. _print "\000"
+#. cat <<EOF
+#: tomb:2720
msgid " When in need please refer to <http://dyne.org/support>."
msgstr ""
-#: print
-msgid "Optional utils:"
-msgstr ""
-
-#: failure
-msgid "Fatal error setting the permission umask for temporary files"
-msgstr ""
-
-#: failure
-msgid "Fatal error setting ownership on temporary file: ::1 temp file::"
-msgstr ""
-
-#: warning
-msgid "cleartext key from stdin selected: this is unsafe."
-msgstr ""
-
-#: failure
-msgid "please use --unsafe if you really want to do this."
-msgstr ""
-
-#: warning
-msgid "received key in cleartext from stdin (unsafe mode)"
-msgstr ""
-
-#: failure
-msgid "You specified option ::1 option::, which is DANGEROUS and should only be used for testing\n"
-"If you really want so, add --unsafe"
-msgstr ""
-
-#: failure
-msgid "Failing to identify the user who is calling us"
-msgstr ""
-
-#: failure
-msgid "Fatal error creating the temporary directory: ::1 temp dir::"
-msgstr ""
-
-#: failure
-msgid "Someone is messing up with us trying to hijack temporary files."
-msgstr ""
-
-#: success
-msgid "All your swaps are belong to crypt. Good."
-msgstr ""
-
-#: success
-msgid "Changing password for ::1 key file::"
-msgstr ""
-
-#: success
-msgid "Your passphrase was successfully updated."
-msgstr ""
-
-#: success
-msgid "Using KDF, iterations: ::1 microseconds::"
-msgstr ""
-
-#: success
-msgid "Encoding key ::1 tomb key:: inside image ::2 image file::"
-msgstr ""
-
-#: success
-msgid "Tomb key encoded succesfully into image ::1 image file::"
-msgstr ""
-
-#: success
-msgid "Key succesfully exhumed to ::1 key::."
-msgstr ""
-
-#: success
-msgid "Rendering a printable QRCode for key: ::1 tomb key file::"
-msgstr ""
-
-#: success
-msgid "Operation successful:"
-msgstr ""
-
-#: success
-msgid "Creating a new tomb in ::1 tomb path::"
-msgstr ""
-
-#: success
-msgid "Done digging ::1 tomb name::"
-msgstr ""
-
-#: success
-msgid "Choose the password of your key: ::1 tomb key::"
-msgstr ""
-
-#: success
-msgid "Your key is ready:"
-msgstr ""
-
-#: success
-msgid "Locking ::1 tomb file:: with ::2 tomb key file::"
-msgstr ""
-
-#: success
-msgid "Your tomb is ready in ::1 tomb path:: and secured with key ::2 tomb key::"
-msgstr ""
-
-#: success
-msgid "Changing lock on tomb ::1 tomb name::"
-msgstr ""
-
-#: success
-msgid "Succesfully changed key for tomb: ::1 tomb file::"
-msgstr ""
-
-#: success
-msgid "Opening ::1 tomb file:: on ::2 mount point::"
-msgstr ""
-
-#: success
-msgid "Success unlocking tomb ::1 tomb name::"
-msgstr ""
-
-#: success
-msgid "Success opening ::1 tomb file:: on ::2 mount point::"
-msgstr ""
-
-#: success
-msgid "Post hooks found, executing as user ::1 user name::."
-msgstr ""
-
-#: success
-msgid "Creating and updating search indexes."
-msgstr ""
-
-#: message
-msgid "Generating a new swish-e configuration file: ::1 swish conf::"
-msgstr ""
-
-#: success
-msgid "Searching for: ::1::"
-msgstr ""
-
-#: success
-msgid "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::"
-msgstr ""
-
-#: success
-msgid "Slamming tomb: killing all processes using this hook."
-msgstr ""
-
-#: success
-msgid "Tomb ::1 tomb name:: closed: your bones will rest in peace."
-msgstr ""
-
-#: warning
-msgid "Pinentry error: ::1 error::"
-msgstr ""
-
-#: warning
-msgid "Empty password"
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. _print " This source code is distributed in the hope that it will be useful,"
+#. _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. _print " When in need please refer to <http://dyne.org/support>."
+#. _print "\000"
+#. > _print "System utils:"
+#. _print "\000"
+#. cat <<EOF
+#. `sudo -V | head -n1`
+#. `cryptsetup --version`
+#: tomb:2722
+msgid "System utils:"
msgstr ""
-#: failure
-msgid "Cannot find pinentry-curses and no DISPLAY detected."
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. `cryptsetup --version`
+#. `pinentry --version`
+#. `gpg --version | head -n1` - key forging algorithms (GnuPG symmetric ciphers):
+#. `list_gnupg_ciphers`
+#. EOF
+#. _print "\000"
+#. > _print "Optional utils:"
+#. _print "\000"
+#. _list_optional_tools version
+#. return 0
+#. }
+#: tomb:2732
+msgid "Optional utils:"
msgstr ""
-#: warning
-msgid "Detected DISPLAY, but only pinentry-curses is found."
-msgstr ""
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. }
+#. usage
+#. ;;
+#.
+#. # Reject unknown command and suggest help
+#. *)
+#. > _warning "Command \"::1 subcommand::\" not recognized." $subcommand
+#. _message "Try -h for help."
+#. return 1
+#. ;;
+#. esac
+#: tomb:2742
+msgid "Command \"::1 subcommand::\" not recognized."
+msgstr "La command \"::1 subcommand::\" n'est pas reconnue."
-#: failure
-msgid "Cannot find any pinentry: impossible to ask for password."
-msgstr ""
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. usage
+#. ;;
+#.
+#. # Reject unknown command and suggest help
+#. *)
+#. _warning "Command \"::1 subcommand::\" not recognized." $subcommand
+#. > _message "Try -h for help."
+#. return 1
+#. ;;
+#. esac
+#. return $?
+#: tomb:2743
+msgid "Try -h for help."
+msgstr "Essayer -h pour obtenir l'aide."
+#~ msgid " -o mount options used to open (default: rw,noatime,nodev)"
+#~ msgstr ""
+#~ " -o options de montage à l'ouverture (par défaut : rw,noatime,"
+#~ "nodev)"
diff --git a/extras/po/ru.po b/extras/po/ru.po
@@ -1,1128 +1,5477 @@
msgid ""
msgstr ""
+"Project-Id-Version: Tomb the Crypto Undertaker\n"
+"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
-"Project-Id-Version: Tomb the Crypto Undertaker\n"
-"Language: ru\n"
-
-#: failure
-msgid "Operation aborted."
-msgstr "Операция отменена."
-
-#: warning
-msgid "often occurs on VPS and kernels that don't provide the loop module."
-msgstr "часто возникает на VPS и ядрах, которые не имеют модуля loop."
-
-#: warning
-msgid "It is impossible to use Tomb on this machine at this conditions."
-msgstr "Невозможно использовать Tomb на этой машине при таких условиях."
-
-#: message
-msgid "Waiting for the key to be piped from stdin... "
-msgstr "Ожидание передачи ключа через стандартный ввод..."
-
-#: failure
-msgid "This operation requires a key file to be specified using the -k option."
-msgstr "Эта операция требует указания файла ключа с помощью опции -k."
-
-#: failure
-msgid "Key not found, specify one using -k."
-msgstr "Ключ не найден, укажите его с помощью опции -k."
-
-#: warning
-msgid "User aborted password dialog."
-msgstr "Пользователь отменил диалог пароля."
-
-#: message
-msgid "Password OK."
-msgstr "Верный пароль."
-
-#: failure
-msgid "Error: the newly generated keyfile does not seem valid."
-msgstr "Ошибка: сгенерированный файл ключа неверен."
-
-#: failure
-msgid "User aborted."
-msgstr "Отменено пользователем."
-
-#: failure
-msgid "You set empty password, which is not possible."
-msgstr "Вы указали пустой пароль, так нельзя."
-
-#: failure
-msgid "Wrong argument for --kdf: must be an integer number (iteration seconds)."
-msgstr "Неверный аргумент для --kdf: должно быть указано целое число (секунд итерации)."
-
-#: failure
-msgid "gpg (GnuPG) is not found, Tomb cannot function without it."
-msgstr "gpg (GnuPG) не найден, Tomb не может работать без него."
-
-#: message
-msgid "Please confirm the key password for the encoding"
-msgstr "Пожалуйста, подтвердите пароль ключа для шифрования"
-
-#: warning
-msgid "Wrong password supplied."
-msgstr "Указан неверный пароль."
-
-#: failure
-msgid "You shall not bury a key whose password is unknown to you."
-msgstr "Вам не захоронить ключ, чей пароль не известен Вам."
-
-#: warning
-msgid "Encoding error: steghide reports problems."
-msgstr "Ошибка шифрования: steghide сообщает о проблемах."
-
-#: warning
-msgid "Make explicit use of --force to overwrite."
-msgstr "Явно укажите опцию --force для перезаписи."
-
-#: warning
-msgid "Use of --force selected: overwriting."
-msgstr "Указана опция --force: перезаписываю."
-
-#: failure
-msgid "A filename needs to be specified using -k to forge a new key."
-msgstr "Необходимо указать имя файла через опцию -k, чтобы выковать новый ключ."
-
-#: failure
-msgid "Forging this key would overwrite an existing file. Operation aborted."
-msgstr "Выковка этого ключа перезапишет существующий файл. Операция отменена."
-
-#: message
-msgid "This operation takes time, keep using this computer on other tasks,"
-msgstr "Эта операция займет некоторое время, выполняйте пока другие задачи,"
-
-#: message
-msgid "once done you will be asked to choose a password for your tomb."
-msgstr "по завершении Вас вопросят ввести пароль для гробницы."
-
-#: message
-msgid "To make it faster you can move the mouse around."
-msgstr "Чтобы ускорить операцию, подвигайте мышку."
-
-#: message
-msgid "If you are on a server, you can use an Entropy Generation Daemon."
-msgstr "Если Вы на сервере, можно использовать демон генерации энтропии."
-
-#: warning
-msgid "Cannot generate encryption key."
-msgstr "Не могу сгенерировать ключ шифрования."
-
-#: message
-msgid "(You can also change it later using 'tomb passwd'.)"
-msgstr "(Его можно потом изменить с помощью 'tomb passwd'.)"
-
-#: warning
-msgid "The key does not seem to be valid."
-msgstr "Ключ неверен."
-
-#: warning
-msgid "Dumping contents to screen:"
-msgstr "Выгрузка содержимого на экран:"
-
-#: failure
-msgid "Size argument missing, use -s"
-msgstr "Отсутствует размер, укажите его с помощью -s"
-
-#: warning
-msgid "A tomb exists already. I'm not digging here:"
-msgstr "Гробница существует. Я не буду копать здесь:"
-
-#: message
-msgid "Your tomb is not yet ready, you need to forge a key and lock it:"
-msgstr "Ваша гробница пока не готова, необходимо выковать ключ и запереть ее:"
-
-#: warning
-msgid "No tomb specified for locking."
-msgstr "Не указана гробница для запирания."
-
-#: warning
-msgid "Usage: tomb lock file.tomb file.tomb.key"
-msgstr "Использование: tomb lock file.tomb file.tomb.key"
-
-#: failure
-msgid "There is no tomb here. You have to it dig first."
-msgstr "Здесь нет гробницы. Сначала выкопайте ее."
-
-#: message
-msgid "Checking if the tomb is empty (we never step on somebody else's bones)."
-msgstr "Проверяю, пуста ли гробница (мы никогда не ходим по чужим костям)."
-
-#: warning
-msgid "The tomb was already locked with another key."
-msgstr "Гробница уже заперта другим ключом."
-
-#: failure
-msgid "Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
-msgstr "Операция отменена. Я не могу запереть уже запертую гробницу. Выкопайте новую."
-#: message
-msgid "Fine, this tomb seems empty."
-msgstr "Так, эта гробница, вроде как, пуста."
-
-#: message
-msgid "Formatting Luks mapped device."
-msgstr "Форматирую устройство LUKS."
-
-#: warning
-msgid "cryptsetup luksFormat returned an error."
-msgstr "cryptsetup luksFormat вернул ошибку."
-
-#: message
-msgid "Formatting your Tomb with Ext3/Ext4 filesystem."
-msgstr "Форматирую Вашу гробницу в файловую систему Ext3/Ext4."
-
-#: warning
-msgid "Tomb format returned an error."
-msgstr "Tomb format вернул ошибку."
-
-#: message
-msgid "Here below its status is reported:"
-msgstr "Ниже назодится отчет о его статусе:"
-
-#: message
-msgid "This tomb is a valid LUKS encrypted device."
-msgstr "Эта гробница - верное зашифрованное устройство LUKS."
-
-#: failure
-msgid "Failure mounting the encrypted file."
-msgstr "Не удалось примонтировать зашифрованный файл."
-
-#: warning
-msgid "How pitiful! A tomb, and no HOME."
-msgstr "Как жаль! Гробница есть, но нет HOME."
-
-#. Don't know how to correctly translate "bind hook".
-#: warning
-#, fuzzy
-msgid "Cannot exec bind hooks without a mounted tomb."
-msgstr "Невозможно совершить привязки без примонтированной гробницы."
-
-#: failure
-msgid "I can't see any open tomb, may they all rest in peace."
-msgstr "Я не вижу открытых гробниц, да упокоятся они все с миром."
-
-#: message
-msgid "Search index updated."
-msgstr "Поисковый индекс обновлен."
-
-#: warning
-msgid "Run 'tomb index' to create indexes."
-msgstr "Запустите 'tomb index' для создания индексов."
-
-#: message
-msgid "Search completed."
-msgstr "Поиск завершен."
-
-#: failure
-msgid "No tomb name specified for resizing."
-msgstr "Не указано имя гробницы для изменения размера."
-
-#: failure
-msgid "Size is not an integer."
-msgstr "Размер не целое число."
-
-#: failure
-msgid "The new size must be greater then old tomb size."
-msgstr "Новый размер гробницы должен быть больше старого."
-
-#: failure
-msgid "There is no open tomb to be closed."
-msgstr "Нет открытой гробницы для закрытия."
-
-#: warning
-msgid "Too many tombs mounted, please specify one (see tomb list)"
-msgstr "Примонтировано слишком много гробниц, пожалуйста, укажите точнее (см. tomb list)"
-
-#: warning
-msgid "or issue the command 'tomb close all' to close them all."
-msgstr "или выполните команду 'tomb close all', чтобы закрыть их все."
-
-#: warning
-msgid "Please specify an existing tomb."
-msgstr "Пожалуйста, укажите существующую гробницу."
-
-#: message
-msgid "Kill all processes busy inside the tomb."
-msgstr "Убиваю все процессы, занятые в гробнице"
+#. Fold: Safety functions
+#. Function: _whoami
+#.
+#. Code sample:
+#.
+#. # Set username from UID or environment
+#. _USER=$SUDO_USER
+#. [[ "$_USER" = "" ]] && { _USER=$USERNAME }
+#. [[ "$_USER" = "" ]] && { _USER=$(id -u) }
+#. [[ "$_USER" = "" ]] && {
+#. > _failure "Failing to identify the user who is calling us" }
+#.
+#. # Get GID from option -G or the environment
+#. option_is_set -G #. && _GID=$(option_value -G) || _GID=$(id -g $_USER)
+#: tomb:189
+msgid "Failing to identify the user who is calling us"
+msgstr "Не удалось определить пользователя, вызвавшего меня"
-#: warning
-msgid "Tomb is busy, cannot umount!"
-msgstr "Гробница занята, не могу отмонтировать!"
+#. Fold: Safety functions
+#. Function: _plot
+#.
+#. Code sample:
+#. TOMBFILE=$(basename $TOMBPATH)
+#.
+#. # The tomb name is TOMBFILE without an extension.
+#. # It can start with dots: ..foo.tomb -> ..foo
+#. TOMBNAME="${TOMBFILE%\.[^\.]*}"
+#. [[ -z $TOMBNAME ]] && {
+#. > _failure "Tomb won't work without a TOMBNAME." }
+#.
+#. # Normalize tomb name
+#. TOMBFILE="$TOMBNAME.tomb"
+#.
+#: tomb:237
+msgid "Tomb won't work without a TOMBNAME."
+msgstr "Tomb не будет работать без ИМЕНИ_ГРОБНИЦЫ."
-#: failure
-msgid "Error parsing."
-msgstr "Ошибка парсинга."
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#.
+#. # Provide a random filename in shared memory
+#. _tmp_create() {
+#. [[ -d "$TMPPREFIX" ]] || {
+#. # we create the tempdir with the sticky bit on
+#. sudo mkdir -m 1777 "$TMPPREFIX"
+#. > [[ $? == 0 ]] || _failure "Fatal error creating the temporary directory: ::1 temp dir::" "$TMPPREFIX"
+#. }
+#.
+#. # We're going to add one more $RANDOM for each time someone complain
+#. # about this being too weak of a random.
+#: tomb:252
+msgid "Fatal error creating the temporary directory: ::1 temp dir::"
+msgstr "Критическая ошибка при создании временной директории: ::1 temp dir::"
-#: warning
-msgid "Some error occurred during option processing."
-msgstr "Произошла какая-то ошибка при обработке опций."
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#.
+#. # We're going to add one more $RANDOM for each time someone complain
+#. # about this being too weak of a random.
+#. tfile="${TMPPREFIX}/$RANDOM$RANDOM$RANDOM$RANDOM" # Temporary file
+#. umask 066
+#. [[ $? == 0 ]] || {
+#. > _failure "Fatal error setting the permission umask for temporary files" }
+#.
+#. [[ -r "$tfile" ]] && {
+#. _failure "Someone is messing up with us trying to hijack temporary files." }
+#.
+#: tomb:260
+msgid "Fatal error setting the permission umask for temporary files"
+msgstr "Критическая ошибка при задании маски прав для временных файлов"
-#: warning
-msgid "The create command is deprecated, please use dig, forge and lock instead."
-msgstr "Команда create устарела, пожалуйста, используйте dig, forge и lock."
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#. tfile="${TMPPREFIX}/$RANDOM$RANDOM$RANDOM$RANDOM" # Temporary file
+#. umask 066
+#. [[ $? == 0 ]] || {
+#. _failure "Fatal error setting the permission umask for temporary files" }
+#.
+#. [[ -r "$tfile" ]] && {
+#. > _failure "Someone is messing up with us trying to hijack temporary files." }
+#.
+#. touch "$tfile"
+#. [[ $? == 0 ]] || {
+#. _failure "Fatal error creating a temporary file: ::1 temp file::" "$tfile" }
+#: tomb:263
+msgid "Someone is messing up with us trying to hijack temporary files."
+msgstr "Кто-то наглый пытается похитить наши временные файлы."
-#: warning
-msgid "For more informations see Tomb's manual page (man tomb)."
-msgstr "Для большей информации обратитесь к руководству Tomb (man tomb)."
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#.
+#. [[ -r "$tfile" ]] && {
+#. _failure "Someone is messing up with us trying to hijack temporary files." }
+#.
+#. touch "$tfile"
+#. [[ $? == 0 ]] || {
+#. > _failure "Fatal error creating a temporary file: ::1 temp file::" "$tfile" }
+#.
+#. [[ $? == 0 ]] || {
+#. _failure "Fatal error setting ownership on temporary file: ::1 temp file::" "$tfile" }
+#.
+#: tomb:267
+msgid "Fatal error creating a temporary file: ::1 temp file::"
+msgstr "Критическая ошибка при создании временного файла ::1 temp file::"
-#: message
-msgid "Try -h for help."
-msgstr "Используйте -h для вызова справки."
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#.
+#. touch "$tfile"
+#. [[ $? == 0 ]] || {
+#. _failure "Fatal error creating a temporary file: ::1 temp file::" "$tfile" }
+#.
+#. [[ $? == 0 ]] || {
+#. > _failure "Fatal error setting ownership on temporary file: ::1 temp file::" "$tfile" }
+#.
+#. _verbose "Created tempfile: ::1 temp file::" "$tfile"
+#. TOMBTMP="$tfile"
+#. TOMBTMPFILES+=("$tfile")
+#: tomb:270
+msgid "Fatal error setting ownership on temporary file: ::1 temp file::"
+msgstr ""
+"Критическая ошибка при задании владельца временного файла ::1 temp file::"
+
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. r=1
+#. is_crypt=`sudo dmsetup status "$s" | awk '/crypt/ {print $3}'`
+#. [[ $is_crypt == "crypt" ]] && { r=2 } || { break }
+#.
+#. fi
+#. done
+#. > _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#: tomb:316
+msgid "An active swap partition is detected..."
+msgstr ""
-#: failure
-msgid "Tomb won't work without a TOMBNAME."
-msgstr "Tomb не будет работать без ИМЕНИ_ГРОБНИЦЫ."
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. [[ $is_crypt == "crypt" ]] && { r=2 } || { break }
+#.
+#. fi
+#. done
+#. _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. > _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#. _warning "You can deactivate all swap partitions using the command:"
+#. _warning " swapoff -a"
+#: tomb:318
+msgid "All your swaps are belong to crypt. Good."
+msgstr "All your swaps are belong to crypt. Хорошо."
-#: failure
-msgid "Fatal error creating a temporary file: ::1 temp file::"
-msgstr "Критическая ошибка при создании временного файла ::1 temp file::"
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. fi
+#. done
+#. _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. > _warning "This poses a security risk."
+#. _warning "You can deactivate all swap partitions using the command:"
+#. _warning " swapoff -a"
+#. _warning "But if you want to proceed like this, use the -f (force) flag."
+#. fi
+#: tomb:320
+msgid "This poses a security risk."
+msgstr ""
-#: warning
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. done
+#. _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#. > _warning "You can deactivate all swap partitions using the command:"
+#. _warning " swapoff -a"
+#. _warning "But if you want to proceed like this, use the -f (force) flag."
+#. fi
+#. return $r
+#: tomb:321
msgid "You can deactivate all swap partitions using the command:"
msgstr "Вы можете отключить все разделы подкачки с помощью этой команды:"
-#: warning
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#. _warning "You can deactivate all swap partitions using the command:"
+#. > _warning " swapoff -a"
+#. _warning "But if you want to proceed like this, use the -f (force) flag."
+#. fi
+#. return $r
+#.
+#: tomb:322
msgid " swapoff -a"
msgstr " swapoff -a"
-#: warning
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#. _warning "You can deactivate all swap partitions using the command:"
+#. _warning " swapoff -a"
+#. > _warning "But if you want to proceed like this, use the -f (force) flag."
+#. fi
+#. return $r
+#.
+#. }
+#: tomb:323
msgid "But if you want to proceed like this, use the -f (force) flag."
-msgstr "Но если Вы все равно хотите продолжить работу, используйте флаг -f (force)."
+msgstr ""
+"Но если Вы все равно хотите продолжить работу, используйте флаг -f (force)."
+
+#. Fold: Safety functions
+#. Function: _check_swap
+#.
+#. Code sample:
+#. _ensure_safe_swap
+#. case $? in
+#. 0|2) # No, or encrypted swap
+#. return 0
+#. ;;
+#. *) # Unencrypted swap
+#. > _failure "Operation aborted."
+#. ;;
+#. esac
+#. fi
+#. }
+#: tomb:342
+msgid "Operation aborted."
+msgstr "Операция отменена."
+
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#. SETTITLE $title
+#. SETDESC $description
+#. SETPROMPT Password:
+#. GETPIN
+#. EOF`
+#. else
+#. > _failure "Cannot find pinentry-curses and no DISPLAY detected."
+#. fi
+#.
+#. else # a DISPLAY is found to be active
+#.
+#: tomb:379
+msgid "Cannot find pinentry-curses and no DISPLAY detected."
+msgstr ""
+
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#. EOF`
+#.
+#. else
+#.
+#. if _is_found "pinentry-curses"; then
+#.
+#. > _warning "Detected DISPLAY, but only pinentry-curses is found."
+#. output=`cat <<EOF | pinentry-curses
+#. OPTION ttyname=$TTY
+#. OPTION lc-ctype=$LANG
+#. SETTITLE $title
+#: tomb:432
+msgid "Detected DISPLAY, but only pinentry-curses is found."
+msgstr ""
+
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#. SETTITLE $title
+#. SETDESC $description
+#. SETPROMPT Password:
+#. GETPIN
+#. EOF`
+#. else
+#. > _failure "Cannot find any pinentry: impossible to ask for password."
+#. fi
+#.
+#. fi
+#.
+#: tomb:442
+msgid "Cannot find any pinentry: impossible to ask for password."
+msgstr ""
+
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#.
+#. fi # end of DISPLAY block
+#.
+#. # parse the pinentry output
+#. for i in ${(f)output}; do
+#. [[ "$i" =~ "^ERR.*" ]] && {
+#. > _warning "Pinentry error: ::1 error::" ${i[(w)3]}
+#. print "canceled"
+#. return 1 }
+#.
+#. # here the password is found
+#: tomb:452
+msgid "Pinentry error: ::1 error::"
+msgstr "Ошибка pinentry: ::1 error::"
+
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#.
+#. # here the password is found
+#. [[ "$i" =~ "^D .*" ]] && password="${i##D }"
+#. done
+#.
+#. [[ "$password" = "" ]] && {
+#. > _warning "Empty password"
+#. print "empty"
+#. return 1 }
+#.
+#. print "$password"
+#: tomb:461
+msgid "Empty password"
+msgstr "Пустой пароль"
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. # Check if a filename is a valid tomb
+#. is_valid_tomb() {
+#. _verbose "is_valid_tomb ::1 tomb file::" $1
+#.
+#. # First argument must be the path to a tomb
+#. [[ -z "$1" ]] && {
+#. > _failure "Tomb file is missing from arguments." }
+#.
+#. # Tomb file must be a readable, writable, not-empty regular file.
+#. [[ ! -r "$1" ]] && {
+#. _failure "Tomb file not found: ::1 tomb file::" $1 }
+#: tomb:477
msgid "Tomb file is missing from arguments."
msgstr "В аргументах отсутствует файл гробницы."
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. # First argument must be the path to a tomb
+#. [[ -z "$1" ]] && {
+#. _failure "Tomb file is missing from arguments." }
+#.
+#. # Tomb file must be a readable, writable, not-empty regular file.
+#. [[ ! -r "$1" ]] && {
+#. > _failure "Tomb file not found: ::1 tomb file::" $1 }
+#. [[ ! -f "$1" ]] && {
+#. _failure "Tomb file is not a regular file: ::1 tomb file::" $1 }
+#. [[ ! -s "$1" ]] && {
+#. _failure "Tomb file is empty (zero length): ::1 tomb file::" $1 }
+#: tomb:481
msgid "Tomb file not found: ::1 tomb file::"
msgstr "Не найден файл гробницы: ::1 tomb file::"
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. _failure "Tomb file is missing from arguments." }
+#.
+#. # Tomb file must be a readable, writable, not-empty regular file.
+#. [[ ! -r "$1" ]] && {
+#. _failure "Tomb file not found: ::1 tomb file::" $1 }
+#. [[ ! -f "$1" ]] && {
+#. > _failure "Tomb file is not a regular file: ::1 tomb file::" $1 }
+#. [[ ! -s "$1" ]] && {
+#. _failure "Tomb file is empty (zero length): ::1 tomb file::" $1 }
+#. [[ ! -w "$1" ]] && {
+#. _failure "Tomb file is not writable: ::1 tomb file::" $1 }
+#: tomb:483
msgid "Tomb file is not a regular file: ::1 tomb file::"
msgstr "Файл гробницы не является обычным файлом: ::1 tomb file::"
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. # Tomb file must be a readable, writable, not-empty regular file.
+#. [[ ! -r "$1" ]] && {
+#. _failure "Tomb file not found: ::1 tomb file::" $1 }
+#. [[ ! -f "$1" ]] && {
+#. _failure "Tomb file is not a regular file: ::1 tomb file::" $1 }
+#. [[ ! -s "$1" ]] && {
+#. > _failure "Tomb file is empty (zero length): ::1 tomb file::" $1 }
+#. [[ ! -w "$1" ]] && {
+#. _failure "Tomb file is not writable: ::1 tomb file::" $1 }
+#.
+#. # TODO: split the rest of that function out.
+#: tomb:485
msgid "Tomb file is empty (zero length): ::1 tomb file::"
msgstr "Файл гробницы пуст (нулевая длина): ::1 tomb file::"
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. _failure "Tomb file not found: ::1 tomb file::" $1 }
+#. [[ ! -f "$1" ]] && {
+#. _failure "Tomb file is not a regular file: ::1 tomb file::" $1 }
+#. [[ ! -s "$1" ]] && {
+#. _failure "Tomb file is empty (zero length): ::1 tomb file::" $1 }
+#. [[ ! -w "$1" ]] && {
+#. > _failure "Tomb file is not writable: ::1 tomb file::" $1 }
+#.
+#. # TODO: split the rest of that function out.
+#. # We already have a valid tomb, now we're checking
+#. # whether we can alter it.
+#: tomb:487
msgid "Tomb file is not writable: ::1 tomb file::"
msgstr "Файл гробницы недоступен для записи: ::1 tomb file::"
-#: warning
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. # TODO: split the rest of that function out.
+#. # We already have a valid tomb, now we're checking
+#. # whether we can alter it.
+#.
+#. # Tomb file may be a LUKS FS (or we are creating it)
+#. [[ "`file $1`" =~ "luks encrypted file" ]] || {
+#. > _warning "File is not yet a tomb: ::1 tomb file::" $1 }
+#.
+#. _plot $1 # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. # Tomb cannot be already mounted (or we cannot alter it)
+#: tomb:495
msgid "File is not yet a tomb: ::1 tomb file::"
msgstr "Файл пока не является гробницей: ::1 tomb file::"
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. _warning "File is not yet a tomb: ::1 tomb file::" $1 }
+#.
+#. _plot $1 # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. # Tomb cannot be already mounted (or we cannot alter it)
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]$" ]] && {
+#. > _failure "Tomb is currently in use: ::1 tomb name::" $TOMBNAME
+#. }
+#.
+#. _message "Valid tomb file found: ::1 tomb path::" $TOMBPATH
+#.
+#: tomb:501
msgid "Tomb is currently in use: ::1 tomb name::"
msgstr "Гробница на данный момент используется: ::1 tomb name::"
-#: message
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#.
+#. # Tomb cannot be already mounted (or we cannot alter it)
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]$" ]] && {
+#. _failure "Tomb is currently in use: ::1 tomb name::" $TOMBNAME
+#. }
+#.
+#. > _message "Valid tomb file found: ::1 tomb path::" $TOMBPATH
+#.
+#. return 0
+#. }
+#.
+#: tomb:504
msgid "Valid tomb file found: ::1 tomb path::"
msgstr "Найден верный файл гробницы: ::1 tomb path::"
-#: warning
+#. Fold: Safety functions
+#. Function: lo_mount
+#.
+#. Code sample:
+#. lo_mount() {
+#. tpath="$1"
+#.
+#. # check if we have support for loop mounting
+#. _nstloop=`sudo losetup -f`
+#. [[ $? = 0 ]] || {
+#. > _warning "Loop mount of volumes is not possible on this machine, this error"
+#. _warning "often occurs on VPS and kernels that don't provide the loop module."
+#. _warning "It is impossible to use Tomb on this machine at this conditions."
+#. _failure "Operation aborted."
+#. }
+#: tomb:516
msgid "Loop mount of volumes is not possible on this machine, this error"
msgstr "Loop-монтирование томов не поддерживается на этой машине, эта ошибка"
-#: print
+#. Fold: Safety functions
+#. Function: lo_mount
+#.
+#. Code sample:
+#. tpath="$1"
+#.
+#. # check if we have support for loop mounting
+#. _nstloop=`sudo losetup -f`
+#. [[ $? = 0 ]] || {
+#. _warning "Loop mount of volumes is not possible on this machine, this error"
+#. > _warning "often occurs on VPS and kernels that don't provide the loop module."
+#. _warning "It is impossible to use Tomb on this machine at this conditions."
+#. _failure "Operation aborted."
+#. }
+#.
+#: tomb:517
+msgid "often occurs on VPS and kernels that don't provide the loop module."
+msgstr "часто возникает на VPS и ядрах, которые не имеют модуля loop."
+
+#. Fold: Safety functions
+#. Function: lo_mount
+#.
+#. Code sample:
+#.
+#. # check if we have support for loop mounting
+#. _nstloop=`sudo losetup -f`
+#. [[ $? = 0 ]] || {
+#. _warning "Loop mount of volumes is not possible on this machine, this error"
+#. _warning "often occurs on VPS and kernels that don't provide the loop module."
+#. > _warning "It is impossible to use Tomb on this machine at this conditions."
+#. _failure "Operation aborted."
+#. }
+#.
+#. sudo losetup -f "$tpath" # allocates the next loopback for our file
+#: tomb:518
+msgid "It is impossible to use Tomb on this machine at this conditions."
+msgstr "Невозможно использовать Tomb на этой машине при таких условиях."
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#.
+#. # }}}
+#.
+#. # {{{ Commandline interaction
+#.
+#. usage() {
+#. > _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#: tomb:558
msgid "Syntax: tomb [options] command [arguments]"
msgstr "Синтаксис: tomb [опции] команда [аргументы]"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#.
+#. # {{{ Commandline interaction
+#.
+#. usage() {
+#. _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. > _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#: tomb:560
msgid "Commands:"
msgstr "Команды:"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#.
+#. usage() {
+#. _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. > _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#: tomb:562
msgid " // Creation:"
msgstr " // Создание: "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. usage() {
+#. _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#. > _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#: tomb:563
msgid " dig create a new empty TOMB file of size -s in MB"
msgstr " dig создать новый пустой файл ГРОБНИЦЫ размером -s Мб "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. > _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#: tomb:564
msgid " forge create a new KEY file and set its password"
msgstr " forge создать новый файл КЛЮЧА и задать его пароль "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. > _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#: tomb:565
msgid " lock installs a lock on a TOMB to use it with KEY"
msgstr " lock установить замок на ГРОБНИЦУ, используя КЛЮЧ "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. > _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#: tomb:567
msgid " // Operations on tombs:"
msgstr " // Операции над гробницами: "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. > _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#: tomb:568
msgid " open open an existing TOMB"
msgstr " open открыть существующую ГРОБНИЦУ "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. > _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#: tomb:569
msgid " index update the search indexes of tombs"
msgstr " index обновить поисковый индекс гробниц "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. > _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#: tomb:570
msgid " search looks for filenames matching text patterns"
msgstr " search ищет имена файлов, соответствующие шаблону "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. > _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#: tomb:571
msgid " list list of open TOMBs and information on them"
msgstr " list список открытых ГРОБНИЦ и информация о них "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. > _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#: tomb:572
msgid " close close a specific TOMB (or 'all')"
msgstr " close закрыть определенную ГРОБНИЦУ (или 'all' для всех) "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. > _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#: tomb:573
msgid " slam slam a TOMB killing all programs using it"
msgstr " slam захлопнуть ГРОБНИЦУ, убив все программы, использующие ее "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. > _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#. _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#: tomb:575
msgid " resize resize a TOMB to a new size -s (can only grow)"
msgstr " resize привести размер гробницы к -s Мб (можно только увеличить) "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#. > _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#. _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#: tomb:578
msgid " // Operations on keys:"
msgstr " // Операции с ключами: "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#. _print " // Operations on keys:"
+#. > _print " passwd change the password of a KEY (needs old pass)"
+#. _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#. _print " // Backup on paper:"
+#: tomb:579
+msgid " passwd change the password of a KEY (needs old pass)"
+msgstr " passwd изменить пароль КЛЮЧА (требуется старый пароль)"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#. _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#. > _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#. _print " // Backup on paper:"
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#: tomb:580
+msgid " setkey change the KEY locking a TOMB (needs old key and pass)"
+msgstr ""
+" setkey изменить КЛЮЧ, запирающий ГРОБНИЦУ (требуется старый ключ и пароль)"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#. _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#. > _print " // Backup on paper:"
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#: tomb:583
+msgid " // Backup on paper:"
+msgstr " // Резервная копия на бумаге:"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#. _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#. _print " // Backup on paper:"
+#. > _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#. _print " // Steganography:"
+#: tomb:584
msgid " engrave makes a QR code of a KEY to be saved on paper"
msgstr " engrave создает штрих-код для хранения КЛЮЧА на бумаге "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. [[ $QRENCODE == 1 ]] && {
+#. _print " // Backup on paper:"
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#. > _print " // Steganography:"
+#. _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#: tomb:588
+msgid " // Steganography:"
+msgstr " // Стеганография:"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " // Backup on paper:"
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#. _print " // Steganography:"
+#. > _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. _print "Options:"
+#: tomb:589
+msgid " bury hide a KEY inside a JPEG image (for use with -k)"
+msgstr " bury спрятать КЛЮЧ внутри изображения JPEG (для использования с -k)"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#. _print " // Steganography:"
+#. _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. > _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#: tomb:590
+msgid " exhume extract a KEY from a JPEG image (prints to stdout)"
+msgstr ""
+" exhume извлечь КЛЮЧ из изображения JPEG (выводится в стандартный вывод)"
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. [[ $STEGHIDE == 1 ]] && {
+#. _print " // Steganography:"
+#. _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. > _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#: tomb:593
msgid "Options:"
msgstr "Опции: "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#. > _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#: tomb:595
msgid " -s size of the tomb file when creating/resizing one (in MB)"
msgstr " -s размер файла гробницы при создании/изменении размера (в Мб) "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. > _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#: tomb:596
msgid " -k path to the key to be used ('-k -' to read from stdin)"
msgstr " -k путь к ключу ('-k -' для чтения из стандартного ввода) "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. }
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. > _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#: tomb:597
msgid " -n don't process the hooks found in tomb"
msgstr " -n не обрабатывать привязки, найденные в гробнице "
-#: print
-msgid " -o mount options used to open (default: rw,noatime,nodev)"
-msgstr " -o параметры монтирования при открытии (по умолчанию rw,noatime,nodev) "
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. > _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#: tomb:598
+msgid " -o options passed to local command, e.g.:"
+msgstr ""
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. > _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#: tomb:599
+msgid " - mount options used to open (default: rw,noatime,nodev)"
+msgstr ""
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. > _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#: tomb:600
+msgid " - an alternate cipher to forge and lock"
+msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. > _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#: tomb:601
msgid " -f force operation (i.e. even if swap is active)"
msgstr " -f форсировать операцию (например, даже при активном swap) "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. > _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#. _print "\000"
+#. _print " -h print this help"
+#: tomb:603
msgid " --kdf generate passwords armored against dictionary attacks"
msgstr " --kdf сгенерировать пароли, устойчивые к атакам по словарю "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#. _print "\000"
+#. > _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#: tomb:607
msgid " -h print this help"
msgstr " -h показать эту справку "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#. _print "\000"
+#. _print " -h print this help"
+#. > _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#. _print "For more informations on Tomb read the manual: man tomb"
+#: tomb:608
msgid " -v print version, license and list of available ciphers"
msgstr " -v показать версию, лицензию и доступные шифры "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#. _print "\000"
+#. _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. > _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#. _print "For more informations on Tomb read the manual: man tomb"
+#. _print "Please report bugs on <http://github.com/dyne/tomb/issues>."
+#: tomb:609
msgid " -q run quietly without printing informations"
msgstr " -q выполнение без вывода информации на экран "
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. }
+#.
+#. _print "\000"
+#. _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. > _print " -D print debugging information at runtime"
+#. _print "\000"
+#. _print "For more informations on Tomb read the manual: man tomb"
+#. _print "Please report bugs on <http://github.com/dyne/tomb/issues>."
+#. }
+#: tomb:610
msgid " -D print debugging information at runtime"
msgstr " -D вывести отладочную информацию при запуске"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#. > _print "For more informations on Tomb read the manual: man tomb"
+#. _print "Please report bugs on <http://github.com/dyne/tomb/issues>."
+#. }
+#.
+#.
+#: tomb:612
msgid "For more informations on Tomb read the manual: man tomb"
msgstr "Больше информации по Tomb Вы можете найти в руководстве: man tomb"
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#. _print "For more informations on Tomb read the manual: man tomb"
+#. > _print "Please report bugs on <http://github.com/dyne/tomb/issues>."
+#. }
+#.
+#.
+#. # Check whether a commandline option is set.
+#: tomb:613
msgid "Please report bugs on <http://github.com/dyne/tomb/issues>."
-msgstr "Пожалуйста, сообщайте о найденных ошибках на <http://github.com/dyne/tomb/issues>."
-
-#: failure
+msgstr ""
+"Пожалуйста, сообщайте о найденных ошибках на <http://github.com/dyne/tomb/"
+"issues>."
+
+#. Fold: Commandline interaction
+#. Function: _ensure_dependencies
+#.
+#. Code sample:
+#. # missing, bail out.
+#. _ensure_dependencies() {
+#.
+#. # Check for required programs
+#. for req in cryptsetup pinentry sudo gpg mkfs.ext4 e2fsck; do
+#. command -v $req 1>/dev/null 2>/dev/null || {
+#. > _failure "Missing required dependency ::1 command::. Please install it." $req }
+#. done
+#.
+#. # Ensure system binaries are available in the PATH
+#. path+=(/sbin /usr/sbin) # zsh magic
+#: tomb:748
msgid "Missing required dependency ::1 command::. Please install it."
-msgstr "Отсутствует необходимая зависимость: ::1 command::. Пожалуйста, установите ее."
+msgstr ""
+"Отсутствует необходимая зависимость: ::1 command::. Пожалуйста, установите "
+"ее."
+
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#.
+#. _verbose "is_valid_key"
+#.
+#. [[ -z $key ]] && key=$TOMBKEY
+#. [[ "$key" = "cleartext" ]] && {
+#. { option_is_set --unsafe } || {
+#. > _warning "cleartext key from stdin selected: this is unsafe."
+#. exitv=127 _failure "please use --unsafe if you really want to do this."
+#. }
+#. _warning "received key in cleartext from stdin (unsafe mode)"
+#. return 0 }
+#: tomb:785
+msgid "cleartext key from stdin selected: this is unsafe."
+msgstr "выбран ключ, явно указанный через стандартный ввод: это небезопасно."
+
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. _verbose "is_valid_key"
+#.
+#. [[ -z $key ]] && key=$TOMBKEY
+#. [[ "$key" = "cleartext" ]] && {
+#. { option_is_set --unsafe } || {
+#. _warning "cleartext key from stdin selected: this is unsafe."
+#. > exitv=127 _failure "please use --unsafe if you really want to do this."
+#. }
+#. _warning "received key in cleartext from stdin (unsafe mode)"
+#. return 0 }
+#.
+#: tomb:786
+msgid "please use --unsafe if you really want to do this."
+msgstr "пожалуйчтв, используйте --unsafe, если Вы действительно этого хотите."
+
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. [[ -z $key ]] && key=$TOMBKEY
+#. [[ "$key" = "cleartext" ]] && {
+#. { option_is_set --unsafe } || {
+#. _warning "cleartext key from stdin selected: this is unsafe."
+#. exitv=127 _failure "please use --unsafe if you really want to do this."
+#. }
+#. > _warning "received key in cleartext from stdin (unsafe mode)"
+#. return 0 }
+#.
+#. [[ -z $key ]] && {
+#. _warning "is_valid_key() called without an argument."
+#: tomb:788
+msgid "received key in cleartext from stdin (unsafe mode)"
+msgstr "получен ключ в явном виде через стандартный ввод (небезопасный режим)"
-#: warning
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. exitv=127 _failure "please use --unsafe if you really want to do this."
+#. }
+#. _warning "received key in cleartext from stdin (unsafe mode)"
+#. return 0 }
+#.
+#. [[ -z $key ]] && {
+#. > _warning "is_valid_key() called without an argument."
+#. return 1
+#. }
+#.
+#. # If the key file is an image don't check file header
+#: tomb:792
msgid "is_valid_key() called without an argument."
msgstr "is_valid_key() вызвана без аргумента."
-#: message
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. }
+#.
+#. # If the key file is an image don't check file header
+#. [[ -r $TOMBKEYFILE ]] #. && [[ $(file $TOMBKEYFILE) =~ "JP.G" ]] #. && {
+#. > _message "Key is an image, it might be valid."
+#. return 0 }
+#.
+#. [[ $key =~ "BEGIN PGP" ]] && {
+#. _message "Key is valid."
+#: tomb:800
msgid "Key is an image, it might be valid."
msgstr "Ключ - изображение, может подойти."
-#: message
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. && [[ $(file $TOMBKEYFILE) =~ "JP.G" ]] #. && {
+#. _message "Key is an image, it might be valid."
+#. return 0 }
+#.
+#. [[ $key =~ "BEGIN PGP" ]] && {
+#. > _message "Key is valid."
+#. return 0 }
+#.
+#. return 1
+#. }
+#: tomb:804
msgid "Key is valid."
msgstr "Верный ключ."
-#: warning
+#. Fold: Key operations
+#. Function: _tomb_key_recover recover_key
+#.
+#. Code sample:
+#. }
+#.
+#. # $1 is a string containing an encrypted key
+#. _tomb_key_recover recover_key() {
+#. local key="${1}" # Unique argument is an encrypted key
+#.
+#. > _warning "Attempting key recovery."
+#.
+#. _head="${key[(f)1]}" # take the first line
+#.
+#. TOMBKEY="" # Reset global variable
+#: tomb:814
msgid "Attempting key recovery."
msgstr "Попытка восстановления ключа."
-#: warning
-msgid "The key seems invalid or its format is not known by this version of Tomb."
+#. Fold: Key operations
+#. Function: _load_key
+#.
+#. Code sample:
+#. # Set global variables TOMBKEY and TOMBKEYFILE.
+#. _load_key() {
+#. local keyfile="$1" # Unique argument is an optional keyfile
+#.
+#. [[ -z $keyfile ]] && keyfile=$(option_value -k)
+#. [[ -z $keyfile ]] && {
+#. > _failure "This operation requires a key file to be specified using the -k option." }
+#.
+#. if [[ $keyfile == "-" ]]; then
+#. _verbose "load_key reading from stdin."
+#. _message "Waiting for the key to be piped from stdin... "
+#: tomb:838
+msgid "This operation requires a key file to be specified using the -k option."
+msgstr "Эта операция требует указания файла ключа с помощью опции -k."
+
+#. Fold: Key operations
+#. Function: _load_key
+#.
+#. Code sample:
+#. [[ -z $keyfile ]] && keyfile=$(option_value -k)
+#. [[ -z $keyfile ]] && {
+#. _failure "This operation requires a key file to be specified using the -k option." }
+#.
+#. if [[ $keyfile == "-" ]]; then
+#. _verbose "load_key reading from stdin."
+#. > _message "Waiting for the key to be piped from stdin... "
+#. TOMBKEYFILE=stdin
+#. TOMBKEY=$(cat)
+#. elif [[ $keyfile == "cleartext" ]]; then
+#. _verbose "load_key reading SECRET from stdin"
+#: tomb:842
+msgid "Waiting for the key to be piped from stdin... "
+msgstr "Ожидание передачи ключа через стандартный ввод..."
+
+#. Fold: Key operations
+#. Function: _load_key
+#.
+#. Code sample:
+#. _message "Waiting for the key to be piped from stdin... "
+#. TOMBKEYFILE=cleartext
+#. TOMBKEY=cleartext
+#. TOMBSECRET=$(cat)
+#. else
+#. _verbose "load_key argument: ::1 key file::" $keyfile
+#. > [[ -r $keyfile ]] || _failure "Key not found, specify one using -k."
+#. TOMBKEYFILE=$keyfile
+#. TOMBKEY="${mapfile[$TOMBKEYFILE]}"
+#. fi
+#.
+#: tomb:853
+msgid "Key not found, specify one using -k."
+msgstr "Ключ не найден, укажите его с помощью опции -k."
+
+#. Fold: Key operations
+#. Function: _load_key
+#.
+#. Code sample:
+#. TOMBKEY="${mapfile[$TOMBKEYFILE]}"
+#. fi
+#.
+#. _verbose "load_key: ::1 key::" $TOMBKEYFILE
+#.
+#. is_valid_key $TOMBKEY || {
+#. > _warning "The key seems invalid or its format is not known by this version of Tomb."
+#. _tomb_key_recover $TOMBKEY
+#. }
+#.
+#. # Declared TOMBKEYFILE (path)
+#: tomb:861
+msgid ""
+"The key seems invalid or its format is not known by this version of Tomb."
msgstr "Похоже, ключ неверен, либо его формат неизвестен этой версии Tomb."
-#: failure
+#. Fold: Key operations
+#. Function: get_lukskey
+#.
+#. Code sample:
+#. _verbose "KDF salt: $kdf_salt"
+#. _verbose "KDF ic: $kdf_ic"
+#. _verbose "KDF len: $kdf_len"
+#. _password=$(tomb-kdb-pbkdf2 $kdf_salt $kdf_ic $kdf_len 2>/dev/null <<<$_password)
+#. ;;
+#. *)
+#. > _failure "No suitable program for KDF ::1 program::." $pbkdf_hash
+#. unset _password
+#. return 1
+#. ;;
+#. esac
+#: tomb:936
msgid "No suitable program for KDF ::1 program::."
msgstr "Нет подходящей программы для KDF ::1 program::."
-#: failure
+#. Fold: Key operations
+#. Function: ask_key_password
+#.
+#. Code sample:
+#.
+#. # This function asks the user for the password to use the key it tests
+#. # it against the return code of gpg on success returns 0 and saves
+#. # the password in the global variable $TOMBPASSWORD
+#. ask_key_password() {
+#. [[ -z "$TOMBKEYFILE" ]] && {
+#. > _failure "Internal error: ask_key_password() called before _load_key()." }
+#.
+#. [[ "$TOMBKEYFILE" = "cleartext" ]] && {
+#. _verbose "no password needed, using secret bytes from stdin"
+#. return 0 }
+#: tomb:962
msgid "Internal error: ask_key_password() called before _load_key()."
msgstr "Внутренняя ошибка: ask_key_password() вызвана перед _load_key()."
-#: message
+#. Fold: Key operations
+#. Function: ask_key_password
+#.
+#. Code sample:
+#. _failure "Internal error: ask_key_password() called before _load_key()." }
+#.
+#. [[ "$TOMBKEYFILE" = "cleartext" ]] && {
+#. _verbose "no password needed, using secret bytes from stdin"
+#. return 0 }
+#.
+#. > _message "A password is required to use key ::1 key::" $TOMBKEYFILE
+#. passok=0
+#. tombpass=""
+#. if [[ "$1" = "" ]]; then
+#.
+#: tomb:968
msgid "A password is required to use key ::1 key::"
msgstr "Для использования ключа ::1 key:: требуется пароль"
-#: message
+#. Fold: Key operations
+#. Function: ask_key_password
+#.
+#. Code sample:
+#. if [[ $c == 1 ]]; then
+#. tombpass=$(ask_password "Insert password to: $TOMBKEYFILE")
+#. else
+#. tombpass=$(ask_password "Insert password to: $TOMBKEYFILE (attempt $c)")
+#. fi
+#. [[ $? = 0 ]] || {
+#. > _warning "User aborted password dialog."
+#. return 1
+#. }
+#.
+#. get_lukskey "$tombpass"
+#: tomb:980
+msgid "User aborted password dialog."
+msgstr "Пользователь отменил диалог пароля."
+
+#. Fold: Key operations
+#. Function: ask_key_password
+#.
+#. Code sample:
+#. return 1
+#. }
+#.
+#. get_lukskey "$tombpass"
+#.
+#. [[ $? = 0 ]] && {
+#. > passok=1; _message "Password OK."
+#. break;
+#. }
+#. done
+#.
+#: tomb:987
+msgid "Password OK."
+msgstr "Верный пароль."
+
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#. change_passwd() {
+#. local tmpnewkey lukskey c tombpass tombpasstmp
+#.
+#. _check_swap # Ensure swap is secure, if any
+#. _load_key # Try loading key from option -k and set TOMBKEYFILE
+#.
+#. > _message "Commanded to change password for tomb key ::1 key::" $TOMBKEYFILE
+#.
+#. _tmp_create
+#. tmpnewkey=$TOMBTMP
+#.
+#: tomb:1025
msgid "Commanded to change password for tomb key ::1 key::"
msgstr "Приказано изменить пароль для ключа ::1 key::"
-#: failure
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#. local tomboldpwd="`option_value --tomb-old-pwd`"
+#. _verbose "tomb-old-pwd = ::1 old pass::" $tomboldpwd
+#. ask_key_password "$tomboldpwd"
+#. else
+#. ask_key_password
+#. fi
+#. > [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. _success "Changing password for ::1 key file::" $TOMBKEYFILE
+#.
+#. # Here $TOMBSECRET contains the key material in clear
+#: tomb:1037
msgid "No valid password supplied."
msgstr "Не предоставлен верный пароль."
-#: message
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#. ask_key_password "$tomboldpwd"
+#. else
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. > _success "Changing password for ::1 key file::" $TOMBKEYFILE
+#.
+#. # Here $TOMBSECRET contains the key material in clear
+#.
+#. { option_is_set --tomb-pwd } && {
+#: tomb:1039
+msgid "Changing password for ::1 key file::"
+msgstr "Меняю пароль для ::1 key file::"
+
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#. gen_key "$tombpwd" >> "$tmpnewkey"
+#. } || {
+#. gen_key >> "$tmpnewkey"
+#. }
+#.
+#. { is_valid_key "${mapfile[$tmpnewkey]}" } || {
+#. > _failure "Error: the newly generated keyfile does not seem valid." }
+#.
+#. # Copy the new key as the original keyfile name
+#. cp -f "${tmpnewkey}" $TOMBKEYFILE
+#. _success "Your passphrase was successfully updated."
+#: tomb:1052
+msgid "Error: the newly generated keyfile does not seem valid."
+msgstr "Ошибка: сгенерированный файл ключа неверен."
+
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#.
+#. { is_valid_key "${mapfile[$tmpnewkey]}" } || {
+#. _failure "Error: the newly generated keyfile does not seem valid." }
+#.
+#. # Copy the new key as the original keyfile name
+#. cp -f "${tmpnewkey}" $TOMBKEYFILE
+#. > _success "Your passphrase was successfully updated."
+#.
+#. return 0
+#. }
+#.
+#: tomb:1056
+msgid "Your passphrase was successfully updated."
+msgstr "Ваш пароль успешно обновлен."
+
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#.
+#. if [ "$1" = "" ]; then
+#. while true; do
+#. # 3 tries to write two times a matching password
+#. tombpass=`ask_password "Type the new password to secure your key"`
+#. if [[ $? != 0 ]]; then
+#. > _failure "User aborted."
+#. fi
+#. if [ -z $tombpass ]; then
+#. _failure "You set empty password, which is not possible."
+#. fi
+#: tomb:1078
+msgid "User aborted."
+msgstr "Отменено пользователем."
+
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. # 3 tries to write two times a matching password
+#. tombpass=`ask_password "Type the new password to secure your key"`
+#. if [[ $? != 0 ]]; then
+#. _failure "User aborted."
+#. fi
+#. if [ -z $tombpass ]; then
+#. > _failure "You set empty password, which is not possible."
+#. fi
+#. tombpasstmp=$tombpass
+#. tombpass=`ask_password "Type the new password to secure your key (again)"`
+#. if [[ $? != 0 ]]; then
+#: tomb:1081
+msgid "You set empty password, which is not possible."
+msgstr "Вы указали пустой пароль, так нельзя."
+
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. # see: https://github.com/dyne/Tomb/issues/82
+#. itertime="`option_value --kdf`"
+#. # removing support of floating points because they can't be type checked well
+#. if [[ "$itertime" != <-> ]]; then
+#. unset tombpass
+#. unset tombpasstmp
+#. > _failure "Wrong argument for --kdf: must be an integer number (iteration seconds)."
+#. fi
+#. # --kdf takes one parameter: iter time (on present machine) in seconds
+#. local -i microseconds
+#. microseconds=$(( itertime * 10000 ))
+#: tomb:1109
+msgid ""
+"Wrong argument for --kdf: must be an integer number (iteration seconds)."
+msgstr ""
+"Неверный аргумент для --kdf: должно быть указано целое число (секунд "
+"итерации)."
+
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. unset tombpasstmp
+#. _failure "Wrong argument for --kdf: must be an integer number (iteration seconds)."
+#. fi
+#. # --kdf takes one parameter: iter time (on present machine) in seconds
+#. local -i microseconds
+#. microseconds=$(( itertime * 10000 ))
+#. > _success "Using KDF, iterations: ::1 microseconds::" $microseconds
+#. _message "generating salt"
+#. pbkdf2_salt=`tomb-kdb-pbkdf2-gensalt`
+#. _message "calculating iterations"
+#. pbkdf2_iter=`tomb-kdb-pbkdf2-getiter $microseconds`
+#: tomb:1114
+msgid "Using KDF, iterations: ::1 microseconds::"
+msgstr "Использую KDF, итераций: ::1 microseconds::"
+
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. _failure "Wrong argument for --kdf: must be an integer number (iteration seconds)."
+#. fi
+#. # --kdf takes one parameter: iter time (on present machine) in seconds
+#. local -i microseconds
+#. microseconds=$(( itertime * 10000 ))
+#. _success "Using KDF, iterations: ::1 microseconds::" $microseconds
+#. > _message "generating salt"
+#. pbkdf2_salt=`tomb-kdb-pbkdf2-gensalt`
+#. _message "calculating iterations"
+#. pbkdf2_iter=`tomb-kdb-pbkdf2-getiter $microseconds`
+#. _message "encoding the password"
+#: tomb:1115
msgid "generating salt"
msgstr "генерирую соль"
-#: message
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. # --kdf takes one parameter: iter time (on present machine) in seconds
+#. local -i microseconds
+#. microseconds=$(( itertime * 10000 ))
+#. _success "Using KDF, iterations: ::1 microseconds::" $microseconds
+#. _message "generating salt"
+#. pbkdf2_salt=`tomb-kdb-pbkdf2-gensalt`
+#. > _message "calculating iterations"
+#. pbkdf2_iter=`tomb-kdb-pbkdf2-getiter $microseconds`
+#. _message "encoding the password"
+#. # We use a length of 64bytes = 512bits (more than needed!?)
+#. tombpass=`tomb-kdb-pbkdf2 $pbkdf2_salt $pbkdf2_iter 64 <<<"${tombpass}"`
+#: tomb:1117
msgid "calculating iterations"
msgstr "вычисляю итерации"
-#: message
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. microseconds=$(( itertime * 10000 ))
+#. _success "Using KDF, iterations: ::1 microseconds::" $microseconds
+#. _message "generating salt"
+#. pbkdf2_salt=`tomb-kdb-pbkdf2-gensalt`
+#. _message "calculating iterations"
+#. pbkdf2_iter=`tomb-kdb-pbkdf2-getiter $microseconds`
+#. > _message "encoding the password"
+#. # We use a length of 64bytes = 512bits (more than needed!?)
+#. tombpass=`tomb-kdb-pbkdf2 $pbkdf2_salt $pbkdf2_iter 64 <<<"${tombpass}"`
+#.
+#. header="_KDF_pbkdf2sha1_${pbkdf2_salt}_${pbkdf2_iter}_64\n"
+#: tomb:1119
msgid "encoding the password"
msgstr "кодирую пароль"
-#: warning
+#. Fold: Key operations
+#. Function: list_gnupg_ciphers
+#.
+#. Code sample:
+#. unset tombpasstmp
+#. }
+#.
+#. # prints an array of ciphers available in gnupg (to encrypt keys)
+#. list_gnupg_ciphers() {
+#. # prints an error if GnuPG is not found
+#. > which gpg 2>/dev/null || _failure "gpg (GnuPG) is not found, Tomb cannot function without it."
+#.
+#. ciphers=(`gpg --version | awk '
+#. BEGIN { ciphers=0 }
+#. /^Cipher:/ { gsub(/,/,""); sub(/^Cipher:/,""); print; ciphers=1; next }
+#: tomb:1150
+msgid "gpg (GnuPG) is not found, Tomb cannot function without it."
+msgstr "gpg (GnuPG) не найден, Tomb не может работать без него."
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#.
+#. _load_key # Try loading key from option -k and set TOMBKEY
+#.
+#. imagefile=$PARAM
+#.
+#. [[ "`file $imagefile`" =~ "JPEG" ]] || {
+#. > _warning "Encode failed: ::1 image file:: is not a jpeg image." $imagefile
+#. return 1
+#. }
+#.
+#. _success "Encoding key ::1 tomb key:: inside image ::2 image file::" $TOMBKEY $imagefile
+#: tomb:1171
msgid "Encode failed: ::1 image file:: is not a jpeg image."
msgstr "Шифрование не удалось: ::1 image file:: не jpeg-изображение."
-#: failure
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#.
+#. [[ "`file $imagefile`" =~ "JPEG" ]] || {
+#. _warning "Encode failed: ::1 image file:: is not a jpeg image." $imagefile
+#. return 1
+#. }
+#.
+#. > _success "Encoding key ::1 tomb key:: inside image ::2 image file::" $TOMBKEY $imagefile
+#. _message "Please confirm the key password for the encoding"
+#. # We ask the password and test if it is the same encoding the
+#. # base key, to insure that the same password is used for the
+#. # encryption and the steganography. This is a standard enforced
+#: tomb:1175
+msgid "Encoding key ::1 tomb key:: inside image ::2 image file::"
+msgstr "Кодирую ключ ::1 tomb key:: в изображение ::2 image file::"
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. [[ "`file $imagefile`" =~ "JPEG" ]] || {
+#. _warning "Encode failed: ::1 image file:: is not a jpeg image." $imagefile
+#. return 1
+#. }
+#.
+#. _success "Encoding key ::1 tomb key:: inside image ::2 image file::" $TOMBKEY $imagefile
+#. > _message "Please confirm the key password for the encoding"
+#. # We ask the password and test if it is the same encoding the
+#. # base key, to insure that the same password is used for the
+#. # encryption and the steganography. This is a standard enforced
+#. # by Tomb, but its not strictly necessary (and having different
+#: tomb:1176
+msgid "Please confirm the key password for the encoding"
+msgstr "Пожалуйста, подтвердите пароль ключа для шифрования"
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tombpwd
+#. ask_key_password "$tombpwd"
+#. } || {
+#. ask_key_password
+#. }
+#. [[ $? != 0 ]] && {
+#. > _warning "Wrong password supplied."
+#. _failure "You shall not bury a key whose password is unknown to you." }
+#.
+#. # We omit armor strings since having them as constants can give
+#. # ground to effective attacks on steganography
+#: tomb:1192
+msgid "Wrong password supplied."
+msgstr "Указан неверный пароль."
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. ask_key_password "$tombpwd"
+#. } || {
+#. ask_key_password
+#. }
+#. [[ $? != 0 ]] && {
+#. _warning "Wrong password supplied."
+#. > _failure "You shall not bury a key whose password is unknown to you." }
+#.
+#. # We omit armor strings since having them as constants can give
+#. # ground to effective attacks on steganography
+#. print - "$TOMBKEY" | awk '
+#: tomb:1193
+msgid "You shall not bury a key whose password is unknown to you."
+msgstr "Вам не захоронить ключ, чей пароль не известен Вам."
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. /^-----/ {next}
+#. /^Version/ {next}
+#. {print $0}' #. | steghide embed --embedfile - --coverfile ${imagefile} #. -p $TOMBPASSWORD -z 9 -e serpent cbc
+#. if [ $? != 0 ]; then
+#. > _warning "Encoding error: steghide reports problems."
+#. res=1
+#. else
+#. _success "Tomb key encoded succesfully into image ::1 image file::" $imagefile
+#. res=0
+#: tomb:1204
+msgid "Encoding error: steghide reports problems."
+msgstr "Ошибка шифрования: steghide сообщает о проблемах."
+
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. | steghide embed --embedfile - --coverfile ${imagefile} #. -p $TOMBPASSWORD -z 9 -e serpent cbc
+#. if [ $? != 0 ]; then
+#. _warning "Encoding error: steghide reports problems."
+#. res=1
+#. else
+#. > _success "Tomb key encoded succesfully into image ::1 image file::" $imagefile
+#. res=0
+#. fi
+#.
+#. return $res
+#: tomb:1207
+msgid "Tomb key encoded succesfully into image ::1 image file::"
+msgstr "Ключ от гробницы успешно закодирован в изображение ::1 image file::"
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#.
+#. # mandatory 1st arg: the image file where key is supposed to be
+#. # optional 2nd arg: the password to use (same as key, internal use)
+#. # optional 3rd arg: the key where to save the result (- for stdout)
+#. exhume_key() {
+#. [[ "$1" = "" ]] && {
+#. > _failure "Exhume failed, no image specified" }
+#.
+#. local imagefile="$1" # The image file where to look for the key
+#. local tombpass="$2" # (Optional) the password to use (internal use)
+#. local destkey="$3" # (Optional) the key file where to save the
+#: tomb:1219
+msgid "Exhume failed, no image specified"
+msgstr "Эксгумация не удалась, не указано изображения"
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. local destkey="$3" # (Optional) the key file where to save the
+#. # result (- for stdout)
+#. local r=1 # Return code (default: fail)
+#.
+#. # Ensure the image file is a readable JPEG
+#. [[ ! -r $imagefile ]] && {
+#. > _failure "Exhume failed, image file not found: ::1 image file::" "${imagefile:-none}" }
+#. [[ ! $(file "$imagefile") =~ "JP.G" ]] && {
+#. _failure "Exhume failed: ::1 image file:: is not a jpeg image." $imagefile }
+#.
+#. # When a password is passed as argument then always print out
+#: tomb:1229
msgid "Exhume failed, image file not found: ::1 image file::"
msgstr "Эксгумация неудачна, файл изображения не найден: ::1 image file::"
-#: failure
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. local r=1 # Return code (default: fail)
+#.
+#. # Ensure the image file is a readable JPEG
+#. [[ ! -r $imagefile ]] && {
+#. _failure "Exhume failed, image file not found: ::1 image file::" "${imagefile:-none}" }
+#. [[ ! $(file "$imagefile") =~ "JP.G" ]] && {
+#. > _failure "Exhume failed: ::1 image file:: is not a jpeg image." $imagefile }
+#.
+#. # When a password is passed as argument then always print out
+#. # the exhumed key on stdout without further checks (internal use)
+#. [[ -n "$tombpass" ]] && {
+#: tomb:1231
msgid "Exhume failed: ::1 image file:: is not a jpeg image."
msgstr "Эксгумация не удалась: ::1 image file:: не jpeg изображение."
-#: failure
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#.
+#. # When a password is passed as argument then always print out
+#. # the exhumed key on stdout without further checks (internal use)
+#. [[ -n "$tombpass" ]] && {
+#. TOMBKEY=$(steghide extract -sf $imagefile -p $tombpass -xf -)
+#. [[ $? != 0 ]] && {
+#. > _failure "Wrong password or no steganographic key found" }
+#.
+#. recover_key $TOMBKEY
+#.
+#. return 0
+#: tomb:1238
msgid "Wrong password or no steganographic key found"
msgstr "Неверный пароль или не найден стеганографический ключ"
-#: message
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. }
+#.
+#. # Ensure we have a valid destination for the key
+#. [[ -z $destkey ]] && { option_is_set -k } && destkey=$(option_value -k)
+#. [[ -z $destkey ]] && {
+#. destkey="-" # No key was specified: fallback to stdout
+#. > _message "printing exhumed key on stdout" }
+#.
+#. # Bail out if destination exists, unless -f (force) was passed
+#. [[ $destkey != "-" && -s $destkey ]] && {
+#. _warning "File exists: ::1 tomb key::" $destkey
+#: tomb:1249
msgid "printing exhumed key on stdout"
msgstr "вывод эксгумированного ключа в стандарный вывод"
-#: warning
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. [[ -z $destkey ]] && {
+#. destkey="-" # No key was specified: fallback to stdout
+#. _message "printing exhumed key on stdout" }
+#.
+#. # Bail out if destination exists, unless -f (force) was passed
+#. [[ $destkey != "-" && -s $destkey ]] && {
+#. > _warning "File exists: ::1 tomb key::" $destkey
+#. { option_is_set -f } && {
+#. _warning "Use of --force selected: overwriting."
+#. rm -f $destkey
+#. } || {
+#: tomb:1253
msgid "File exists: ::1 tomb key::"
msgstr "Файл существует: ::1 tomb key::"
-#: failure
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. _message "printing exhumed key on stdout" }
+#.
+#. # Bail out if destination exists, unless -f (force) was passed
+#. [[ $destkey != "-" && -s $destkey ]] && {
+#. _warning "File exists: ::1 tomb key::" $destkey
+#. { option_is_set -f } && {
+#. > _warning "Use of --force selected: overwriting."
+#. rm -f $destkey
+#. } || {
+#. _warning "Make explicit use of --force to overwrite."
+#. _failure "Refusing to overwrite file. Operation aborted." }
+#: tomb:1255
+msgid "Use of --force selected: overwriting."
+msgstr "Указана опция --force: перезаписываю."
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. [[ $destkey != "-" && -s $destkey ]] && {
+#. _warning "File exists: ::1 tomb key::" $destkey
+#. { option_is_set -f } && {
+#. _warning "Use of --force selected: overwriting."
+#. rm -f $destkey
+#. } || {
+#. > _warning "Make explicit use of --force to overwrite."
+#. _failure "Refusing to overwrite file. Operation aborted." }
+#. }
+#.
+#. _message "Trying to exhume a key out of image ::1 image file::" $imagefile
+#: tomb:1258
+msgid "Make explicit use of --force to overwrite."
+msgstr "Явно укажите опцию --force для перезаписи."
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. _warning "File exists: ::1 tomb key::" $destkey
+#. { option_is_set -f } && {
+#. _warning "Use of --force selected: overwriting."
+#. rm -f $destkey
+#. } || {
+#. _warning "Make explicit use of --force to overwrite."
+#. > _failure "Refusing to overwrite file. Operation aborted." }
+#. }
+#.
+#. _message "Trying to exhume a key out of image ::1 image file::" $imagefile
+#. { option_is_set --tomb-pwd } && {
+#: tomb:1259
msgid "Refusing to overwrite file. Operation aborted."
msgstr "Отказываюсь перезаписывать файл. Операция отменена."
-#: message
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. rm -f $destkey
+#. } || {
+#. _warning "Make explicit use of --force to overwrite."
+#. _failure "Refusing to overwrite file. Operation aborted." }
+#. }
+#.
+#. > _message "Trying to exhume a key out of image ::1 image file::" $imagefile
+#. { option_is_set --tomb-pwd } && {
+#. tombpass=$(option_value --tomb-pwd)
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tombpass
+#. } || {
+#: tomb:1262
msgid "Trying to exhume a key out of image ::1 image file::"
msgstr "Пытаюсь эксгумировать ключ из изображения ::1 image file::"
-#: warning
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. steghide extract -sf $imagefile -p ${tombpass} -xf $destkey
+#. r=$?
+#.
+#. # Report to the user
+#. [[ "$destkey" = "-" ]] && destkey="stdout"
+#. [[ $r == 0 ]] && {
+#. > _success "Key succesfully exhumed to ::1 key::." $destkey
+#. } || {
+#. _warning "Nothing found in ::1 image file::" $imagefile
+#. }
+#.
+#: tomb:1283
+msgid "Key succesfully exhumed to ::1 key::."
+msgstr "Ключ успешно эксгумирован в ::1 key::"
+
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#.
+#. # Report to the user
+#. [[ "$destkey" = "-" ]] && destkey="stdout"
+#. [[ $r == 0 ]] && {
+#. _success "Key succesfully exhumed to ::1 key::." $destkey
+#. } || {
+#. > _warning "Nothing found in ::1 image file::" $imagefile
+#. }
+#.
+#. return $r
+#. }
+#: tomb:1285
msgid "Nothing found in ::1 image file::"
msgstr "В ::1 image file:: ничего не найдено"
-#: failure
+#. Fold: Key operations
+#. Function: engrave_key
+#.
+#. Code sample:
+#.
+#. _load_key # Try loading key from option -k and set TOMBKEYFILE
+#.
+#. local keyname=$(basename $TOMBKEYFILE)
+#. local pngname="$keyname.qr.png"
+#.
+#. > _success "Rendering a printable QRCode for key: ::1 tomb key file::" $TOMBKEYFILE
+#. # we omit armor strings to save space
+#. awk '/^-----/ {next}; /^Version/ {next}; {print $0}' $TOMBKEYFILE #. | qrencode --size 4 --level H --casesensitive -o $pngname
+#. [[ $? != 0 ]] && {
+#: tomb:1300
+msgid "Rendering a printable QRCode for key: ::1 tomb key file::"
+msgstr "Рендерю готовый для печати штрих-код для ключа: ::1 tomb key file::"
+
+#. Fold: Key operations
+#. Function: engrave_key
+#.
+#. Code sample:
+#.
+#. _success "Rendering a printable QRCode for key: ::1 tomb key file::" $TOMBKEYFILE
+#. # we omit armor strings to save space
+#. awk '/^-----/ {next}; /^Version/ {next}; {print $0}' $TOMBKEYFILE #. | qrencode --size 4 --level H --casesensitive -o $pngname
+#. [[ $? != 0 ]] && {
+#. > _failure "QREncode reported an error." }
+#.
+#. _success "Operation successful:"
+#. # TODO: only if verbose and/or not silent
+#. ls -lh $pngname
+#: tomb:1305
msgid "QREncode reported an error."
msgstr "QREncode сообщил об ошибке."
-#: message
+#. Fold: Key operations
+#. Function: engrave_key
+#.
+#. Code sample:
+#. # we omit armor strings to save space
+#. awk '/^-----/ {next}; /^Version/ {next}; {print $0}' $TOMBKEYFILE #. | qrencode --size 4 --level H --casesensitive -o $pngname
+#. [[ $? != 0 ]] && {
+#. _failure "QREncode reported an error." }
+#.
+#. > _success "Operation successful:"
+#. # TODO: only if verbose and/or not silent
+#. ls -lh $pngname
+#. file $pngname
+#. }
+#: tomb:1307
+msgid "Operation successful:"
+msgstr "Операция успешна."
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#.
+#. dig_tomb() {
+#. local tombpath="$1" # Path to tomb
+#. # Require the specification of the size of the tomb (-s) in MB
+#. local -i tombsize=$(option_value -s)
+#.
+#. > _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#: tomb:1340
msgid "Commanded to dig tomb ::1 tomb path::"
msgstr "Приказано выкопать гробницу ::1 tomb path::"
-#: failure
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. local tombpath="$1" # Path to tomb
+#. # Require the specification of the size of the tomb (-s) in MB
+#. local -i tombsize=$(option_value -s)
+#.
+#. _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. > [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#: tomb:1342
msgid "Missing path to tomb"
msgstr "Отсутствует путь к гробнице"
-#: failure
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. # Require the specification of the size of the tomb (-s) in MB
+#. local -i tombsize=$(option_value -s)
+#.
+#. _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. > [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#. _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#: tomb:1343
+msgid "Size argument missing, use -s"
+msgstr "Отсутствует размер, укажите его с помощью -s"
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. local -i tombsize=$(option_value -s)
+#.
+#. _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. > [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#. _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#: tomb:1344
msgid "Size must be an integer (megabytes)"
msgstr "Размер должен быть целым числом (в мегабатах)"
-#: failure
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#.
+#. _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. > [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#. _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. [[ -e $TOMBPATH ]] && {
+#: tomb:1345
msgid "Tombs can't be smaller than 10 megabytes"
msgstr "Гробницы не могут быть меньше 10 мегабайт"
-#: message
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#. _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. [[ -e $TOMBPATH ]] && {
+#. > _warning "A tomb exists already. I'm not digging here:"
+#. ls -lh $TOMBPATH
+#. return 1
+#. }
+#.
+#: tomb:1350
+msgid "A tomb exists already. I'm not digging here:"
+msgstr "Гробница существует. Я не буду копать здесь:"
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. [[ -e $TOMBPATH ]] && {
+#. _warning "A tomb exists already. I'm not digging here:"
+#. ls -lh $TOMBPATH
+#. return 1
+#. }
+#.
+#. > _success "Creating a new tomb in ::1 tomb path::" $TOMBPATH
+#.
+#. _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $tombsize
+#.
+#. # Ensure that file permissions are safe even if interrupted
+#: tomb:1355
+msgid "Creating a new tomb in ::1 tomb path::"
+msgstr "Создаю новую гробницу в ::1 tomb path::"
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. ls -lh $TOMBPATH
+#. return 1
+#. }
+#.
+#. _success "Creating a new tomb in ::1 tomb path::" $TOMBPATH
+#.
+#. > _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $tombsize
+#.
+#. # Ensure that file permissions are safe even if interrupted
+#. touch $TOMBPATH
+#. [[ $? = 0 ]] || {
+#: tomb:1357
msgid "Generating ::1 tomb file:: of ::2 size::MiB"
msgstr "Генерирую ::1 tomb file:: размером ::2 size::Мб"
-#: warning
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#.
+#. _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $tombsize
+#.
+#. # Ensure that file permissions are safe even if interrupted
+#. touch $TOMBPATH
+#. [[ $? = 0 ]] || {
+#. > _warning "Error creating the tomb ::1 tomb path::" $TOMBPATH
+#. _failure "Operation aborted."
+#. }
+#. chmod 0600 $TOMBPATH
+#.
+#: tomb:1362
msgid "Error creating the tomb ::1 tomb path::"
msgstr "Ошибка при создании гробницы ::1 tomb path::"
-#: message
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. ls -lh $TOMBPATH
+#. } || {
+#. _warning "Error creating the tomb ::1 tomb path::" $TOMBPATH
+#. _failure "Operation aborted."
+#. }
+#.
+#. > _success "Done digging ::1 tomb name::" $TOMBNAME
+#. _message "Your tomb is not yet ready, you need to forge a key and lock it:"
+#. _message "tomb forge ::1 tomb path::.key" $TOMBPATH
+#. _message "tomb lock ::1 tomb path:: -k ::1 tomb path::.key" $TOMBPATH
+#.
+#: tomb:1377
+msgid "Done digging ::1 tomb name::"
+msgstr "::1 tomb name:: выкопана"
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. } || {
+#. _warning "Error creating the tomb ::1 tomb path::" $TOMBPATH
+#. _failure "Operation aborted."
+#. }
+#.
+#. _success "Done digging ::1 tomb name::" $TOMBNAME
+#. > _message "Your tomb is not yet ready, you need to forge a key and lock it:"
+#. _message "tomb forge ::1 tomb path::.key" $TOMBPATH
+#. _message "tomb lock ::1 tomb path:: -k ::1 tomb path::.key" $TOMBPATH
+#.
+#. return 0
+#: tomb:1378
+msgid "Your tomb is not yet ready, you need to forge a key and lock it:"
+msgstr "Ваша гробница пока не готова, необходимо выковать ключ и запереть ее:"
+
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. _warning "Error creating the tomb ::1 tomb path::" $TOMBPATH
+#. _failure "Operation aborted."
+#. }
+#.
+#. _success "Done digging ::1 tomb name::" $TOMBNAME
+#. _message "Your tomb is not yet ready, you need to forge a key and lock it:"
+#. > _message "tomb forge ::1 tomb path::.key" $TOMBPATH
+#. _message "tomb lock ::1 tomb path:: -k ::1 tomb path::.key" $TOMBPATH
+#.
+#. return 0
+#. }
+#: tomb:1379
msgid "tomb forge ::1 tomb path::.key"
msgstr "tomb forge ::1 tomb path::.key"
-#: message
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. _failure "Operation aborted."
+#. }
+#.
+#. _success "Done digging ::1 tomb name::" $TOMBNAME
+#. _message "Your tomb is not yet ready, you need to forge a key and lock it:"
+#. _message "tomb forge ::1 tomb path::.key" $TOMBPATH
+#. > _message "tomb lock ::1 tomb path:: -k ::1 tomb path::.key" $TOMBPATH
+#.
+#. return 0
+#. }
+#.
+#: tomb:1380
msgid "tomb lock ::1 tomb path:: -k ::1 tomb path::.key"
msgstr "tomb lock ::1 tomb path:: -k ::1 tomb path::.key"
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. local destkey="$1"
+#. { option_is_set -k } && { destkey=$(option_value -k) }
+#.
+#. local algo="AES256" # Default encryption algorithm
+#.
+#. [[ -z "$destkey" ]] && {
+#. > _failure "A filename needs to be specified using -k to forge a new key." }
+#.
+#. _message "Commanded to forge key ::1 key::" $destkey
+#.
+#. _check_swap # Ensure the available memory is safe to use
+#: tomb:1401
+msgid "A filename needs to be specified using -k to forge a new key."
+msgstr ""
+"Необходимо указать имя файла через опцию -k, чтобы выковать новый ключ."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#.
+#. local algo="AES256" # Default encryption algorithm
+#.
+#. [[ -z "$destkey" ]] && {
+#. _failure "A filename needs to be specified using -k to forge a new key." }
+#.
+#. > _message "Commanded to forge key ::1 key::" $destkey
+#.
+#. _check_swap # Ensure the available memory is safe to use
+#.
+#. # Ensure GnuPG won't exit with an error before first run
+#: tomb:1403
msgid "Commanded to forge key ::1 key::"
msgstr "Приказано выковать ключ ::1 key::"
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. mkdir -m 0700 $HOME/.gnupg
+#. touch $HOME/.gnupg/pubring.gpg }
+#.
+#. # Do not overwrite any files accidentally
+#. [[ -r "$destkey" ]] && {
+#. ls -lh $destkey
+#. > _failure "Forging this key would overwrite an existing file. Operation aborted." }
+#.
+#. touch $destkey
+#. [[ $? == 0 ]] || {
+#. _warning "Cannot generate encryption key."
+#: tomb:1415
+msgid "Forging this key would overwrite an existing file. Operation aborted."
+msgstr "Выковка этого ключа перезапишет существующий файл. Операция отменена."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. [[ -r "$destkey" ]] && {
+#. ls -lh $destkey
+#. _failure "Forging this key would overwrite an existing file. Operation aborted." }
+#.
+#. touch $destkey
+#. [[ $? == 0 ]] || {
+#. > _warning "Cannot generate encryption key."
+#. _failure "Operation aborted." }
+#. chmod 0600 $destkey
+#.
+#. # Update algorithm if it was passed on the command line with -o
+#: tomb:1419
+msgid "Cannot generate encryption key."
+msgstr "Не могу сгенерировать ключ шифрования."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. chmod 0600 $destkey
+#.
+#. # Update algorithm if it was passed on the command line with -o
+#. { option_is_set -o } && algopt="$(option_value -o)"
+#. [[ -n "$algopt" ]] && algo=$algopt
+#.
+#. > _message "Commanded to forge key ::1 key:: with cipher algorithm ::2 algorithm::" #. $destkey $algo
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#: tomb:1427
msgid "Commanded to forge key ::1 key:: with cipher algorithm ::2 algorithm::"
-msgstr "Приказано выковать ключ ::1 key:: с алгоритмом шифрования ::2 algorithm::"
+msgstr ""
+"Приказано выковать ключ ::1 key:: с алгоритмом шифрования ::2 algorithm::"
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#.
+#. _message "Commanded to forge key ::1 key:: with cipher algorithm ::2 algorithm::" #. $destkey $algo
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#. > _message "This operation takes time, keep using this computer on other tasks,"
+#. _message "once done you will be asked to choose a password for your tomb."
+#. _message "To make it faster you can move the mouse around."
+#. _message "If you are on a server, you can use an Entropy Generation Daemon."
+#.
+#: tomb:1432
+msgid "This operation takes time, keep using this computer on other tasks,"
+msgstr "Эта операция займет некоторое время, выполняйте пока другие задачи,"
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. _message "Commanded to forge key ::1 key:: with cipher algorithm ::2 algorithm::" #. $destkey $algo
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#. _message "This operation takes time, keep using this computer on other tasks,"
+#. > _message "once done you will be asked to choose a password for your tomb."
+#. _message "To make it faster you can move the mouse around."
+#. _message "If you are on a server, you can use an Entropy Generation Daemon."
+#.
+#. # Use /dev/random as the entropy source, unless --use-random is specified
+#: tomb:1433
+msgid "once done you will be asked to choose a password for your tomb."
+msgstr "по завершении Вас вопросят ввести пароль для гробницы."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. $destkey $algo
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#. _message "This operation takes time, keep using this computer on other tasks,"
+#. _message "once done you will be asked to choose a password for your tomb."
+#. > _message "To make it faster you can move the mouse around."
+#. _message "If you are on a server, you can use an Entropy Generation Daemon."
+#.
+#. # Use /dev/random as the entropy source, unless --use-random is specified
+#. local random_source=/dev/random
+#: tomb:1434
+msgid "To make it faster you can move the mouse around."
+msgstr "Чтобы ускорить операцию, подвигайте мышку."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#. _message "This operation takes time, keep using this computer on other tasks,"
+#. _message "once done you will be asked to choose a password for your tomb."
+#. _message "To make it faster you can move the mouse around."
+#. > _message "If you are on a server, you can use an Entropy Generation Daemon."
+#.
+#. # Use /dev/random as the entropy source, unless --use-random is specified
+#. local random_source=/dev/random
+#. { option_is_set --use-urandom } && random_source=/dev/urandom
+#: tomb:1435
+msgid "If you are on a server, you can use an Entropy Generation Daemon."
+msgstr "Если Вы на сервере, можно использовать демон генерации энтропии."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. [[ $? == 0 ]] || {
+#. _warning "Cannot generate encryption key."
+#. _failure "Operation aborted." }
+#.
+#. # Here the global variable TOMBSECRET contains the naked secret
+#.
+#. > _success "Choose the password of your key: ::1 tomb key::" $TOMBKEYFILE
+#. _message "(You can also change it later using 'tomb passwd'.)"
+#. # _user_file $TOMBKEYFILE
+#.
+#. tombname="$TOMBKEYFILE" # XXX ???
+#: tomb:1449
+msgid "Choose the password of your key: ::1 tomb key::"
+msgstr "Выберите пароль для вашего ключа: ::1 tomb key::"
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. _warning "Cannot generate encryption key."
+#. _failure "Operation aborted." }
+#.
+#. # Here the global variable TOMBSECRET contains the naked secret
+#.
+#. _success "Choose the password of your key: ::1 tomb key::" $TOMBKEYFILE
+#. > _message "(You can also change it later using 'tomb passwd'.)"
+#. # _user_file $TOMBKEYFILE
+#.
+#. tombname="$TOMBKEYFILE" # XXX ???
+#. # the gen_key() function takes care of the new key's encryption
+#: tomb:1450
+msgid "(You can also change it later using 'tomb passwd'.)"
+msgstr "(Его можно потом изменить с помощью 'tomb passwd'.)"
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#.
+#. # load the key contents (set global variable)
+#. TOMBKEY="${mapfile[$TOMBKEYFILE]}"
+#.
+#. # this does a check on the file header
+#. is_valid_key $TOMBKEY || {
+#. > _warning "The key does not seem to be valid."
+#. _warning "Dumping contents to screen:"
+#. print "${mapfile[$TOMBKEY]}"
+#. _warning "--"
+#. sudo umount ${keytmp}
+#: tomb:1468
+msgid "The key does not seem to be valid."
+msgstr "Ключ неверен."
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. # load the key contents (set global variable)
+#. TOMBKEY="${mapfile[$TOMBKEYFILE]}"
+#.
+#. # this does a check on the file header
+#. is_valid_key $TOMBKEY || {
+#. _warning "The key does not seem to be valid."
+#. > _warning "Dumping contents to screen:"
+#. print "${mapfile[$TOMBKEY]}"
+#. _warning "--"
+#. sudo umount ${keytmp}
+#. rm -r $keytmp
+#: tomb:1469
+msgid "Dumping contents to screen:"
+msgstr "Выгрузка содержимого на экран:"
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. _warning "--"
+#. sudo umount ${keytmp}
+#. rm -r $keytmp
+#. _failure "Operation aborted."
+#. }
+#.
+#. > _message "Done forging ::1 key file::" $TOMBKEYFILE
+#. _success "Your key is ready:"
+#. ls -lh $TOMBKEYFILE
+#. }
+#.
+#: tomb:1477
msgid "Done forging ::1 key file::"
msgstr "Выкован ключ ::1 key file::"
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. sudo umount ${keytmp}
+#. rm -r $keytmp
+#. _failure "Operation aborted."
+#. }
+#.
+#. _message "Done forging ::1 key file::" $TOMBKEYFILE
+#. > _success "Your key is ready:"
+#. ls -lh $TOMBKEYFILE
+#. }
+#.
+#. # Step three -- Lock tomb
+#: tomb:1478
+msgid "Your key is ready:"
+msgstr "Ваш ключ готов:"
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. # for more alternatives refer to cryptsetup(8)
+#. local cipher="aes-xts-plain64:sha256"
+#.
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. [[ -n $tombpath ]] || {
+#. > _warning "No tomb specified for locking."
+#. _warning "Usage: tomb lock file.tomb file.tomb.key"
+#. return 1
+#. }
+#.
+#: tomb:1498
+msgid "No tomb specified for locking."
+msgstr "Не указана гробница для запирания."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. local cipher="aes-xts-plain64:sha256"
+#.
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. [[ -n $tombpath ]] || {
+#. _warning "No tomb specified for locking."
+#. > _warning "Usage: tomb lock file.tomb file.tomb.key"
+#. return 1
+#. }
+#.
+#. _plot $tombpath
+#: tomb:1499
+msgid "Usage: tomb lock file.tomb file.tomb.key"
+msgstr "Использование: tomb lock file.tomb file.tomb.key"
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _warning "Usage: tomb lock file.tomb file.tomb.key"
+#. return 1
+#. }
+#.
+#. _plot $tombpath
+#.
+#. > _message "Commanded to lock tomb ::1 tomb file::" $TOMBFILE
+#.
+#. [[ -f $TOMBPATH ]] || {
+#. _failure "There is no tomb here. You have to dig it first." }
+#.
+#: tomb:1505
msgid "Commanded to lock tomb ::1 tomb file::"
msgstr "Приказано запереть гробницу ::1 tomb file::"
-#: message
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _plot $tombpath
+#.
+#. _message "Commanded to lock tomb ::1 tomb file::" $TOMBFILE
+#.
+#. [[ -f $TOMBPATH ]] || {
+#. > _failure "There is no tomb here. You have to dig it first." }
+#.
+#. _verbose "Tomb found: ::1 tomb path::" $TOMBPATH
+#.
+#. lo_mount $TOMBPATH
+#: tomb:1508
+msgid "There is no tomb here. You have to dig it first."
+msgstr "Здесь нет гробницы. Сначала выкопайте ее."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. lo_mount $TOMBPATH
+#. nstloop=`lo_new`
+#.
+#. _verbose "Loop mounted on ::1 mount point::" $nstloop
+#.
+#. > _message "Checking if the tomb is empty (we never step on somebody else's bones)."
+#. sudo cryptsetup isLuks ${nstloop}
+#. if [ $? = 0 ]; then
+#. # is it a LUKS encrypted nest? then bail out and avoid reformatting it
+#. _warning "The tomb was already locked with another key."
+#: tomb:1517
+msgid "Checking if the tomb is empty (we never step on somebody else's bones)."
+msgstr "Проверяю, пуста ли гробница (мы никогда не ходим по чужим костям)."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _verbose "Loop mounted on ::1 mount point::" $nstloop
+#.
+#. _message "Checking if the tomb is empty (we never step on somebody else's bones)."
+#. sudo cryptsetup isLuks ${nstloop}
+#. if [ $? = 0 ]; then
+#. # is it a LUKS encrypted nest? then bail out and avoid reformatting it
+#. > _warning "The tomb was already locked with another key."
+#. _failure "Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
+#. else
+#. _message "Fine, this tomb seems empty."
+#. fi
+#: tomb:1521
+msgid "The tomb was already locked with another key."
+msgstr "Гробница уже заперта другим ключом."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _message "Checking if the tomb is empty (we never step on somebody else's bones)."
+#. sudo cryptsetup isLuks ${nstloop}
+#. if [ $? = 0 ]; then
+#. # is it a LUKS encrypted nest? then bail out and avoid reformatting it
+#. _warning "The tomb was already locked with another key."
+#. > _failure "Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
+#. else
+#. _message "Fine, this tomb seems empty."
+#. fi
+#.
+#: tomb:1522
+msgid ""
+"Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
+msgstr ""
+"Операция отменена. Я не могу запереть уже запертую гробницу. Выкопайте новую."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. sudo cryptsetup isLuks ${nstloop}
+#. if [ $? = 0 ]; then
+#. # is it a LUKS encrypted nest? then bail out and avoid reformatting it
+#. _warning "The tomb was already locked with another key."
+#. _failure "Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
+#. else
+#. > _message "Fine, this tomb seems empty."
+#. fi
+#.
+#. _load_key # Try loading key from option -k and set TOMBKEYFILE
+#.
+#: tomb:1524
+msgid "Fine, this tomb seems empty."
+msgstr "Так, эта гробница, вроде как, пуста."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _load_key # Try loading key from option -k and set TOMBKEYFILE
+#.
+#. # the encryption cipher for a tomb can be set when locking using -c
+#. { option_is_set -o } && algopt="$(option_value -o)"
+#. [[ -n "$algopt" ]] && cipher=$algopt
+#. > _message "Locking using cipher: ::1 cipher::" $cipher
+#.
+#. # get the pass from the user and check it
+#. if option_is_set --tomb-pwd; then
+#. tomb_pwd="`option_value --tomb-pwd`"
+#: tomb:1532
msgid "Locking using cipher: ::1 cipher::"
msgstr "Запираю, используя шифр ::1 cipher::"
-#: warning
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. ask_key_password "$tomb_pwd"
+#. else
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. > _success "Locking ::1 tomb file:: with ::2 tomb key file::" $TOMBFILE $TOMBKEYFILE
+#.
+#. _message "Formatting Luks mapped device."
+#. _cryptsetup --batch-mode #. --cipher ${cipher} --key-size 256 --key-slot 0 #: tomb:1544
+msgid "Locking ::1 tomb file:: with ::2 tomb key file::"
+msgstr "Запираю ::1 tomb file:: с помощью ::2 tomb key file::"
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. _success "Locking ::1 tomb file:: with ::2 tomb key file::" $TOMBFILE $TOMBKEYFILE
+#.
+#. > _message "Formatting Luks mapped device."
+#. _cryptsetup --batch-mode #. --cipher ${cipher} --key-size 256 --key-slot 0 #. luksFormat ${nstloop}
+#. [[ $? == 0 ]] || {
+#: tomb:1546
+msgid "Formatting Luks mapped device."
+msgstr "Форматирую устройство LUKS."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _message "Formatting Luks mapped device."
+#. _cryptsetup --batch-mode #. --cipher ${cipher} --key-size 256 --key-slot 0 #. luksFormat ${nstloop}
+#. [[ $? == 0 ]] || {
+#. > _warning "cryptsetup luksFormat returned an error."
+#. _failure "Operation aborted." }
+#.
+#. _cryptsetup --cipher ${cipher} luksOpen ${nstloop} tomb.tmp
+#. [[ $? == 0 ]] || {
+#: tomb:1551
+msgid "cryptsetup luksFormat returned an error."
+msgstr "cryptsetup luksFormat вернул ошибку."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. [[ $? == 0 ]] || {
+#. _warning "cryptsetup luksFormat returned an error."
+#. _failure "Operation aborted." }
+#.
+#. _cryptsetup --cipher ${cipher} luksOpen ${nstloop} tomb.tmp
+#. [[ $? == 0 ]] || {
+#. > _warning "cryptsetup luksOpen returned an error."
+#. _failure "Operation aborted." }
+#.
+#. _message "Formatting your Tomb with Ext3/Ext4 filesystem."
+#. ${=MKFS} $TOMBNAME /dev/mapper/tomb.tmp
+#: tomb:1556
msgid "cryptsetup luksOpen returned an error."
msgstr "cryptsetup luksOpen возвратил ошибку."
-#: warning
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _cryptsetup --cipher ${cipher} luksOpen ${nstloop} tomb.tmp
+#. [[ $? == 0 ]] || {
+#. _warning "cryptsetup luksOpen returned an error."
+#. _failure "Operation aborted." }
+#.
+#. > _message "Formatting your Tomb with Ext3/Ext4 filesystem."
+#. ${=MKFS} $TOMBNAME /dev/mapper/tomb.tmp
+#.
+#. [[ $? == 0 ]] || {
+#. _warning "Tomb format returned an error."
+#: tomb:1559
+msgid "Formatting your Tomb with Ext3/Ext4 filesystem."
+msgstr "Форматирую Вашу гробницу в файловую систему Ext3/Ext4."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _failure "Operation aborted." }
+#.
+#. _message "Formatting your Tomb with Ext3/Ext4 filesystem."
+#. ${=MKFS} $TOMBNAME /dev/mapper/tomb.tmp
+#.
+#. [[ $? == 0 ]] || {
+#. > _warning "Tomb format returned an error."
+#. _warning "Your tomb ::1 tomb file:: may be corrupted." $TOMBFILE }
+#.
+#. # Sync
+#. sudo cryptsetup luksClose tomb.tmp
+#: tomb:1563
+msgid "Tomb format returned an error."
+msgstr "Tomb format вернул ошибку."
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _message "Formatting your Tomb with Ext3/Ext4 filesystem."
+#. ${=MKFS} $TOMBNAME /dev/mapper/tomb.tmp
+#.
+#. [[ $? == 0 ]] || {
+#. _warning "Tomb format returned an error."
+#. > _warning "Your tomb ::1 tomb file:: may be corrupted." $TOMBFILE }
+#.
+#. # Sync
+#. sudo cryptsetup luksClose tomb.tmp
+#.
+#: tomb:1564
msgid "Your tomb ::1 tomb file:: may be corrupted."
msgstr "Ваша гробница ::1 tomb file:: может быть повреждена."
-#: message
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _warning "Tomb format returned an error."
+#. _warning "Your tomb ::1 tomb file:: may be corrupted." $TOMBFILE }
+#.
+#. # Sync
+#. sudo cryptsetup luksClose tomb.tmp
+#.
+#. > _message "Done locking ::1 tomb name:: using Luks dm-crypt ::2 cipher::" $TOMBNAME $cipher
+#. _success "Your tomb is ready in ::1 tomb path:: and secured with key ::2 tomb key::" #. $TOMBPATH $TOMBKEYFILE
+#.
+#. }
+#: tomb:1569
msgid "Done locking ::1 tomb name:: using Luks dm-crypt ::2 cipher::"
msgstr "Запер ::1 tomb name:: с помощью LUKS dm-crypt ::2 cipher::"
-#: message
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _warning "Your tomb ::1 tomb file:: may be corrupted." $TOMBFILE }
+#.
+#. # Sync
+#. sudo cryptsetup luksClose tomb.tmp
+#.
+#. _message "Done locking ::1 tomb name:: using Luks dm-crypt ::2 cipher::" $TOMBNAME $cipher
+#. > _success "Your tomb is ready in ::1 tomb path:: and secured with key ::2 tomb key::" #. $TOMBPATH $TOMBKEYFILE
+#.
+#. }
+#.
+#: tomb:1570
+msgid ""
+"Your tomb is ready in ::1 tomb path:: and secured with key ::2 tomb key::"
+msgstr ""
+"Ваша гробница готова в ::1 tomb path:: и защищена ключом ::2 tomb key::"
+
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. # This function changes the key that locks a tomb
+#. change_tomb_key() {
+#. local tombkey="$1" # Path to the tomb's key file
+#. local tombpath="$2" # Path to the tomb
+#.
+#. > _message "Commanded to reset key for tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -z "$tombpath" ]] && {
+#. _warning "Command 'setkey' needs two arguments: the old key file and the tomb."
+#. _warning "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
+#: tomb:1580
msgid "Commanded to reset key for tomb ::1 tomb path::"
msgstr "Приказано сбросить ключ для гробницы ::1 tomb path::"
-#: warning
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. local tombkey="$1" # Path to the tomb's key file
+#. local tombpath="$2" # Path to the tomb
+#.
+#. _message "Commanded to reset key for tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -z "$tombpath" ]] && {
+#. > _warning "Command 'setkey' needs two arguments: the old key file and the tomb."
+#. _warning "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
+#. _failure "Execution aborted."
+#. }
+#.
+#: tomb:1583
msgid "Command 'setkey' needs two arguments: the old key file and the tomb."
msgstr "Команда 'setkey' требует два аргумента: старый файл ключа и гробницу."
-#: warning
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. local tombpath="$2" # Path to the tomb
+#.
+#. _message "Commanded to reset key for tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -z "$tombpath" ]] && {
+#. _warning "Command 'setkey' needs two arguments: the old key file and the tomb."
+#. > _warning "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
+#. _failure "Execution aborted."
+#. }
+#.
+#. _check_swap
+#: tomb:1584
msgid "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
msgstr "Например: tomb -k new.tomb.key old.tomb.key secret.tomb"
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. _message "Commanded to reset key for tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -z "$tombpath" ]] && {
+#. _warning "Command 'setkey' needs two arguments: the old key file and the tomb."
+#. _warning "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
+#. > _failure "Execution aborted."
+#. }
+#.
+#. _check_swap
+#. is_valid_tomb $tombpath
+#: tomb:1585
msgid "Execution aborted."
msgstr "Операция отменена."
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. lo_mount $TOMBPATH
+#. nstloop=`lo_new`
+#. sudo cryptsetup isLuks ${nstloop}
+#. # is it a LUKS encrypted nest? we check one more time
+#. [[ $? == 0 ]] || {
+#. > _failure "Not a valid LUKS encrypted volume: ::1 volume::" $TOMBPATH }
+#.
+#. _load_key $tombkey # Try loading given key and set TOMBKEY and
+#. # TOMBKEYFILE
+#. local oldkey=$TOMBKEY
+#: tomb:1596
msgid "Not a valid LUKS encrypted volume: ::1 volume::"
msgstr "Неверный зашифрованный том LUKS: ::1 volume::"
-#: message
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. _load_key $tombkey # Try loading given key and set TOMBKEY and
+#. # TOMBKEYFILE
+#. local oldkey=$TOMBKEY
+#. local oldkeyfile=$TOMBKEYFILE
+#.
+#. # we have everything, prepare to mount
+#. > _success "Changing lock on tomb ::1 tomb name::" $TOMBNAME
+#. _message "Old key: ::1 old key::" $oldkeyfile
+#.
+#. # render the mapper
+#. mapdate=`date +%s`
+#: tomb:1604
+msgid "Changing lock on tomb ::1 tomb name::"
+msgstr "Меняю замок на гробнице ::1 tomb name::"
+
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. # TOMBKEYFILE
+#. local oldkey=$TOMBKEY
+#. local oldkeyfile=$TOMBKEYFILE
+#.
+#. # we have everything, prepare to mount
+#. _success "Changing lock on tomb ::1 tomb name::" $TOMBNAME
+#. > _message "Old key: ::1 old key::" $oldkeyfile
+#.
+#. # render the mapper
+#. mapdate=`date +%s`
+#. # save date of mount in minutes since 1970
+#: tomb:1605
msgid "Old key: ::1 old key::"
msgstr "Старый ключ: ::1 old key::"
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. _verbose "tomb-old-pwd = ::1 old pass::" $tomb_old_pwd
+#. ask_key_password "$tomb_old_pwd"
+#. else
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || {
+#. > _failure "No valid password supplied for the old key." }
+#. old_secret=$TOMBSECRET
+#.
+#. # luksOpen the tomb (not really mounting, just on the loopback)
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - #: tomb:1621
msgid "No valid password supplied for the old key."
msgstr "Не указан верный пароль для старого ключа."
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. _failure "No valid password supplied for the old key." }
+#. old_secret=$TOMBSECRET
+#.
+#. # luksOpen the tomb (not really mounting, just on the loopback)
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - #. luksOpen ${nstloop} ${mapper}
+#. > [[ $? == 0 ]] || _failure "Unexpected error in luksOpen."
+#.
+#. _load_key # Try loading new key from option -k and set TOMBKEYFILE
+#.
+#. _message "New key: ::1 key file::" $TOMBKEYFILE
+#: tomb:1627
msgid "Unexpected error in luksOpen."
msgstr "Неожиданная ошибка в luksOpen."
-#: message
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - #. luksOpen ${nstloop} ${mapper}
+#. [[ $? == 0 ]] || _failure "Unexpected error in luksOpen."
+#.
+#. _load_key # Try loading new key from option -k and set TOMBKEYFILE
+#.
+#. > _message "New key: ::1 key file::" $TOMBKEYFILE
+#.
+#. if option_is_set --tomb-pwd; then
+#. tomb_new_pwd="`option_value --tomb-pwd`"
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tomb_new_pwd
+#: tomb:1631
msgid "New key: ::1 key file::"
msgstr "Новый ключ: ::1 key file::"
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tomb_new_pwd
+#. ask_key_password "$tomb_new_pwd"
+#. else
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || {
+#. > _failure "No valid password supplied for the new key." }
+#.
+#. _tmp_create
+#. tmpnewkey=$TOMBTMP
+#. print -R -n - "$TOMBSECRET" >> $tmpnewkey
+#: tomb:1641
msgid "No valid password supplied for the new key."
msgstr "Не узкана верный пароль для нового ключа."
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. tmpnewkey=$TOMBTMP
+#. print -R -n - "$TOMBSECRET" >> $tmpnewkey
+#.
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - #. luksChangeKey "$nstloop" "$tmpnewkey"
+#.
+#. > [[ $? == 0 ]] || _failure "Unexpected error in luksChangeKey."
+#.
+#. sudo cryptsetup luksClose "${mapper}" || _failure "Unexpected error in luksClose."
+#.
+#. _success "Succesfully changed key for tomb: ::1 tomb file::" $TOMBFILE
+#: tomb:1650
msgid "Unexpected error in luksChangeKey."
msgstr "Неожиданная ошибка в luksChangeKey."
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - #. luksChangeKey "$nstloop" "$tmpnewkey"
+#.
+#. [[ $? == 0 ]] || _failure "Unexpected error in luksChangeKey."
+#.
+#. > sudo cryptsetup luksClose "${mapper}" || _failure "Unexpected error in luksClose."
+#.
+#. _success "Succesfully changed key for tomb: ::1 tomb file::" $TOMBFILE
+#. _message "The new key is: ::1 new key::" $TOMBKEYFILE
+#.
+#: tomb:1652
msgid "Unexpected error in luksClose."
msgstr "Неожиданная ошибка в luksClose."
-#: message
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. luksChangeKey "$nstloop" "$tmpnewkey"
+#.
+#. [[ $? == 0 ]] || _failure "Unexpected error in luksChangeKey."
+#.
+#. sudo cryptsetup luksClose "${mapper}" || _failure "Unexpected error in luksClose."
+#.
+#. > _success "Succesfully changed key for tomb: ::1 tomb file::" $TOMBFILE
+#. _message "The new key is: ::1 new key::" $TOMBKEYFILE
+#.
+#. return 0
+#. }
+#: tomb:1654
+msgid "Succesfully changed key for tomb: ::1 tomb file::"
+msgstr "Ключ для гробницы ::1 tomb file:: успешно изменен"
+
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. [[ $? == 0 ]] || _failure "Unexpected error in luksChangeKey."
+#.
+#. sudo cryptsetup luksClose "${mapper}" || _failure "Unexpected error in luksClose."
+#.
+#. _success "Succesfully changed key for tomb: ::1 tomb file::" $TOMBFILE
+#. > _message "The new key is: ::1 new key::" $TOMBKEYFILE
+#.
+#. return 0
+#. }
+#.
+#: tomb:1655
msgid "The new key is: ::1 new key::"
msgstr "Новый ключ: ::1 new key::"
-#: failure
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. # {{{ Open
+#.
+#. # $1 = tombfile $2(optional) = mountpoint
+#. mount_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#. > [[ -n "$tombpath" ]] || _failure "No tomb name specified for opening."
+#.
+#. _message "Commanded to open tomb ::1 tomb name::" $1
+#.
+#. _check_swap
+#: tomb:1667
msgid "No tomb name specified for opening."
msgstr "Не указано имя гробницы для открытия."
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. # $1 = tombfile $2(optional) = mountpoint
+#. mount_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#. [[ -n "$tombpath" ]] || _failure "No tomb name specified for opening."
+#.
+#. > _message "Commanded to open tomb ::1 tomb name::" $1
+#.
+#. _check_swap
+#. is_valid_tomb $tombpath
+#.
+#: tomb:1669
msgid "Commanded to open tomb ::1 tomb name::"
msgstr "Приказано открыть гробницу ::1 tomb name::"
-#: warning
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. _check_swap
+#. is_valid_tomb $tombpath
+#.
+#. # check file type (if its a Luks fs)
+#. [[ "`file $TOMBPATH`" =~ "luks encrypted file" ]] || {
+#. > _warning "::1 tomb file:: is not a valid tomb file" $TOMBFILE
+#. _failure "Operation aborted."
+#. }
+#.
+#. _verbose "Tomb found: ::1 tomb path::" $TOMBPATH
+#: tomb:1676
msgid "::1 tomb file:: is not a valid tomb file"
msgstr "::1 tomb file:: неверный файл гробницы"
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. _verbose "Tomb found: ::1 tomb path::" $TOMBPATH
+#.
+#. _load_key # Try loading new key from option -k and set TOMBKEYFILE
+#.
+#. tombmount=${2:-/media/$TOMBFILE}
+#. [[ -z "$2" ]] && {
+#. > _message "Mountpoint not specified, using default: ::1 mount point::" $tombmount }
+#.
+#. # Check if its already open
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]" ]] && {
+#. _warning "::1 tomb name:: is already open." $TOMBNAME
+#: tomb:1686
msgid "Mountpoint not specified, using default: ::1 mount point::"
-msgstr "Не указана точка монтирования, использую точку по умолчанию: ::1 mount point::"
-
-#: warning
+msgstr ""
+"Не указана точка монтирования, использую точку по умолчанию: ::1 mount "
+"point::"
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. tombmount=${2:-/media/$TOMBFILE}
+#. [[ -z "$2" ]] && {
+#. _message "Mountpoint not specified, using default: ::1 mount point::" $tombmount }
+#.
+#. # Check if its already open
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]" ]] && {
+#. > _warning "::1 tomb name:: is already open." $TOMBNAME
+#. _message "Here below its status is reported:"
+#. list_tombs $TOMBNAME
+#. return 0 }
+#.
+#: tomb:1690
msgid "::1 tomb name:: is already open."
msgstr "::1 tomb name:: уже открыт."
-#: failure
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. [[ -z "$2" ]] && {
+#. _message "Mountpoint not specified, using default: ::1 mount point::" $tombmount }
+#.
+#. # Check if its already open
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]" ]] && {
+#. _warning "::1 tomb name:: is already open." $TOMBNAME
+#. > _message "Here below its status is reported:"
+#. list_tombs $TOMBNAME
+#. return 0 }
+#.
+#. _success "Opening ::1 tomb file:: on ::2 mount point::" $TOMBFILE $tombmount
+#: tomb:1691
+msgid "Here below its status is reported:"
+msgstr "Ниже назодится отчет о его статусе:"
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]" ]] && {
+#. _warning "::1 tomb name:: is already open." $TOMBNAME
+#. _message "Here below its status is reported:"
+#. list_tombs $TOMBNAME
+#. return 0 }
+#.
+#. > _success "Opening ::1 tomb file:: on ::2 mount point::" $TOMBFILE $tombmount
+#.
+#. lo_mount $TOMBPATH
+#. nstloop=`lo_new`
+#.
+#: tomb:1695
+msgid "Opening ::1 tomb file:: on ::2 mount point::"
+msgstr "Открываю ::1 tomb file:: в ::2 mount point::"
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. lo_mount $TOMBPATH
+#. nstloop=`lo_new`
+#.
+#. sudo cryptsetup isLuks ${nstloop} || {
+#. # is it a LUKS encrypted nest? see cryptsetup(1)
+#. > _failure "::1 tomb file:: is not a valid Luks encrypted storage file." $TOMBFILE }
+#.
+#. _message "This tomb is a valid LUKS encrypted device."
+#.
+#. luksdump="`sudo cryptsetup luksDump ${nstloop}`"
+#: tomb:1702
msgid "::1 tomb file:: is not a valid Luks encrypted storage file."
msgstr "::1 tomb file:: - неверное зашифрованное устройство LUSK."
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. nstloop=`lo_new`
+#.
+#. sudo cryptsetup isLuks ${nstloop} || {
+#. # is it a LUKS encrypted nest? see cryptsetup(1)
+#. _failure "::1 tomb file:: is not a valid Luks encrypted storage file." $TOMBFILE }
+#.
+#. > _message "This tomb is a valid LUKS encrypted device."
+#.
+#. luksdump="`sudo cryptsetup luksDump ${nstloop}`"
+#. tombdump=(`print $luksdump | awk '
+#. /^Cipher name/ {print $3}
+#: tomb:1704
+msgid "This tomb is a valid LUKS encrypted device."
+msgstr "Эта гробница - верное зашифрованное устройство LUKS."
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. luksdump="`sudo cryptsetup luksDump ${nstloop}`"
+#. tombdump=(`print $luksdump | awk '
+#. /^Cipher name/ {print $3}
+#. /^Cipher mode/ {print $3}
+#. /^Hash spec/ {print $3}'`)
+#. > _message "Cipher is \"::1 cipher::\" mode \"::2 mode::\" hash \"::3 hash::\"" $tombdump[1] $tombdump[2] $tombdump[3]
+#.
+#. slotwarn=`print $luksdump | awk '
+#. BEGIN { zero=0 }
+#. /^Key slot 0/ { zero=1 }
+#: tomb:1711
msgid "Cipher is \"::1 cipher::\" mode \"::2 mode::\" hash \"::3 hash::\""
msgstr "Шифр \"::1 cipher::\", режим \"::2 mode::\", хеш \"::3 hash::\""
-#: warning
-msgid "Multiple key slots are enabled on this tomb. Beware: there can be a backdoor."
-msgstr "Для этой гробницы разрешено использование нескольких ключей. Будьте осторожны: там может быть бэкдор."
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. slotwarn=`print $luksdump | awk '
+#. BEGIN { zero=0 }
+#. /^Key slot 0/ { zero=1 }
+#. /^Key slot.*ENABLED/ { if(zero==1) print "WARN" }'`
+#. [[ "$slotwarn" == "WARN" ]] && {
+#. > _warning "Multiple key slots are enabled on this tomb. Beware: there can be a backdoor." }
+#.
+#. # save date of mount in minutes since 1970
+#. mapdate=`date +%s`
+#.
+#: tomb:1718
+msgid ""
+"Multiple key slots are enabled on this tomb. Beware: there can be a backdoor."
+msgstr ""
+"Для этой гробницы разрешено использование нескольких ключей. Будьте "
+"осторожны: там может быть бэкдор."
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. ask_key_password
+#. }
+#. [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. _cryptsetup luksOpen ${nstloop} ${mapper}
+#. [[ $? = 0 ]] || {
+#. > _failure "Failure mounting the encrypted file." }
+#.
+#. # preserve the loopdev after exit
+#. lo_preserve "$nstloop"
+#.
+#: tomb:1742
+msgid "Failure mounting the encrypted file."
+msgstr "Не удалось примонтировать зашифрованный файл."
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. # array: [ cipher, keysize, loopdevice ]
+#. tombstat=(`sudo cryptsetup status ${mapper} | awk '
+#. /cipher:/ {print $2}
+#. /keysize:/ {print $2}
+#. /device:/ {print $2}'`)
+#. > _success "Success unlocking tomb ::1 tomb name::" $TOMBNAME
+#. _verbose "Key size is ::1 size:: for cipher ::2 cipher::" $tombstat[2] $tombstat[1]
+#.
+#. _message "Checking filesystem via ::1::" $tombstat[3]
+#. sudo fsck -p -C0 /dev/mapper/${mapper}
+#: tomb:1752
+msgid "Success unlocking tomb ::1 tomb name::"
+msgstr "Успешно отпер гробницу ::1 tomb name::"
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. /cipher:/ {print $2}
+#. /keysize:/ {print $2}
+#. /device:/ {print $2}'`)
+#. _success "Success unlocking tomb ::1 tomb name::" $TOMBNAME
+#. _verbose "Key size is ::1 size:: for cipher ::2 cipher::" $tombstat[2] $tombstat[1]
+#.
+#. > _message "Checking filesystem via ::1::" $tombstat[3]
+#. sudo fsck -p -C0 /dev/mapper/${mapper}
+#. _verbose "Tomb engraved as ::1 tomb name::" $TOMBNAME
+#. sudo tune2fs -L $TOMBNAME /dev/mapper/${mapper} > /dev/null
+#.
+#: tomb:1755
msgid "Checking filesystem via ::1::"
msgstr "Проверка файловой системы через ::1::"
-#: message
-msgid "Last visit by ::1 user::(::2 tomb build::) from ::3 tty:: on ::4 host::"
-msgstr "Последний визит нанес ::1 user::(::2 tomb build::) из ::3 tty:: на ::4 host::"
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. # TODO: safety check MOUNTOPTS
+#. # safe_mount_options && #. sudo mount -o $MOUNTOPTS /dev/mapper/${mapper} ${tombmount}
+#. # Clean up if the mount failed
+#. [[ $? == 0 ]] || {
+#. > _warning "Error mounting ::1 mapper:: on ::2 tombmount::" $mapper $tombmount
+#. [[ $oldmountopts != $MOUNTOPTS ]] && #. _warning "Are mount options '::1 mount options::' valid?" $MOUNTOPTS
+#. # TODO: move cleanup to _endgame()
+#. [[ -d $tombmount ]] && rmdir $tombmount
+#: tomb:1773
+msgid "Error mounting ::1 mapper:: on ::2 tombmount::"
+msgstr ""
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. # safe_mount_options && #. sudo mount -o $MOUNTOPTS /dev/mapper/${mapper} ${tombmount}
+#. # Clean up if the mount failed
+#. [[ $? == 0 ]] || {
+#. _warning "Error mounting ::1 mapper:: on ::2 tombmount::" $mapper $tombmount
+#. [[ $oldmountopts != $MOUNTOPTS ]] && #. > _warning "Are mount options '::1 mount options::' valid?" $MOUNTOPTS
+#. # TODO: move cleanup to _endgame()
+#. [[ -d $tombmount ]] && rmdir $tombmount
+#. [[ -e /dev/mapper/$mapper ]] && sudo cryptsetup luksClose $mapper
+#. # The loop is taken care of in _endgame()
+#: tomb:1775
+msgid "Are mount options '::1 mount options::' valid?"
+msgstr ""
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. [[ $oldmountopts != $MOUNTOPTS ]] && #. _warning "Are mount options '::1 mount options::' valid?" $MOUNTOPTS
+#. # TODO: move cleanup to _endgame()
+#. [[ -d $tombmount ]] && rmdir $tombmount
+#. [[ -e /dev/mapper/$mapper ]] && sudo cryptsetup luksClose $mapper
+#. # The loop is taken care of in _endgame()
+#. > _failure "Cannot mount ::1 tomb name::" $TOMBNAME
+#. }
+#.
+#. sudo chown $UID:$GID ${tombmount}
+#. sudo chmod 0711 ${tombmount}
+#: tomb:1780
+msgid "Cannot mount ::1 tomb name::"
+msgstr ""
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. _failure "Cannot mount ::1 tomb name::" $TOMBNAME
+#. }
+#.
+#. sudo chown $UID:$GID ${tombmount}
+#. sudo chmod 0711 ${tombmount}
+#.
+#. > _success "Success opening ::1 tomb file:: on ::2 mount point::" $TOMBFILE $tombmount
+#.
+#. local tombtty tombhost tombuid tombuser
+#.
+#. # print out when was opened the last time, by whom and where
+#: tomb:1786
+msgid "Success opening ::1 tomb file:: on ::2 mount point::"
+msgstr "Успешно открыл ::1 tomb file:: в ::2 mount point::"
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. tombuid=$(_cat ${tombmount}/.uid | tr -d ' ')
+#. tomblast=$(_cat ${tombmount}/.last | tr -d ' ')
+#. for e in ${(f@)mapfile[/etc/passwd]}; do
+#. [[ "$e" =~ ":$tombuid:" ]] && {
+#. tombuser="${e[(ws@:@)1]}" }
+#. done
+#. > _message "Last visit by ::1 user::(::2 tomb build::) from ::3 tty:: on ::4 host::" $tombuser $tombuid $tombtty $tombhost
+#. _message "on date ::1 date::" "`date --date=@${tomblast} +%c`"
+#. }
+#. # write down the UID and TTY that opened the tomb
+#. rm -f ${tombmount}/.uid
+#: tomb:1800
+msgid "Last visit by ::1 user::(::2 tomb build::) from ::3 tty:: on ::4 host::"
+msgstr ""
+"Последний визит нанес ::1 user::(::2 tomb build::) из ::3 tty:: на ::4 host::"
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. tomblast=$(_cat ${tombmount}/.last | tr -d ' ')
+#. for e in ${(f@)mapfile[/etc/passwd]}; do
+#. [[ "$e" =~ ":$tombuid:" ]] && {
+#. tombuser="${e[(ws@:@)1]}" }
+#. done
+#. _message "Last visit by ::1 user::(::2 tomb build::) from ::3 tty:: on ::4 host::" $tombuser $tombuid $tombtty $tombhost
+#. > _message "on date ::1 date::" "`date --date=@${tomblast} +%c`"
+#. }
+#. # write down the UID and TTY that opened the tomb
+#. rm -f ${tombmount}/.uid
+#. print $_UID > ${tombmount}/.uid
+#: tomb:1801
msgid "on date ::1 date::"
msgstr "дата: ::1 date::"
-#: warning
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#.
+#. # Default mount options are overridden with the -o switch
+#. [[ -n ${(k)OPTS[-o]} ]] && MOUNTOPTS=${OPTS[-o]}
+#.
+#. # No HOME set? Note: this should never happen again.
+#. [[ -z $HOME ]] && {
+#. > _warning "How pitiful! A tomb, and no HOME."
+#. return 1 }
+#.
+#. [[ -z $mnt || ! -d $mnt ]] && {
+#. _warning "Cannot exec bind hooks without a mounted tomb."
+#: tomb:1849
+msgid "How pitiful! A tomb, and no HOME."
+msgstr "Как жаль! Гробница есть, но нет HOME."
+
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. # No HOME set? Note: this should never happen again.
+#. [[ -z $HOME ]] && {
+#. _warning "How pitiful! A tomb, and no HOME."
+#. return 1 }
+#.
+#. [[ -z $mnt || ! -d $mnt ]] && {
+#. > _warning "Cannot exec bind hooks without a mounted tomb."
+#. return 1 }
+#.
+#. [[ -r "$mnt/bind-hooks" ]] || {
+#. _verbose "bind-hooks not found in ::1 mount point::" $mnt
+#: tomb:1853
+#, fuzzy
+msgid "Cannot exec bind hooks without a mounted tomb."
+msgstr "Невозможно совершить привязки без примонтированной гробницы."
+
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. # better parsing for bind hooks checks for two separated words on
+#. # each line, using zsh word separator array subscript
+#. _bindhooks="${mapfile[${mnt}/bind-hooks]}"
+#. for h in ${(f)_bindhooks}; do
+#. s="${h[(w)1]}"
+#. d="${h[(w)2]}"
+#. > [[ "$s" = "" ]] && { _warning "bind-hooks file is broken"; return 1 }
+#. [[ "$d" = "" ]] && { _warning "bind-hooks file is broken"; return 1 }
+#. maps+=($s $d)
+#. _verbose "bind-hook found: $s -> $d"
+#. done
+#: tomb:1869
#, fuzzy
msgid "bind-hooks file is broken"
msgstr "файл bind-hooks битый"
-#: warning
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. _verbose "bind-hook found: $s -> $d"
+#. done
+#. unset _bindhooks
+#.
+#. for dir in ${(k)maps}; do
+#. [[ "${dir[1]}" == "/" || "${dir[1,2]}" == ".." ]] && {
+#. > _warning "bind-hooks map format: local/to/tomb local/to/\$HOME"
+#. continue }
+#.
+#. [[ "${${maps[$dir]}[1]}" == "/" || "${${maps[$dir]}[1,2]}" == ".." ]] && {
+#. _warning "bind-hooks map format: local/to/tomb local/to/\$HOME. Rolling back"
+#: tomb:1878
#, fuzzy
msgid "bind-hooks map format: local/to/tomb local/to/$HOME"
msgstr "Формат bind-hooks: local/to/tomb local/to/HOME"
-#: warning
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. for dir in ${(k)maps}; do
+#. [[ "${dir[1]}" == "/" || "${dir[1,2]}" == ".." ]] && {
+#. _warning "bind-hooks map format: local/to/tomb local/to/\$HOME"
+#. continue }
+#.
+#. [[ "${${maps[$dir]}[1]}" == "/" || "${${maps[$dir]}[1,2]}" == ".." ]] && {
+#. > _warning "bind-hooks map format: local/to/tomb local/to/\$HOME. Rolling back"
+#. for dir in ${mounted}; do sudo umount $dir; done
+#. return 1 }
+#.
+#. if [[ ! -r "$HOME/${maps[$dir]}" ]]; then
+#: tomb:1882
#, fuzzy
msgid "bind-hooks map format: local/to/tomb local/to/$HOME. Rolling back"
msgstr "Формат bind-hooks: local/to/tomb local/to/HOME. Откат"
-#: warning
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. [[ "${${maps[$dir]}[1]}" == "/" || "${${maps[$dir]}[1,2]}" == ".." ]] && {
+#. _warning "bind-hooks map format: local/to/tomb local/to/\$HOME. Rolling back"
+#. for dir in ${mounted}; do sudo umount $dir; done
+#. return 1 }
+#.
+#. if [[ ! -r "$HOME/${maps[$dir]}" ]]; then
+#. > _warning "bind-hook target not existent, skipping ::1 home::/::2 subdir::" $HOME ${maps[$dir]}
+#. elif [[ ! -r "$mnt/$dir" ]]; then
+#. _warning "bind-hook source not found in tomb, skipping ::1 mount point::/::2 subdir::" $mnt $dir
+#. else
+#. sudo mount -o bind,$MOUNTOPTS $mnt/$dir $HOME/${maps[$dir]} #: tomb:1887
#, fuzzy
msgid "bind-hook target not existent, skipping ::1 home::/::2 subdir::"
msgstr "Цель bind-hook не существует, пропускаю ::1 home::/::2 dir::"
-#: warning
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. for dir in ${mounted}; do sudo umount $dir; done
+#. return 1 }
+#.
+#. if [[ ! -r "$HOME/${maps[$dir]}" ]]; then
+#. _warning "bind-hook target not existent, skipping ::1 home::/::2 subdir::" $HOME ${maps[$dir]}
+#. elif [[ ! -r "$mnt/$dir" ]]; then
+#. > _warning "bind-hook source not found in tomb, skipping ::1 mount point::/::2 subdir::" $mnt $dir
+#. else
+#. sudo mount -o bind,$MOUNTOPTS $mnt/$dir $HOME/${maps[$dir]} #. && mounted+=("$HOME/${maps[$dir]}")
+#. fi
+#: tomb:1889
#, fuzzy
-msgid "bind-hook source not found in tomb, skipping ::1 mount point::/::2 subdir::"
-msgstr "Источник bind-hook не найден в гробнице, пропускаю ::1 mount point::/::2 subdir::"
+msgid ""
+"bind-hook source not found in tomb, skipping ::1 mount point::/::2 subdir::"
+msgstr ""
+"Источник bind-hook не найден в гробнице, пропускаю ::1 mount point::/::2 "
+"subdir::"
+
+#. Fold: Open
+#. Function: exec_safe_post_hooks
+#.
+#. Code sample:
+#. # Only run if post-hooks has the executable bit set
+#. [[ -x $mnt/post-hooks ]] || return
+#.
+#. # If the file starts with a shebang, run it.
+#. cat $mnt/post-hooks | head -n1 | grep '^#!\s*/' &> /dev/null
+#. [[ $? == 0 ]] && {
+#. > _success "Post hooks found, executing as user ::1 user name::." $USERNAME
+#. $mnt/post-hooks $act $mnt
+#. }
+#. }
+#.
+#: tomb:1917
+msgid "Post hooks found, executing as user ::1 user name::."
+msgstr "Найдены пост-обработчики, выполняю как пользователь ::1 user name::."
-#: failure
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. local tombname tombmount tombfs tombfsopts tombloop
+#. local ts tombtot tombused tombavail tombpercent tombp tombsince
+#. local tombtty tombhost tombuid tombuser
+#. # list all open tombs
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. > _failure "I can't see any ::1 status:: tomb, may they all rest in peace." ${1:-open} }
+#.
+#. for t in ${mounted_tombs}; do
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#: tomb:1936
msgid "I can't see any ::1 status:: tomb, may they all rest in peace."
msgstr "Я не вижу ::1 status:: гробниц, да упокоятся они все с миром."
-#: message
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. tombuser="${ee[(ws@:@)1]}" }
+#. done
+#. }
+#.
+#. { option_is_set --get-mountpoint } && { print $tombmount; continue }
+#.
+#. > _message "::1 tombname:: open on ::2 tombmount:: using ::3 tombfsopts::" #. $tombname $tombmount $tombfsopts
+#.
+#. _message "::1 tombname:: open since ::2 tombsince::" $tombname $tombsince
+#.
+#: tomb:1969
msgid "::1 tombname:: open on ::2 tombmount:: using ::3 tombfsopts::"
-msgstr "::1 tombname:: открыта на ::2 tombmount:: с параметрами ::3 tombfsopts::"
-
-#: message
+msgstr ""
+"::1 tombname:: открыта на ::2 tombmount:: с параметрами ::3 tombfsopts::"
+
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#.
+#. { option_is_set --get-mountpoint } && { print $tombmount; continue }
+#.
+#. _message "::1 tombname:: open on ::2 tombmount:: using ::3 tombfsopts::" #. $tombname $tombmount $tombfsopts
+#.
+#. > _message "::1 tombname:: open since ::2 tombsince::" $tombname $tombsince
+#.
+#. [[ -z "$tombtty" ]] || {
+#. _message "::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::" #. $tombname $tombuser $tombtty $tombhost
+#: tomb:1972
msgid "::1 tombname:: open since ::2 tombsince::"
msgstr "::1 tombname:: открыта с ::2 tombsince::"
-#: message
-msgid "::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::"
-msgstr "::1 tombname:: открыл ::2 tombuser:: из ::3 tombtty:: на ::4 tombhost::"
-
-#: message
-msgid "::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::%) is used: ::4 tombavail:: free "
-msgstr "::1 tombname:: размер ::2 tombtot:: из которых ::3 tombused:: (::5 tombpercent::%) использовано: ::4 tombavail:: свободно "
-
-#: warning
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. _message "::1 tombname:: open on ::2 tombmount:: using ::3 tombfsopts::" #. $tombname $tombmount $tombfsopts
+#.
+#. _message "::1 tombname:: open since ::2 tombsince::" $tombname $tombsince
+#.
+#. [[ -z "$tombtty" ]] || {
+#. > _message "::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::" #. $tombname $tombuser $tombtty $tombhost
+#. }
+#.
+#. _message "::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::%) is used: ::4 tombavail:: free " #: tomb:1975
+msgid ""
+"::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::"
+msgstr ""
+"::1 tombname:: открыл ::2 tombuser:: из ::3 tombtty:: на ::4 tombhost::"
+
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#.
+#. [[ -z "$tombtty" ]] || {
+#. _message "::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::" #. $tombname $tombuser $tombtty $tombhost
+#. }
+#.
+#. > _message "::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::%) is used: ::4 tombavail:: free " #. $tombname $tombtot $tombused $tombavail $tombpercent
+#.
+#. [[ ${tombp} -ge 90 ]] && {
+#. _warning "::1 tombname:: warning: your tomb is almost full!" $tombname
+#: tomb:1979
+msgid ""
+"::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::"
+"%) is used: ::4 tombavail:: free "
+msgstr ""
+"::1 tombname:: размер ::2 tombtot:: из которых ::3 tombused:: (::5 "
+"tombpercent::%) использовано: ::4 tombavail:: свободно "
+
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. }
+#.
+#. _message "::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::%) is used: ::4 tombavail:: free " #. $tombname $tombtot $tombused $tombavail $tombpercent
+#.
+#. [[ ${tombp} -ge 90 ]] && {
+#. > _warning "::1 tombname:: warning: your tomb is almost full!" $tombname
+#. }
+#.
+#. # Now check hooks
+#. mounted_hooks=(`list_tomb_binds $tombname`)
+#: tomb:1983
msgid "::1 tombname:: warning: your tomb is almost full!"
msgstr "::1 tombname:: предупреждает: Ваша гробница почти заполнена!"
-#: message
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. _warning "::1 tombname:: warning: your tomb is almost full!" $tombname
+#. }
+#.
+#. # Now check hooks
+#. mounted_hooks=(`list_tomb_binds $tombname`)
+#. for h in ${mounted_hooks}; do
+#. > _message "::1 tombname:: hooks ::2 hookname:: on ::3 hookdest::" #. $tombname "`basename ${h[(ws:;:)1]}`" ${h[(ws:;:)2]}
+#. done
+#. done
+#. }
+#: tomb:1989
msgid "::1 tombname:: hooks ::2 hookname:: on ::3 hookdest::"
msgstr "::1 tombname:: прицепила ::2 hookname:: к ::3 hookdest::"
-#: failure
+#. Fold: List
+#. Function: list_tomb_binds
+#.
+#. Code sample:
+#. # list_tomb_binds
+#. # print out an array of mounted bind hooks (internal use)
+#. # format is semi-colon separated list of attributes
+#. # needs an argument: name of tomb whose hooks belong
+#. list_tomb_binds() {
+#. [[ -z "$1" ]] && {
+#. > _failure "Internal error: list_tomb_binds called without argument." }
+#.
+#. # list bind hooks on util-linux 2.20 (Debian 7)
+#. mount -l #. | awk -vtomb="$1" '
+#: tomb:2044
msgid "Internal error: list_tomb_binds called without argument."
msgstr "Внутренняя ошибка: list_tomb_binds вызвана без аргумента."
-#: failure
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. # {{{ Index and search
+#.
+#. # index files in all tombs for search
+#. # $1 is optional, to specify a tomb
+#. index_tombs() {
+#. { command -v updatedb 1>/dev/null 2>/dev/null } || {
+#. > _failure "Cannot index tombs on this system: updatedb (mlocate) not installed." }
+#.
+#. updatedbver=`updatedb --version | grep '^updatedb'`
+#. [[ "$updatedbver" =~ "GNU findutils" ]] && {
+#. _warning "Cannot use GNU findutils for index/search commands." }
+#: tomb:2076
msgid "Cannot index tombs on this system: updatedb (mlocate) not installed."
-msgstr "Не могу проиндексировать гробницы на этой системе: updatedb (mlocate) не установлен."
-
-#: warning
+msgstr ""
+"Не могу проиндексировать гробницы на этой системе: updatedb (mlocate) не "
+"установлен."
+
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. index_tombs() {
+#. { command -v updatedb 1>/dev/null 2>/dev/null } || {
+#. _failure "Cannot index tombs on this system: updatedb (mlocate) not installed." }
+#.
+#. updatedbver=`updatedb --version | grep '^updatedb'`
+#. [[ "$updatedbver" =~ "GNU findutils" ]] && {
+#. > _warning "Cannot use GNU findutils for index/search commands." }
+#. [[ "$updatedbver" =~ "mlocate" ]] || {
+#. _failure "Index command needs 'mlocate' to be installed." }
+#.
+#. _verbose "$updatedbver"
+#: tomb:2080
msgid "Cannot use GNU findutils for index/search commands."
msgstr "Не могу использовать GNU findutils для команд index/search."
-#: failure
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. _failure "Cannot index tombs on this system: updatedb (mlocate) not installed." }
+#.
+#. updatedbver=`updatedb --version | grep '^updatedb'`
+#. [[ "$updatedbver" =~ "GNU findutils" ]] && {
+#. _warning "Cannot use GNU findutils for index/search commands." }
+#. [[ "$updatedbver" =~ "mlocate" ]] || {
+#. > _failure "Index command needs 'mlocate' to be installed." }
+#.
+#. _verbose "$updatedbver"
+#.
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#: tomb:2082
msgid "Index command needs 'mlocate' to be installed."
msgstr "Для использования команды index необходимо установить 'mlocate'."
-#: failure
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. _verbose "$updatedbver"
+#.
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. # Considering one tomb
+#. [[ -n "$1" ]] && {
+#. > _failure "There seems to be no open tomb engraved as [::1::]" $1 }
+#. # Or more
+#. _failure "I can't see any open tomb, may they all rest in peace." }
+#.
+#. _success "Creating and updating search indexes."
+#: tomb:2090
msgid "There seems to be no open tomb engraved as [::1::]"
msgstr "Не похоже, что открыта гробница, гравированная как [::1::]"
-#: message
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. # Considering one tomb
+#. [[ -n "$1" ]] && {
+#. _failure "There seems to be no open tomb engraved as [::1::]" $1 }
+#. # Or more
+#. > _failure "I can't see any open tomb, may they all rest in peace." }
+#.
+#. _success "Creating and updating search indexes."
+#.
+#. # start the LibreOffice document converter if installed
+#: tomb:2092
+msgid "I can't see any open tomb, may they all rest in peace."
+msgstr "Я не вижу открытых гробниц, да упокоятся они все с миром."
+
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. # Considering one tomb
+#. [[ -n "$1" ]] && {
+#. _failure "There seems to be no open tomb engraved as [::1::]" $1 }
+#. # Or more
+#. _failure "I can't see any open tomb, may they all rest in peace." }
+#.
+#. > _success "Creating and updating search indexes."
+#.
+#. # start the LibreOffice document converter if installed
+#. { command -v unoconv 1>/dev/null 2>/dev/null } && {
+#. unoconv -l 2>/dev/null &
+#: tomb:2094
+msgid "Creating and updating search indexes."
+msgstr "Создаю и обновляю индексы поиска."
+
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#.
+#. for t in ${mounted_tombs}; do
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#. tombmount=${t[(ws:;:)2]}
+#. [[ -r ${tombmount}/.noindex ]] && {
+#. > _message "Skipping ::1 tomb name:: (.noindex found)." $tombname
+#. continue }
+#. _message "Indexing ::1 tomb name:: filenames..." $tombname
+#. updatedb -l 0 -o ${tombmount}/.updatedb -U ${tombmount}
+#.
+#: tomb:2107
msgid "Skipping ::1 tomb name:: (.noindex found)."
msgstr "Пропускаю ::1 tomb name:: (найден файл .noindex)."
-#: message
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#. tombmount=${t[(ws:;:)2]}
+#. [[ -r ${tombmount}/.noindex ]] && {
+#. _message "Skipping ::1 tomb name:: (.noindex found)." $tombname
+#. continue }
+#. > _message "Indexing ::1 tomb name:: filenames..." $tombname
+#. updatedb -l 0 -o ${tombmount}/.updatedb -U ${tombmount}
+#.
+#. # here we use swish to index file contents
+#. [[ $SWISH == 1 ]] && {
+#: tomb:2109
msgid "Indexing ::1 tomb name:: filenames..."
msgstr "Индексирую имена в ::1 tomb name::..."
-#: message
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. continue }
+#. _message "Indexing ::1 tomb name:: filenames..." $tombname
+#. updatedb -l 0 -o ${tombmount}/.updatedb -U ${tombmount}
+#.
+#. # here we use swish to index file contents
+#. [[ $SWISH == 1 ]] && {
+#. > _message "Indexing ::1 tomb name:: contents..." $tombname
+#. [[ -r ${tombmount}/.swishrc ]] || {
+#. _message "Generating a new swish-e configuration file: ::1 swish conf::" ${tombmount}/.swishrc
+#. cat <<EOF > ${tombmount}/.swishrc
+#. # index directives
+#: tomb:2114
msgid "Indexing ::1 tomb name:: contents..."
msgstr "Индексирую содержимое ::1 tomb name::..."
-#: message
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. updatedb -l 0 -o ${tombmount}/.updatedb -U ${tombmount}
+#.
+#. # here we use swish to index file contents
+#. [[ $SWISH == 1 ]] && {
+#. _message "Indexing ::1 tomb name:: contents..." $tombname
+#. [[ -r ${tombmount}/.swishrc ]] || {
+#. > _message "Generating a new swish-e configuration file: ::1 swish conf::" ${tombmount}/.swishrc
+#. cat <<EOF > ${tombmount}/.swishrc
+#. # index directives
+#. DefaultContents TXT*
+#. IndexDir $tombmount
+#: tomb:2116
+msgid "Generating a new swish-e configuration file: ::1 swish conf::"
+msgstr "Генерирую новый файл конфигурации swish-e: ::1 swish conf::"
+
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. }
+#.
+#. swish-e -c ${tombmount}/.swishrc -S fs -v3
+#.
+#. }
+#.
+#. > _message "Search index updated."
+#. done
+#. }
+#. search_tombs() {
+#. { command -v locate 1>/dev/null 2>/dev/null } || {
+#: tomb:2190
+msgid "Search index updated."
+msgstr "Поисковый индекс обновлен."
+
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#.
+#. # list all open tombs
+#. mounted_tombs=(`list_tomb_mounts`)
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. _failure "I can't see any open tomb, may they all rest in peace." }
+#.
+#. > _success "Searching for: ::1::" ${(f)@}
+#. for t in ${mounted_tombs}; do
+#. _verbose "Checking for index: ::1::" ${t}
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#: tomb:2210
+msgid "Searching for: ::1::"
+msgstr "Ищу: ::1::"
+
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. _verbose "Checking for index: ::1::" ${t}
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#. tombmount=${t[(ws:;:)2]}
+#. [[ -r ${tombmount}/.updatedb ]] && {
+#. # Use mlocate to search hits on filenames
+#. > _message "Searching filenames in tomb ::1 tomb name::" $tombname
+#. locate -d ${tombmount}/.updatedb -e -i "${(f)@}"
+#. _message "Matches found: ::1 matches::" #. $(locate -d ${tombmount}/.updatedb -e -i -c ${(f)@})
+#.
+#: tomb:2218
msgid "Searching filenames in tomb ::1 tomb name::"
msgstr "Ищу в именах файлов гробницы ::1 tomb name::"
-#: message
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. tombname=${t[(ws:;:)5]}
+#. tombmount=${t[(ws:;:)2]}
+#. [[ -r ${tombmount}/.updatedb ]] && {
+#. # Use mlocate to search hits on filenames
+#. _message "Searching filenames in tomb ::1 tomb name::" $tombname
+#. locate -d ${tombmount}/.updatedb -e -i "${(f)@}"
+#. > _message "Matches found: ::1 matches::" #. $(locate -d ${tombmount}/.updatedb -e -i -c ${(f)@})
+#.
+#. # Use swish-e to search over contents
+#. [[ $SWISH == 1 && -r $tombmount/.swish ]] && {
+#: tomb:2220
msgid "Matches found: ::1 matches::"
msgstr "Найдены совпадения: ::1 matches::"
-#: message
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. locate -d ${tombmount}/.updatedb -e -i "${(f)@}"
+#. _message "Matches found: ::1 matches::" #. $(locate -d ${tombmount}/.updatedb -e -i -c ${(f)@})
+#.
+#. # Use swish-e to search over contents
+#. [[ $SWISH == 1 && -r $tombmount/.swish ]] && {
+#. > _message "Searching contents in tomb ::1 tomb name::" $tombname
+#. swish-e -w ${=@} -f $tombmount/.swish -H0 }
+#. } || {
+#. _warning "Skipping tomb ::1 tomb name::: not indexed." $tombname
+#. _warning "Run 'tomb index' to create indexes." }
+#: tomb:2225
msgid "Searching contents in tomb ::1 tomb name::"
msgstr "Ищу в содержимом гробницы ::1 tomb name::"
-#: warning
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#.
+#. # Use swish-e to search over contents
+#. [[ $SWISH == 1 && -r $tombmount/.swish ]] && {
+#. _message "Searching contents in tomb ::1 tomb name::" $tombname
+#. swish-e -w ${=@} -f $tombmount/.swish -H0 }
+#. } || {
+#. > _warning "Skipping tomb ::1 tomb name::: not indexed." $tombname
+#. _warning "Run 'tomb index' to create indexes." }
+#. done
+#. _message "Search completed."
+#. }
+#: tomb:2228
msgid "Skipping tomb ::1 tomb name::: not indexed."
msgstr "Пропускаю гробницу ::1 tomb name::: она не индексирована."
-#: message
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. # Use swish-e to search over contents
+#. [[ $SWISH == 1 && -r $tombmount/.swish ]] && {
+#. _message "Searching contents in tomb ::1 tomb name::" $tombname
+#. swish-e -w ${=@} -f $tombmount/.swish -H0 }
+#. } || {
+#. _warning "Skipping tomb ::1 tomb name::: not indexed." $tombname
+#. > _warning "Run 'tomb index' to create indexes." }
+#. done
+#. _message "Search completed."
+#. }
+#.
+#: tomb:2229
+msgid "Run 'tomb index' to create indexes."
+msgstr "Запустите 'tomb index' для создания индексов."
+
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. _message "Searching contents in tomb ::1 tomb name::" $tombname
+#. swish-e -w ${=@} -f $tombmount/.swish -H0 }
+#. } || {
+#. _warning "Skipping tomb ::1 tomb name::: not indexed." $tombname
+#. _warning "Run 'tomb index' to create indexes." }
+#. done
+#. > _message "Search completed."
+#. }
+#.
+#. # }}} - Index and search
+#.
+#: tomb:2231
+msgid "Search completed."
+msgstr "Поиск завершен."
+
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. # {{{ Resize
+#.
+#. # resize tomb file size
+#. resize_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. > _message "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes." $1 $OPTS[-s]
+#.
+#. [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing."
+#. [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath
+#.
+#: tomb:2242
msgid "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes."
-msgstr "Приказано изменить размер гробницы ::1 tomb name::. Новый размер: ::2 size:: мегабайт."
+msgstr ""
+"Приказано изменить размер гробницы ::1 tomb name::. Новый размер: ::2 size:: "
+"мегабайт."
+
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. # resize tomb file size
+#. resize_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. _message "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes." $1 $OPTS[-s]
+#.
+#. > [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing."
+#. [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath
+#.
+#. newtombsize="`option_value -s`"
+#. [[ -z "$newtombsize" ]] && {
+#: tomb:2244
+msgid "No tomb name specified for resizing."
+msgstr "Не указано имя гробницы для изменения размера."
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. resize_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. _message "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes." $1 $OPTS[-s]
+#.
+#. [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing."
+#. > [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath
+#.
+#. newtombsize="`option_value -s`"
+#. [[ -z "$newtombsize" ]] && {
+#. _failure "Aborting operations: new size was not specified, use -s" }
+#: tomb:2245
msgid "Cannot find ::1::"
msgstr "Не могу найти ::1::"
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#.
+#. [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing."
+#. [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath
+#.
+#. newtombsize="`option_value -s`"
+#. [[ -z "$newtombsize" ]] && {
+#. > _failure "Aborting operations: new size was not specified, use -s" }
+#.
+#. is_valid_tomb $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. _load_key # Try loading new key from option -k and set TOMBKEYFILE
+#: tomb:2249
msgid "Aborting operations: new size was not specified, use -s"
msgstr "Отмена операций: не указан новый размер, используйте -s"
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. local oldtombsize=$(( `stat -c %s "$TOMBPATH" 2>/dev/null` / 1048576 ))
+#. local mounted_tomb=`mount -l |
+#. awk -vtomb="[$TOMBNAME]" '/^\/dev\/mapper\/tomb/ { if($7==tomb) print $1 }'`
+#.
+#. # Tomb must not be open
+#. [[ -z "$mounted_tomb" ]] || {
+#. > _failure "Please close the tomb ::1 tomb name:: before trying to resize it." $TOMBNAME }
+#. # New tomb size must be specified
+#. [[ -n "$newtombsize" ]] || {
+#. _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
+#. # New tomb size must be an integer
+#: tomb:2261
msgid "Please close the tomb ::1 tomb name:: before trying to resize it."
-msgstr "Пожалуйста, закройте гробницу ::1 tomb name::, прежде чем менять ее размер."
-
-#: failure
+msgstr ""
+"Пожалуйста, закройте гробницу ::1 tomb name::, прежде чем менять ее размер."
+
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#.
+#. # Tomb must not be open
+#. [[ -z "$mounted_tomb" ]] || {
+#. _failure "Please close the tomb ::1 tomb name:: before trying to resize it." $TOMBNAME }
+#. # New tomb size must be specified
+#. [[ -n "$newtombsize" ]] || {
+#. > _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
+#. # New tomb size must be an integer
+#. [[ $newtombsize == <-> ]] || _failure "Size is not an integer."
+#. # Tombs can only grow in size
+#. [[ "$newtombsize" -gt "$oldtombsize" ]] || {
+#: tomb:2264
msgid "You must specify the new size of ::1 tomb name::"
msgstr "Вы должны указать новый размер для ::1 tomb name::"
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. [[ -z "$mounted_tomb" ]] || {
+#. _failure "Please close the tomb ::1 tomb name:: before trying to resize it." $TOMBNAME }
+#. # New tomb size must be specified
+#. [[ -n "$newtombsize" ]] || {
+#. _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
+#. # New tomb size must be an integer
+#. > [[ $newtombsize == <-> ]] || _failure "Size is not an integer."
+#. # Tombs can only grow in size
+#. [[ "$newtombsize" -gt "$oldtombsize" ]] || {
+#. _failure "The new size must be greater then old tomb size." }
+#.
+#: tomb:2266
+msgid "Size is not an integer."
+msgstr "Размер не целое число."
+
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. [[ -n "$newtombsize" ]] || {
+#. _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
+#. # New tomb size must be an integer
+#. [[ $newtombsize == <-> ]] || _failure "Size is not an integer."
+#. # Tombs can only grow in size
+#. [[ "$newtombsize" -gt "$oldtombsize" ]] || {
+#. > _failure "The new size must be greater then old tomb size." }
+#.
+#. delta="$(( $newtombsize - $oldtombsize ))"
+#.
+#. _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $newtombsize
+#: tomb:2269
+msgid "The new size must be greater then old tomb size."
+msgstr "Новый размер гробницы должен быть больше старого."
+
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $newtombsize
+#.
+#. _verbose "Data dump using ::1:: from /dev/urandom" ${DD[1]}
+#. ${=DD} if=/dev/urandom bs=1048576 count=${delta} >> $TOMBPATH
+#.
+#. [[ $? == 0 ]] || {
+#. > _failure "Error creating the extra resize ::1 size::, operation aborted." $tmp_resize }
+#.
+#. { option_is_set --tomb-pwd } && {
+#. tomb_pwd="`option_value --tomb-pwd`"
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tomb_pwd
+#: tomb:2279
msgid "Error creating the extra resize ::1 size::, operation aborted."
msgstr "Ошибка создания дополнительного размера ::1 size::, операция отменена."
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. mapper="tomb.$TOMBNAME.$mapdate.$(basename $nstloop)"
+#.
+#. _cryptsetup luksOpen ${nstloop} ${mapper} || {
+#. _failure "Failure mounting the encrypted file." }
+#.
+#. sudo cryptsetup resize "${mapper}" || {
+#. > _failure "cryptsetup failed to resize ::1 mapper::" $mapper }
+#.
+#. sudo e2fsck -p -f /dev/mapper/${mapper} || {
+#. _failure "e2fsck failed to check ::1 mapper::" $mapper }
+#.
+#: tomb:2300
msgid "cryptsetup failed to resize ::1 mapper::"
msgstr "cryptsetup не смог изменить размер ::1 mapper::"
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. _failure "Failure mounting the encrypted file." }
+#.
+#. sudo cryptsetup resize "${mapper}" || {
+#. _failure "cryptsetup failed to resize ::1 mapper::" $mapper }
+#.
+#. sudo e2fsck -p -f /dev/mapper/${mapper} || {
+#. > _failure "e2fsck failed to check ::1 mapper::" $mapper }
+#.
+#. sudo resize2fs /dev/mapper/${mapper} || {
+#. _failure "resize2fs failed to resize ::1 mapper::" $mapper }
+#.
+#: tomb:2303
msgid "e2fsck failed to check ::1 mapper::"
msgstr "e2fsck не смог проверить ::1 mapper::"
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. _failure "cryptsetup failed to resize ::1 mapper::" $mapper }
+#.
+#. sudo e2fsck -p -f /dev/mapper/${mapper} || {
+#. _failure "e2fsck failed to check ::1 mapper::" $mapper }
+#.
+#. sudo resize2fs /dev/mapper/${mapper} || {
+#. > _failure "resize2fs failed to resize ::1 mapper::" $mapper }
+#.
+#. # close and free the loop device
+#. sudo cryptsetup luksClose "${mapper}"
+#.
+#: tomb:2306
msgid "resize2fs failed to resize ::1 mapper::"
msgstr "resize2fs не смог изменить размер ::1 mapper::"
-#: warning
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. mounted_tombs=(`list_tomb_mounts`)
+#. else
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#. fi
+#.
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. > _failure "There is no open tomb to be closed." }
+#.
+#. [[ ${#mounted_tombs} -gt 1 && -z "$1" ]] && {
+#. _warning "Too many tombs mounted, please specify one (see tomb list)"
+#. _warning "or issue the command 'tomb close all' to close them all."
+#: tomb:2330
+msgid "There is no open tomb to be closed."
+msgstr "Нет открытой гробницы для закрытия."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. fi
+#.
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. _failure "There is no open tomb to be closed." }
+#.
+#. [[ ${#mounted_tombs} -gt 1 && -z "$1" ]] && {
+#. > _warning "Too many tombs mounted, please specify one (see tomb list)"
+#. _warning "or issue the command 'tomb close all' to close them all."
+#. _failure "Operation aborted." }
+#.
+#. for t in ${mounted_tombs}; do
+#: tomb:2333
+msgid "Too many tombs mounted, please specify one (see tomb list)"
+msgstr ""
+"Примонтировано слишком много гробниц, пожалуйста, укажите точнее (см. tomb "
+"list)"
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. _failure "There is no open tomb to be closed." }
+#.
+#. [[ ${#mounted_tombs} -gt 1 && -z "$1" ]] && {
+#. _warning "Too many tombs mounted, please specify one (see tomb list)"
+#. > _warning "or issue the command 'tomb close all' to close them all."
+#. _failure "Operation aborted." }
+#.
+#. for t in ${mounted_tombs}; do
+#. mapper=`basename ${t[(ws:;:)1]}`
+#: tomb:2334
+msgid "or issue the command 'tomb close all' to close them all."
+msgstr "или выполните команду 'tomb close all', чтобы закрыть их все."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. _verbose "Name: ::1 tomb name::" $tombname
+#. _verbose "Mount: ::1 mount point::" $tombmount
+#. _verbose "Mapper: ::1 mapper::" $mapper
+#.
+#. [[ -e "$mapper" ]] && {
+#. > _warning "Tomb not found: ::1 tomb file::" $1
+#. _warning "Please specify an existing tomb."
+#. return 0 }
+#.
+#. [[ -n $SLAM ]] && {
+#: tomb:2350
msgid "Tomb not found: ::1 tomb file::"
msgstr "Гробница не найдена: ::1 tomb file::"
-#: failure
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _verbose "Name: ::1 tomb name::" $tombname
+#. _verbose "Mount: ::1 mount point::" $tombmount
+#. _verbose "Mapper: ::1 mapper::" $mapper
+#.
+#. [[ -e "$mapper" ]] && {
+#. _warning "Tomb not found: ::1 tomb file::" $1
+#. > _warning "Please specify an existing tomb."
+#. return 0 }
+#.
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" #: tomb:2351
+msgid "Please specify an existing tomb."
+msgstr "Пожалуйста, укажите существующую гробницу."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. [[ -e "$mapper" ]] && {
+#. _warning "Tomb not found: ::1 tomb file::" $1
+#. _warning "Please specify an existing tomb."
+#. return 0 }
+#.
+#. [[ -n $SLAM ]] && {
+#. > _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount
+#. _message "Kill all processes busy inside the tomb."
+#. { slam_tomb "$tombmount" } || {
+#. _failure "Cannot slam the tomb ::1 tomb name::" $tombname }
+#: tomb:2355
+msgid "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::"
+msgstr ""
+"Захлопываю гробницу ::1 tomb name::, примонтированную на ::2 mount point::"
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _warning "Please specify an existing tomb."
+#. return 0 }
+#.
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount
+#. > _message "Kill all processes busy inside the tomb."
+#. { slam_tomb "$tombmount" } || {
+#. _failure "Cannot slam the tomb ::1 tomb name::" $tombname }
+#. } || {
+#. _message "Closing tomb ::1 tomb name:: mounted on ::2 mount point::" #: tomb:2357
+msgid "Kill all processes busy inside the tomb."
+msgstr "Убиваю все процессы, занятые в гробнице"
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount
+#. _message "Kill all processes busy inside the tomb."
+#. { slam_tomb "$tombmount" } || {
+#. > _failure "Cannot slam the tomb ::1 tomb name::" $tombname }
+#. } || {
+#. _message "Closing tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount }
+#.
+#: tomb:2359
msgid "Cannot slam the tomb ::1 tomb name::"
msgstr "Не могу захлопнуть гробницу ::1 tomb name::"
-#: message
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount
+#. _message "Kill all processes busy inside the tomb."
+#. { slam_tomb "$tombmount" } || {
+#. _failure "Cannot slam the tomb ::1 tomb name::" $tombname }
+#. } || {
+#. > _message "Closing tomb ::1 tomb name:: mounted on ::2 mount point::" #. $tombname $tombmount }
+#.
+#. # check if there are binded dirs and close them
+#. bind_tombs=(`list_tomb_binds $tombname`)
+#: tomb:2361
msgid "Closing tomb ::1 tomb name:: mounted on ::2 mount point::"
-msgstr "Закрываю гробницу ::1 tomb name::, примонтированную на ::2 mount point::"
-
-#: message
+msgstr ""
+"Закрываю гробницу ::1 tomb name::, примонтированную на ::2 mount point::"
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. # check if there are binded dirs and close them
+#. bind_tombs=(`list_tomb_binds $tombname`)
+#. for b in ${bind_tombs}; do
+#. bind_mapper="${b[(ws:;:)1]}"
+#. bind_mount="${b[(ws:;:)2]}"
+#. > _message "Closing tomb bind hook: ::1 hook::" $bind_mount
+#. sudo umount $bind_mount || {
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb: killing all processes using this hook."
+#. slam_tomb "$bind_mount"
+#: tomb:2369
#, fuzzy
msgid "Closing tomb bind hook: ::1 hook::"
msgstr "Закрываю привязку гробницы: ::1 hook::"
-#: failure
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. for b in ${bind_tombs}; do
+#. bind_mapper="${b[(ws:;:)1]}"
+#. bind_mount="${b[(ws:;:)2]}"
+#. _message "Closing tomb bind hook: ::1 hook::" $bind_mount
+#. sudo umount $bind_mount || {
+#. [[ -n $SLAM ]] && {
+#. > _success "Slamming tomb: killing all processes using this hook."
+#. slam_tomb "$bind_mount"
+#. [[ $? == 1 ]] && {
+#. _failure "Cannot slam the bind hook ::1 hook::" $bind_mount }
+#. umount $bind_mount
+#: tomb:2372
+#, fuzzy
+msgid "Slamming tomb: killing all processes using this hook."
+msgstr "Захлопываю гробницу: убиваю все процессы, использующие эту привязку."
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _message "Closing tomb bind hook: ::1 hook::" $bind_mount
+#. sudo umount $bind_mount || {
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb: killing all processes using this hook."
+#. slam_tomb "$bind_mount"
+#. [[ $? == 1 ]] && {
+#. > _failure "Cannot slam the bind hook ::1 hook::" $bind_mount }
+#. umount $bind_mount
+#. } || {
+#. _warning "Tomb bind hook ::1 hook:: is busy, cannot close tomb." $bind_mount }
+#. }
+#: tomb:2375
msgid "Cannot slam the bind hook ::1 hook::"
msgstr "Не могу захлопнуть обработчик ::1 hook::"
-#: warning
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _success "Slamming tomb: killing all processes using this hook."
+#. slam_tomb "$bind_mount"
+#. [[ $? == 1 ]] && {
+#. _failure "Cannot slam the bind hook ::1 hook::" $bind_mount }
+#. umount $bind_mount
+#. } || {
+#. > _warning "Tomb bind hook ::1 hook:: is busy, cannot close tomb." $bind_mount }
+#. }
+#. done
+#.
+#. # Execute post-hooks for eventual cleanup
+#: tomb:2378
msgid "Tomb bind hook ::1 hook:: is busy, cannot close tomb."
msgstr "Обработчик гробницы ::1 hook:: занят, не могу закрыть гробницу."
-#: failure
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. # Execute post-hooks for eventual cleanup
+#. { option_is_set -n } || {
+#. exec_safe_post_hooks ${tombmount%%/} close }
+#.
+#. _verbose "Performing umount of ::1 mount point::" $tombmount
+#. sudo umount ${tombmount}
+#. > [[ $? = 0 ]] || { _warning "Tomb is busy, cannot umount!"; return 1 }
+#.
+#. # If we used a default mountpoint and is now empty, delete it
+#. [[ "$tombmount" == "/media/$tombname.tomb" ]] && { rmdir $tombmount }
+#.
+#: tomb:2388
+msgid "Tomb is busy, cannot umount!"
+msgstr "Гробница занята, не могу отмонтировать!"
+
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. # If we used a default mountpoint and is now empty, delete it
+#. [[ "$tombmount" == "/media/$tombname.tomb" ]] && { rmdir $tombmount }
+#.
+#. sudo cryptsetup luksClose $mapper
+#. [[ $? == 0 ]] || {
+#. > _failure "Error occurred in cryptsetup luksClose ::1 mapper::" $mapper }
+#.
+#. # Normally the loopback device is detached when unused
+#. [[ -e "/dev/$tombloop" ]] && sudo losetup -d "/dev/$tombloop"
+#. [[ $? = 0 ]] || {
+#: tomb:2395
msgid "Error occurred in cryptsetup luksClose ::1 mapper::"
msgstr "Произошла ошибка cryptsetup luksClose ::1 mapper::"
-#: warning
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. # Normally the loopback device is detached when unused
+#. [[ -e "/dev/$tombloop" ]] && sudo losetup -d "/dev/$tombloop"
+#. [[ $? = 0 ]] || {
+#. _verbose "/dev/$tombloop was already closed." }
+#.
+#. > _success "Tomb ::1 tomb name:: closed: your bones will rest in peace." $tombname
+#.
+#. done # loop across mounted tombs
+#.
+#. return 0
+#: tomb:2402
+msgid "Tomb ::1 tomb name:: closed: your bones will rest in peace."
+msgstr "Гробница ::1 tomb name:: закрыта: да упокоятся с миром Ваши кости."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. return 1
+#. fi
+#. return 0
+#. fi
+#. unset discardme
+#. if ! zparseopts -M -E -D -Adiscardme ${every_opts}; then
+#. > _failure "Error parsing."
+#. return 127
+#. fi
+#. unset discardme
+#. subcommand=$1
+#: tomb:2522
+msgid "Error parsing."
+msgstr "Ошибка парсинга."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. subcommand=$1
+#. if [[ -z $subcommand ]]; then
+#. subcommand="__default"
+#. fi
+#.
+#. if [[ -z ${(k)subcommands_opts[$subcommand]} ]]; then
+#. > _warning "There's no such command \"::1 subcommand::\"." $subcommand
+#. exitv=127 _failure "Please try -h for help."
+#. fi
+#. argv=("${(@)oldstar}")
+#. unset oldstar
+#: tomb:2532
msgid "There's no such command \"::1 subcommand::\"."
msgstr "Нет такой команды \"::1 subcommand::\"."
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. if [[ -z $subcommand ]]; then
+#. subcommand="__default"
+#. fi
+#.
+#. if [[ -z ${(k)subcommands_opts[$subcommand]} ]]; then
+#. _warning "There's no such command \"::1 subcommand::\"." $subcommand
+#. > exitv=127 _failure "Please try -h for help."
+#. fi
+#. argv=("${(@)oldstar}")
+#. unset oldstar
+#.
+#: tomb:2533
msgid "Please try -h for help."
msgstr "Используйте -h для вызова справки."
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. # zsh magic: ${=string} will split to multiple arguments when spaces occur
+#. set -A cmd_opts ${main_opts} ${=subcommands_opts[$subcommand]}
+#. # if there is no option, we don't need parsing
+#. if [[ -n $cmd_opts ]]; then
+#. zparseopts -M -E -D -AOPTS ${cmd_opts}
+#. if [[ $? != 0 ]]; then
+#. > _warning "Some error occurred during option processing."
+#. exitv=127 _failure "See \"tomb help\" for more info."
+#. fi
+#. fi
+#. #build PARAM (array of arguments) and check if there are unrecognized options
+#: tomb:2545
+msgid "Some error occurred during option processing."
+msgstr "Произошла какая-то ошибка при обработке опций."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. set -A cmd_opts ${main_opts} ${=subcommands_opts[$subcommand]}
+#. # if there is no option, we don't need parsing
+#. if [[ -n $cmd_opts ]]; then
+#. zparseopts -M -E -D -AOPTS ${cmd_opts}
+#. if [[ $? != 0 ]]; then
+#. _warning "Some error occurred during option processing."
+#. > exitv=127 _failure "See \"tomb help\" for more info."
+#. fi
+#. fi
+#. #build PARAM (array of arguments) and check if there are unrecognized options
+#. ok=0
+#: tomb:2546
msgid "See \"tomb help\" for more info."
msgstr "Для дополнительной информации выполните \"tomb help\"."
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. for arg in $*; do
+#. if [[ $arg == '--' || $arg == '-' ]]; then
+#. ok=1
+#. continue #it shouldnt be appended to PARAM
+#. elif [[ $arg[1] == '-' ]]; then
+#. if [[ $ok == 0 ]]; then
+#. > exitv=127 _failure "Unrecognized option ::1 arg:: for subcommand ::2 subcommand::" $arg $subcommand
+#. fi
+#. fi
+#. PARAM+=$arg
+#. done
+#: tomb:2558
msgid "Unrecognized option ::1 arg:: for subcommand ::2 subcommand::"
msgstr "Не распознана опция ::1 arg:: для подкоманды ::2 subcommand::"
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. # Use colors unless told not to
+#. { ! option_is_set --no-color } && { autoload -Uz colors && colors }
+#. # Some options are only available during insecure mode
+#. { ! option_is_set --unsafe } && {
+#. for opt in --tomb-pwd --use-urandom --tomb-old-pwd; do
+#. { option_is_set $opt } && {
+#. > exitv=127 _failure "You specified option ::1 option::, which is DANGEROUS and should only be used for testing\nIf you really want so, add --unsafe" $opt }
+#. done
+#. }
+#. # read -t or --tmp flags to set a custom temporary directory
+#. option_is_set --tmp && TMPPREFIX=$(option_value --tmp)
+#: tomb:2574
+msgid ""
+"You specified option ::1 option::, which is DANGEROUS and should only be "
+"used for testing\n"
+"If you really want so, add --unsafe"
+msgstr ""
+"Вы указали опцию ::1 option::, которая ОПАСНА и должна быть использована "
+"только для тестирования\n"
+"Если Вы и правда этого хотите, добавьте параметр --unsafe"
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. help)
+#. usage
+#. ;;
+#.
+#. # DEPRECATION notice (leave here as 'create' is still present in old docs)
+#. create)
+#. > _warning "The create command is deprecated, please use dig, forge and lock instead."
+#. _warning "For more informations see Tomb's manual page (man tomb)."
+#. _failure "Operation aborted."
+#. ;;
+#.
+#: tomb:2608
+msgid ""
+"The create command is deprecated, please use dig, forge and lock instead."
+msgstr "Команда create устарела, пожалуйста, используйте dig, forge и lock."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. usage
+#. ;;
+#.
+#. # DEPRECATION notice (leave here as 'create' is still present in old docs)
+#. create)
+#. _warning "The create command is deprecated, please use dig, forge and lock instead."
+#. > _warning "For more informations see Tomb's manual page (man tomb)."
+#. _failure "Operation aborted."
+#. ;;
+#.
+#. # CREATE Step 1: dig -s NN file.tomb
+#: tomb:2609
+msgid "For more informations see Tomb's manual page (man tomb)."
+msgstr "Для большей информации обратитесь к руководству Tomb (man tomb)."
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. umount_tomb $PARAM[1]
+#. ;;
+#.
+#. # Grow tomb's size
+#. resize)
+#. [[ $RESIZER == 0 ]] && {
+#. > _failure "Resize2fs not installed: cannot resize tombs." }
+#. resize_tomb $PARAM[1]
+#. ;;
+#.
+#. ## Contents manipulation
+#: tomb:2643
msgid "Resize2fs not installed: cannot resize tombs."
msgstr "Resize2fs не установлен: не могу менять размер гробниц."
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#.
+#. ## Locking operations
+#.
+#. # Export key to QR Code
+#. engrave)
+#. [[ $QRENCODE == 0 ]] && {
+#. > _failure "QREncode not installed: cannot engrave keys on paper." }
+#. engrave_key ${=PARAM}
+#. ;;
+#.
+#. # Change password on existing key
+#: tomb:2669
msgid "QREncode not installed: cannot engrave keys on paper."
msgstr "QREncode не установлен: не могу выгравировывать ключи на бумаге."
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. change_tomb_key ${=PARAM}
+#. ;;
+#.
+#. # STEGANOGRAPHY: hide key inside an image
+#. bury)
+#. [[ $STEGHIDE == 0 ]] && {
+#. > _failure "Steghide not installed: cannot bury keys into images." }
+#. bury_key $PARAM[1]
+#. ;;
+#.
+#. # STEGANOGRAPHY: read key hidden in an image
+#: tomb:2686
msgid "Steghide not installed: cannot bury keys into images."
msgstr "Steghide не установлен: не могу прятать ключи в изображениях."
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. bury_key $PARAM[1]
+#. ;;
+#.
+#. # STEGANOGRAPHY: read key hidden in an image
+#. exhume)
+#. [[ $STEGHIDE == 0 ]] && {
+#. > _failure "Steghide not installed: cannot exhume keys from images." }
+#. exhume_key $PARAM[1]
+#. ;;
+#.
+#. ## Internal commands useful to developers
+#: tomb:2693
msgid "Steghide not installed: cannot exhume keys from images."
msgstr "Steghide не установлен: не могу эксгумировать ключи из изображений."
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#.
+#. # Ask user for a password interactively
+#. askpass) ask_password $PARAM[1] $PARAM[2] ;;
+#.
+#. # Default operation: presentation, or version information with -v
+#. __default)
+#. > _print "Tomb ::1 version:: - a strong and gentle undertaker for your secrets" $VERSION
+#. _print "\000"
+#. _print " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+#. _print " This is free software: you are free to change and redistribute it"
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#: tomb:2707
msgid "Tomb ::1 version:: - a strong and gentle undertaker for your secrets"
msgstr "Tomb ::1 version:: - стойкий и аккуратный хранитель Ваших секретов"
-#: print
-msgid " Copyright (C) 2007-2014 Dyne.org Foundation, License GNU GPL v3+"
-msgstr " Все права защищены (C) 2007-2014 Dyne.org Foundation, Лицензия GNU GPL v3+"
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. askpass) ask_password $PARAM[1] $PARAM[2] ;;
+#.
+#. # Default operation: presentation, or version information with -v
+#. __default)
+#. _print "Tomb ::1 version:: - a strong and gentle undertaker for your secrets" $VERSION
+#. _print "\000"
+#. > _print " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+#. _print " This is free software: you are free to change and redistribute it"
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#: tomb:2709
+msgid " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+msgstr ""
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#.
+#. # Default operation: presentation, or version information with -v
+#. __default)
+#. _print "Tomb ::1 version:: - a strong and gentle undertaker for your secrets" $VERSION
+#. _print "\000"
+#. _print " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+#. > _print " This is free software: you are free to change and redistribute it"
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#: tomb:2710
msgid " This is free software: you are free to change and redistribute it"
-msgstr " Это свободное программное обеспечение: Вы в праве изменять и распространять его"
-
-#: print
+msgstr ""
+" Это свободное программное обеспечение: Вы в праве изменять и распространять "
+"его"
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. # Default operation: presentation, or version information with -v
+#. __default)
+#. _print "Tomb ::1 version:: - a strong and gentle undertaker for your secrets" $VERSION
+#. _print "\000"
+#. _print " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+#. _print " This is free software: you are free to change and redistribute it"
+#. > _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#. LANG=en
+#: tomb:2711
+msgid " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+msgstr ""
+" За последним исходным кодом зайдите на <http://dyne.org/software/tomb>"
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. _print " This is free software: you are free to change and redistribute it"
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#. LANG=en
+#. > _print " This source code is distributed in the hope that it will be useful,"
+#. _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. _print " When in need please refer to <http://dyne.org/support>."
+#: tomb:2716
msgid " This source code is distributed in the hope that it will be useful,"
msgstr " Этот исходный код распространяется с надежной, что он будет полезен,"
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#. LANG=en
+#. _print " This source code is distributed in the hope that it will be useful,"
+#. > _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. _print " When in need please refer to <http://dyne.org/support>."
+#. _print "\000"
+#: tomb:2717
msgid " but WITHOUT ANY WARRANTY; without even the implied warranty of"
msgstr " но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без предполагаемой"
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#. LANG=en
+#. _print " This source code is distributed in the hope that it will be useful,"
+#. _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. > _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. _print " When in need please refer to <http://dyne.org/support>."
+#. _print "\000"
+#. _print "System utils:"
+#: tomb:2718
msgid " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
msgstr " ТОВАРОПРИГОДНОСТИ или ПОЛЕЗНОСТИ ДЛЯ КОНКРЕТНЫХ ЦЕЛЕЙ."
-#: print
-msgid "System utils:"
-msgstr "Системные утилиты:"
-
-#: warning
-msgid "Command \"::1 subcommand::\" not recognized."
-msgstr "Команда \"::1 subcommand::\" не распознана."
-
-#: print
-msgid " passwd change the password of a KEY (needs old pass)"
-msgstr " passwd изменить пароль КЛЮЧА (требуется старый пароль)"
-
-#: print
-msgid " setkey change the KEY locking a TOMB (needs old key and pass)"
-msgstr " setkey изменить КЛЮЧ, запирающий ГРОБНИЦУ (требуется старый ключ и пароль)"
-
-#: print
-msgid " // Backup on paper:"
-msgstr " // Резервная копия на бумаге:"
-
-#: print
-msgid " // Steganography:"
-msgstr " // Стеганография:"
-
-#: print
-msgid " bury hide a KEY inside a JPEG image (for use with -k)"
-msgstr " bury спрятать КЛЮЧ внутри изображения JPEG (для использования с -k)"
-
-#: print
-msgid " exhume extract a KEY from a JPEG image (prints to stdout)"
-msgstr " exhume извлечь КЛЮЧ из изображения JPEG (выводится в стандартный вывод)"
-
-#: failure
-msgid "Exhume failed, no image specified"
-msgstr "Эксгумация не удалась, не указано изображения"
-
-#: print
-msgid " For the latest sourcecode go to <http://dyne.org/software/tomb>"
-msgstr " За последним исходным кодом зайдите на <http://dyne.org/software/tomb>"
-
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. local langwas=$LANG
+#. LANG=en
+#. _print " This source code is distributed in the hope that it will be useful,"
+#. _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. > _print " When in need please refer to <http://dyne.org/support>."
+#. _print "\000"
+#. _print "System utils:"
+#. _print "\000"
+#. cat <<EOF
+#: tomb:2720
msgid " When in need please refer to <http://dyne.org/support>."
msgstr " Если Вам нужна помощь, обращайтесь к <http://dyne.org/support>."
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. _print " This source code is distributed in the hope that it will be useful,"
+#. _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. _print " When in need please refer to <http://dyne.org/support>."
+#. _print "\000"
+#. > _print "System utils:"
+#. _print "\000"
+#. cat <<EOF
+#. `sudo -V | head -n1`
+#. `cryptsetup --version`
+#: tomb:2722
+msgid "System utils:"
+msgstr "Системные утилиты:"
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. `cryptsetup --version`
+#. `pinentry --version`
+#. `gpg --version | head -n1` - key forging algorithms (GnuPG symmetric ciphers):
+#. `list_gnupg_ciphers`
+#. EOF
+#. _print "\000"
+#. > _print "Optional utils:"
+#. _print "\000"
+#. _list_optional_tools version
+#. return 0
+#. }
+#: tomb:2732
msgid "Optional utils:"
msgstr "Дополнительные утилиты:"
-#: failure
-msgid "Fatal error setting the permission umask for temporary files"
-msgstr "Критическая ошибка при задании маски прав для временных файлов"
-
-#: failure
-msgid "Fatal error setting ownership on temporary file: ::1 temp file::"
-msgstr "Критическая ошибка при задании владельца временного файла ::1 temp file::"
-
-#: warning
-msgid "cleartext key from stdin selected: this is unsafe."
-msgstr "выбран ключ, явно указанный через стандартный ввод: это небезопасно."
-
-#: failure
-msgid "please use --unsafe if you really want to do this."
-msgstr "пожалуйчтв, используйте --unsafe, если Вы действительно этого хотите."
-
-#: warning
-msgid "received key in cleartext from stdin (unsafe mode)"
-msgstr "получен ключ в явном виде через стандартный ввод (небезопасный режим)"
-
-#: failure
-msgid "You specified option ::1 option::, which is DANGEROUS and should only be used for testing\n"
-"If you really want so, add --unsafe"
-msgstr "Вы указали опцию ::1 option::, которая ОПАСНА и должна быть использована только для тестирования\n"
-"Если Вы и правда этого хотите, добавьте параметр --unsafe"
-
-#: failure
-msgid "Failing to identify the user who is calling us"
-msgstr "Не удалось определить пользователя, вызвавшего меня"
-
-#: failure
-msgid "Fatal error creating the temporary directory: ::1 temp dir::"
-msgstr "Критическая ошибка при создании временной директории: ::1 temp dir::"
-
-#: failure
-msgid "Someone is messing up with us trying to hijack temporary files."
-msgstr "Кто-то наглый пытается похитить наши временные файлы."
-
-#: success
-msgid "All your swaps are belong to crypt. Good."
-msgstr "All your swaps are belong to crypt. Хорошо."
-
-#: success
-msgid "Changing password for ::1 key file::"
-msgstr "Меняю пароль для ::1 key file::"
-
-#: success
-msgid "Your passphrase was successfully updated."
-msgstr "Ваш пароль успешно обновлен."
-
-#: success
-msgid "Using KDF, iterations: ::1 microseconds::"
-msgstr "Использую KDF, итераций: ::1 microseconds::"
-
-#: success
-msgid "Encoding key ::1 tomb key:: inside image ::2 image file::"
-msgstr "Кодирую ключ ::1 tomb key:: в изображение ::2 image file::"
-
-#: success
-msgid "Tomb key encoded succesfully into image ::1 image file::"
-msgstr "Ключ от гробницы успешно закодирован в изображение ::1 image file::"
-
-#: success
-msgid "Key succesfully exhumed to ::1 key::."
-msgstr "Ключ успешно эксгумирован в ::1 key::"
-
-#: success
-msgid "Rendering a printable QRCode for key: ::1 tomb key file::"
-msgstr "Рендерю готовый для печати штрих-код для ключа: ::1 tomb key file::"
-
-#: success
-msgid "Operation successful:"
-msgstr "Операция успешна."
-
-#: success
-msgid "Creating a new tomb in ::1 tomb path::"
-msgstr "Создаю новую гробницу в ::1 tomb path::"
-
-#: success
-msgid "Done digging ::1 tomb name::"
-msgstr "::1 tomb name:: выкопана"
-
-#: success
-msgid "Choose the password of your key: ::1 tomb key::"
-msgstr "Выберите пароль для вашего ключа: ::1 tomb key::"
-
-#: success
-msgid "Your key is ready:"
-msgstr "Ваш ключ готов:"
-
-#: success
-msgid "Locking ::1 tomb file:: with ::2 tomb key file::"
-msgstr "Запираю ::1 tomb file:: с помощью ::2 tomb key file::"
-
-#: success
-msgid "Your tomb is ready in ::1 tomb path:: and secured with key ::2 tomb key::"
-msgstr "Ваша гробница готова в ::1 tomb path:: и защищена ключом ::2 tomb key::"
-
-#: success
-msgid "Changing lock on tomb ::1 tomb name::"
-msgstr "Меняю замок на гробнице ::1 tomb name::"
-
-#: success
-msgid "Succesfully changed key for tomb: ::1 tomb file::"
-msgstr "Ключ для гробницы ::1 tomb file:: успешно изменен"
-
-#: success
-msgid "Opening ::1 tomb file:: on ::2 mount point::"
-msgstr "Открываю ::1 tomb file:: в ::2 mount point::"
-
-#: success
-msgid "Success unlocking tomb ::1 tomb name::"
-msgstr "Успешно отпер гробницу ::1 tomb name::"
-
-#: success
-msgid "Success opening ::1 tomb file:: on ::2 mount point::"
-msgstr "Успешно открыл ::1 tomb file:: в ::2 mount point::"
-
-#: success
-msgid "Post hooks found, executing as user ::1 user name::."
-msgstr "Найдены пост-обработчики, выполняю как пользователь ::1 user name::."
-
-#: success
-msgid "Creating and updating search indexes."
-msgstr "Создаю и обновляю индексы поиска."
-
-#: message
-msgid "Generating a new swish-e configuration file: ::1 swish conf::"
-msgstr "Генерирую новый файл конфигурации swish-e: ::1 swish conf::"
-
-#: success
-msgid "Searching for: ::1::"
-msgstr "Ищу: ::1::"
-
-#: success
-msgid "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::"
-msgstr "Захлопываю гробницу ::1 tomb name::, примонтированную на ::2 mount point::"
-
-#: success
-#, fuzzy
-msgid "Slamming tomb: killing all processes using this hook."
-msgstr "Захлопываю гробницу: убиваю все процессы, использующие эту привязку."
-
-#: success
-msgid "Tomb ::1 tomb name:: closed: your bones will rest in peace."
-msgstr "Гробница ::1 tomb name:: закрыта: да упокоятся с миром Ваши кости."
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. }
+#. usage
+#. ;;
+#.
+#. # Reject unknown command and suggest help
+#. *)
+#. > _warning "Command \"::1 subcommand::\" not recognized." $subcommand
+#. _message "Try -h for help."
+#. return 1
+#. ;;
+#. esac
+#: tomb:2742
+msgid "Command \"::1 subcommand::\" not recognized."
+msgstr "Команда \"::1 subcommand::\" не распознана."
-#: warning
-msgid "Pinentry error: ::1 error::"
-msgstr "Ошибка pinentry: ::1 error::"
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. usage
+#. ;;
+#.
+#. # Reject unknown command and suggest help
+#. *)
+#. _warning "Command \"::1 subcommand::\" not recognized." $subcommand
+#. > _message "Try -h for help."
+#. return 1
+#. ;;
+#. esac
+#. return $?
+#: tomb:2743
+msgid "Try -h for help."
+msgstr "Используйте -h для вызова справки."
-#: warning
-msgid "Empty password"
-msgstr "Пустой пароль"
+#~ msgid " -o mount options used to open (default: rw,noatime,nodev)"
+#~ msgstr ""
+#~ " -o параметры монтирования при открытии (по умолчанию rw,noatime,"
+#~ "nodev) "
+#~ msgid " Copyright (C) 2007-2014 Dyne.org Foundation, License GNU GPL v3+"
+#~ msgstr ""
+#~ " Все права защищены (C) 2007-2014 Dyne.org Foundation, Лицензия GNU GPL "
+#~ "v3+"
diff --git a/extras/po/tomb.pot b/extras/po/tomb.pot
@@ -1,12 +1,12 @@
+
# Tomb - The Crypto Undertaker.
-# Copyright (C) 2007-2013 Dyne.org Foundation
+# Copyright (C) 2007-2014 Dyne.org Foundation
# Denis Roio <jaromil@dyne.org>, 2013.
#
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: Tomb \n"
-"PO-Revision-Date: Wed Nov 26 17:50:10 CET 2014\n"
+"PO-Revision-Date: Fri Jan 9 17:08:25 2015\n"
"Last-Translator: Denis Roio <jaromil@dyne.org>\n"
"Language: English\n"
"Language-Team: Tomb developers <crypto@lists.dyne.org>\n"
@@ -14,1123 +14,5456 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: failure
+#. Fold: Safety functions
+#. Function: _whoami
+#.
+#. Code sample:
+#.
+#. # Set username from UID or environment
+#. _USER=$SUDO_USER
+#. [[ "$_USER" = "" ]] && { _USER=$USERNAME }
+#. [[ "$_USER" = "" ]] && { _USER=$(id -u) }
+#. [[ "$_USER" = "" ]] && {
+#. > _failure "Failing to identify the user who is calling us" }
+#.
+#. # Get GID from option -G or the environment
+#. option_is_set -G \
+#. && _GID=$(option_value -G) || _GID=$(id -g $_USER)
+#: tomb:189
msgid "Failing to identify the user who is calling us"
msgstr ""
-#: failure
+#. Fold: Safety functions
+#. Function: _plot
+#.
+#. Code sample:
+#. TOMBFILE=$(basename $TOMBPATH)
+#.
+#. # The tomb name is TOMBFILE without an extension.
+#. # It can start with dots: ..foo.tomb -> ..foo
+#. TOMBNAME="${TOMBFILE%\.[^\.]*}"
+#. [[ -z $TOMBNAME ]] && {
+#. > _failure "Tomb won't work without a TOMBNAME." }
+#.
+#. # Normalize tomb name
+#. TOMBFILE="$TOMBNAME.tomb"
+#.
+#: tomb:237
msgid "Tomb won't work without a TOMBNAME."
msgstr ""
-#: failure
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#.
+#. # Provide a random filename in shared memory
+#. _tmp_create() {
+#. [[ -d "$TMPPREFIX" ]] || {
+#. # we create the tempdir with the sticky bit on
+#. sudo mkdir -m 1777 "$TMPPREFIX"
+#. > [[ $? == 0 ]] || _failure "Fatal error creating the temporary directory: ::1 temp dir::" "$TMPPREFIX"
+#. }
+#.
+#. # We're going to add one more $RANDOM for each time someone complain
+#. # about this being too weak of a random.
+#: tomb:252
msgid "Fatal error creating the temporary directory: ::1 temp dir::"
msgstr ""
-#: failure
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#.
+#. # We're going to add one more $RANDOM for each time someone complain
+#. # about this being too weak of a random.
+#. tfile="${TMPPREFIX}/$RANDOM$RANDOM$RANDOM$RANDOM" # Temporary file
+#. umask 066
+#. [[ $? == 0 ]] || {
+#. > _failure "Fatal error setting the permission umask for temporary files" }
+#.
+#. [[ -r "$tfile" ]] && {
+#. _failure "Someone is messing up with us trying to hijack temporary files." }
+#.
+#: tomb:260
msgid "Fatal error setting the permission umask for temporary files"
msgstr ""
-#: failure
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#. tfile="${TMPPREFIX}/$RANDOM$RANDOM$RANDOM$RANDOM" # Temporary file
+#. umask 066
+#. [[ $? == 0 ]] || {
+#. _failure "Fatal error setting the permission umask for temporary files" }
+#.
+#. [[ -r "$tfile" ]] && {
+#. > _failure "Someone is messing up with us trying to hijack temporary files." }
+#.
+#. touch "$tfile"
+#. [[ $? == 0 ]] || {
+#. _failure "Fatal error creating a temporary file: ::1 temp file::" "$tfile" }
+#: tomb:263
msgid "Someone is messing up with us trying to hijack temporary files."
msgstr ""
-#: failure
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#.
+#. [[ -r "$tfile" ]] && {
+#. _failure "Someone is messing up with us trying to hijack temporary files." }
+#.
+#. touch "$tfile"
+#. [[ $? == 0 ]] || {
+#. > _failure "Fatal error creating a temporary file: ::1 temp file::" "$tfile" }
+#.
+#. [[ $? == 0 ]] || {
+#. _failure "Fatal error setting ownership on temporary file: ::1 temp file::" "$tfile" }
+#.
+#: tomb:267
msgid "Fatal error creating a temporary file: ::1 temp file::"
msgstr ""
-#: failure
+#. Fold: Safety functions
+#. Function: _tmp_create
+#.
+#. Code sample:
+#.
+#. touch "$tfile"
+#. [[ $? == 0 ]] || {
+#. _failure "Fatal error creating a temporary file: ::1 temp file::" "$tfile" }
+#.
+#. [[ $? == 0 ]] || {
+#. > _failure "Fatal error setting ownership on temporary file: ::1 temp file::" "$tfile" }
+#.
+#. _verbose "Created tempfile: ::1 temp file::" "$tfile"
+#. TOMBTMP="$tfile"
+#. TOMBTMPFILES+=("$tfile")
+#: tomb:270
msgid "Fatal error setting ownership on temporary file: ::1 temp file::"
msgstr ""
-#: success
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. r=1
+#. is_crypt=`sudo dmsetup status "$s" | awk '/crypt/ {print $3}'`
+#. [[ $is_crypt == "crypt" ]] && { r=2 } || { break }
+#.
+#. fi
+#. done
+#. > _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#: tomb:316
+msgid "An active swap partition is detected..."
+msgstr ""
+
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. [[ $is_crypt == "crypt" ]] && { r=2 } || { break }
+#.
+#. fi
+#. done
+#. _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. > _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#. _warning "You can deactivate all swap partitions using the command:"
+#. _warning " swapoff -a"
+#: tomb:318
msgid "All your swaps are belong to crypt. Good."
msgstr ""
-#: warning
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. fi
+#. done
+#. _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. > _warning "This poses a security risk."
+#. _warning "You can deactivate all swap partitions using the command:"
+#. _warning " swapoff -a"
+#. _warning "But if you want to proceed like this, use the -f (force) flag."
+#. fi
+#: tomb:320
+msgid "This poses a security risk."
+msgstr ""
+
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. done
+#. _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#. > _warning "You can deactivate all swap partitions using the command:"
+#. _warning " swapoff -a"
+#. _warning "But if you want to proceed like this, use the -f (force) flag."
+#. fi
+#. return $r
+#: tomb:321
msgid "You can deactivate all swap partitions using the command:"
msgstr ""
-#: warning
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. _message "An active swap partition is detected..."
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#. _warning "You can deactivate all swap partitions using the command:"
+#. > _warning " swapoff -a"
+#. _warning "But if you want to proceed like this, use the -f (force) flag."
+#. fi
+#. return $r
+#.
+#: tomb:322
msgid " swapoff -a"
msgstr ""
-#: warning
+#. Fold: Safety functions
+#. Function: _ensure_safe_swap
+#.
+#. Code sample:
+#. if [[ $r -eq 2 ]]; then
+#. _success "All your swaps are belong to crypt. Good."
+#. else
+#. _warning "This poses a security risk."
+#. _warning "You can deactivate all swap partitions using the command:"
+#. _warning " swapoff -a"
+#. > _warning "But if you want to proceed like this, use the -f (force) flag."
+#. fi
+#. return $r
+#.
+#. }
+#: tomb:323
msgid "But if you want to proceed like this, use the -f (force) flag."
msgstr ""
-#: failure
+#. Fold: Safety functions
+#. Function: _check_swap
+#.
+#. Code sample:
+#. _ensure_safe_swap
+#. case $? in
+#. 0|2) # No, or encrypted swap
+#. return 0
+#. ;;
+#. *) # Unencrypted swap
+#. > _failure "Operation aborted."
+#. ;;
+#. esac
+#. fi
+#. }
+#: tomb:342
msgid "Operation aborted."
msgstr ""
-#: failure
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#. SETTITLE $title
+#. SETDESC $description
+#. SETPROMPT Password:
+#. GETPIN
+#. EOF`
+#. else
+#. > _failure "Cannot find pinentry-curses and no DISPLAY detected."
+#. fi
+#.
+#. else # a DISPLAY is found to be active
+#.
+#: tomb:379
msgid "Cannot find pinentry-curses and no DISPLAY detected."
msgstr ""
-#: warning
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#. EOF`
+#.
+#. else
+#.
+#. if _is_found "pinentry-curses"; then
+#.
+#. > _warning "Detected DISPLAY, but only pinentry-curses is found."
+#. output=`cat <<EOF | pinentry-curses
+#. OPTION ttyname=$TTY
+#. OPTION lc-ctype=$LANG
+#. SETTITLE $title
+#: tomb:432
msgid "Detected DISPLAY, but only pinentry-curses is found."
msgstr ""
-#: failure
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#. SETTITLE $title
+#. SETDESC $description
+#. SETPROMPT Password:
+#. GETPIN
+#. EOF`
+#. else
+#. > _failure "Cannot find any pinentry: impossible to ask for password."
+#. fi
+#.
+#. fi
+#.
+#: tomb:442
msgid "Cannot find any pinentry: impossible to ask for password."
msgstr ""
-#: warning
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#.
+#. fi # end of DISPLAY block
+#.
+#. # parse the pinentry output
+#. for i in ${(f)output}; do
+#. [[ "$i" =~ "^ERR.*" ]] && {
+#. > _warning "Pinentry error: ::1 error::" ${i[(w)3]}
+#. print "canceled"
+#. return 1 }
+#.
+#. # here the password is found
+#: tomb:452
msgid "Pinentry error: ::1 error::"
msgstr ""
-#: warning
+#. Fold: Safety functions
+#. Function: ask_password
+#.
+#. Code sample:
+#.
+#. # here the password is found
+#. [[ "$i" =~ "^D .*" ]] && password="${i##D }"
+#. done
+#.
+#. [[ "$password" = "" ]] && {
+#. > _warning "Empty password"
+#. print "empty"
+#. return 1 }
+#.
+#. print "$password"
+#: tomb:461
msgid "Empty password"
msgstr ""
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. # Check if a filename is a valid tomb
+#. is_valid_tomb() {
+#. _verbose "is_valid_tomb ::1 tomb file::" $1
+#.
+#. # First argument must be the path to a tomb
+#. [[ -z "$1" ]] && {
+#. > _failure "Tomb file is missing from arguments." }
+#.
+#. # Tomb file must be a readable, writable, not-empty regular file.
+#. [[ ! -r "$1" ]] && {
+#. _failure "Tomb file not found: ::1 tomb file::" $1 }
+#: tomb:477
msgid "Tomb file is missing from arguments."
msgstr ""
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. # First argument must be the path to a tomb
+#. [[ -z "$1" ]] && {
+#. _failure "Tomb file is missing from arguments." }
+#.
+#. # Tomb file must be a readable, writable, not-empty regular file.
+#. [[ ! -r "$1" ]] && {
+#. > _failure "Tomb file not found: ::1 tomb file::" $1 }
+#. [[ ! -f "$1" ]] && {
+#. _failure "Tomb file is not a regular file: ::1 tomb file::" $1 }
+#. [[ ! -s "$1" ]] && {
+#. _failure "Tomb file is empty (zero length): ::1 tomb file::" $1 }
+#: tomb:481
msgid "Tomb file not found: ::1 tomb file::"
msgstr ""
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. _failure "Tomb file is missing from arguments." }
+#.
+#. # Tomb file must be a readable, writable, not-empty regular file.
+#. [[ ! -r "$1" ]] && {
+#. _failure "Tomb file not found: ::1 tomb file::" $1 }
+#. [[ ! -f "$1" ]] && {
+#. > _failure "Tomb file is not a regular file: ::1 tomb file::" $1 }
+#. [[ ! -s "$1" ]] && {
+#. _failure "Tomb file is empty (zero length): ::1 tomb file::" $1 }
+#. [[ ! -w "$1" ]] && {
+#. _failure "Tomb file is not writable: ::1 tomb file::" $1 }
+#: tomb:483
msgid "Tomb file is not a regular file: ::1 tomb file::"
msgstr ""
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. # Tomb file must be a readable, writable, not-empty regular file.
+#. [[ ! -r "$1" ]] && {
+#. _failure "Tomb file not found: ::1 tomb file::" $1 }
+#. [[ ! -f "$1" ]] && {
+#. _failure "Tomb file is not a regular file: ::1 tomb file::" $1 }
+#. [[ ! -s "$1" ]] && {
+#. > _failure "Tomb file is empty (zero length): ::1 tomb file::" $1 }
+#. [[ ! -w "$1" ]] && {
+#. _failure "Tomb file is not writable: ::1 tomb file::" $1 }
+#.
+#. # TODO: split the rest of that function out.
+#: tomb:485
msgid "Tomb file is empty (zero length): ::1 tomb file::"
msgstr ""
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. _failure "Tomb file not found: ::1 tomb file::" $1 }
+#. [[ ! -f "$1" ]] && {
+#. _failure "Tomb file is not a regular file: ::1 tomb file::" $1 }
+#. [[ ! -s "$1" ]] && {
+#. _failure "Tomb file is empty (zero length): ::1 tomb file::" $1 }
+#. [[ ! -w "$1" ]] && {
+#. > _failure "Tomb file is not writable: ::1 tomb file::" $1 }
+#.
+#. # TODO: split the rest of that function out.
+#. # We already have a valid tomb, now we're checking
+#. # whether we can alter it.
+#: tomb:487
msgid "Tomb file is not writable: ::1 tomb file::"
msgstr ""
-#: warning
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. # TODO: split the rest of that function out.
+#. # We already have a valid tomb, now we're checking
+#. # whether we can alter it.
+#.
+#. # Tomb file may be a LUKS FS (or we are creating it)
+#. [[ "`file $1`" =~ "luks encrypted file" ]] || {
+#. > _warning "File is not yet a tomb: ::1 tomb file::" $1 }
+#.
+#. _plot $1 # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. # Tomb cannot be already mounted (or we cannot alter it)
+#: tomb:495
msgid "File is not yet a tomb: ::1 tomb file::"
msgstr ""
-#: failure
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#. _warning "File is not yet a tomb: ::1 tomb file::" $1 }
+#.
+#. _plot $1 # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. # Tomb cannot be already mounted (or we cannot alter it)
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]$" ]] && {
+#. > _failure "Tomb is currently in use: ::1 tomb name::" $TOMBNAME
+#. }
+#.
+#. _message "Valid tomb file found: ::1 tomb path::" $TOMBPATH
+#.
+#: tomb:501
msgid "Tomb is currently in use: ::1 tomb name::"
msgstr ""
-#: message
+#. Fold: Safety functions
+#. Function: is_valid_tomb
+#.
+#. Code sample:
+#.
+#. # Tomb cannot be already mounted (or we cannot alter it)
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]$" ]] && {
+#. _failure "Tomb is currently in use: ::1 tomb name::" $TOMBNAME
+#. }
+#.
+#. > _message "Valid tomb file found: ::1 tomb path::" $TOMBPATH
+#.
+#. return 0
+#. }
+#.
+#: tomb:504
msgid "Valid tomb file found: ::1 tomb path::"
msgstr ""
-#: warning
+#. Fold: Safety functions
+#. Function: lo_mount
+#.
+#. Code sample:
+#. lo_mount() {
+#. tpath="$1"
+#.
+#. # check if we have support for loop mounting
+#. _nstloop=`sudo losetup -f`
+#. [[ $? = 0 ]] || {
+#. > _warning "Loop mount of volumes is not possible on this machine, this error"
+#. _warning "often occurs on VPS and kernels that don't provide the loop module."
+#. _warning "It is impossible to use Tomb on this machine at this conditions."
+#. _failure "Operation aborted."
+#. }
+#: tomb:516
msgid "Loop mount of volumes is not possible on this machine, this error"
msgstr ""
-#: warning
+#. Fold: Safety functions
+#. Function: lo_mount
+#.
+#. Code sample:
+#. tpath="$1"
+#.
+#. # check if we have support for loop mounting
+#. _nstloop=`sudo losetup -f`
+#. [[ $? = 0 ]] || {
+#. _warning "Loop mount of volumes is not possible on this machine, this error"
+#. > _warning "often occurs on VPS and kernels that don't provide the loop module."
+#. _warning "It is impossible to use Tomb on this machine at this conditions."
+#. _failure "Operation aborted."
+#. }
+#.
+#: tomb:517
msgid "often occurs on VPS and kernels that don't provide the loop module."
msgstr ""
-#: warning
+#. Fold: Safety functions
+#. Function: lo_mount
+#.
+#. Code sample:
+#.
+#. # check if we have support for loop mounting
+#. _nstloop=`sudo losetup -f`
+#. [[ $? = 0 ]] || {
+#. _warning "Loop mount of volumes is not possible on this machine, this error"
+#. _warning "often occurs on VPS and kernels that don't provide the loop module."
+#. > _warning "It is impossible to use Tomb on this machine at this conditions."
+#. _failure "Operation aborted."
+#. }
+#.
+#. sudo losetup -f "$tpath" # allocates the next loopback for our file
+#: tomb:518
msgid "It is impossible to use Tomb on this machine at this conditions."
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#.
+#. # }}}
+#.
+#. # {{{ Commandline interaction
+#.
+#. usage() {
+#. > _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#: tomb:558
msgid "Syntax: tomb [options] command [arguments]"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#.
+#. # {{{ Commandline interaction
+#.
+#. usage() {
+#. _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. > _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#: tomb:560
msgid "Commands:"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#.
+#. usage() {
+#. _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. > _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#: tomb:562
msgid " // Creation:"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. usage() {
+#. _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#. > _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#: tomb:563
msgid " dig create a new empty TOMB file of size -s in MB"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "Syntax: tomb [options] command [arguments]"
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. > _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#: tomb:564
msgid " forge create a new KEY file and set its password"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print "Commands:"
+#. _print "\000"
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. > _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#: tomb:565
msgid " lock installs a lock on a TOMB to use it with KEY"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. > _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#: tomb:567
msgid " // Operations on tombs:"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " // Creation:"
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. > _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#: tomb:568
msgid " open open an existing TOMB"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " dig create a new empty TOMB file of size -s in MB"
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. > _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#: tomb:569
msgid " index update the search indexes of tombs"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " forge create a new KEY file and set its password"
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. > _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#: tomb:570
msgid " search looks for filenames matching text patterns"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " lock installs a lock on a TOMB to use it with KEY"
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. > _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#: tomb:571
msgid " list list of open TOMBs and information on them"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. > _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#: tomb:572
msgid " close close a specific TOMB (or 'all')"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " // Operations on tombs:"
+#. _print " open open an existing TOMB"
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. > _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#: tomb:573
msgid " slam slam a TOMB killing all programs using it"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " index update the search indexes of tombs"
+#. _print " search looks for filenames matching text patterns"
+#. _print " list list of open TOMBs and information on them"
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. > _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#. _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#: tomb:575
msgid " resize resize a TOMB to a new size -s (can only grow)"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " close close a specific TOMB (or 'all')"
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#. > _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#. _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#: tomb:578
msgid " // Operations on keys:"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " slam slam a TOMB killing all programs using it"
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#. _print " // Operations on keys:"
+#. > _print " passwd change the password of a KEY (needs old pass)"
+#. _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#. _print " // Backup on paper:"
+#: tomb:579
msgid " passwd change the password of a KEY (needs old pass)"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. [[ $RESIZER == 1 ]] && {
+#. _print " resize resize a TOMB to a new size -s (can only grow)"
+#. }
+#. _print "\000"
+#. _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#. > _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#. _print " // Backup on paper:"
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#: tomb:580
msgid " setkey change the KEY locking a TOMB (needs old key and pass)"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#. _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#. > _print " // Backup on paper:"
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#: tomb:583
msgid " // Backup on paper:"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " // Operations on keys:"
+#. _print " passwd change the password of a KEY (needs old pass)"
+#. _print " setkey change the KEY locking a TOMB (needs old key and pass)"
+#. _print "\000"
+#. [[ $QRENCODE == 1 ]] && {
+#. _print " // Backup on paper:"
+#. > _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#. _print " // Steganography:"
+#: tomb:584
msgid " engrave makes a QR code of a KEY to be saved on paper"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. [[ $QRENCODE == 1 ]] && {
+#. _print " // Backup on paper:"
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#. > _print " // Steganography:"
+#. _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#: tomb:588
msgid " // Steganography:"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " // Backup on paper:"
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#. _print " // Steganography:"
+#. > _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. _print "Options:"
+#: tomb:589
msgid " bury hide a KEY inside a JPEG image (for use with -k)"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " engrave makes a QR code of a KEY to be saved on paper"
+#. }
+#. _print "\000"
+#. [[ $STEGHIDE == 1 ]] && {
+#. _print " // Steganography:"
+#. _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. > _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#: tomb:590
msgid " exhume extract a KEY from a JPEG image (prints to stdout)"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. [[ $STEGHIDE == 1 ]] && {
+#. _print " // Steganography:"
+#. _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. > _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#: tomb:593
msgid "Options:"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " bury hide a KEY inside a JPEG image (for use with -k)"
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#. > _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#: tomb:595
msgid " -s size of the tomb file when creating/resizing one (in MB)"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " exhume extract a KEY from a JPEG image (prints to stdout)"
+#. }
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. > _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#: tomb:596
msgid " -k path to the key to be used ('-k -' to read from stdin)"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. }
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. > _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#: tomb:597
msgid " -n don't process the hooks found in tomb"
msgstr ""
-#: print
-msgid " -o mount options used to open (default: rw,noatime,nodev)"
-msgstr ""
-
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. > _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#: tomb:598
+msgid " -o options passed to local command, e.g.:"
+msgstr ""
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "Options:"
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. > _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#: tomb:599
+msgid " - mount options used to open (default: rw,noatime,nodev)"
+msgstr ""
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. > _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#: tomb:600
+msgid " - an alternate cipher to forge and lock"
+msgstr ""
+
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " -s size of the tomb file when creating/resizing one (in MB)"
+#. _print " -k path to the key to be used ('-k -' to read from stdin)"
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. > _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#: tomb:601
msgid " -f force operation (i.e. even if swap is active)"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " -n don't process the hooks found in tomb"
+#. _print " -o options passed to local command, e.g.:"
+#. _print " - mount options used to open (default: rw,noatime,nodev)"
+#. _print " - an alternate cipher to forge and lock"
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. > _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#. _print "\000"
+#. _print " -h print this help"
+#: tomb:603
msgid " --kdf generate passwords armored against dictionary attacks"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " -f force operation (i.e. even if swap is active)"
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#. _print "\000"
+#. > _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#: tomb:607
msgid " -h print this help"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. [[ $KDF == 1 ]] && {
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#. _print "\000"
+#. _print " -h print this help"
+#. > _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#. _print "For more informations on Tomb read the manual: man tomb"
+#: tomb:608
msgid " -v print version, license and list of available ciphers"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " --kdf generate passwords armored against dictionary attacks"
+#. }
+#.
+#. _print "\000"
+#. _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. > _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#. _print "For more informations on Tomb read the manual: man tomb"
+#. _print "Please report bugs on <http://github.com/dyne/tomb/issues>."
+#: tomb:609
msgid " -q run quietly without printing informations"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. }
+#.
+#. _print "\000"
+#. _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. > _print " -D print debugging information at runtime"
+#. _print "\000"
+#. _print "For more informations on Tomb read the manual: man tomb"
+#. _print "Please report bugs on <http://github.com/dyne/tomb/issues>."
+#. }
+#: tomb:610
msgid " -D print debugging information at runtime"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print "\000"
+#. _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#. > _print "For more informations on Tomb read the manual: man tomb"
+#. _print "Please report bugs on <http://github.com/dyne/tomb/issues>."
+#. }
+#.
+#.
+#: tomb:612
msgid "For more informations on Tomb read the manual: man tomb"
msgstr ""
-#: print
+#. Fold: Commandline interaction
+#. Function: usage
+#.
+#. Code sample:
+#. _print " -h print this help"
+#. _print " -v print version, license and list of available ciphers"
+#. _print " -q run quietly without printing informations"
+#. _print " -D print debugging information at runtime"
+#. _print "\000"
+#. _print "For more informations on Tomb read the manual: man tomb"
+#. > _print "Please report bugs on <http://github.com/dyne/tomb/issues>."
+#. }
+#.
+#.
+#. # Check whether a commandline option is set.
+#: tomb:613
msgid "Please report bugs on <http://github.com/dyne/tomb/issues>."
msgstr ""
-#: failure
+#. Fold: Commandline interaction
+#. Function: _ensure_dependencies
+#.
+#. Code sample:
+#. # missing, bail out.
+#. _ensure_dependencies() {
+#.
+#. # Check for required programs
+#. for req in cryptsetup pinentry sudo gpg mkfs.ext4 e2fsck; do
+#. command -v $req 1>/dev/null 2>/dev/null || {
+#. > _failure "Missing required dependency ::1 command::. Please install it." $req }
+#. done
+#.
+#. # Ensure system binaries are available in the PATH
+#. path+=(/sbin /usr/sbin) # zsh magic
+#: tomb:748
msgid "Missing required dependency ::1 command::. Please install it."
msgstr ""
-#: warning
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#.
+#. _verbose "is_valid_key"
+#.
+#. [[ -z $key ]] && key=$TOMBKEY
+#. [[ "$key" = "cleartext" ]] && {
+#. { option_is_set --unsafe } || {
+#. > _warning "cleartext key from stdin selected: this is unsafe."
+#. exitv=127 _failure "please use --unsafe if you really want to do this."
+#. }
+#. _warning "received key in cleartext from stdin (unsafe mode)"
+#. return 0 }
+#: tomb:785
msgid "cleartext key from stdin selected: this is unsafe."
msgstr ""
-#: failure
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. _verbose "is_valid_key"
+#.
+#. [[ -z $key ]] && key=$TOMBKEY
+#. [[ "$key" = "cleartext" ]] && {
+#. { option_is_set --unsafe } || {
+#. _warning "cleartext key from stdin selected: this is unsafe."
+#. > exitv=127 _failure "please use --unsafe if you really want to do this."
+#. }
+#. _warning "received key in cleartext from stdin (unsafe mode)"
+#. return 0 }
+#.
+#: tomb:786
msgid "please use --unsafe if you really want to do this."
msgstr ""
-#: warning
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. [[ -z $key ]] && key=$TOMBKEY
+#. [[ "$key" = "cleartext" ]] && {
+#. { option_is_set --unsafe } || {
+#. _warning "cleartext key from stdin selected: this is unsafe."
+#. exitv=127 _failure "please use --unsafe if you really want to do this."
+#. }
+#. > _warning "received key in cleartext from stdin (unsafe mode)"
+#. return 0 }
+#.
+#. [[ -z $key ]] && {
+#. _warning "is_valid_key() called without an argument."
+#: tomb:788
msgid "received key in cleartext from stdin (unsafe mode)"
msgstr ""
-#: warning
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. exitv=127 _failure "please use --unsafe if you really want to do this."
+#. }
+#. _warning "received key in cleartext from stdin (unsafe mode)"
+#. return 0 }
+#.
+#. [[ -z $key ]] && {
+#. > _warning "is_valid_key() called without an argument."
+#. return 1
+#. }
+#.
+#. # If the key file is an image don't check file header
+#: tomb:792
msgid "is_valid_key() called without an argument."
msgstr ""
-#: message
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. }
+#.
+#. # If the key file is an image don't check file header
+#. [[ -r $TOMBKEYFILE ]] \
+#. && [[ $(file $TOMBKEYFILE) =~ "JP.G" ]] \
+#. && {
+#. > _message "Key is an image, it might be valid."
+#. return 0 }
+#.
+#. [[ $key =~ "BEGIN PGP" ]] && {
+#. _message "Key is valid."
+#: tomb:800
msgid "Key is an image, it might be valid."
msgstr ""
-#: message
+#. Fold: Key operations
+#. Function: is_valid_key
+#.
+#. Code sample:
+#. && [[ $(file $TOMBKEYFILE) =~ "JP.G" ]] \
+#. && {
+#. _message "Key is an image, it might be valid."
+#. return 0 }
+#.
+#. [[ $key =~ "BEGIN PGP" ]] && {
+#. > _message "Key is valid."
+#. return 0 }
+#.
+#. return 1
+#. }
+#: tomb:804
msgid "Key is valid."
msgstr ""
-#: warning
+#. Fold: Key operations
+#. Function: _tomb_key_recover recover_key
+#.
+#. Code sample:
+#. }
+#.
+#. # $1 is a string containing an encrypted key
+#. _tomb_key_recover recover_key() {
+#. local key="${1}" # Unique argument is an encrypted key
+#.
+#. > _warning "Attempting key recovery."
+#.
+#. _head="${key[(f)1]}" # take the first line
+#.
+#. TOMBKEY="" # Reset global variable
+#: tomb:814
msgid "Attempting key recovery."
msgstr ""
-#: failure
+#. Fold: Key operations
+#. Function: _load_key
+#.
+#. Code sample:
+#. # Set global variables TOMBKEY and TOMBKEYFILE.
+#. _load_key() {
+#. local keyfile="$1" # Unique argument is an optional keyfile
+#.
+#. [[ -z $keyfile ]] && keyfile=$(option_value -k)
+#. [[ -z $keyfile ]] && {
+#. > _failure "This operation requires a key file to be specified using the -k option." }
+#.
+#. if [[ $keyfile == "-" ]]; then
+#. _verbose "load_key reading from stdin."
+#. _message "Waiting for the key to be piped from stdin... "
+#: tomb:838
msgid "This operation requires a key file to be specified using the -k option."
msgstr ""
-#: message
+#. Fold: Key operations
+#. Function: _load_key
+#.
+#. Code sample:
+#. [[ -z $keyfile ]] && keyfile=$(option_value -k)
+#. [[ -z $keyfile ]] && {
+#. _failure "This operation requires a key file to be specified using the -k option." }
+#.
+#. if [[ $keyfile == "-" ]]; then
+#. _verbose "load_key reading from stdin."
+#. > _message "Waiting for the key to be piped from stdin... "
+#. TOMBKEYFILE=stdin
+#. TOMBKEY=$(cat)
+#. elif [[ $keyfile == "cleartext" ]]; then
+#. _verbose "load_key reading SECRET from stdin"
+#: tomb:842
msgid "Waiting for the key to be piped from stdin... "
msgstr ""
-#: failure
+#. Fold: Key operations
+#. Function: _load_key
+#.
+#. Code sample:
+#. _message "Waiting for the key to be piped from stdin... "
+#. TOMBKEYFILE=cleartext
+#. TOMBKEY=cleartext
+#. TOMBSECRET=$(cat)
+#. else
+#. _verbose "load_key argument: ::1 key file::" $keyfile
+#. > [[ -r $keyfile ]] || _failure "Key not found, specify one using -k."
+#. TOMBKEYFILE=$keyfile
+#. TOMBKEY="${mapfile[$TOMBKEYFILE]}"
+#. fi
+#.
+#: tomb:853
msgid "Key not found, specify one using -k."
msgstr ""
-#: warning
+#. Fold: Key operations
+#. Function: _load_key
+#.
+#. Code sample:
+#. TOMBKEY="${mapfile[$TOMBKEYFILE]}"
+#. fi
+#.
+#. _verbose "load_key: ::1 key::" $TOMBKEYFILE
+#.
+#. is_valid_key $TOMBKEY || {
+#. > _warning "The key seems invalid or its format is not known by this version of Tomb."
+#. _tomb_key_recover $TOMBKEY
+#. }
+#.
+#. # Declared TOMBKEYFILE (path)
+#: tomb:861
msgid "The key seems invalid or its format is not known by this version of Tomb."
msgstr ""
-#: failure
+#. Fold: Key operations
+#. Function: get_lukskey
+#.
+#. Code sample:
+#. _verbose "KDF salt: $kdf_salt"
+#. _verbose "KDF ic: $kdf_ic"
+#. _verbose "KDF len: $kdf_len"
+#. _password=$(tomb-kdb-pbkdf2 $kdf_salt $kdf_ic $kdf_len 2>/dev/null <<<$_password)
+#. ;;
+#. *)
+#. > _failure "No suitable program for KDF ::1 program::." $pbkdf_hash
+#. unset _password
+#. return 1
+#. ;;
+#. esac
+#: tomb:936
msgid "No suitable program for KDF ::1 program::."
msgstr ""
-#: failure
+#. Fold: Key operations
+#. Function: ask_key_password
+#.
+#. Code sample:
+#.
+#. # This function asks the user for the password to use the key it tests
+#. # it against the return code of gpg on success returns 0 and saves
+#. # the password in the global variable $TOMBPASSWORD
+#. ask_key_password() {
+#. [[ -z "$TOMBKEYFILE" ]] && {
+#. > _failure "Internal error: ask_key_password() called before _load_key()." }
+#.
+#. [[ "$TOMBKEYFILE" = "cleartext" ]] && {
+#. _verbose "no password needed, using secret bytes from stdin"
+#. return 0 }
+#: tomb:962
msgid "Internal error: ask_key_password() called before _load_key()."
msgstr ""
-#: message
+#. Fold: Key operations
+#. Function: ask_key_password
+#.
+#. Code sample:
+#. _failure "Internal error: ask_key_password() called before _load_key()." }
+#.
+#. [[ "$TOMBKEYFILE" = "cleartext" ]] && {
+#. _verbose "no password needed, using secret bytes from stdin"
+#. return 0 }
+#.
+#. > _message "A password is required to use key ::1 key::" $TOMBKEYFILE
+#. passok=0
+#. tombpass=""
+#. if [[ "$1" = "" ]]; then
+#.
+#: tomb:968
msgid "A password is required to use key ::1 key::"
msgstr ""
-#: warning
+#. Fold: Key operations
+#. Function: ask_key_password
+#.
+#. Code sample:
+#. if [[ $c == 1 ]]; then
+#. tombpass=$(ask_password "Insert password to: $TOMBKEYFILE")
+#. else
+#. tombpass=$(ask_password "Insert password to: $TOMBKEYFILE (attempt $c)")
+#. fi
+#. [[ $? = 0 ]] || {
+#. > _warning "User aborted password dialog."
+#. return 1
+#. }
+#.
+#. get_lukskey "$tombpass"
+#: tomb:980
msgid "User aborted password dialog."
msgstr ""
-#: message
+#. Fold: Key operations
+#. Function: ask_key_password
+#.
+#. Code sample:
+#. return 1
+#. }
+#.
+#. get_lukskey "$tombpass"
+#.
+#. [[ $? = 0 ]] && {
+#. > passok=1; _message "Password OK."
+#. break;
+#. }
+#. done
+#.
+#: tomb:987
msgid "Password OK."
msgstr ""
-#: message
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#. change_passwd() {
+#. local tmpnewkey lukskey c tombpass tombpasstmp
+#.
+#. _check_swap # Ensure swap is secure, if any
+#. _load_key # Try loading key from option -k and set TOMBKEYFILE
+#.
+#. > _message "Commanded to change password for tomb key ::1 key::" $TOMBKEYFILE
+#.
+#. _tmp_create
+#. tmpnewkey=$TOMBTMP
+#.
+#: tomb:1025
msgid "Commanded to change password for tomb key ::1 key::"
msgstr ""
-#: failure
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#. local tomboldpwd="`option_value --tomb-old-pwd`"
+#. _verbose "tomb-old-pwd = ::1 old pass::" $tomboldpwd
+#. ask_key_password "$tomboldpwd"
+#. else
+#. ask_key_password
+#. fi
+#. > [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. _success "Changing password for ::1 key file::" $TOMBKEYFILE
+#.
+#. # Here $TOMBSECRET contains the key material in clear
+#: tomb:1037
msgid "No valid password supplied."
msgstr ""
-#: success
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#. ask_key_password "$tomboldpwd"
+#. else
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. > _success "Changing password for ::1 key file::" $TOMBKEYFILE
+#.
+#. # Here $TOMBSECRET contains the key material in clear
+#.
+#. { option_is_set --tomb-pwd } && {
+#: tomb:1039
msgid "Changing password for ::1 key file::"
msgstr ""
-#: failure
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#. gen_key "$tombpwd" >> "$tmpnewkey"
+#. } || {
+#. gen_key >> "$tmpnewkey"
+#. }
+#.
+#. { is_valid_key "${mapfile[$tmpnewkey]}" } || {
+#. > _failure "Error: the newly generated keyfile does not seem valid." }
+#.
+#. # Copy the new key as the original keyfile name
+#. cp -f "${tmpnewkey}" $TOMBKEYFILE
+#. _success "Your passphrase was successfully updated."
+#: tomb:1052
msgid "Error: the newly generated keyfile does not seem valid."
msgstr ""
-#: success
+#. Fold: Key operations
+#. Function: change_passwd
+#.
+#. Code sample:
+#.
+#. { is_valid_key "${mapfile[$tmpnewkey]}" } || {
+#. _failure "Error: the newly generated keyfile does not seem valid." }
+#.
+#. # Copy the new key as the original keyfile name
+#. cp -f "${tmpnewkey}" $TOMBKEYFILE
+#. > _success "Your passphrase was successfully updated."
+#.
+#. return 0
+#. }
+#.
+#: tomb:1056
msgid "Your passphrase was successfully updated."
msgstr ""
-#: failure
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#.
+#. if [ "$1" = "" ]; then
+#. while true; do
+#. # 3 tries to write two times a matching password
+#. tombpass=`ask_password "Type the new password to secure your key"`
+#. if [[ $? != 0 ]]; then
+#. > _failure "User aborted."
+#. fi
+#. if [ -z $tombpass ]; then
+#. _failure "You set empty password, which is not possible."
+#. fi
+#: tomb:1078
msgid "User aborted."
msgstr ""
-#: failure
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. # 3 tries to write two times a matching password
+#. tombpass=`ask_password "Type the new password to secure your key"`
+#. if [[ $? != 0 ]]; then
+#. _failure "User aborted."
+#. fi
+#. if [ -z $tombpass ]; then
+#. > _failure "You set empty password, which is not possible."
+#. fi
+#. tombpasstmp=$tombpass
+#. tombpass=`ask_password "Type the new password to secure your key (again)"`
+#. if [[ $? != 0 ]]; then
+#: tomb:1081
msgid "You set empty password, which is not possible."
msgstr ""
-#: failure
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. # see: https://github.com/dyne/Tomb/issues/82
+#. itertime="`option_value --kdf`"
+#. # removing support of floating points because they can't be type checked well
+#. if [[ "$itertime" != <-> ]]; then
+#. unset tombpass
+#. unset tombpasstmp
+#. > _failure "Wrong argument for --kdf: must be an integer number (iteration seconds)."
+#. fi
+#. # --kdf takes one parameter: iter time (on present machine) in seconds
+#. local -i microseconds
+#. microseconds=$(( itertime * 10000 ))
+#: tomb:1109
msgid "Wrong argument for --kdf: must be an integer number (iteration seconds)."
msgstr ""
-#: success
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. unset tombpasstmp
+#. _failure "Wrong argument for --kdf: must be an integer number (iteration seconds)."
+#. fi
+#. # --kdf takes one parameter: iter time (on present machine) in seconds
+#. local -i microseconds
+#. microseconds=$(( itertime * 10000 ))
+#. > _success "Using KDF, iterations: ::1 microseconds::" $microseconds
+#. _message "generating salt"
+#. pbkdf2_salt=`tomb-kdb-pbkdf2-gensalt`
+#. _message "calculating iterations"
+#. pbkdf2_iter=`tomb-kdb-pbkdf2-getiter $microseconds`
+#: tomb:1114
msgid "Using KDF, iterations: ::1 microseconds::"
msgstr ""
-#: message
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. _failure "Wrong argument for --kdf: must be an integer number (iteration seconds)."
+#. fi
+#. # --kdf takes one parameter: iter time (on present machine) in seconds
+#. local -i microseconds
+#. microseconds=$(( itertime * 10000 ))
+#. _success "Using KDF, iterations: ::1 microseconds::" $microseconds
+#. > _message "generating salt"
+#. pbkdf2_salt=`tomb-kdb-pbkdf2-gensalt`
+#. _message "calculating iterations"
+#. pbkdf2_iter=`tomb-kdb-pbkdf2-getiter $microseconds`
+#. _message "encoding the password"
+#: tomb:1115
msgid "generating salt"
msgstr ""
-#: message
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. # --kdf takes one parameter: iter time (on present machine) in seconds
+#. local -i microseconds
+#. microseconds=$(( itertime * 10000 ))
+#. _success "Using KDF, iterations: ::1 microseconds::" $microseconds
+#. _message "generating salt"
+#. pbkdf2_salt=`tomb-kdb-pbkdf2-gensalt`
+#. > _message "calculating iterations"
+#. pbkdf2_iter=`tomb-kdb-pbkdf2-getiter $microseconds`
+#. _message "encoding the password"
+#. # We use a length of 64bytes = 512bits (more than needed!?)
+#. tombpass=`tomb-kdb-pbkdf2 $pbkdf2_salt $pbkdf2_iter 64 <<<"${tombpass}"`
+#: tomb:1117
msgid "calculating iterations"
msgstr ""
-#: message
+#. Fold: Key operations
+#. Function: gen_key
+#.
+#. Code sample:
+#. microseconds=$(( itertime * 10000 ))
+#. _success "Using KDF, iterations: ::1 microseconds::" $microseconds
+#. _message "generating salt"
+#. pbkdf2_salt=`tomb-kdb-pbkdf2-gensalt`
+#. _message "calculating iterations"
+#. pbkdf2_iter=`tomb-kdb-pbkdf2-getiter $microseconds`
+#. > _message "encoding the password"
+#. # We use a length of 64bytes = 512bits (more than needed!?)
+#. tombpass=`tomb-kdb-pbkdf2 $pbkdf2_salt $pbkdf2_iter 64 <<<"${tombpass}"`
+#.
+#. header="_KDF_pbkdf2sha1_${pbkdf2_salt}_${pbkdf2_iter}_64\n"
+#: tomb:1119
msgid "encoding the password"
msgstr ""
-#: failure
+#. Fold: Key operations
+#. Function: list_gnupg_ciphers
+#.
+#. Code sample:
+#. unset tombpasstmp
+#. }
+#.
+#. # prints an array of ciphers available in gnupg (to encrypt keys)
+#. list_gnupg_ciphers() {
+#. # prints an error if GnuPG is not found
+#. > which gpg 2>/dev/null || _failure "gpg (GnuPG) is not found, Tomb cannot function without it."
+#.
+#. ciphers=(`gpg --version | awk '
+#. BEGIN { ciphers=0 }
+#. /^Cipher:/ { gsub(/,/,""); sub(/^Cipher:/,""); print; ciphers=1; next }
+#: tomb:1150
msgid "gpg (GnuPG) is not found, Tomb cannot function without it."
msgstr ""
-#: warning
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#.
+#. _load_key # Try loading key from option -k and set TOMBKEY
+#.
+#. imagefile=$PARAM
+#.
+#. [[ "`file $imagefile`" =~ "JPEG" ]] || {
+#. > _warning "Encode failed: ::1 image file:: is not a jpeg image." $imagefile
+#. return 1
+#. }
+#.
+#. _success "Encoding key ::1 tomb key:: inside image ::2 image file::" $TOMBKEY $imagefile
+#: tomb:1171
msgid "Encode failed: ::1 image file:: is not a jpeg image."
msgstr ""
-#: success
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#.
+#. [[ "`file $imagefile`" =~ "JPEG" ]] || {
+#. _warning "Encode failed: ::1 image file:: is not a jpeg image." $imagefile
+#. return 1
+#. }
+#.
+#. > _success "Encoding key ::1 tomb key:: inside image ::2 image file::" $TOMBKEY $imagefile
+#. _message "Please confirm the key password for the encoding"
+#. # We ask the password and test if it is the same encoding the
+#. # base key, to insure that the same password is used for the
+#. # encryption and the steganography. This is a standard enforced
+#: tomb:1175
msgid "Encoding key ::1 tomb key:: inside image ::2 image file::"
msgstr ""
-#: message
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. [[ "`file $imagefile`" =~ "JPEG" ]] || {
+#. _warning "Encode failed: ::1 image file:: is not a jpeg image." $imagefile
+#. return 1
+#. }
+#.
+#. _success "Encoding key ::1 tomb key:: inside image ::2 image file::" $TOMBKEY $imagefile
+#. > _message "Please confirm the key password for the encoding"
+#. # We ask the password and test if it is the same encoding the
+#. # base key, to insure that the same password is used for the
+#. # encryption and the steganography. This is a standard enforced
+#. # by Tomb, but its not strictly necessary (and having different
+#: tomb:1176
msgid "Please confirm the key password for the encoding"
msgstr ""
-#: warning
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tombpwd
+#. ask_key_password "$tombpwd"
+#. } || {
+#. ask_key_password
+#. }
+#. [[ $? != 0 ]] && {
+#. > _warning "Wrong password supplied."
+#. _failure "You shall not bury a key whose password is unknown to you." }
+#.
+#. # We omit armor strings since having them as constants can give
+#. # ground to effective attacks on steganography
+#: tomb:1192
msgid "Wrong password supplied."
msgstr ""
-#: failure
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. ask_key_password "$tombpwd"
+#. } || {
+#. ask_key_password
+#. }
+#. [[ $? != 0 ]] && {
+#. _warning "Wrong password supplied."
+#. > _failure "You shall not bury a key whose password is unknown to you." }
+#.
+#. # We omit armor strings since having them as constants can give
+#. # ground to effective attacks on steganography
+#. print - "$TOMBKEY" | awk '
+#: tomb:1193
msgid "You shall not bury a key whose password is unknown to you."
msgstr ""
-#: warning
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. /^-----/ {next}
+#. /^Version/ {next}
+#. {print $0}' \
+#. | steghide embed --embedfile - --coverfile ${imagefile} \
+#. -p $TOMBPASSWORD -z 9 -e serpent cbc
+#. if [ $? != 0 ]; then
+#. > _warning "Encoding error: steghide reports problems."
+#. res=1
+#. else
+#. _success "Tomb key encoded succesfully into image ::1 image file::" $imagefile
+#. res=0
+#: tomb:1204
msgid "Encoding error: steghide reports problems."
msgstr ""
-#: success
+#. Fold: Key operations
+#. Function: bury_key
+#.
+#. Code sample:
+#. | steghide embed --embedfile - --coverfile ${imagefile} \
+#. -p $TOMBPASSWORD -z 9 -e serpent cbc
+#. if [ $? != 0 ]; then
+#. _warning "Encoding error: steghide reports problems."
+#. res=1
+#. else
+#. > _success "Tomb key encoded succesfully into image ::1 image file::" $imagefile
+#. res=0
+#. fi
+#.
+#. return $res
+#: tomb:1207
msgid "Tomb key encoded succesfully into image ::1 image file::"
msgstr ""
-#: failure
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#.
+#. # mandatory 1st arg: the image file where key is supposed to be
+#. # optional 2nd arg: the password to use (same as key, internal use)
+#. # optional 3rd arg: the key where to save the result (- for stdout)
+#. exhume_key() {
+#. [[ "$1" = "" ]] && {
+#. > _failure "Exhume failed, no image specified" }
+#.
+#. local imagefile="$1" # The image file where to look for the key
+#. local tombpass="$2" # (Optional) the password to use (internal use)
+#. local destkey="$3" # (Optional) the key file where to save the
+#: tomb:1219
msgid "Exhume failed, no image specified"
msgstr ""
-#: failure
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. local destkey="$3" # (Optional) the key file where to save the
+#. # result (- for stdout)
+#. local r=1 # Return code (default: fail)
+#.
+#. # Ensure the image file is a readable JPEG
+#. [[ ! -r $imagefile ]] && {
+#. > _failure "Exhume failed, image file not found: ::1 image file::" "${imagefile:-none}" }
+#. [[ ! $(file "$imagefile") =~ "JP.G" ]] && {
+#. _failure "Exhume failed: ::1 image file:: is not a jpeg image." $imagefile }
+#.
+#. # When a password is passed as argument then always print out
+#: tomb:1229
msgid "Exhume failed, image file not found: ::1 image file::"
msgstr ""
-#: failure
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. local r=1 # Return code (default: fail)
+#.
+#. # Ensure the image file is a readable JPEG
+#. [[ ! -r $imagefile ]] && {
+#. _failure "Exhume failed, image file not found: ::1 image file::" "${imagefile:-none}" }
+#. [[ ! $(file "$imagefile") =~ "JP.G" ]] && {
+#. > _failure "Exhume failed: ::1 image file:: is not a jpeg image." $imagefile }
+#.
+#. # When a password is passed as argument then always print out
+#. # the exhumed key on stdout without further checks (internal use)
+#. [[ -n "$tombpass" ]] && {
+#: tomb:1231
msgid "Exhume failed: ::1 image file:: is not a jpeg image."
msgstr ""
-#: failure
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#.
+#. # When a password is passed as argument then always print out
+#. # the exhumed key on stdout without further checks (internal use)
+#. [[ -n "$tombpass" ]] && {
+#. TOMBKEY=$(steghide extract -sf $imagefile -p $tombpass -xf -)
+#. [[ $? != 0 ]] && {
+#. > _failure "Wrong password or no steganographic key found" }
+#.
+#. recover_key $TOMBKEY
+#.
+#. return 0
+#: tomb:1238
msgid "Wrong password or no steganographic key found"
msgstr ""
-#: message
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. }
+#.
+#. # Ensure we have a valid destination for the key
+#. [[ -z $destkey ]] && { option_is_set -k } && destkey=$(option_value -k)
+#. [[ -z $destkey ]] && {
+#. destkey="-" # No key was specified: fallback to stdout
+#. > _message "printing exhumed key on stdout" }
+#.
+#. # Bail out if destination exists, unless -f (force) was passed
+#. [[ $destkey != "-" && -s $destkey ]] && {
+#. _warning "File exists: ::1 tomb key::" $destkey
+#: tomb:1249
msgid "printing exhumed key on stdout"
msgstr ""
-#: warning
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. [[ -z $destkey ]] && {
+#. destkey="-" # No key was specified: fallback to stdout
+#. _message "printing exhumed key on stdout" }
+#.
+#. # Bail out if destination exists, unless -f (force) was passed
+#. [[ $destkey != "-" && -s $destkey ]] && {
+#. > _warning "File exists: ::1 tomb key::" $destkey
+#. { option_is_set -f } && {
+#. _warning "Use of --force selected: overwriting."
+#. rm -f $destkey
+#. } || {
+#: tomb:1253
msgid "File exists: ::1 tomb key::"
msgstr ""
-#: warning
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. _message "printing exhumed key on stdout" }
+#.
+#. # Bail out if destination exists, unless -f (force) was passed
+#. [[ $destkey != "-" && -s $destkey ]] && {
+#. _warning "File exists: ::1 tomb key::" $destkey
+#. { option_is_set -f } && {
+#. > _warning "Use of --force selected: overwriting."
+#. rm -f $destkey
+#. } || {
+#. _warning "Make explicit use of --force to overwrite."
+#. _failure "Refusing to overwrite file. Operation aborted." }
+#: tomb:1255
msgid "Use of --force selected: overwriting."
msgstr ""
-#: warning
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. [[ $destkey != "-" && -s $destkey ]] && {
+#. _warning "File exists: ::1 tomb key::" $destkey
+#. { option_is_set -f } && {
+#. _warning "Use of --force selected: overwriting."
+#. rm -f $destkey
+#. } || {
+#. > _warning "Make explicit use of --force to overwrite."
+#. _failure "Refusing to overwrite file. Operation aborted." }
+#. }
+#.
+#. _message "Trying to exhume a key out of image ::1 image file::" $imagefile
+#: tomb:1258
msgid "Make explicit use of --force to overwrite."
msgstr ""
-#: failure
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. _warning "File exists: ::1 tomb key::" $destkey
+#. { option_is_set -f } && {
+#. _warning "Use of --force selected: overwriting."
+#. rm -f $destkey
+#. } || {
+#. _warning "Make explicit use of --force to overwrite."
+#. > _failure "Refusing to overwrite file. Operation aborted." }
+#. }
+#.
+#. _message "Trying to exhume a key out of image ::1 image file::" $imagefile
+#. { option_is_set --tomb-pwd } && {
+#: tomb:1259
msgid "Refusing to overwrite file. Operation aborted."
msgstr ""
-#: message
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. rm -f $destkey
+#. } || {
+#. _warning "Make explicit use of --force to overwrite."
+#. _failure "Refusing to overwrite file. Operation aborted." }
+#. }
+#.
+#. > _message "Trying to exhume a key out of image ::1 image file::" $imagefile
+#. { option_is_set --tomb-pwd } && {
+#. tombpass=$(option_value --tomb-pwd)
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tombpass
+#. } || {
+#: tomb:1262
msgid "Trying to exhume a key out of image ::1 image file::"
msgstr ""
-#: success
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#. steghide extract -sf $imagefile -p ${tombpass} -xf $destkey
+#. r=$?
+#.
+#. # Report to the user
+#. [[ "$destkey" = "-" ]] && destkey="stdout"
+#. [[ $r == 0 ]] && {
+#. > _success "Key succesfully exhumed to ::1 key::." $destkey
+#. } || {
+#. _warning "Nothing found in ::1 image file::" $imagefile
+#. }
+#.
+#: tomb:1283
msgid "Key succesfully exhumed to ::1 key::."
msgstr ""
-#: warning
+#. Fold: Key operations
+#. Function: exhume_key
+#.
+#. Code sample:
+#.
+#. # Report to the user
+#. [[ "$destkey" = "-" ]] && destkey="stdout"
+#. [[ $r == 0 ]] && {
+#. _success "Key succesfully exhumed to ::1 key::." $destkey
+#. } || {
+#. > _warning "Nothing found in ::1 image file::" $imagefile
+#. }
+#.
+#. return $r
+#. }
+#: tomb:1285
msgid "Nothing found in ::1 image file::"
msgstr ""
-#: success
+#. Fold: Key operations
+#. Function: engrave_key
+#.
+#. Code sample:
+#.
+#. _load_key # Try loading key from option -k and set TOMBKEYFILE
+#.
+#. local keyname=$(basename $TOMBKEYFILE)
+#. local pngname="$keyname.qr.png"
+#.
+#. > _success "Rendering a printable QRCode for key: ::1 tomb key file::" $TOMBKEYFILE
+#. # we omit armor strings to save space
+#. awk '/^-----/ {next}; /^Version/ {next}; {print $0}' $TOMBKEYFILE \
+#. | qrencode --size 4 --level H --casesensitive -o $pngname
+#. [[ $? != 0 ]] && {
+#: tomb:1300
msgid "Rendering a printable QRCode for key: ::1 tomb key file::"
msgstr ""
-#: failure
+#. Fold: Key operations
+#. Function: engrave_key
+#.
+#. Code sample:
+#.
+#. _success "Rendering a printable QRCode for key: ::1 tomb key file::" $TOMBKEYFILE
+#. # we omit armor strings to save space
+#. awk '/^-----/ {next}; /^Version/ {next}; {print $0}' $TOMBKEYFILE \
+#. | qrencode --size 4 --level H --casesensitive -o $pngname
+#. [[ $? != 0 ]] && {
+#. > _failure "QREncode reported an error." }
+#.
+#. _success "Operation successful:"
+#. # TODO: only if verbose and/or not silent
+#. ls -lh $pngname
+#: tomb:1305
msgid "QREncode reported an error."
msgstr ""
-#: success
+#. Fold: Key operations
+#. Function: engrave_key
+#.
+#. Code sample:
+#. # we omit armor strings to save space
+#. awk '/^-----/ {next}; /^Version/ {next}; {print $0}' $TOMBKEYFILE \
+#. | qrencode --size 4 --level H --casesensitive -o $pngname
+#. [[ $? != 0 ]] && {
+#. _failure "QREncode reported an error." }
+#.
+#. > _success "Operation successful:"
+#. # TODO: only if verbose and/or not silent
+#. ls -lh $pngname
+#. file $pngname
+#. }
+#: tomb:1307
msgid "Operation successful:"
msgstr ""
-#: message
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#.
+#. dig_tomb() {
+#. local tombpath="$1" # Path to tomb
+#. # Require the specification of the size of the tomb (-s) in MB
+#. local -i tombsize=$(option_value -s)
+#.
+#. > _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#: tomb:1340
msgid "Commanded to dig tomb ::1 tomb path::"
msgstr ""
-#: failure
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. local tombpath="$1" # Path to tomb
+#. # Require the specification of the size of the tomb (-s) in MB
+#. local -i tombsize=$(option_value -s)
+#.
+#. _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. > [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#: tomb:1342
msgid "Missing path to tomb"
msgstr ""
-#: failure
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. # Require the specification of the size of the tomb (-s) in MB
+#. local -i tombsize=$(option_value -s)
+#.
+#. _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. > [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#. _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#: tomb:1343
msgid "Size argument missing, use -s"
msgstr ""
-#: failure
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. local -i tombsize=$(option_value -s)
+#.
+#. _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. > [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#. _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#: tomb:1344
msgid "Size must be an integer (megabytes)"
msgstr ""
-#: failure
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#.
+#. _message "Commanded to dig tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -n "$tombpath" ]] || _failure "Missing path to tomb"
+#. [[ -n "$tombsize" ]] || _failure "Size argument missing, use -s"
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. > [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#. _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. [[ -e $TOMBPATH ]] && {
+#: tomb:1345
msgid "Tombs can't be smaller than 10 megabytes"
msgstr ""
-#: warning
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. [[ $tombsize == <-> ]] || _failure "Size must be an integer (megabytes)"
+#. [[ $tombsize -ge 10 ]] || _failure "Tombs can't be smaller than 10 megabytes"
+#.
+#. _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. [[ -e $TOMBPATH ]] && {
+#. > _warning "A tomb exists already. I'm not digging here:"
+#. ls -lh $TOMBPATH
+#. return 1
+#. }
+#.
+#: tomb:1350
msgid "A tomb exists already. I'm not digging here:"
msgstr ""
-#: success
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. [[ -e $TOMBPATH ]] && {
+#. _warning "A tomb exists already. I'm not digging here:"
+#. ls -lh $TOMBPATH
+#. return 1
+#. }
+#.
+#. > _success "Creating a new tomb in ::1 tomb path::" $TOMBPATH
+#.
+#. _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $tombsize
+#.
+#. # Ensure that file permissions are safe even if interrupted
+#: tomb:1355
msgid "Creating a new tomb in ::1 tomb path::"
msgstr ""
-#: message
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. ls -lh $TOMBPATH
+#. return 1
+#. }
+#.
+#. _success "Creating a new tomb in ::1 tomb path::" $TOMBPATH
+#.
+#. > _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $tombsize
+#.
+#. # Ensure that file permissions are safe even if interrupted
+#. touch $TOMBPATH
+#. [[ $? = 0 ]] || {
+#: tomb:1357
msgid "Generating ::1 tomb file:: of ::2 size::MiB"
msgstr ""
-#: warning
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#.
+#. _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $tombsize
+#.
+#. # Ensure that file permissions are safe even if interrupted
+#. touch $TOMBPATH
+#. [[ $? = 0 ]] || {
+#. > _warning "Error creating the tomb ::1 tomb path::" $TOMBPATH
+#. _failure "Operation aborted."
+#. }
+#. chmod 0600 $TOMBPATH
+#.
+#: tomb:1362
msgid "Error creating the tomb ::1 tomb path::"
msgstr ""
-#: success
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. ls -lh $TOMBPATH
+#. } || {
+#. _warning "Error creating the tomb ::1 tomb path::" $TOMBPATH
+#. _failure "Operation aborted."
+#. }
+#.
+#. > _success "Done digging ::1 tomb name::" $TOMBNAME
+#. _message "Your tomb is not yet ready, you need to forge a key and lock it:"
+#. _message "tomb forge ::1 tomb path::.key" $TOMBPATH
+#. _message "tomb lock ::1 tomb path:: -k ::1 tomb path::.key" $TOMBPATH
+#.
+#: tomb:1377
msgid "Done digging ::1 tomb name::"
msgstr ""
-#: message
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. } || {
+#. _warning "Error creating the tomb ::1 tomb path::" $TOMBPATH
+#. _failure "Operation aborted."
+#. }
+#.
+#. _success "Done digging ::1 tomb name::" $TOMBNAME
+#. > _message "Your tomb is not yet ready, you need to forge a key and lock it:"
+#. _message "tomb forge ::1 tomb path::.key" $TOMBPATH
+#. _message "tomb lock ::1 tomb path:: -k ::1 tomb path::.key" $TOMBPATH
+#.
+#. return 0
+#: tomb:1378
msgid "Your tomb is not yet ready, you need to forge a key and lock it:"
msgstr ""
-#: message
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. _warning "Error creating the tomb ::1 tomb path::" $TOMBPATH
+#. _failure "Operation aborted."
+#. }
+#.
+#. _success "Done digging ::1 tomb name::" $TOMBNAME
+#. _message "Your tomb is not yet ready, you need to forge a key and lock it:"
+#. > _message "tomb forge ::1 tomb path::.key" $TOMBPATH
+#. _message "tomb lock ::1 tomb path:: -k ::1 tomb path::.key" $TOMBPATH
+#.
+#. return 0
+#. }
+#: tomb:1379
msgid "tomb forge ::1 tomb path::.key"
msgstr ""
-#: message
+#. Fold: Create
+#. Function: dig_tomb
+#.
+#. Code sample:
+#. _failure "Operation aborted."
+#. }
+#.
+#. _success "Done digging ::1 tomb name::" $TOMBNAME
+#. _message "Your tomb is not yet ready, you need to forge a key and lock it:"
+#. _message "tomb forge ::1 tomb path::.key" $TOMBPATH
+#. > _message "tomb lock ::1 tomb path:: -k ::1 tomb path::.key" $TOMBPATH
+#.
+#. return 0
+#. }
+#.
+#: tomb:1380
msgid "tomb lock ::1 tomb path:: -k ::1 tomb path::.key"
msgstr ""
-#: failure
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. local destkey="$1"
+#. { option_is_set -k } && { destkey=$(option_value -k) }
+#.
+#. local algo="AES256" # Default encryption algorithm
+#.
+#. [[ -z "$destkey" ]] && {
+#. > _failure "A filename needs to be specified using -k to forge a new key." }
+#.
+#. _message "Commanded to forge key ::1 key::" $destkey
+#.
+#. _check_swap # Ensure the available memory is safe to use
+#: tomb:1401
msgid "A filename needs to be specified using -k to forge a new key."
msgstr ""
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#.
+#. local algo="AES256" # Default encryption algorithm
+#.
+#. [[ -z "$destkey" ]] && {
+#. _failure "A filename needs to be specified using -k to forge a new key." }
+#.
+#. > _message "Commanded to forge key ::1 key::" $destkey
+#.
+#. _check_swap # Ensure the available memory is safe to use
+#.
+#. # Ensure GnuPG won't exit with an error before first run
+#: tomb:1403
msgid "Commanded to forge key ::1 key::"
msgstr ""
-#: failure
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. mkdir -m 0700 $HOME/.gnupg
+#. touch $HOME/.gnupg/pubring.gpg }
+#.
+#. # Do not overwrite any files accidentally
+#. [[ -r "$destkey" ]] && {
+#. ls -lh $destkey
+#. > _failure "Forging this key would overwrite an existing file. Operation aborted." }
+#.
+#. touch $destkey
+#. [[ $? == 0 ]] || {
+#. _warning "Cannot generate encryption key."
+#: tomb:1415
msgid "Forging this key would overwrite an existing file. Operation aborted."
msgstr ""
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. [[ -r "$destkey" ]] && {
+#. ls -lh $destkey
+#. _failure "Forging this key would overwrite an existing file. Operation aborted." }
+#.
+#. touch $destkey
+#. [[ $? == 0 ]] || {
+#. > _warning "Cannot generate encryption key."
+#. _failure "Operation aborted." }
+#. chmod 0600 $destkey
+#.
+#. # Update algorithm if it was passed on the command line with -o
+#: tomb:1419
+msgid "Cannot generate encryption key."
+msgstr ""
+
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. chmod 0600 $destkey
+#.
+#. # Update algorithm if it was passed on the command line with -o
+#. { option_is_set -o } && algopt="$(option_value -o)"
+#. [[ -n "$algopt" ]] && algo=$algopt
+#.
+#. > _message "Commanded to forge key ::1 key:: with cipher algorithm ::2 algorithm::" \
+#. $destkey $algo
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#: tomb:1427
msgid "Commanded to forge key ::1 key:: with cipher algorithm ::2 algorithm::"
msgstr ""
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#.
+#. _message "Commanded to forge key ::1 key:: with cipher algorithm ::2 algorithm::" \
+#. $destkey $algo
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#. > _message "This operation takes time, keep using this computer on other tasks,"
+#. _message "once done you will be asked to choose a password for your tomb."
+#. _message "To make it faster you can move the mouse around."
+#. _message "If you are on a server, you can use an Entropy Generation Daemon."
+#.
+#: tomb:1432
msgid "This operation takes time, keep using this computer on other tasks,"
msgstr ""
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. _message "Commanded to forge key ::1 key:: with cipher algorithm ::2 algorithm::" \
+#. $destkey $algo
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#. _message "This operation takes time, keep using this computer on other tasks,"
+#. > _message "once done you will be asked to choose a password for your tomb."
+#. _message "To make it faster you can move the mouse around."
+#. _message "If you are on a server, you can use an Entropy Generation Daemon."
+#.
+#. # Use /dev/random as the entropy source, unless --use-random is specified
+#: tomb:1433
msgid "once done you will be asked to choose a password for your tomb."
msgstr ""
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. $destkey $algo
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#. _message "This operation takes time, keep using this computer on other tasks,"
+#. _message "once done you will be asked to choose a password for your tomb."
+#. > _message "To make it faster you can move the mouse around."
+#. _message "If you are on a server, you can use an Entropy Generation Daemon."
+#.
+#. # Use /dev/random as the entropy source, unless --use-random is specified
+#. local random_source=/dev/random
+#: tomb:1434
msgid "To make it faster you can move the mouse around."
msgstr ""
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#.
+#. TOMBKEYFILE="$destkey" # Set global variable
+#.
+#. _message "This operation takes time, keep using this computer on other tasks,"
+#. _message "once done you will be asked to choose a password for your tomb."
+#. _message "To make it faster you can move the mouse around."
+#. > _message "If you are on a server, you can use an Entropy Generation Daemon."
+#.
+#. # Use /dev/random as the entropy source, unless --use-random is specified
+#. local random_source=/dev/random
+#. { option_is_set --use-urandom } && random_source=/dev/urandom
+#: tomb:1435
msgid "If you are on a server, you can use an Entropy Generation Daemon."
msgstr ""
-#: warning
-msgid "Cannot generate encryption key."
-msgstr ""
-
-#: success
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. [[ $? == 0 ]] || {
+#. _warning "Cannot generate encryption key."
+#. _failure "Operation aborted." }
+#.
+#. # Here the global variable TOMBSECRET contains the naked secret
+#.
+#. > _success "Choose the password of your key: ::1 tomb key::" $TOMBKEYFILE
+#. _message "(You can also change it later using 'tomb passwd'.)"
+#. # _user_file $TOMBKEYFILE
+#.
+#. tombname="$TOMBKEYFILE" # XXX ???
+#: tomb:1449
msgid "Choose the password of your key: ::1 tomb key::"
msgstr ""
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. _warning "Cannot generate encryption key."
+#. _failure "Operation aborted." }
+#.
+#. # Here the global variable TOMBSECRET contains the naked secret
+#.
+#. _success "Choose the password of your key: ::1 tomb key::" $TOMBKEYFILE
+#. > _message "(You can also change it later using 'tomb passwd'.)"
+#. # _user_file $TOMBKEYFILE
+#.
+#. tombname="$TOMBKEYFILE" # XXX ???
+#. # the gen_key() function takes care of the new key's encryption
+#: tomb:1450
msgid "(You can also change it later using 'tomb passwd'.)"
msgstr ""
-#: warning
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#.
+#. # load the key contents (set global variable)
+#. TOMBKEY="${mapfile[$TOMBKEYFILE]}"
+#.
+#. # this does a check on the file header
+#. is_valid_key $TOMBKEY || {
+#. > _warning "The key does not seem to be valid."
+#. _warning "Dumping contents to screen:"
+#. print "${mapfile[$TOMBKEY]}"
+#. _warning "--"
+#. sudo umount ${keytmp}
+#: tomb:1468
msgid "The key does not seem to be valid."
msgstr ""
-#: warning
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. # load the key contents (set global variable)
+#. TOMBKEY="${mapfile[$TOMBKEYFILE]}"
+#.
+#. # this does a check on the file header
+#. is_valid_key $TOMBKEY || {
+#. _warning "The key does not seem to be valid."
+#. > _warning "Dumping contents to screen:"
+#. print "${mapfile[$TOMBKEY]}"
+#. _warning "--"
+#. sudo umount ${keytmp}
+#. rm -r $keytmp
+#: tomb:1469
msgid "Dumping contents to screen:"
msgstr ""
-#: message
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. _warning "--"
+#. sudo umount ${keytmp}
+#. rm -r $keytmp
+#. _failure "Operation aborted."
+#. }
+#.
+#. > _message "Done forging ::1 key file::" $TOMBKEYFILE
+#. _success "Your key is ready:"
+#. ls -lh $TOMBKEYFILE
+#. }
+#.
+#: tomb:1477
msgid "Done forging ::1 key file::"
msgstr ""
-#: success
+#. Fold: Create
+#. Function: forge_key
+#.
+#. Code sample:
+#. sudo umount ${keytmp}
+#. rm -r $keytmp
+#. _failure "Operation aborted."
+#. }
+#.
+#. _message "Done forging ::1 key file::" $TOMBKEYFILE
+#. > _success "Your key is ready:"
+#. ls -lh $TOMBKEYFILE
+#. }
+#.
+#. # Step three -- Lock tomb
+#: tomb:1478
msgid "Your key is ready:"
msgstr ""
-#: warning
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. # for more alternatives refer to cryptsetup(8)
+#. local cipher="aes-xts-plain64:sha256"
+#.
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. [[ -n $tombpath ]] || {
+#. > _warning "No tomb specified for locking."
+#. _warning "Usage: tomb lock file.tomb file.tomb.key"
+#. return 1
+#. }
+#.
+#: tomb:1498
msgid "No tomb specified for locking."
msgstr ""
-#: warning
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. local cipher="aes-xts-plain64:sha256"
+#.
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. [[ -n $tombpath ]] || {
+#. _warning "No tomb specified for locking."
+#. > _warning "Usage: tomb lock file.tomb file.tomb.key"
+#. return 1
+#. }
+#.
+#. _plot $tombpath
+#: tomb:1499
msgid "Usage: tomb lock file.tomb file.tomb.key"
msgstr ""
-#: message
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _warning "Usage: tomb lock file.tomb file.tomb.key"
+#. return 1
+#. }
+#.
+#. _plot $tombpath
+#.
+#. > _message "Commanded to lock tomb ::1 tomb file::" $TOMBFILE
+#.
+#. [[ -f $TOMBPATH ]] || {
+#. _failure "There is no tomb here. You have to dig it first." }
+#.
+#: tomb:1505
msgid "Commanded to lock tomb ::1 tomb file::"
msgstr ""
-#: failure
-msgid "There is no tomb here. You have to it dig first."
-msgstr ""
-
-#: message
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _plot $tombpath
+#.
+#. _message "Commanded to lock tomb ::1 tomb file::" $TOMBFILE
+#.
+#. [[ -f $TOMBPATH ]] || {
+#. > _failure "There is no tomb here. You have to dig it first." }
+#.
+#. _verbose "Tomb found: ::1 tomb path::" $TOMBPATH
+#.
+#. lo_mount $TOMBPATH
+#: tomb:1508
+msgid "There is no tomb here. You have to dig it first."
+msgstr ""
+
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. lo_mount $TOMBPATH
+#. nstloop=`lo_new`
+#.
+#. _verbose "Loop mounted on ::1 mount point::" $nstloop
+#.
+#. > _message "Checking if the tomb is empty (we never step on somebody else's bones)."
+#. sudo cryptsetup isLuks ${nstloop}
+#. if [ $? = 0 ]; then
+#. # is it a LUKS encrypted nest? then bail out and avoid reformatting it
+#. _warning "The tomb was already locked with another key."
+#: tomb:1517
msgid "Checking if the tomb is empty (we never step on somebody else's bones)."
msgstr ""
-#: warning
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _verbose "Loop mounted on ::1 mount point::" $nstloop
+#.
+#. _message "Checking if the tomb is empty (we never step on somebody else's bones)."
+#. sudo cryptsetup isLuks ${nstloop}
+#. if [ $? = 0 ]; then
+#. # is it a LUKS encrypted nest? then bail out and avoid reformatting it
+#. > _warning "The tomb was already locked with another key."
+#. _failure "Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
+#. else
+#. _message "Fine, this tomb seems empty."
+#. fi
+#: tomb:1521
msgid "The tomb was already locked with another key."
msgstr ""
-#: failure
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _message "Checking if the tomb is empty (we never step on somebody else's bones)."
+#. sudo cryptsetup isLuks ${nstloop}
+#. if [ $? = 0 ]; then
+#. # is it a LUKS encrypted nest? then bail out and avoid reformatting it
+#. _warning "The tomb was already locked with another key."
+#. > _failure "Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
+#. else
+#. _message "Fine, this tomb seems empty."
+#. fi
+#.
+#: tomb:1522
msgid "Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
msgstr ""
-#: message
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. sudo cryptsetup isLuks ${nstloop}
+#. if [ $? = 0 ]; then
+#. # is it a LUKS encrypted nest? then bail out and avoid reformatting it
+#. _warning "The tomb was already locked with another key."
+#. _failure "Operation aborted. I cannot lock an already locked tomb. Go dig a new one."
+#. else
+#. > _message "Fine, this tomb seems empty."
+#. fi
+#.
+#. _load_key # Try loading key from option -k and set TOMBKEYFILE
+#.
+#: tomb:1524
msgid "Fine, this tomb seems empty."
msgstr ""
-#: message
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _load_key # Try loading key from option -k and set TOMBKEYFILE
+#.
+#. # the encryption cipher for a tomb can be set when locking using -c
+#. { option_is_set -o } && algopt="$(option_value -o)"
+#. [[ -n "$algopt" ]] && cipher=$algopt
+#. > _message "Locking using cipher: ::1 cipher::" $cipher
+#.
+#. # get the pass from the user and check it
+#. if option_is_set --tomb-pwd; then
+#. tomb_pwd="`option_value --tomb-pwd`"
+#: tomb:1532
msgid "Locking using cipher: ::1 cipher::"
msgstr ""
-#: success
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. ask_key_password "$tomb_pwd"
+#. else
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. > _success "Locking ::1 tomb file:: with ::2 tomb key file::" $TOMBFILE $TOMBKEYFILE
+#.
+#. _message "Formatting Luks mapped device."
+#. _cryptsetup --batch-mode \
+#. --cipher ${cipher} --key-size 256 --key-slot 0 \
+#: tomb:1544
msgid "Locking ::1 tomb file:: with ::2 tomb key file::"
msgstr ""
-#: message
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. _success "Locking ::1 tomb file:: with ::2 tomb key file::" $TOMBFILE $TOMBKEYFILE
+#.
+#. > _message "Formatting Luks mapped device."
+#. _cryptsetup --batch-mode \
+#. --cipher ${cipher} --key-size 256 --key-slot 0 \
+#. luksFormat ${nstloop}
+#. [[ $? == 0 ]] || {
+#: tomb:1546
msgid "Formatting Luks mapped device."
msgstr ""
-#: warning
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _message "Formatting Luks mapped device."
+#. _cryptsetup --batch-mode \
+#. --cipher ${cipher} --key-size 256 --key-slot 0 \
+#. luksFormat ${nstloop}
+#. [[ $? == 0 ]] || {
+#. > _warning "cryptsetup luksFormat returned an error."
+#. _failure "Operation aborted." }
+#.
+#. _cryptsetup --cipher ${cipher} luksOpen ${nstloop} tomb.tmp
+#. [[ $? == 0 ]] || {
+#: tomb:1551
msgid "cryptsetup luksFormat returned an error."
msgstr ""
-#: warning
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. [[ $? == 0 ]] || {
+#. _warning "cryptsetup luksFormat returned an error."
+#. _failure "Operation aborted." }
+#.
+#. _cryptsetup --cipher ${cipher} luksOpen ${nstloop} tomb.tmp
+#. [[ $? == 0 ]] || {
+#. > _warning "cryptsetup luksOpen returned an error."
+#. _failure "Operation aborted." }
+#.
+#. _message "Formatting your Tomb with Ext3/Ext4 filesystem."
+#. ${=MKFS} $TOMBNAME /dev/mapper/tomb.tmp
+#: tomb:1556
msgid "cryptsetup luksOpen returned an error."
msgstr ""
-#: message
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _cryptsetup --cipher ${cipher} luksOpen ${nstloop} tomb.tmp
+#. [[ $? == 0 ]] || {
+#. _warning "cryptsetup luksOpen returned an error."
+#. _failure "Operation aborted." }
+#.
+#. > _message "Formatting your Tomb with Ext3/Ext4 filesystem."
+#. ${=MKFS} $TOMBNAME /dev/mapper/tomb.tmp
+#.
+#. [[ $? == 0 ]] || {
+#. _warning "Tomb format returned an error."
+#: tomb:1559
msgid "Formatting your Tomb with Ext3/Ext4 filesystem."
msgstr ""
-#: warning
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _failure "Operation aborted." }
+#.
+#. _message "Formatting your Tomb with Ext3/Ext4 filesystem."
+#. ${=MKFS} $TOMBNAME /dev/mapper/tomb.tmp
+#.
+#. [[ $? == 0 ]] || {
+#. > _warning "Tomb format returned an error."
+#. _warning "Your tomb ::1 tomb file:: may be corrupted." $TOMBFILE }
+#.
+#. # Sync
+#. sudo cryptsetup luksClose tomb.tmp
+#: tomb:1563
msgid "Tomb format returned an error."
msgstr ""
-#: warning
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#.
+#. _message "Formatting your Tomb with Ext3/Ext4 filesystem."
+#. ${=MKFS} $TOMBNAME /dev/mapper/tomb.tmp
+#.
+#. [[ $? == 0 ]] || {
+#. _warning "Tomb format returned an error."
+#. > _warning "Your tomb ::1 tomb file:: may be corrupted." $TOMBFILE }
+#.
+#. # Sync
+#. sudo cryptsetup luksClose tomb.tmp
+#.
+#: tomb:1564
msgid "Your tomb ::1 tomb file:: may be corrupted."
msgstr ""
-#: message
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _warning "Tomb format returned an error."
+#. _warning "Your tomb ::1 tomb file:: may be corrupted." $TOMBFILE }
+#.
+#. # Sync
+#. sudo cryptsetup luksClose tomb.tmp
+#.
+#. > _message "Done locking ::1 tomb name:: using Luks dm-crypt ::2 cipher::" $TOMBNAME $cipher
+#. _success "Your tomb is ready in ::1 tomb path:: and secured with key ::2 tomb key::" \
+#. $TOMBPATH $TOMBKEYFILE
+#.
+#. }
+#: tomb:1569
msgid "Done locking ::1 tomb name:: using Luks dm-crypt ::2 cipher::"
msgstr ""
-#: success
+#. Fold: Create
+#. Function: lock_tomb_with_key
+#.
+#. Code sample:
+#. _warning "Your tomb ::1 tomb file:: may be corrupted." $TOMBFILE }
+#.
+#. # Sync
+#. sudo cryptsetup luksClose tomb.tmp
+#.
+#. _message "Done locking ::1 tomb name:: using Luks dm-crypt ::2 cipher::" $TOMBNAME $cipher
+#. > _success "Your tomb is ready in ::1 tomb path:: and secured with key ::2 tomb key::" \
+#. $TOMBPATH $TOMBKEYFILE
+#.
+#. }
+#.
+#: tomb:1570
msgid "Your tomb is ready in ::1 tomb path:: and secured with key ::2 tomb key::"
msgstr ""
-#: message
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. # This function changes the key that locks a tomb
+#. change_tomb_key() {
+#. local tombkey="$1" # Path to the tomb's key file
+#. local tombpath="$2" # Path to the tomb
+#.
+#. > _message "Commanded to reset key for tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -z "$tombpath" ]] && {
+#. _warning "Command 'setkey' needs two arguments: the old key file and the tomb."
+#. _warning "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
+#: tomb:1580
msgid "Commanded to reset key for tomb ::1 tomb path::"
msgstr ""
-#: warning
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. local tombkey="$1" # Path to the tomb's key file
+#. local tombpath="$2" # Path to the tomb
+#.
+#. _message "Commanded to reset key for tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -z "$tombpath" ]] && {
+#. > _warning "Command 'setkey' needs two arguments: the old key file and the tomb."
+#. _warning "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
+#. _failure "Execution aborted."
+#. }
+#.
+#: tomb:1583
msgid "Command 'setkey' needs two arguments: the old key file and the tomb."
msgstr ""
-#: warning
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. local tombpath="$2" # Path to the tomb
+#.
+#. _message "Commanded to reset key for tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -z "$tombpath" ]] && {
+#. _warning "Command 'setkey' needs two arguments: the old key file and the tomb."
+#. > _warning "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
+#. _failure "Execution aborted."
+#. }
+#.
+#. _check_swap
+#: tomb:1584
msgid "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
msgstr ""
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. _message "Commanded to reset key for tomb ::1 tomb path::" $tombpath
+#.
+#. [[ -z "$tombpath" ]] && {
+#. _warning "Command 'setkey' needs two arguments: the old key file and the tomb."
+#. _warning "I.e: tomb -k new.tomb.key old.tomb.key secret.tomb"
+#. > _failure "Execution aborted."
+#. }
+#.
+#. _check_swap
+#. is_valid_tomb $tombpath
+#: tomb:1585
msgid "Execution aborted."
msgstr ""
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. lo_mount $TOMBPATH
+#. nstloop=`lo_new`
+#. sudo cryptsetup isLuks ${nstloop}
+#. # is it a LUKS encrypted nest? we check one more time
+#. [[ $? == 0 ]] || {
+#. > _failure "Not a valid LUKS encrypted volume: ::1 volume::" $TOMBPATH }
+#.
+#. _load_key $tombkey # Try loading given key and set TOMBKEY and
+#. # TOMBKEYFILE
+#. local oldkey=$TOMBKEY
+#: tomb:1596
msgid "Not a valid LUKS encrypted volume: ::1 volume::"
msgstr ""
-#: success
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. _load_key $tombkey # Try loading given key and set TOMBKEY and
+#. # TOMBKEYFILE
+#. local oldkey=$TOMBKEY
+#. local oldkeyfile=$TOMBKEYFILE
+#.
+#. # we have everything, prepare to mount
+#. > _success "Changing lock on tomb ::1 tomb name::" $TOMBNAME
+#. _message "Old key: ::1 old key::" $oldkeyfile
+#.
+#. # render the mapper
+#. mapdate=`date +%s`
+#: tomb:1604
msgid "Changing lock on tomb ::1 tomb name::"
msgstr ""
-#: message
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. # TOMBKEYFILE
+#. local oldkey=$TOMBKEY
+#. local oldkeyfile=$TOMBKEYFILE
+#.
+#. # we have everything, prepare to mount
+#. _success "Changing lock on tomb ::1 tomb name::" $TOMBNAME
+#. > _message "Old key: ::1 old key::" $oldkeyfile
+#.
+#. # render the mapper
+#. mapdate=`date +%s`
+#. # save date of mount in minutes since 1970
+#: tomb:1605
msgid "Old key: ::1 old key::"
msgstr ""
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. _verbose "tomb-old-pwd = ::1 old pass::" $tomb_old_pwd
+#. ask_key_password "$tomb_old_pwd"
+#. else
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || {
+#. > _failure "No valid password supplied for the old key." }
+#. old_secret=$TOMBSECRET
+#.
+#. # luksOpen the tomb (not really mounting, just on the loopback)
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - \
+#: tomb:1621
msgid "No valid password supplied for the old key."
msgstr ""
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. _failure "No valid password supplied for the old key." }
+#. old_secret=$TOMBSECRET
+#.
+#. # luksOpen the tomb (not really mounting, just on the loopback)
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - \
+#. luksOpen ${nstloop} ${mapper}
+#. > [[ $? == 0 ]] || _failure "Unexpected error in luksOpen."
+#.
+#. _load_key # Try loading new key from option -k and set TOMBKEYFILE
+#.
+#. _message "New key: ::1 key file::" $TOMBKEYFILE
+#: tomb:1627
msgid "Unexpected error in luksOpen."
msgstr ""
-#: message
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - \
+#. luksOpen ${nstloop} ${mapper}
+#. [[ $? == 0 ]] || _failure "Unexpected error in luksOpen."
+#.
+#. _load_key # Try loading new key from option -k and set TOMBKEYFILE
+#.
+#. > _message "New key: ::1 key file::" $TOMBKEYFILE
+#.
+#. if option_is_set --tomb-pwd; then
+#. tomb_new_pwd="`option_value --tomb-pwd`"
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tomb_new_pwd
+#: tomb:1631
msgid "New key: ::1 key file::"
msgstr ""
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tomb_new_pwd
+#. ask_key_password "$tomb_new_pwd"
+#. else
+#. ask_key_password
+#. fi
+#. [[ $? == 0 ]] || {
+#. > _failure "No valid password supplied for the new key." }
+#.
+#. _tmp_create
+#. tmpnewkey=$TOMBTMP
+#. print -R -n - "$TOMBSECRET" >> $tmpnewkey
+#: tomb:1641
msgid "No valid password supplied for the new key."
msgstr ""
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. tmpnewkey=$TOMBTMP
+#. print -R -n - "$TOMBSECRET" >> $tmpnewkey
+#.
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - \
+#. luksChangeKey "$nstloop" "$tmpnewkey"
+#.
+#. > [[ $? == 0 ]] || _failure "Unexpected error in luksChangeKey."
+#.
+#. sudo cryptsetup luksClose "${mapper}" || _failure "Unexpected error in luksClose."
+#.
+#. _success "Succesfully changed key for tomb: ::1 tomb file::" $TOMBFILE
+#: tomb:1650
msgid "Unexpected error in luksChangeKey."
msgstr ""
-#: failure
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. print -R -n - "$old_secret" | sudo cryptsetup --key-file - \
+#. luksChangeKey "$nstloop" "$tmpnewkey"
+#.
+#. [[ $? == 0 ]] || _failure "Unexpected error in luksChangeKey."
+#.
+#. > sudo cryptsetup luksClose "${mapper}" || _failure "Unexpected error in luksClose."
+#.
+#. _success "Succesfully changed key for tomb: ::1 tomb file::" $TOMBFILE
+#. _message "The new key is: ::1 new key::" $TOMBKEYFILE
+#.
+#: tomb:1652
msgid "Unexpected error in luksClose."
msgstr ""
-#: success
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#. luksChangeKey "$nstloop" "$tmpnewkey"
+#.
+#. [[ $? == 0 ]] || _failure "Unexpected error in luksChangeKey."
+#.
+#. sudo cryptsetup luksClose "${mapper}" || _failure "Unexpected error in luksClose."
+#.
+#. > _success "Succesfully changed key for tomb: ::1 tomb file::" $TOMBFILE
+#. _message "The new key is: ::1 new key::" $TOMBKEYFILE
+#.
+#. return 0
+#. }
+#: tomb:1654
msgid "Succesfully changed key for tomb: ::1 tomb file::"
msgstr ""
-#: message
+#. Fold: Create
+#. Function: change_tomb_key
+#.
+#. Code sample:
+#.
+#. [[ $? == 0 ]] || _failure "Unexpected error in luksChangeKey."
+#.
+#. sudo cryptsetup luksClose "${mapper}" || _failure "Unexpected error in luksClose."
+#.
+#. _success "Succesfully changed key for tomb: ::1 tomb file::" $TOMBFILE
+#. > _message "The new key is: ::1 new key::" $TOMBKEYFILE
+#.
+#. return 0
+#. }
+#.
+#: tomb:1655
msgid "The new key is: ::1 new key::"
msgstr ""
-#: failure
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. # {{{ Open
+#.
+#. # $1 = tombfile $2(optional) = mountpoint
+#. mount_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#. > [[ -n "$tombpath" ]] || _failure "No tomb name specified for opening."
+#.
+#. _message "Commanded to open tomb ::1 tomb name::" $1
+#.
+#. _check_swap
+#: tomb:1667
msgid "No tomb name specified for opening."
msgstr ""
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. # $1 = tombfile $2(optional) = mountpoint
+#. mount_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#. [[ -n "$tombpath" ]] || _failure "No tomb name specified for opening."
+#.
+#. > _message "Commanded to open tomb ::1 tomb name::" $1
+#.
+#. _check_swap
+#. is_valid_tomb $tombpath
+#.
+#: tomb:1669
msgid "Commanded to open tomb ::1 tomb name::"
msgstr ""
-#: warning
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. _check_swap
+#. is_valid_tomb $tombpath
+#.
+#. # check file type (if its a Luks fs)
+#. [[ "`file $TOMBPATH`" =~ "luks encrypted file" ]] || {
+#. > _warning "::1 tomb file:: is not a valid tomb file" $TOMBFILE
+#. _failure "Operation aborted."
+#. }
+#.
+#. _verbose "Tomb found: ::1 tomb path::" $TOMBPATH
+#: tomb:1676
msgid "::1 tomb file:: is not a valid tomb file"
msgstr ""
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. _verbose "Tomb found: ::1 tomb path::" $TOMBPATH
+#.
+#. _load_key # Try loading new key from option -k and set TOMBKEYFILE
+#.
+#. tombmount=${2:-/media/$TOMBFILE}
+#. [[ -z "$2" ]] && {
+#. > _message "Mountpoint not specified, using default: ::1 mount point::" $tombmount }
+#.
+#. # Check if its already open
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]" ]] && {
+#. _warning "::1 tomb name:: is already open." $TOMBNAME
+#: tomb:1686
msgid "Mountpoint not specified, using default: ::1 mount point::"
msgstr ""
-#: warning
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. tombmount=${2:-/media/$TOMBFILE}
+#. [[ -z "$2" ]] && {
+#. _message "Mountpoint not specified, using default: ::1 mount point::" $tombmount }
+#.
+#. # Check if its already open
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]" ]] && {
+#. > _warning "::1 tomb name:: is already open." $TOMBNAME
+#. _message "Here below its status is reported:"
+#. list_tombs $TOMBNAME
+#. return 0 }
+#.
+#: tomb:1690
msgid "::1 tomb name:: is already open."
msgstr ""
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. [[ -z "$2" ]] && {
+#. _message "Mountpoint not specified, using default: ::1 mount point::" $tombmount }
+#.
+#. # Check if its already open
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]" ]] && {
+#. _warning "::1 tomb name:: is already open." $TOMBNAME
+#. > _message "Here below its status is reported:"
+#. list_tombs $TOMBNAME
+#. return 0 }
+#.
+#. _success "Opening ::1 tomb file:: on ::2 mount point::" $TOMBFILE $tombmount
+#: tomb:1691
msgid "Here below its status is reported:"
msgstr ""
-#: success
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. [[ "`mount -l`" -regex-match "${TOMBFILE}.*\[$TOMBNAME\]" ]] && {
+#. _warning "::1 tomb name:: is already open." $TOMBNAME
+#. _message "Here below its status is reported:"
+#. list_tombs $TOMBNAME
+#. return 0 }
+#.
+#. > _success "Opening ::1 tomb file:: on ::2 mount point::" $TOMBFILE $tombmount
+#.
+#. lo_mount $TOMBPATH
+#. nstloop=`lo_new`
+#.
+#: tomb:1695
msgid "Opening ::1 tomb file:: on ::2 mount point::"
msgstr ""
-#: failure
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. lo_mount $TOMBPATH
+#. nstloop=`lo_new`
+#.
+#. sudo cryptsetup isLuks ${nstloop} || {
+#. # is it a LUKS encrypted nest? see cryptsetup(1)
+#. > _failure "::1 tomb file:: is not a valid Luks encrypted storage file." $TOMBFILE }
+#.
+#. _message "This tomb is a valid LUKS encrypted device."
+#.
+#. luksdump="`sudo cryptsetup luksDump ${nstloop}`"
+#: tomb:1702
msgid "::1 tomb file:: is not a valid Luks encrypted storage file."
msgstr ""
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. nstloop=`lo_new`
+#.
+#. sudo cryptsetup isLuks ${nstloop} || {
+#. # is it a LUKS encrypted nest? see cryptsetup(1)
+#. _failure "::1 tomb file:: is not a valid Luks encrypted storage file." $TOMBFILE }
+#.
+#. > _message "This tomb is a valid LUKS encrypted device."
+#.
+#. luksdump="`sudo cryptsetup luksDump ${nstloop}`"
+#. tombdump=(`print $luksdump | awk '
+#. /^Cipher name/ {print $3}
+#: tomb:1704
msgid "This tomb is a valid LUKS encrypted device."
msgstr ""
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. luksdump="`sudo cryptsetup luksDump ${nstloop}`"
+#. tombdump=(`print $luksdump | awk '
+#. /^Cipher name/ {print $3}
+#. /^Cipher mode/ {print $3}
+#. /^Hash spec/ {print $3}'`)
+#. > _message "Cipher is \"::1 cipher::\" mode \"::2 mode::\" hash \"::3 hash::\"" $tombdump[1] $tombdump[2] $tombdump[3]
+#.
+#. slotwarn=`print $luksdump | awk '
+#. BEGIN { zero=0 }
+#. /^Key slot 0/ { zero=1 }
+#: tomb:1711
msgid "Cipher is \"::1 cipher::\" mode \"::2 mode::\" hash \"::3 hash::\""
msgstr ""
-#: warning
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. slotwarn=`print $luksdump | awk '
+#. BEGIN { zero=0 }
+#. /^Key slot 0/ { zero=1 }
+#. /^Key slot.*ENABLED/ { if(zero==1) print "WARN" }'`
+#. [[ "$slotwarn" == "WARN" ]] && {
+#. > _warning "Multiple key slots are enabled on this tomb. Beware: there can be a backdoor." }
+#.
+#. # save date of mount in minutes since 1970
+#. mapdate=`date +%s`
+#.
+#: tomb:1718
msgid "Multiple key slots are enabled on this tomb. Beware: there can be a backdoor."
msgstr ""
-#: failure
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. ask_key_password
+#. }
+#. [[ $? == 0 ]] || _failure "No valid password supplied."
+#.
+#. _cryptsetup luksOpen ${nstloop} ${mapper}
+#. [[ $? = 0 ]] || {
+#. > _failure "Failure mounting the encrypted file." }
+#.
+#. # preserve the loopdev after exit
+#. lo_preserve "$nstloop"
+#.
+#: tomb:1742
msgid "Failure mounting the encrypted file."
msgstr ""
-#: success
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. # array: [ cipher, keysize, loopdevice ]
+#. tombstat=(`sudo cryptsetup status ${mapper} | awk '
+#. /cipher:/ {print $2}
+#. /keysize:/ {print $2}
+#. /device:/ {print $2}'`)
+#. > _success "Success unlocking tomb ::1 tomb name::" $TOMBNAME
+#. _verbose "Key size is ::1 size:: for cipher ::2 cipher::" $tombstat[2] $tombstat[1]
+#.
+#. _message "Checking filesystem via ::1::" $tombstat[3]
+#. sudo fsck -p -C0 /dev/mapper/${mapper}
+#: tomb:1752
msgid "Success unlocking tomb ::1 tomb name::"
msgstr ""
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. /cipher:/ {print $2}
+#. /keysize:/ {print $2}
+#. /device:/ {print $2}'`)
+#. _success "Success unlocking tomb ::1 tomb name::" $TOMBNAME
+#. _verbose "Key size is ::1 size:: for cipher ::2 cipher::" $tombstat[2] $tombstat[1]
+#.
+#. > _message "Checking filesystem via ::1::" $tombstat[3]
+#. sudo fsck -p -C0 /dev/mapper/${mapper}
+#. _verbose "Tomb engraved as ::1 tomb name::" $TOMBNAME
+#. sudo tune2fs -L $TOMBNAME /dev/mapper/${mapper} > /dev/null
+#.
+#: tomb:1755
msgid "Checking filesystem via ::1::"
msgstr ""
-#: success
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#.
+#. # TODO: safety check MOUNTOPTS
+#. # safe_mount_options && \
+#. sudo mount -o $MOUNTOPTS /dev/mapper/${mapper} ${tombmount}
+#. # Clean up if the mount failed
+#. [[ $? == 0 ]] || {
+#. > _warning "Error mounting ::1 mapper:: on ::2 tombmount::" $mapper $tombmount
+#. [[ $oldmountopts != $MOUNTOPTS ]] && \
+#. _warning "Are mount options '::1 mount options::' valid?" $MOUNTOPTS
+#. # TODO: move cleanup to _endgame()
+#. [[ -d $tombmount ]] && rmdir $tombmount
+#: tomb:1773
+msgid "Error mounting ::1 mapper:: on ::2 tombmount::"
+msgstr ""
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. # safe_mount_options && \
+#. sudo mount -o $MOUNTOPTS /dev/mapper/${mapper} ${tombmount}
+#. # Clean up if the mount failed
+#. [[ $? == 0 ]] || {
+#. _warning "Error mounting ::1 mapper:: on ::2 tombmount::" $mapper $tombmount
+#. [[ $oldmountopts != $MOUNTOPTS ]] && \
+#. > _warning "Are mount options '::1 mount options::' valid?" $MOUNTOPTS
+#. # TODO: move cleanup to _endgame()
+#. [[ -d $tombmount ]] && rmdir $tombmount
+#. [[ -e /dev/mapper/$mapper ]] && sudo cryptsetup luksClose $mapper
+#. # The loop is taken care of in _endgame()
+#: tomb:1775
+msgid "Are mount options '::1 mount options::' valid?"
+msgstr ""
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. [[ $oldmountopts != $MOUNTOPTS ]] && \
+#. _warning "Are mount options '::1 mount options::' valid?" $MOUNTOPTS
+#. # TODO: move cleanup to _endgame()
+#. [[ -d $tombmount ]] && rmdir $tombmount
+#. [[ -e /dev/mapper/$mapper ]] && sudo cryptsetup luksClose $mapper
+#. # The loop is taken care of in _endgame()
+#. > _failure "Cannot mount ::1 tomb name::" $TOMBNAME
+#. }
+#.
+#. sudo chown $UID:$GID ${tombmount}
+#. sudo chmod 0711 ${tombmount}
+#: tomb:1780
+msgid "Cannot mount ::1 tomb name::"
+msgstr ""
+
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. _failure "Cannot mount ::1 tomb name::" $TOMBNAME
+#. }
+#.
+#. sudo chown $UID:$GID ${tombmount}
+#. sudo chmod 0711 ${tombmount}
+#.
+#. > _success "Success opening ::1 tomb file:: on ::2 mount point::" $TOMBFILE $tombmount
+#.
+#. local tombtty tombhost tombuid tombuser
+#.
+#. # print out when was opened the last time, by whom and where
+#: tomb:1786
msgid "Success opening ::1 tomb file:: on ::2 mount point::"
msgstr ""
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. tombuid=$(_cat ${tombmount}/.uid | tr -d ' ')
+#. tomblast=$(_cat ${tombmount}/.last | tr -d ' ')
+#. for e in ${(f@)mapfile[/etc/passwd]}; do
+#. [[ "$e" =~ ":$tombuid:" ]] && {
+#. tombuser="${e[(ws@:@)1]}" }
+#. done
+#. > _message "Last visit by ::1 user::(::2 tomb build::) from ::3 tty:: on ::4 host::" $tombuser $tombuid $tombtty $tombhost
+#. _message "on date ::1 date::" "`date --date=@${tomblast} +%c`"
+#. }
+#. # write down the UID and TTY that opened the tomb
+#. rm -f ${tombmount}/.uid
+#: tomb:1800
msgid "Last visit by ::1 user::(::2 tomb build::) from ::3 tty:: on ::4 host::"
msgstr ""
-#: message
+#. Fold: Open
+#. Function: mount_tomb
+#.
+#. Code sample:
+#. tomblast=$(_cat ${tombmount}/.last | tr -d ' ')
+#. for e in ${(f@)mapfile[/etc/passwd]}; do
+#. [[ "$e" =~ ":$tombuid:" ]] && {
+#. tombuser="${e[(ws@:@)1]}" }
+#. done
+#. _message "Last visit by ::1 user::(::2 tomb build::) from ::3 tty:: on ::4 host::" $tombuser $tombuid $tombtty $tombhost
+#. > _message "on date ::1 date::" "`date --date=@${tomblast} +%c`"
+#. }
+#. # write down the UID and TTY that opened the tomb
+#. rm -f ${tombmount}/.uid
+#. print $_UID > ${tombmount}/.uid
+#: tomb:1801
msgid "on date ::1 date::"
msgstr ""
-#: warning
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#.
+#. # Default mount options are overridden with the -o switch
+#. [[ -n ${(k)OPTS[-o]} ]] && MOUNTOPTS=${OPTS[-o]}
+#.
+#. # No HOME set? Note: this should never happen again.
+#. [[ -z $HOME ]] && {
+#. > _warning "How pitiful! A tomb, and no HOME."
+#. return 1 }
+#.
+#. [[ -z $mnt || ! -d $mnt ]] && {
+#. _warning "Cannot exec bind hooks without a mounted tomb."
+#: tomb:1849
msgid "How pitiful! A tomb, and no HOME."
msgstr ""
-#: warning
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. # No HOME set? Note: this should never happen again.
+#. [[ -z $HOME ]] && {
+#. _warning "How pitiful! A tomb, and no HOME."
+#. return 1 }
+#.
+#. [[ -z $mnt || ! -d $mnt ]] && {
+#. > _warning "Cannot exec bind hooks without a mounted tomb."
+#. return 1 }
+#.
+#. [[ -r "$mnt/bind-hooks" ]] || {
+#. _verbose "bind-hooks not found in ::1 mount point::" $mnt
+#: tomb:1853
msgid "Cannot exec bind hooks without a mounted tomb."
msgstr ""
-#: warning
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. # better parsing for bind hooks checks for two separated words on
+#. # each line, using zsh word separator array subscript
+#. _bindhooks="${mapfile[${mnt}/bind-hooks]}"
+#. for h in ${(f)_bindhooks}; do
+#. s="${h[(w)1]}"
+#. d="${h[(w)2]}"
+#. > [[ "$s" = "" ]] && { _warning "bind-hooks file is broken"; return 1 }
+#. [[ "$d" = "" ]] && { _warning "bind-hooks file is broken"; return 1 }
+#. maps+=($s $d)
+#. _verbose "bind-hook found: $s -> $d"
+#. done
+#: tomb:1869
msgid "bind-hooks file is broken"
msgstr ""
-#: warning
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. _verbose "bind-hook found: $s -> $d"
+#. done
+#. unset _bindhooks
+#.
+#. for dir in ${(k)maps}; do
+#. [[ "${dir[1]}" == "/" || "${dir[1,2]}" == ".." ]] && {
+#. > _warning "bind-hooks map format: local/to/tomb local/to/\$HOME"
+#. continue }
+#.
+#. [[ "${${maps[$dir]}[1]}" == "/" || "${${maps[$dir]}[1,2]}" == ".." ]] && {
+#. _warning "bind-hooks map format: local/to/tomb local/to/\$HOME. Rolling back"
+#: tomb:1878
msgid "bind-hooks map format: local/to/tomb local/to/$HOME"
msgstr ""
-#: warning
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. for dir in ${(k)maps}; do
+#. [[ "${dir[1]}" == "/" || "${dir[1,2]}" == ".." ]] && {
+#. _warning "bind-hooks map format: local/to/tomb local/to/\$HOME"
+#. continue }
+#.
+#. [[ "${${maps[$dir]}[1]}" == "/" || "${${maps[$dir]}[1,2]}" == ".." ]] && {
+#. > _warning "bind-hooks map format: local/to/tomb local/to/\$HOME. Rolling back"
+#. for dir in ${mounted}; do sudo umount $dir; done
+#. return 1 }
+#.
+#. if [[ ! -r "$HOME/${maps[$dir]}" ]]; then
+#: tomb:1882
msgid "bind-hooks map format: local/to/tomb local/to/$HOME. Rolling back"
msgstr ""
-#: warning
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. [[ "${${maps[$dir]}[1]}" == "/" || "${${maps[$dir]}[1,2]}" == ".." ]] && {
+#. _warning "bind-hooks map format: local/to/tomb local/to/\$HOME. Rolling back"
+#. for dir in ${mounted}; do sudo umount $dir; done
+#. return 1 }
+#.
+#. if [[ ! -r "$HOME/${maps[$dir]}" ]]; then
+#. > _warning "bind-hook target not existent, skipping ::1 home::/::2 subdir::" $HOME ${maps[$dir]}
+#. elif [[ ! -r "$mnt/$dir" ]]; then
+#. _warning "bind-hook source not found in tomb, skipping ::1 mount point::/::2 subdir::" $mnt $dir
+#. else
+#. sudo mount -o bind,$MOUNTOPTS $mnt/$dir $HOME/${maps[$dir]} \
+#: tomb:1887
msgid "bind-hook target not existent, skipping ::1 home::/::2 subdir::"
msgstr ""
-#: warning
+#. Fold: Open
+#. Function: exec_safe_bind_hooks
+#.
+#. Code sample:
+#. for dir in ${mounted}; do sudo umount $dir; done
+#. return 1 }
+#.
+#. if [[ ! -r "$HOME/${maps[$dir]}" ]]; then
+#. _warning "bind-hook target not existent, skipping ::1 home::/::2 subdir::" $HOME ${maps[$dir]}
+#. elif [[ ! -r "$mnt/$dir" ]]; then
+#. > _warning "bind-hook source not found in tomb, skipping ::1 mount point::/::2 subdir::" $mnt $dir
+#. else
+#. sudo mount -o bind,$MOUNTOPTS $mnt/$dir $HOME/${maps[$dir]} \
+#. && mounted+=("$HOME/${maps[$dir]}")
+#. fi
+#: tomb:1889
msgid "bind-hook source not found in tomb, skipping ::1 mount point::/::2 subdir::"
msgstr ""
-#: success
+#. Fold: Open
+#. Function: exec_safe_post_hooks
+#.
+#. Code sample:
+#. # Only run if post-hooks has the executable bit set
+#. [[ -x $mnt/post-hooks ]] || return
+#.
+#. # If the file starts with a shebang, run it.
+#. cat $mnt/post-hooks | head -n1 | grep '^#!\s*/' &> /dev/null
+#. [[ $? == 0 ]] && {
+#. > _success "Post hooks found, executing as user ::1 user name::." $USERNAME
+#. $mnt/post-hooks $act $mnt
+#. }
+#. }
+#.
+#: tomb:1917
msgid "Post hooks found, executing as user ::1 user name::."
msgstr ""
-#: failure
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. local tombname tombmount tombfs tombfsopts tombloop
+#. local ts tombtot tombused tombavail tombpercent tombp tombsince
+#. local tombtty tombhost tombuid tombuser
+#. # list all open tombs
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. > _failure "I can't see any ::1 status:: tomb, may they all rest in peace." ${1:-open} }
+#.
+#. for t in ${mounted_tombs}; do
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#: tomb:1936
msgid "I can't see any ::1 status:: tomb, may they all rest in peace."
msgstr ""
-#: message
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. tombuser="${ee[(ws@:@)1]}" }
+#. done
+#. }
+#.
+#. { option_is_set --get-mountpoint } && { print $tombmount; continue }
+#.
+#. > _message "::1 tombname:: open on ::2 tombmount:: using ::3 tombfsopts::" \
+#. $tombname $tombmount $tombfsopts
+#.
+#. _message "::1 tombname:: open since ::2 tombsince::" $tombname $tombsince
+#.
+#: tomb:1969
msgid "::1 tombname:: open on ::2 tombmount:: using ::3 tombfsopts::"
msgstr ""
-#: message
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#.
+#. { option_is_set --get-mountpoint } && { print $tombmount; continue }
+#.
+#. _message "::1 tombname:: open on ::2 tombmount:: using ::3 tombfsopts::" \
+#. $tombname $tombmount $tombfsopts
+#.
+#. > _message "::1 tombname:: open since ::2 tombsince::" $tombname $tombsince
+#.
+#. [[ -z "$tombtty" ]] || {
+#. _message "::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::" \
+#. $tombname $tombuser $tombtty $tombhost
+#: tomb:1972
msgid "::1 tombname:: open since ::2 tombsince::"
msgstr ""
-#: message
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. _message "::1 tombname:: open on ::2 tombmount:: using ::3 tombfsopts::" \
+#. $tombname $tombmount $tombfsopts
+#.
+#. _message "::1 tombname:: open since ::2 tombsince::" $tombname $tombsince
+#.
+#. [[ -z "$tombtty" ]] || {
+#. > _message "::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::" \
+#. $tombname $tombuser $tombtty $tombhost
+#. }
+#.
+#. _message "::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::%) is used: ::4 tombavail:: free " \
+#: tomb:1975
msgid "::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::"
msgstr ""
-#: message
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#.
+#. [[ -z "$tombtty" ]] || {
+#. _message "::1 tombname:: open by ::2 tombuser:: from ::3 tombtty:: on ::4 tombhost::" \
+#. $tombname $tombuser $tombtty $tombhost
+#. }
+#.
+#. > _message "::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::%) is used: ::4 tombavail:: free " \
+#. $tombname $tombtot $tombused $tombavail $tombpercent
+#.
+#. [[ ${tombp} -ge 90 ]] && {
+#. _warning "::1 tombname:: warning: your tomb is almost full!" $tombname
+#: tomb:1979
msgid "::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::%) is used: ::4 tombavail:: free "
msgstr ""
-#: warning
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. }
+#.
+#. _message "::1 tombname:: size ::2 tombtot:: of which ::3 tombused:: (::5 tombpercent::%) is used: ::4 tombavail:: free " \
+#. $tombname $tombtot $tombused $tombavail $tombpercent
+#.
+#. [[ ${tombp} -ge 90 ]] && {
+#. > _warning "::1 tombname:: warning: your tomb is almost full!" $tombname
+#. }
+#.
+#. # Now check hooks
+#. mounted_hooks=(`list_tomb_binds $tombname`)
+#: tomb:1983
msgid "::1 tombname:: warning: your tomb is almost full!"
msgstr ""
-#: message
+#. Fold: List
+#. Function: list_tombs
+#.
+#. Code sample:
+#. _warning "::1 tombname:: warning: your tomb is almost full!" $tombname
+#. }
+#.
+#. # Now check hooks
+#. mounted_hooks=(`list_tomb_binds $tombname`)
+#. for h in ${mounted_hooks}; do
+#. > _message "::1 tombname:: hooks ::2 hookname:: on ::3 hookdest::" \
+#. $tombname "`basename ${h[(ws:;:)1]}`" ${h[(ws:;:)2]}
+#. done
+#. done
+#. }
+#: tomb:1989
msgid "::1 tombname:: hooks ::2 hookname:: on ::3 hookdest::"
msgstr ""
-#: failure
+#. Fold: List
+#. Function: list_tomb_binds
+#.
+#. Code sample:
+#. # list_tomb_binds
+#. # print out an array of mounted bind hooks (internal use)
+#. # format is semi-colon separated list of attributes
+#. # needs an argument: name of tomb whose hooks belong
+#. list_tomb_binds() {
+#. [[ -z "$1" ]] && {
+#. > _failure "Internal error: list_tomb_binds called without argument." }
+#.
+#. # list bind hooks on util-linux 2.20 (Debian 7)
+#. mount -l \
+#. | awk -vtomb="$1" '
+#: tomb:2044
msgid "Internal error: list_tomb_binds called without argument."
msgstr ""
-#: failure
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. # {{{ Index and search
+#.
+#. # index files in all tombs for search
+#. # $1 is optional, to specify a tomb
+#. index_tombs() {
+#. { command -v updatedb 1>/dev/null 2>/dev/null } || {
+#. > _failure "Cannot index tombs on this system: updatedb (mlocate) not installed." }
+#.
+#. updatedbver=`updatedb --version | grep '^updatedb'`
+#. [[ "$updatedbver" =~ "GNU findutils" ]] && {
+#. _warning "Cannot use GNU findutils for index/search commands." }
+#: tomb:2076
msgid "Cannot index tombs on this system: updatedb (mlocate) not installed."
msgstr ""
-#: warning
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. index_tombs() {
+#. { command -v updatedb 1>/dev/null 2>/dev/null } || {
+#. _failure "Cannot index tombs on this system: updatedb (mlocate) not installed." }
+#.
+#. updatedbver=`updatedb --version | grep '^updatedb'`
+#. [[ "$updatedbver" =~ "GNU findutils" ]] && {
+#. > _warning "Cannot use GNU findutils for index/search commands." }
+#. [[ "$updatedbver" =~ "mlocate" ]] || {
+#. _failure "Index command needs 'mlocate' to be installed." }
+#.
+#. _verbose "$updatedbver"
+#: tomb:2080
msgid "Cannot use GNU findutils for index/search commands."
msgstr ""
-#: failure
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. _failure "Cannot index tombs on this system: updatedb (mlocate) not installed." }
+#.
+#. updatedbver=`updatedb --version | grep '^updatedb'`
+#. [[ "$updatedbver" =~ "GNU findutils" ]] && {
+#. _warning "Cannot use GNU findutils for index/search commands." }
+#. [[ "$updatedbver" =~ "mlocate" ]] || {
+#. > _failure "Index command needs 'mlocate' to be installed." }
+#.
+#. _verbose "$updatedbver"
+#.
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#: tomb:2082
msgid "Index command needs 'mlocate' to be installed."
msgstr ""
-#: failure
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. _verbose "$updatedbver"
+#.
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. # Considering one tomb
+#. [[ -n "$1" ]] && {
+#. > _failure "There seems to be no open tomb engraved as [::1::]" $1 }
+#. # Or more
+#. _failure "I can't see any open tomb, may they all rest in peace." }
+#.
+#. _success "Creating and updating search indexes."
+#: tomb:2090
msgid "There seems to be no open tomb engraved as [::1::]"
msgstr ""
-#: failure
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. # Considering one tomb
+#. [[ -n "$1" ]] && {
+#. _failure "There seems to be no open tomb engraved as [::1::]" $1 }
+#. # Or more
+#. > _failure "I can't see any open tomb, may they all rest in peace." }
+#.
+#. _success "Creating and updating search indexes."
+#.
+#. # start the LibreOffice document converter if installed
+#: tomb:2092
msgid "I can't see any open tomb, may they all rest in peace."
msgstr ""
-#: success
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. # Considering one tomb
+#. [[ -n "$1" ]] && {
+#. _failure "There seems to be no open tomb engraved as [::1::]" $1 }
+#. # Or more
+#. _failure "I can't see any open tomb, may they all rest in peace." }
+#.
+#. > _success "Creating and updating search indexes."
+#.
+#. # start the LibreOffice document converter if installed
+#. { command -v unoconv 1>/dev/null 2>/dev/null } && {
+#. unoconv -l 2>/dev/null &
+#: tomb:2094
msgid "Creating and updating search indexes."
msgstr ""
-#: message
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#.
+#. for t in ${mounted_tombs}; do
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#. tombmount=${t[(ws:;:)2]}
+#. [[ -r ${tombmount}/.noindex ]] && {
+#. > _message "Skipping ::1 tomb name:: (.noindex found)." $tombname
+#. continue }
+#. _message "Indexing ::1 tomb name:: filenames..." $tombname
+#. updatedb -l 0 -o ${tombmount}/.updatedb -U ${tombmount}
+#.
+#: tomb:2107
msgid "Skipping ::1 tomb name:: (.noindex found)."
msgstr ""
-#: message
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#. tombmount=${t[(ws:;:)2]}
+#. [[ -r ${tombmount}/.noindex ]] && {
+#. _message "Skipping ::1 tomb name:: (.noindex found)." $tombname
+#. continue }
+#. > _message "Indexing ::1 tomb name:: filenames..." $tombname
+#. updatedb -l 0 -o ${tombmount}/.updatedb -U ${tombmount}
+#.
+#. # here we use swish to index file contents
+#. [[ $SWISH == 1 ]] && {
+#: tomb:2109
msgid "Indexing ::1 tomb name:: filenames..."
msgstr ""
-#: message
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. continue }
+#. _message "Indexing ::1 tomb name:: filenames..." $tombname
+#. updatedb -l 0 -o ${tombmount}/.updatedb -U ${tombmount}
+#.
+#. # here we use swish to index file contents
+#. [[ $SWISH == 1 ]] && {
+#. > _message "Indexing ::1 tomb name:: contents..." $tombname
+#. [[ -r ${tombmount}/.swishrc ]] || {
+#. _message "Generating a new swish-e configuration file: ::1 swish conf::" ${tombmount}/.swishrc
+#. cat <<EOF > ${tombmount}/.swishrc
+#. # index directives
+#: tomb:2114
msgid "Indexing ::1 tomb name:: contents..."
msgstr ""
-#: message
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. updatedb -l 0 -o ${tombmount}/.updatedb -U ${tombmount}
+#.
+#. # here we use swish to index file contents
+#. [[ $SWISH == 1 ]] && {
+#. _message "Indexing ::1 tomb name:: contents..." $tombname
+#. [[ -r ${tombmount}/.swishrc ]] || {
+#. > _message "Generating a new swish-e configuration file: ::1 swish conf::" ${tombmount}/.swishrc
+#. cat <<EOF > ${tombmount}/.swishrc
+#. # index directives
+#. DefaultContents TXT*
+#. IndexDir $tombmount
+#: tomb:2116
msgid "Generating a new swish-e configuration file: ::1 swish conf::"
msgstr ""
-#: message
+#. Fold: Index and search
+#. Function: index_tombs
+#.
+#. Code sample:
+#. }
+#.
+#. swish-e -c ${tombmount}/.swishrc -S fs -v3
+#.
+#. }
+#.
+#. > _message "Search index updated."
+#. done
+#. }
+#. search_tombs() {
+#. { command -v locate 1>/dev/null 2>/dev/null } || {
+#: tomb:2190
msgid "Search index updated."
msgstr ""
-#: success
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#.
+#. # list all open tombs
+#. mounted_tombs=(`list_tomb_mounts`)
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. _failure "I can't see any open tomb, may they all rest in peace." }
+#.
+#. > _success "Searching for: ::1::" ${(f)@}
+#. for t in ${mounted_tombs}; do
+#. _verbose "Checking for index: ::1::" ${t}
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#: tomb:2210
msgid "Searching for: ::1::"
msgstr ""
-#: message
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. _verbose "Checking for index: ::1::" ${t}
+#. mapper=`basename ${t[(ws:;:)1]}`
+#. tombname=${t[(ws:;:)5]}
+#. tombmount=${t[(ws:;:)2]}
+#. [[ -r ${tombmount}/.updatedb ]] && {
+#. # Use mlocate to search hits on filenames
+#. > _message "Searching filenames in tomb ::1 tomb name::" $tombname
+#. locate -d ${tombmount}/.updatedb -e -i "${(f)@}"
+#. _message "Matches found: ::1 matches::" \
+#. $(locate -d ${tombmount}/.updatedb -e -i -c ${(f)@})
+#.
+#: tomb:2218
msgid "Searching filenames in tomb ::1 tomb name::"
msgstr ""
-#: message
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. tombname=${t[(ws:;:)5]}
+#. tombmount=${t[(ws:;:)2]}
+#. [[ -r ${tombmount}/.updatedb ]] && {
+#. # Use mlocate to search hits on filenames
+#. _message "Searching filenames in tomb ::1 tomb name::" $tombname
+#. locate -d ${tombmount}/.updatedb -e -i "${(f)@}"
+#. > _message "Matches found: ::1 matches::" \
+#. $(locate -d ${tombmount}/.updatedb -e -i -c ${(f)@})
+#.
+#. # Use swish-e to search over contents
+#. [[ $SWISH == 1 && -r $tombmount/.swish ]] && {
+#: tomb:2220
msgid "Matches found: ::1 matches::"
msgstr ""
-#: message
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. locate -d ${tombmount}/.updatedb -e -i "${(f)@}"
+#. _message "Matches found: ::1 matches::" \
+#. $(locate -d ${tombmount}/.updatedb -e -i -c ${(f)@})
+#.
+#. # Use swish-e to search over contents
+#. [[ $SWISH == 1 && -r $tombmount/.swish ]] && {
+#. > _message "Searching contents in tomb ::1 tomb name::" $tombname
+#. swish-e -w ${=@} -f $tombmount/.swish -H0 }
+#. } || {
+#. _warning "Skipping tomb ::1 tomb name::: not indexed." $tombname
+#. _warning "Run 'tomb index' to create indexes." }
+#: tomb:2225
msgid "Searching contents in tomb ::1 tomb name::"
msgstr ""
-#: warning
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#.
+#. # Use swish-e to search over contents
+#. [[ $SWISH == 1 && -r $tombmount/.swish ]] && {
+#. _message "Searching contents in tomb ::1 tomb name::" $tombname
+#. swish-e -w ${=@} -f $tombmount/.swish -H0 }
+#. } || {
+#. > _warning "Skipping tomb ::1 tomb name::: not indexed." $tombname
+#. _warning "Run 'tomb index' to create indexes." }
+#. done
+#. _message "Search completed."
+#. }
+#: tomb:2228
msgid "Skipping tomb ::1 tomb name::: not indexed."
msgstr ""
-#: warning
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. # Use swish-e to search over contents
+#. [[ $SWISH == 1 && -r $tombmount/.swish ]] && {
+#. _message "Searching contents in tomb ::1 tomb name::" $tombname
+#. swish-e -w ${=@} -f $tombmount/.swish -H0 }
+#. } || {
+#. _warning "Skipping tomb ::1 tomb name::: not indexed." $tombname
+#. > _warning "Run 'tomb index' to create indexes." }
+#. done
+#. _message "Search completed."
+#. }
+#.
+#: tomb:2229
msgid "Run 'tomb index' to create indexes."
msgstr ""
-#: message
+#. Fold: Index and search
+#. Function: search_tombs
+#.
+#. Code sample:
+#. _message "Searching contents in tomb ::1 tomb name::" $tombname
+#. swish-e -w ${=@} -f $tombmount/.swish -H0 }
+#. } || {
+#. _warning "Skipping tomb ::1 tomb name::: not indexed." $tombname
+#. _warning "Run 'tomb index' to create indexes." }
+#. done
+#. > _message "Search completed."
+#. }
+#.
+#. # }}} - Index and search
+#.
+#: tomb:2231
msgid "Search completed."
msgstr ""
-#: message
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. # {{{ Resize
+#.
+#. # resize tomb file size
+#. resize_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. > _message "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes." $1 $OPTS[-s]
+#.
+#. [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing."
+#. [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath
+#.
+#: tomb:2242
msgid "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes."
msgstr ""
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. # resize tomb file size
+#. resize_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. _message "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes." $1 $OPTS[-s]
+#.
+#. > [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing."
+#. [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath
+#.
+#. newtombsize="`option_value -s`"
+#. [[ -z "$newtombsize" ]] && {
+#: tomb:2244
msgid "No tomb name specified for resizing."
msgstr ""
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. resize_tomb() {
+#. local tombpath="$1" # First argument is the path to the tomb
+#.
+#. _message "Commanded to resize tomb ::1 tomb name:: to ::2 size:: megabytes." $1 $OPTS[-s]
+#.
+#. [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing."
+#. > [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath
+#.
+#. newtombsize="`option_value -s`"
+#. [[ -z "$newtombsize" ]] && {
+#. _failure "Aborting operations: new size was not specified, use -s" }
+#: tomb:2245
msgid "Cannot find ::1::"
msgstr ""
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#.
+#. [[ -z "$tombpath" ]] && _failure "No tomb name specified for resizing."
+#. [[ ! -r $tombpath ]] && _failure "Cannot find ::1::" $tombpath
+#.
+#. newtombsize="`option_value -s`"
+#. [[ -z "$newtombsize" ]] && {
+#. > _failure "Aborting operations: new size was not specified, use -s" }
+#.
+#. is_valid_tomb $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
+#.
+#. _load_key # Try loading new key from option -k and set TOMBKEYFILE
+#: tomb:2249
msgid "Aborting operations: new size was not specified, use -s"
msgstr ""
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. local oldtombsize=$(( `stat -c %s "$TOMBPATH" 2>/dev/null` / 1048576 ))
+#. local mounted_tomb=`mount -l |
+#. awk -vtomb="[$TOMBNAME]" '/^\/dev\/mapper\/tomb/ { if($7==tomb) print $1 }'`
+#.
+#. # Tomb must not be open
+#. [[ -z "$mounted_tomb" ]] || {
+#. > _failure "Please close the tomb ::1 tomb name:: before trying to resize it." $TOMBNAME }
+#. # New tomb size must be specified
+#. [[ -n "$newtombsize" ]] || {
+#. _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
+#. # New tomb size must be an integer
+#: tomb:2261
msgid "Please close the tomb ::1 tomb name:: before trying to resize it."
msgstr ""
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#.
+#. # Tomb must not be open
+#. [[ -z "$mounted_tomb" ]] || {
+#. _failure "Please close the tomb ::1 tomb name:: before trying to resize it." $TOMBNAME }
+#. # New tomb size must be specified
+#. [[ -n "$newtombsize" ]] || {
+#. > _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
+#. # New tomb size must be an integer
+#. [[ $newtombsize == <-> ]] || _failure "Size is not an integer."
+#. # Tombs can only grow in size
+#. [[ "$newtombsize" -gt "$oldtombsize" ]] || {
+#: tomb:2264
msgid "You must specify the new size of ::1 tomb name::"
msgstr ""
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. [[ -z "$mounted_tomb" ]] || {
+#. _failure "Please close the tomb ::1 tomb name:: before trying to resize it." $TOMBNAME }
+#. # New tomb size must be specified
+#. [[ -n "$newtombsize" ]] || {
+#. _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
+#. # New tomb size must be an integer
+#. > [[ $newtombsize == <-> ]] || _failure "Size is not an integer."
+#. # Tombs can only grow in size
+#. [[ "$newtombsize" -gt "$oldtombsize" ]] || {
+#. _failure "The new size must be greater then old tomb size." }
+#.
+#: tomb:2266
msgid "Size is not an integer."
msgstr ""
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. [[ -n "$newtombsize" ]] || {
+#. _failure "You must specify the new size of ::1 tomb name::" $TOMBNAME }
+#. # New tomb size must be an integer
+#. [[ $newtombsize == <-> ]] || _failure "Size is not an integer."
+#. # Tombs can only grow in size
+#. [[ "$newtombsize" -gt "$oldtombsize" ]] || {
+#. > _failure "The new size must be greater then old tomb size." }
+#.
+#. delta="$(( $newtombsize - $oldtombsize ))"
+#.
+#. _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $newtombsize
+#: tomb:2269
msgid "The new size must be greater then old tomb size."
msgstr ""
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. _message "Generating ::1 tomb file:: of ::2 size::MiB" $TOMBFILE $newtombsize
+#.
+#. _verbose "Data dump using ::1:: from /dev/urandom" ${DD[1]}
+#. ${=DD} if=/dev/urandom bs=1048576 count=${delta} >> $TOMBPATH
+#.
+#. [[ $? == 0 ]] || {
+#. > _failure "Error creating the extra resize ::1 size::, operation aborted." $tmp_resize }
+#.
+#. { option_is_set --tomb-pwd } && {
+#. tomb_pwd="`option_value --tomb-pwd`"
+#. _verbose "tomb-pwd = ::1 tomb pass::" $tomb_pwd
+#: tomb:2279
msgid "Error creating the extra resize ::1 size::, operation aborted."
msgstr ""
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. mapper="tomb.$TOMBNAME.$mapdate.$(basename $nstloop)"
+#.
+#. _cryptsetup luksOpen ${nstloop} ${mapper} || {
+#. _failure "Failure mounting the encrypted file." }
+#.
+#. sudo cryptsetup resize "${mapper}" || {
+#. > _failure "cryptsetup failed to resize ::1 mapper::" $mapper }
+#.
+#. sudo e2fsck -p -f /dev/mapper/${mapper} || {
+#. _failure "e2fsck failed to check ::1 mapper::" $mapper }
+#.
+#: tomb:2300
msgid "cryptsetup failed to resize ::1 mapper::"
msgstr ""
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. _failure "Failure mounting the encrypted file." }
+#.
+#. sudo cryptsetup resize "${mapper}" || {
+#. _failure "cryptsetup failed to resize ::1 mapper::" $mapper }
+#.
+#. sudo e2fsck -p -f /dev/mapper/${mapper} || {
+#. > _failure "e2fsck failed to check ::1 mapper::" $mapper }
+#.
+#. sudo resize2fs /dev/mapper/${mapper} || {
+#. _failure "resize2fs failed to resize ::1 mapper::" $mapper }
+#.
+#: tomb:2303
msgid "e2fsck failed to check ::1 mapper::"
msgstr ""
-#: failure
+#. Fold: Resize
+#. Function: resize_tomb
+#.
+#. Code sample:
+#. _failure "cryptsetup failed to resize ::1 mapper::" $mapper }
+#.
+#. sudo e2fsck -p -f /dev/mapper/${mapper} || {
+#. _failure "e2fsck failed to check ::1 mapper::" $mapper }
+#.
+#. sudo resize2fs /dev/mapper/${mapper} || {
+#. > _failure "resize2fs failed to resize ::1 mapper::" $mapper }
+#.
+#. # close and free the loop device
+#. sudo cryptsetup luksClose "${mapper}"
+#.
+#: tomb:2306
msgid "resize2fs failed to resize ::1 mapper::"
msgstr ""
-#: failure
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. mounted_tombs=(`list_tomb_mounts`)
+#. else
+#. mounted_tombs=(`list_tomb_mounts $1`)
+#. fi
+#.
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. > _failure "There is no open tomb to be closed." }
+#.
+#. [[ ${#mounted_tombs} -gt 1 && -z "$1" ]] && {
+#. _warning "Too many tombs mounted, please specify one (see tomb list)"
+#. _warning "or issue the command 'tomb close all' to close them all."
+#: tomb:2330
msgid "There is no open tomb to be closed."
msgstr ""
-#: warning
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. fi
+#.
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. _failure "There is no open tomb to be closed." }
+#.
+#. [[ ${#mounted_tombs} -gt 1 && -z "$1" ]] && {
+#. > _warning "Too many tombs mounted, please specify one (see tomb list)"
+#. _warning "or issue the command 'tomb close all' to close them all."
+#. _failure "Operation aborted." }
+#.
+#. for t in ${mounted_tombs}; do
+#: tomb:2333
msgid "Too many tombs mounted, please specify one (see tomb list)"
msgstr ""
-#: warning
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. [[ ${#mounted_tombs} == 0 ]] && {
+#. _failure "There is no open tomb to be closed." }
+#.
+#. [[ ${#mounted_tombs} -gt 1 && -z "$1" ]] && {
+#. _warning "Too many tombs mounted, please specify one (see tomb list)"
+#. > _warning "or issue the command 'tomb close all' to close them all."
+#. _failure "Operation aborted." }
+#.
+#. for t in ${mounted_tombs}; do
+#. mapper=`basename ${t[(ws:;:)1]}`
+#: tomb:2334
msgid "or issue the command 'tomb close all' to close them all."
msgstr ""
-#: warning
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. _verbose "Name: ::1 tomb name::" $tombname
+#. _verbose "Mount: ::1 mount point::" $tombmount
+#. _verbose "Mapper: ::1 mapper::" $mapper
+#.
+#. [[ -e "$mapper" ]] && {
+#. > _warning "Tomb not found: ::1 tomb file::" $1
+#. _warning "Please specify an existing tomb."
+#. return 0 }
+#.
+#. [[ -n $SLAM ]] && {
+#: tomb:2350
msgid "Tomb not found: ::1 tomb file::"
msgstr ""
-#: warning
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _verbose "Name: ::1 tomb name::" $tombname
+#. _verbose "Mount: ::1 mount point::" $tombmount
+#. _verbose "Mapper: ::1 mapper::" $mapper
+#.
+#. [[ -e "$mapper" ]] && {
+#. _warning "Tomb not found: ::1 tomb file::" $1
+#. > _warning "Please specify an existing tomb."
+#. return 0 }
+#.
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" \
+#: tomb:2351
msgid "Please specify an existing tomb."
msgstr ""
-#: success
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. [[ -e "$mapper" ]] && {
+#. _warning "Tomb not found: ::1 tomb file::" $1
+#. _warning "Please specify an existing tomb."
+#. return 0 }
+#.
+#. [[ -n $SLAM ]] && {
+#. > _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" \
+#. $tombname $tombmount
+#. _message "Kill all processes busy inside the tomb."
+#. { slam_tomb "$tombmount" } || {
+#. _failure "Cannot slam the tomb ::1 tomb name::" $tombname }
+#: tomb:2355
msgid "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::"
msgstr ""
-#: message
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _warning "Please specify an existing tomb."
+#. return 0 }
+#.
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" \
+#. $tombname $tombmount
+#. > _message "Kill all processes busy inside the tomb."
+#. { slam_tomb "$tombmount" } || {
+#. _failure "Cannot slam the tomb ::1 tomb name::" $tombname }
+#. } || {
+#. _message "Closing tomb ::1 tomb name:: mounted on ::2 mount point::" \
+#: tomb:2357
msgid "Kill all processes busy inside the tomb."
msgstr ""
-#: failure
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" \
+#. $tombname $tombmount
+#. _message "Kill all processes busy inside the tomb."
+#. { slam_tomb "$tombmount" } || {
+#. > _failure "Cannot slam the tomb ::1 tomb name::" $tombname }
+#. } || {
+#. _message "Closing tomb ::1 tomb name:: mounted on ::2 mount point::" \
+#. $tombname $tombmount }
+#.
+#: tomb:2359
msgid "Cannot slam the tomb ::1 tomb name::"
msgstr ""
-#: message
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _success "Slamming tomb ::1 tomb name:: mounted on ::2 mount point::" \
+#. $tombname $tombmount
+#. _message "Kill all processes busy inside the tomb."
+#. { slam_tomb "$tombmount" } || {
+#. _failure "Cannot slam the tomb ::1 tomb name::" $tombname }
+#. } || {
+#. > _message "Closing tomb ::1 tomb name:: mounted on ::2 mount point::" \
+#. $tombname $tombmount }
+#.
+#. # check if there are binded dirs and close them
+#. bind_tombs=(`list_tomb_binds $tombname`)
+#: tomb:2361
msgid "Closing tomb ::1 tomb name:: mounted on ::2 mount point::"
msgstr ""
-#: message
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. # check if there are binded dirs and close them
+#. bind_tombs=(`list_tomb_binds $tombname`)
+#. for b in ${bind_tombs}; do
+#. bind_mapper="${b[(ws:;:)1]}"
+#. bind_mount="${b[(ws:;:)2]}"
+#. > _message "Closing tomb bind hook: ::1 hook::" $bind_mount
+#. sudo umount $bind_mount || {
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb: killing all processes using this hook."
+#. slam_tomb "$bind_mount"
+#: tomb:2369
msgid "Closing tomb bind hook: ::1 hook::"
msgstr ""
-#: success
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. for b in ${bind_tombs}; do
+#. bind_mapper="${b[(ws:;:)1]}"
+#. bind_mount="${b[(ws:;:)2]}"
+#. _message "Closing tomb bind hook: ::1 hook::" $bind_mount
+#. sudo umount $bind_mount || {
+#. [[ -n $SLAM ]] && {
+#. > _success "Slamming tomb: killing all processes using this hook."
+#. slam_tomb "$bind_mount"
+#. [[ $? == 1 ]] && {
+#. _failure "Cannot slam the bind hook ::1 hook::" $bind_mount }
+#. umount $bind_mount
+#: tomb:2372
msgid "Slamming tomb: killing all processes using this hook."
msgstr ""
-#: failure
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _message "Closing tomb bind hook: ::1 hook::" $bind_mount
+#. sudo umount $bind_mount || {
+#. [[ -n $SLAM ]] && {
+#. _success "Slamming tomb: killing all processes using this hook."
+#. slam_tomb "$bind_mount"
+#. [[ $? == 1 ]] && {
+#. > _failure "Cannot slam the bind hook ::1 hook::" $bind_mount }
+#. umount $bind_mount
+#. } || {
+#. _warning "Tomb bind hook ::1 hook:: is busy, cannot close tomb." $bind_mount }
+#. }
+#: tomb:2375
msgid "Cannot slam the bind hook ::1 hook::"
msgstr ""
-#: warning
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. _success "Slamming tomb: killing all processes using this hook."
+#. slam_tomb "$bind_mount"
+#. [[ $? == 1 ]] && {
+#. _failure "Cannot slam the bind hook ::1 hook::" $bind_mount }
+#. umount $bind_mount
+#. } || {
+#. > _warning "Tomb bind hook ::1 hook:: is busy, cannot close tomb." $bind_mount }
+#. }
+#. done
+#.
+#. # Execute post-hooks for eventual cleanup
+#: tomb:2378
msgid "Tomb bind hook ::1 hook:: is busy, cannot close tomb."
msgstr ""
-#: warning
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#. # Execute post-hooks for eventual cleanup
+#. { option_is_set -n } || {
+#. exec_safe_post_hooks ${tombmount%%/} close }
+#.
+#. _verbose "Performing umount of ::1 mount point::" $tombmount
+#. sudo umount ${tombmount}
+#. > [[ $? = 0 ]] || { _warning "Tomb is busy, cannot umount!"; return 1 }
+#.
+#. # If we used a default mountpoint and is now empty, delete it
+#. [[ "$tombmount" == "/media/$tombname.tomb" ]] && { rmdir $tombmount }
+#.
+#: tomb:2388
msgid "Tomb is busy, cannot umount!"
msgstr ""
-#: failure
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. # If we used a default mountpoint and is now empty, delete it
+#. [[ "$tombmount" == "/media/$tombname.tomb" ]] && { rmdir $tombmount }
+#.
+#. sudo cryptsetup luksClose $mapper
+#. [[ $? == 0 ]] || {
+#. > _failure "Error occurred in cryptsetup luksClose ::1 mapper::" $mapper }
+#.
+#. # Normally the loopback device is detached when unused
+#. [[ -e "/dev/$tombloop" ]] && sudo losetup -d "/dev/$tombloop"
+#. [[ $? = 0 ]] || {
+#: tomb:2395
msgid "Error occurred in cryptsetup luksClose ::1 mapper::"
msgstr ""
-#: success
+#. Fold: Close
+#. Function: umount_tomb
+#.
+#. Code sample:
+#.
+#. # Normally the loopback device is detached when unused
+#. [[ -e "/dev/$tombloop" ]] && sudo losetup -d "/dev/$tombloop"
+#. [[ $? = 0 ]] || {
+#. _verbose "/dev/$tombloop was already closed." }
+#.
+#. > _success "Tomb ::1 tomb name:: closed: your bones will rest in peace." $tombname
+#.
+#. done # loop across mounted tombs
+#.
+#. return 0
+#: tomb:2402
msgid "Tomb ::1 tomb name:: closed: your bones will rest in peace."
msgstr ""
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. return 1
+#. fi
+#. return 0
+#. fi
+#. unset discardme
+#. if ! zparseopts -M -E -D -Adiscardme ${every_opts}; then
+#. > _failure "Error parsing."
+#. return 127
+#. fi
+#. unset discardme
+#. subcommand=$1
+#: tomb:2522
msgid "Error parsing."
msgstr ""
-#: warning
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. subcommand=$1
+#. if [[ -z $subcommand ]]; then
+#. subcommand="__default"
+#. fi
+#.
+#. if [[ -z ${(k)subcommands_opts[$subcommand]} ]]; then
+#. > _warning "There's no such command \"::1 subcommand::\"." $subcommand
+#. exitv=127 _failure "Please try -h for help."
+#. fi
+#. argv=("${(@)oldstar}")
+#. unset oldstar
+#: tomb:2532
msgid "There's no such command \"::1 subcommand::\"."
msgstr ""
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. if [[ -z $subcommand ]]; then
+#. subcommand="__default"
+#. fi
+#.
+#. if [[ -z ${(k)subcommands_opts[$subcommand]} ]]; then
+#. _warning "There's no such command \"::1 subcommand::\"." $subcommand
+#. > exitv=127 _failure "Please try -h for help."
+#. fi
+#. argv=("${(@)oldstar}")
+#. unset oldstar
+#.
+#: tomb:2533
msgid "Please try -h for help."
msgstr ""
-#: warning
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. # zsh magic: ${=string} will split to multiple arguments when spaces occur
+#. set -A cmd_opts ${main_opts} ${=subcommands_opts[$subcommand]}
+#. # if there is no option, we don't need parsing
+#. if [[ -n $cmd_opts ]]; then
+#. zparseopts -M -E -D -AOPTS ${cmd_opts}
+#. if [[ $? != 0 ]]; then
+#. > _warning "Some error occurred during option processing."
+#. exitv=127 _failure "See \"tomb help\" for more info."
+#. fi
+#. fi
+#. #build PARAM (array of arguments) and check if there are unrecognized options
+#: tomb:2545
msgid "Some error occurred during option processing."
msgstr ""
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. set -A cmd_opts ${main_opts} ${=subcommands_opts[$subcommand]}
+#. # if there is no option, we don't need parsing
+#. if [[ -n $cmd_opts ]]; then
+#. zparseopts -M -E -D -AOPTS ${cmd_opts}
+#. if [[ $? != 0 ]]; then
+#. _warning "Some error occurred during option processing."
+#. > exitv=127 _failure "See \"tomb help\" for more info."
+#. fi
+#. fi
+#. #build PARAM (array of arguments) and check if there are unrecognized options
+#. ok=0
+#: tomb:2546
msgid "See \"tomb help\" for more info."
msgstr ""
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. for arg in $*; do
+#. if [[ $arg == '--' || $arg == '-' ]]; then
+#. ok=1
+#. continue #it shouldnt be appended to PARAM
+#. elif [[ $arg[1] == '-' ]]; then
+#. if [[ $ok == 0 ]]; then
+#. > exitv=127 _failure "Unrecognized option ::1 arg:: for subcommand ::2 subcommand::" $arg $subcommand
+#. fi
+#. fi
+#. PARAM+=$arg
+#. done
+#: tomb:2558
msgid "Unrecognized option ::1 arg:: for subcommand ::2 subcommand::"
msgstr ""
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. # Use colors unless told not to
+#. { ! option_is_set --no-color } && { autoload -Uz colors && colors }
+#. # Some options are only available during insecure mode
+#. { ! option_is_set --unsafe } && {
+#. for opt in --tomb-pwd --use-urandom --tomb-old-pwd; do
+#. { option_is_set $opt } && {
+#. > exitv=127 _failure "You specified option ::1 option::, which is DANGEROUS and should only be used for testing\nIf you really want so, add --unsafe" $opt }
+#. done
+#. }
+#. # read -t or --tmp flags to set a custom temporary directory
+#. option_is_set --tmp && TMPPREFIX=$(option_value --tmp)
+#: tomb:2574
msgid "You specified option ::1 option::, which is DANGEROUS and should only be used for testing\nIf you really want so, add --unsafe"
msgstr ""
-#: warning
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. help)
+#. usage
+#. ;;
+#.
+#. # DEPRECATION notice (leave here as 'create' is still present in old docs)
+#. create)
+#. > _warning "The create command is deprecated, please use dig, forge and lock instead."
+#. _warning "For more informations see Tomb's manual page (man tomb)."
+#. _failure "Operation aborted."
+#. ;;
+#.
+#: tomb:2608
msgid "The create command is deprecated, please use dig, forge and lock instead."
msgstr ""
-#: warning
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. usage
+#. ;;
+#.
+#. # DEPRECATION notice (leave here as 'create' is still present in old docs)
+#. create)
+#. _warning "The create command is deprecated, please use dig, forge and lock instead."
+#. > _warning "For more informations see Tomb's manual page (man tomb)."
+#. _failure "Operation aborted."
+#. ;;
+#.
+#. # CREATE Step 1: dig -s NN file.tomb
+#: tomb:2609
msgid "For more informations see Tomb's manual page (man tomb)."
msgstr ""
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. umount_tomb $PARAM[1]
+#. ;;
+#.
+#. # Grow tomb's size
+#. resize)
+#. [[ $RESIZER == 0 ]] && {
+#. > _failure "Resize2fs not installed: cannot resize tombs." }
+#. resize_tomb $PARAM[1]
+#. ;;
+#.
+#. ## Contents manipulation
+#: tomb:2643
msgid "Resize2fs not installed: cannot resize tombs."
msgstr ""
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#.
+#. ## Locking operations
+#.
+#. # Export key to QR Code
+#. engrave)
+#. [[ $QRENCODE == 0 ]] && {
+#. > _failure "QREncode not installed: cannot engrave keys on paper." }
+#. engrave_key ${=PARAM}
+#. ;;
+#.
+#. # Change password on existing key
+#: tomb:2669
msgid "QREncode not installed: cannot engrave keys on paper."
msgstr ""
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. change_tomb_key ${=PARAM}
+#. ;;
+#.
+#. # STEGANOGRAPHY: hide key inside an image
+#. bury)
+#. [[ $STEGHIDE == 0 ]] && {
+#. > _failure "Steghide not installed: cannot bury keys into images." }
+#. bury_key $PARAM[1]
+#. ;;
+#.
+#. # STEGANOGRAPHY: read key hidden in an image
+#: tomb:2686
msgid "Steghide not installed: cannot bury keys into images."
msgstr ""
-#: failure
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. bury_key $PARAM[1]
+#. ;;
+#.
+#. # STEGANOGRAPHY: read key hidden in an image
+#. exhume)
+#. [[ $STEGHIDE == 0 ]] && {
+#. > _failure "Steghide not installed: cannot exhume keys from images." }
+#. exhume_key $PARAM[1]
+#. ;;
+#.
+#. ## Internal commands useful to developers
+#: tomb:2693
msgid "Steghide not installed: cannot exhume keys from images."
msgstr ""
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#.
+#. # Ask user for a password interactively
+#. askpass) ask_password $PARAM[1] $PARAM[2] ;;
+#.
+#. # Default operation: presentation, or version information with -v
+#. __default)
+#. > _print "Tomb ::1 version:: - a strong and gentle undertaker for your secrets" $VERSION
+#. _print "\000"
+#. _print " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+#. _print " This is free software: you are free to change and redistribute it"
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#: tomb:2707
msgid "Tomb ::1 version:: - a strong and gentle undertaker for your secrets"
msgstr ""
-#: print
-msgid " Copyright (C) 2007-2014 Dyne.org Foundation, License GNU GPL v3+"
-msgstr ""
-
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. askpass) ask_password $PARAM[1] $PARAM[2] ;;
+#.
+#. # Default operation: presentation, or version information with -v
+#. __default)
+#. _print "Tomb ::1 version:: - a strong and gentle undertaker for your secrets" $VERSION
+#. _print "\000"
+#. > _print " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+#. _print " This is free software: you are free to change and redistribute it"
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#: tomb:2709
+msgid " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+msgstr ""
+
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#.
+#. # Default operation: presentation, or version information with -v
+#. __default)
+#. _print "Tomb ::1 version:: - a strong and gentle undertaker for your secrets" $VERSION
+#. _print "\000"
+#. _print " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+#. > _print " This is free software: you are free to change and redistribute it"
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#: tomb:2710
msgid " This is free software: you are free to change and redistribute it"
msgstr ""
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. # Default operation: presentation, or version information with -v
+#. __default)
+#. _print "Tomb ::1 version:: - a strong and gentle undertaker for your secrets" $VERSION
+#. _print "\000"
+#. _print " Copyright (C) 2007-2015 Dyne.org Foundation, License GNU GPL v3+"
+#. _print " This is free software: you are free to change and redistribute it"
+#. > _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#. LANG=en
+#: tomb:2711
msgid " For the latest sourcecode go to <http://dyne.org/software/tomb>"
msgstr ""
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. _print " This is free software: you are free to change and redistribute it"
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#. LANG=en
+#. > _print " This source code is distributed in the hope that it will be useful,"
+#. _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. _print " When in need please refer to <http://dyne.org/support>."
+#: tomb:2716
msgid " This source code is distributed in the hope that it will be useful,"
msgstr ""
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. _print " For the latest sourcecode go to <http://dyne.org/software/tomb>"
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#. LANG=en
+#. _print " This source code is distributed in the hope that it will be useful,"
+#. > _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. _print " When in need please refer to <http://dyne.org/support>."
+#. _print "\000"
+#: tomb:2717
msgid " but WITHOUT ANY WARRANTY; without even the implied warranty of"
msgstr ""
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. _print "\000"
+#. option_is_set -v && {
+#. local langwas=$LANG
+#. LANG=en
+#. _print " This source code is distributed in the hope that it will be useful,"
+#. _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. > _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. _print " When in need please refer to <http://dyne.org/support>."
+#. _print "\000"
+#. _print "System utils:"
+#: tomb:2718
msgid " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
msgstr ""
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. local langwas=$LANG
+#. LANG=en
+#. _print " This source code is distributed in the hope that it will be useful,"
+#. _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. > _print " When in need please refer to <http://dyne.org/support>."
+#. _print "\000"
+#. _print "System utils:"
+#. _print "\000"
+#. cat <<EOF
+#: tomb:2720
msgid " When in need please refer to <http://dyne.org/support>."
msgstr ""
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. _print " This source code is distributed in the hope that it will be useful,"
+#. _print " but WITHOUT ANY WARRANTY; without even the implied warranty of"
+#. _print " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+#. LANG=$langwas
+#. _print " When in need please refer to <http://dyne.org/support>."
+#. _print "\000"
+#. > _print "System utils:"
+#. _print "\000"
+#. cat <<EOF
+#. `sudo -V | head -n1`
+#. `cryptsetup --version`
+#: tomb:2722
msgid "System utils:"
msgstr ""
-#: print
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. `cryptsetup --version`
+#. `pinentry --version`
+#. `gpg --version | head -n1` - key forging algorithms (GnuPG symmetric ciphers):
+#. `list_gnupg_ciphers`
+#. EOF
+#. _print "\000"
+#. > _print "Optional utils:"
+#. _print "\000"
+#. _list_optional_tools version
+#. return 0
+#. }
+#: tomb:2732
msgid "Optional utils:"
msgstr ""
-#: warning
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. }
+#. usage
+#. ;;
+#.
+#. # Reject unknown command and suggest help
+#. *)
+#. > _warning "Command \"::1 subcommand::\" not recognized." $subcommand
+#. _message "Try -h for help."
+#. return 1
+#. ;;
+#. esac
+#: tomb:2742
msgid "Command \"::1 subcommand::\" not recognized."
msgstr ""
-#: message
+#. Fold: Main routine
+#. Function: main
+#.
+#. Code sample:
+#. usage
+#. ;;
+#.
+#. # Reject unknown command and suggest help
+#. *)
+#. _warning "Command \"::1 subcommand::\" not recognized." $subcommand
+#. > _message "Try -h for help."
+#. return 1
+#. ;;
+#. esac
+#. return $?
+#: tomb:2743
msgid "Try -h for help."
msgstr ""
diff --git a/tomb b/tomb
@@ -1505,7 +1505,7 @@ lock_tomb_with_key() {
_message "Commanded to lock tomb ::1 tomb file::" $TOMBFILE
[[ -f $TOMBPATH ]] || {
- _failure "There is no tomb here. You have to it dig first." }
+ _failure "There is no tomb here. You have to dig it first." }
_verbose "Tomb found: ::1 tomb path::" $TOMBPATH