commit 8f25001f57a056486d42a98fbcd7f5f63cfce233
parent fa75d0f7bc374b88911c2bc5746bafb156987286
Author: Jaromil <jaromil@dyne.org>
Date:   Sun,  8 Sep 2013 16:10:19 +0200
fixed versioning and extras reorganization
Diffstat:
15 files changed, 351 insertions(+), 343 deletions(-)
diff --git a/README b/README
@@ -68,7 +68,7 @@ Tomb is an evolution of the 'mknest' tool developed for the dyne:bolic
 GNU/Linux distribution, which is used by its 'nesting' mechanism to
 encrypt the Home directory of users, a system implemented already in
 2001. Since then, the same shell routines kept being maintained and in
-2007 they were adapted to work on Debian and Arch distributions.
+2007 they were adapted to work on various other GNU/Linux distributions.
 
 As of today, Tomb is a well stable tool also used in mission critical
 situations by a number of activists in endangered zones. It has been
@@ -93,3 +93,4 @@ http://lists.dyne.org or via IRC on https://irc.dyne.org channel #dyne
 Some enthusiastic ideas are in the TODO file.
 
 Information on developers involved is found in the AUTHORS file.
+
diff --git a/extras/gtk-tray/Makefile b/extras/gtk-tray/Makefile
@@ -0,0 +1,7 @@
+
+all:
+	gcc -I. `pkg-config --cflags libnotify gtk+-2.0` $(CFLAGS) -c tomb-gtk-tray.c
+	gcc tomb-gtk-tray.o `pkg-config --libs  libnotify gtk+-2.0` -o tomb-gtk-tray
+
+clean:
+	rm *.o tomb-gtk-tray
diff --git a/extras/monmort.xpm b/extras/gtk-tray/monmort.xpm
diff --git a/extras/gtk-tray/tomb-gtk-tray.c b/extras/gtk-tray/tomb-gtk-tray.c
@@ -0,0 +1,341 @@
+/*  Tomb - encrypted storage undertaker
+ *  
+ *  (c) Copyright 2007-2011 Denis Roio <jaromil@dyne.org>
+ *
+ * This source code is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Public License as published 
+ * by the Free Software Foundation; either version 3 of the License,
+ * or (at your option) any later version.
+ *
+ * This source code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * Please refer to the GNU Public License for more details.
+ *
+ * You should have received a copy of the GNU Public License along with
+ * this source code; if not, write to:
+ * Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <libgen.h>
+
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#include <gtk/gtk.h>
+#include <libnotify/notify.h>
+
+/* The Tomb icon is an artwork by Jordi aka MonMort
+   a nomadic graffiti artist from Barcelona */
+#include <monmort.xpm>
+
+GdkPixbuf *pb_monmort;
+GtkStatusIcon *status_tomb;
+GtkMenu *menu_left, *menu_right;
+
+NotifyNotification *notice;
+GError *error;
+
+char mapper[256];
+char filename[256];
+char mountpoint[256];
+
+// forward declaration of callbacks
+gboolean left_click(GtkWidget *w, GdkEvent *e);
+gboolean cb_view(GtkWidget *w, GdkEvent *e);
+gboolean cb_close(GtkWidget *w, GdkEvent *e);
+gboolean cb_slam(GtkWidget *w, GdkEvent *e);
+
+gboolean right_click(GtkWidget *w, GdkEvent *e);
+gboolean cb_about(GtkWidget *w, GdkEvent *e);
+
+
+int main(int argc, char **argv) {
+  GtkWidget *item_close, *item_slam;
+  GtkWidget *item_view, *item_about;
+  gint menu_x, menu_y;
+  gboolean push_in = TRUE;
+
+  char tomb_file[512];
+  char tooltip[256];
+
+  gtk_set_locale();
+  gtk_init(&argc, &argv);
+
+  // get the information from commandline
+  if(argc<2) {
+    fprintf(stderr, "error: need at least one argument, the path to a dm-crypt device mapper\n");
+    exit(1);
+  } else {
+    // TODO: check if mapper really exists
+    snprintf(mapper,255, "%s", argv[1]);
+  }
+
+  if(argc<3) sprintf(filename, "unknown");
+  else snprintf(filename,255, "%s", argv[2]);
+
+  if(argc<4) sprintf(mountpoint,"unknown");
+  else snprintf(mountpoint,255, "%s", argv[3]);
+
+  // libnotify
+  notify_init("Tomb");
+
+  // set and show the status icon
+  pb_monmort = gdk_pixbuf_new_from_xpm_data(monmort);
+  status_tomb = gtk_status_icon_new_from_pixbuf(pb_monmort);
+  //  gtk_status_icon_set_name(status_tomb, "tomb");
+  gtk_status_icon_set_title(status_tomb, "Tomb");
+
+  snprintf(tooltip,255,"%s",mountpoint);
+  gtk_status_icon_set_tooltip_text (status_tomb, tooltip);
+
+  // LEFT click menu
+  menu_left = (GtkMenu*) gtk_menu_new();
+  // view
+  item_view = gtk_menu_item_new_with_label("Explore");
+  gtk_menu_attach(menu_left, item_view, 0, 1, 0, 1);
+  g_signal_connect_swapped(item_view, "activate", G_CALLBACK(cb_view), NULL);
+  gtk_widget_show(item_view);
+  // close
+  item_close = gtk_menu_item_new_with_label("Close");
+  gtk_menu_attach(menu_left, item_close, 0, 1, 1, 2);
+  g_signal_connect_swapped(item_close, "activate", G_CALLBACK(cb_close), NULL);
+  gtk_widget_show(item_close);
+  // slam
+  item_slam = gtk_menu_item_new_with_label("Slam");
+  gtk_menu_attach(menu_left, item_slam, 0, 1, 2, 3);
+  g_signal_connect_swapped(item_slam, "activate", G_CALLBACK(cb_slam), NULL);
+  gtk_widget_show(item_slam);
+
+  // connect it
+  g_signal_connect_swapped(status_tomb, "activate", G_CALLBACK(left_click), menu_left);
+
+
+  // RIGHT click menu
+  menu_right = (GtkMenu*) gtk_menu_new();
+  // about
+  item_about = gtk_menu_item_new_with_label("About");
+  gtk_menu_attach(menu_right, item_about, 0, 1, 0, 1);
+  g_signal_connect_swapped(item_about, "activate", G_CALLBACK(cb_about), NULL);
+  g_signal_connect_swapped(item_about, "popup-menu", G_CALLBACK(cb_about), NULL);
+  gtk_widget_show(item_about);
+  // connect it
+  g_signal_connect_swapped(status_tomb, "popup-menu", G_CALLBACK(right_click), menu_right);
+
+  // status icon
+#if (HAVE_NOTIFY_NOTIFICATION_NEW_WITH_STATUS_ICON)
+  notice = notify_notification_new_with_status_icon
+    ("Tomb encrypted undertaker",
+     "We started digging out bones",
+     NULL, status_tomb);
+#else
+  notice = notify_notification_new
+    ("Tomb encrypted undertaker",
+     "We started digging out bones",
+     NULL);
+#endif
+  notify_notification_set_icon_from_pixbuf(notice, pb_monmort);
+
+  notify_notification_show(notice, &error);
+
+  gtk_main();
+  
+  notify_uninit();
+
+  exit(0);
+  
+}
+
+// callbacks left click
+gboolean left_click(GtkWidget *w, GdkEvent *e) {
+  gtk_menu_popup(menu_left, NULL, NULL,
+		 gtk_status_icon_position_menu, status_tomb,
+		 1, gtk_get_current_event_time());
+  return TRUE;
+} 
+gboolean cb_view(GtkWidget *w, GdkEvent *e) { 
+  int pipefd[2];
+  pid_t cpid;
+  char buf;
+  int c, res;
+  char map[256];
+
+  if (pipe(pipefd) <0) {
+    fprintf(stderr,"pipe creation error: %s\n", strerror(errno));
+    return FALSE;
+  }
+
+  cpid = fork();
+  if (cpid == -1) {
+    fprintf(stderr,"fork error: %s\n", strerror(errno));
+    return FALSE;
+  }
+  if (cpid == 0) {    // Child
+    close(pipefd[1]); // close unused write end
+    for(c=0; read(pipefd[0], &buf, 1) > 0; c++)
+      map[c] = buf;
+    close(pipefd[0]);
+    map[c] = 0;
+    execlp("tomb-open", "tomb-open", map, (char*)NULL);
+    _exit(1);
+  }
+  close(pipefd[0]); // close unused read end
+  write(pipefd[1], mountpoint, strlen(mountpoint));
+  close(pipefd[1]); // reader will see EOF
+
+  return TRUE;
+}
+
+
+gboolean cb_close(GtkWidget *w, GdkEvent *e) { 
+  int pipefd[2];
+  pid_t cpid;
+  char buf;
+  int c, res;
+  char map[256];
+
+  if (pipe(pipefd) <0) {
+    fprintf(stderr,"pipe creation error: %s\n", strerror(errno));
+    return FALSE;
+  }
+
+  cpid = fork();
+  if (cpid == -1) {
+    fprintf(stderr,"fork error: %s\n", strerror(errno));
+    return FALSE;
+  }
+  if (cpid == 0) {    // Child
+    close(pipefd[1]); // close unused write end
+    for(c=0; read(pipefd[0], &buf, 1) > 0; c++)
+      map[c] = buf;
+    close(pipefd[0]);
+    map[c] = 0;
+    execlp("tomb", "tomb", "close", map, (char*)NULL);
+    _exit(1);
+  }
+  close(pipefd[0]); // close unused read end
+  write(pipefd[1], mapper, strlen(mapper));
+  close(pipefd[1]); // reader will see EOF
+
+  waitpid(cpid, &res, 0);
+  if(res==0) {
+    gtk_main_quit();
+    notify_uninit();
+    exit(0);
+  }
+  /*  tomb-notify "Tomb '$tombname' is too busy."		\
+      "Close all applications and file managers, then try again."
+  */
+  return TRUE;
+}
+
+
+gboolean cb_slam(GtkWidget *w, GdkEvent *e) {
+  int pipefd[2];
+  pid_t cpid;
+  char buf;
+  int c, res;
+  char map[256];
+
+  if (pipe(pipefd) <0) {
+    fprintf(stderr,"pipe creation error: %s\n", strerror(errno));
+    return FALSE;
+  }
+
+  cpid = fork();
+  if (cpid == -1) {
+    fprintf(stderr,"fork error: %s\n", strerror(errno));
+    return FALSE;
+  }
+  if (cpid == 0) {    // Child
+    close(pipefd[1]); // close unused write end
+    for(c=0; read(pipefd[0], &buf, 1) > 0; c++)
+      map[c] = buf;
+    close(pipefd[0]);
+    map[c] = 0;
+    execlp("tomb", "tomb", "slam", map, (char*)NULL);
+    _exit(1);
+  }
+  close(pipefd[0]); // close unused read end
+  write(pipefd[1], mapper, strlen(mapper));
+  close(pipefd[1]); // reader will see EOF
+
+  waitpid(cpid, &res, 0);
+  if(res==0) {
+    gtk_main_quit();
+    notify_uninit();
+    exit(0);
+  }
+  /*  tomb-notify "Tomb '$tombname' is too busy."		\
+      "Close all applications and file managers, then try again."
+  */
+  return TRUE;
+}
+
+// callbacks right click
+gboolean right_click(GtkWidget *w, GdkEvent *e) {
+  gtk_menu_popup(menu_right, NULL, NULL,
+		 gtk_status_icon_position_menu, status_tomb,
+		 1, gtk_get_current_event_time());
+  return TRUE;
+} 
+gboolean cb_about(GtkWidget *w, GdkEvent *e) {
+  const gchar *authors[] = {"Jaromil - http://jaromil.dyne.org",
+			    "Code reviews and contributions by:",
+			    "Dreamer, Hellekin O. Wolf, Shining, Mancausoft,",
+			    "Anathema, Boyska and Nignux", NULL};
+  const gchar *artists[] = {"Món Mort - http://monmort.blogspot.com",
+			    "Asbesto Molesto - http://freaknet.org/asbesto",
+			    NULL};
+  GtkWidget *dialog = gtk_about_dialog_new();
+  gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(dialog), "Tomb GTK Tray");
+  gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(dialog), "1.4"); 
+  gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(dialog), 
+				 "(C)2007-2013 Jaromil @ Dyne.org Foundation");
+  gtk_about_dialog_set_artists(GTK_ABOUT_DIALOG(dialog), artists);
+  gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(dialog), authors);
+
+  gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(dialog), 
+				"The Crypto Undertaker\n"
+"\n"
+"This program helps people keeping their bones together by taking care of their private data inside encrypted storage filesystems that are easy to access and transport.\n"
+"\n"
+"The level of security provided by this program is fairly strong: it uses  AES/SHA256 (cbc-essiv) to access the encrypted volumes in realtime so that all what is physically stored on your disc is only in an encrypted form.\n"
+"Tomb also encourages users to separate keys from data, for instance storing them on USB.\n"
+"\n"
+);
+  gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(dialog), "http://tomb.dyne.org");
+  gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(dialog), pb_monmort);
+  gtk_about_dialog_set_logo_icon_name(GTK_ABOUT_DIALOG(dialog), "monmort");
+  // this below is active since gtk 3.0 so too early for it now
+  //  gtk_about_dialog_set_license_type(GTK_ABOUT_DIALOG(dialog), GtkLicense.GTK_LICENSE_GPL_3_0);
+  gtk_about_dialog_set_license(GTK_ABOUT_DIALOG(dialog),
+"This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License along with this program.\n"
+"If not, see <http://www.gnu.org/licenses>\n"
+"\n"
+" The latest Tomb sourcecode is published on <http://tomb.dyne.org>\n");
+  gtk_about_dialog_set_wrap_license(GTK_ABOUT_DIALOG(dialog), TRUE);
+  gtk_dialog_run(GTK_DIALOG (dialog));
+  gtk_widget_destroy(dialog);
+  return TRUE;
+}
+  
+
+  // GtkWidget *dialog = 
+  //   gtk_message_dialog_new (NULL,
+  // 			    GTK_DIALOG_DESTROY_WITH_PARENT,
+  // 			    GTK_MESSAGE_INFO,
+  // 			    GTK_BUTTONS_CLOSE,
+  // 			    "Tomb '%s' open on '%s'\n"
+  // 			    "device mapper: %s", filename, mountpoint, mapper);
+  // gtk_dialog_run (GTK_DIALOG (dialog));
+  // gtk_widget_destroy (dialog);
diff --git a/extras/kdf/.gitignore b/extras/kdf-keys/.gitignore
diff --git a/extras/kdf/Makefile b/extras/kdf-keys/Makefile
diff --git a/extras/kdf/README b/extras/kdf-keys/README
diff --git a/extras/kdf/benchmark.c b/extras/kdf-keys/benchmark.c
diff --git a/extras/kdf/gen_salt.c b/extras/kdf-keys/gen_salt.c
diff --git a/extras/kdf/hexencode.c b/extras/kdf-keys/hexencode.c
diff --git a/extras/kdf/pbkdf2.c b/extras/kdf-keys/pbkdf2.c
diff --git a/extras/kdf/test.sh b/extras/kdf-keys/test.sh
diff --git a/extras/kdf/test.txt b/extras/kdf-keys/test.txt
Binary files differ.
diff --git a/extras/tomb-status.c b/extras/tomb-status.c
@@ -1,341 +0,0 @@
-/*  Tomb - encrypted storage undertaker
- *  
- *  (c) Copyright 2007-2011 Denis Roio <jaromil@dyne.org>
- *
- * This source code is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Public License as published 
- * by the Free Software Foundation; either version 3 of the License,
- * or (at your option) any later version.
- *
- * This source code is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * Please refer to the GNU Public License for more details.
- *
- * You should have received a copy of the GNU Public License along with
- * this source code; if not, write to:
- * Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-#include <libgen.h>
-
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include <gtk/gtk.h>
-#include <libnotify/notify.h>
-
-/* The Tomb icon is an artwork by Jordi aka MonMort
-   a nomadic graffiti artist from Barcelona */
-#include <monmort.xpm>
-
-GdkPixbuf *pb_monmort;
-GtkStatusIcon *status_tomb;
-GtkMenu *menu_left, *menu_right;
-
-NotifyNotification *notice;
-GError *error;
-
-char mapper[256];
-char filename[256];
-char mountpoint[256];
-
-// forward declaration of callbacks
-gboolean left_click(GtkWidget *w, GdkEvent *e);
-gboolean cb_view(GtkWidget *w, GdkEvent *e);
-gboolean cb_close(GtkWidget *w, GdkEvent *e);
-gboolean cb_slam(GtkWidget *w, GdkEvent *e);
-
-gboolean right_click(GtkWidget *w, GdkEvent *e);
-gboolean cb_about(GtkWidget *w, GdkEvent *e);
-
-
-int main(int argc, char **argv) {
-  GtkWidget *item_close, *item_slam;
-  GtkWidget *item_view, *item_about;
-  gint menu_x, menu_y;
-  gboolean push_in = TRUE;
-
-  char tomb_file[512];
-  char tooltip[256];
-
-  gtk_set_locale();
-  gtk_init(&argc, &argv);
-
-  // get the information from commandline
-  if(argc<2) {
-    fprintf(stderr, "error: need at least one argument, the path to a dm-crypt device mapper\n");
-    exit(1);
-  } else {
-    // TODO: check if mapper really exists
-    snprintf(mapper,255, "%s", argv[1]);
-  }
-
-  if(argc<3) sprintf(filename, "unknown");
-  else snprintf(filename,255, "%s", argv[2]);
-
-  if(argc<4) sprintf(mountpoint,"unknown");
-  else snprintf(mountpoint,255, "%s", argv[3]);
-
-  // libnotify
-  notify_init(PACKAGE);
-
-  // set and show the status icon
-  pb_monmort = gdk_pixbuf_new_from_xpm_data(monmort);
-  status_tomb = gtk_status_icon_new_from_pixbuf(pb_monmort);
-  //  gtk_status_icon_set_name(status_tomb, "tomb");
-  gtk_status_icon_set_title(status_tomb, "Tomb");
-
-  snprintf(tooltip,255,"%s",mountpoint);
-  gtk_status_icon_set_tooltip_text (status_tomb, tooltip);
-
-  // LEFT click menu
-  menu_left = (GtkMenu*) gtk_menu_new();
-  // view
-  item_view = gtk_menu_item_new_with_label("Explore");
-  gtk_menu_attach(menu_left, item_view, 0, 1, 0, 1);
-  g_signal_connect_swapped(item_view, "activate", G_CALLBACK(cb_view), NULL);
-  gtk_widget_show(item_view);
-  // close
-  item_close = gtk_menu_item_new_with_label("Close");
-  gtk_menu_attach(menu_left, item_close, 0, 1, 1, 2);
-  g_signal_connect_swapped(item_close, "activate", G_CALLBACK(cb_close), NULL);
-  gtk_widget_show(item_close);
-  // slam
-  item_slam = gtk_menu_item_new_with_label("Slam");
-  gtk_menu_attach(menu_left, item_slam, 0, 1, 2, 3);
-  g_signal_connect_swapped(item_slam, "activate", G_CALLBACK(cb_slam), NULL);
-  gtk_widget_show(item_slam);
-
-  // connect it
-  g_signal_connect_swapped(status_tomb, "activate", G_CALLBACK(left_click), menu_left);
-
-
-  // RIGHT click menu
-  menu_right = (GtkMenu*) gtk_menu_new();
-  // about
-  item_about = gtk_menu_item_new_with_label("About");
-  gtk_menu_attach(menu_right, item_about, 0, 1, 0, 1);
-  g_signal_connect_swapped(item_about, "activate", G_CALLBACK(cb_about), NULL);
-  g_signal_connect_swapped(item_about, "popup-menu", G_CALLBACK(cb_about), NULL);
-  gtk_widget_show(item_about);
-  // connect it
-  g_signal_connect_swapped(status_tomb, "popup-menu", G_CALLBACK(right_click), menu_right);
-
-  // status icon
-#if (HAVE_NOTIFY_NOTIFICATION_NEW_WITH_STATUS_ICON)
-  notice = notify_notification_new_with_status_icon
-    ("Tomb encrypted undertaker",
-     "We started digging out bones",
-     NULL, status_tomb);
-#else
-  notice = notify_notification_new
-    ("Tomb encrypted undertaker",
-     "We started digging out bones",
-     NULL);
-#endif
-  notify_notification_set_icon_from_pixbuf(notice, pb_monmort);
-
-  notify_notification_show(notice, &error);
-
-  gtk_main();
-  
-  notify_uninit();
-
-  exit(0);
-  
-}
-
-// callbacks left click
-gboolean left_click(GtkWidget *w, GdkEvent *e) {
-  gtk_menu_popup(menu_left, NULL, NULL,
-		 gtk_status_icon_position_menu, status_tomb,
-		 1, gtk_get_current_event_time());
-  return TRUE;
-} 
-gboolean cb_view(GtkWidget *w, GdkEvent *e) { 
-  int pipefd[2];
-  pid_t cpid;
-  char buf;
-  int c, res;
-  char map[256];
-
-  if (pipe(pipefd) <0) {
-    fprintf(stderr,"pipe creation error: %s\n", strerror(errno));
-    return FALSE;
-  }
-
-  cpid = fork();
-  if (cpid == -1) {
-    fprintf(stderr,"fork error: %s\n", strerror(errno));
-    return FALSE;
-  }
-  if (cpid == 0) {    // Child
-    close(pipefd[1]); // close unused write end
-    for(c=0; read(pipefd[0], &buf, 1) > 0; c++)
-      map[c] = buf;
-    close(pipefd[0]);
-    map[c] = 0;
-    execlp("tomb-open", "tomb-open", map, (char*)NULL);
-    _exit(1);
-  }
-  close(pipefd[0]); // close unused read end
-  write(pipefd[1], mountpoint, strlen(mountpoint));
-  close(pipefd[1]); // reader will see EOF
-
-  return TRUE;
-}
-
-
-gboolean cb_close(GtkWidget *w, GdkEvent *e) { 
-  int pipefd[2];
-  pid_t cpid;
-  char buf;
-  int c, res;
-  char map[256];
-
-  if (pipe(pipefd) <0) {
-    fprintf(stderr,"pipe creation error: %s\n", strerror(errno));
-    return FALSE;
-  }
-
-  cpid = fork();
-  if (cpid == -1) {
-    fprintf(stderr,"fork error: %s\n", strerror(errno));
-    return FALSE;
-  }
-  if (cpid == 0) {    // Child
-    close(pipefd[1]); // close unused write end
-    for(c=0; read(pipefd[0], &buf, 1) > 0; c++)
-      map[c] = buf;
-    close(pipefd[0]);
-    map[c] = 0;
-    execlp("tomb", "tomb", "close", map, (char*)NULL);
-    _exit(1);
-  }
-  close(pipefd[0]); // close unused read end
-  write(pipefd[1], mapper, strlen(mapper));
-  close(pipefd[1]); // reader will see EOF
-
-  waitpid(cpid, &res, 0);
-  if(res==0) {
-    gtk_main_quit();
-    notify_uninit();
-    exit(0);
-  }
-  /*  tomb-notify "Tomb '$tombname' is too busy."		\
-      "Close all applications and file managers, then try again."
-  */
-  return TRUE;
-}
-
-
-gboolean cb_slam(GtkWidget *w, GdkEvent *e) {
-  int pipefd[2];
-  pid_t cpid;
-  char buf;
-  int c, res;
-  char map[256];
-
-  if (pipe(pipefd) <0) {
-    fprintf(stderr,"pipe creation error: %s\n", strerror(errno));
-    return FALSE;
-  }
-
-  cpid = fork();
-  if (cpid == -1) {
-    fprintf(stderr,"fork error: %s\n", strerror(errno));
-    return FALSE;
-  }
-  if (cpid == 0) {    // Child
-    close(pipefd[1]); // close unused write end
-    for(c=0; read(pipefd[0], &buf, 1) > 0; c++)
-      map[c] = buf;
-    close(pipefd[0]);
-    map[c] = 0;
-    execlp("tomb", "tomb", "slam", map, (char*)NULL);
-    _exit(1);
-  }
-  close(pipefd[0]); // close unused read end
-  write(pipefd[1], mapper, strlen(mapper));
-  close(pipefd[1]); // reader will see EOF
-
-  waitpid(cpid, &res, 0);
-  if(res==0) {
-    gtk_main_quit();
-    notify_uninit();
-    exit(0);
-  }
-  /*  tomb-notify "Tomb '$tombname' is too busy."		\
-      "Close all applications and file managers, then try again."
-  */
-  return TRUE;
-}
-
-// callbacks right click
-gboolean right_click(GtkWidget *w, GdkEvent *e) {
-  gtk_menu_popup(menu_right, NULL, NULL,
-		 gtk_status_icon_position_menu, status_tomb,
-		 1, gtk_get_current_event_time());
-  return TRUE;
-} 
-gboolean cb_about(GtkWidget *w, GdkEvent *e) {
-  const gchar *authors[] = {"Jaromil - http://jaromil.dyne.org",
-			    "Code reviews and contributions by:",
-			    "Dreamer, Hellekin O. Wolf, Shining, Mancausoft,",
-			    "Anathema, Boyska and Nignux", NULL};
-  const gchar *artists[] = {"Món Mort - http://monmort.blogspot.com",
-			    "Asbesto Molesto - http://freaknet.org/asbesto",
-			    NULL};
-  GtkWidget *dialog = gtk_about_dialog_new();
-  gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(dialog), PACKAGE);
-  gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(dialog), VERSION); 
-  gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(dialog), 
-				 "(C)2007-2011 Jaromil @ Dyne.org Foundation");
-  gtk_about_dialog_set_artists(GTK_ABOUT_DIALOG(dialog), artists);
-  gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(dialog), authors);
-
-  gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(dialog), 
-				"The Crypto Undertaker\n"
-"\n"
-"This program helps people keeping their bones together by taking care of their private data inside encrypted storage filesystems that are easy to access and transport.\n"
-"\n"
-"The level of security provided by this program is fairly strong: it uses  AES/SHA256 (cbc-essiv) to access the encrypted volumes in realtime so that all what is physically stored on your disc is only in an encrypted form.\n"
-"Tomb also encourages users to separate keys from data, for instance storing them on USB.\n"
-"\n"
-);
-  gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(dialog), PACKAGE_URL);
-  gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(dialog), pb_monmort);
-  gtk_about_dialog_set_logo_icon_name(GTK_ABOUT_DIALOG(dialog), "monmort");
-  // this below is active since gtk 3.0 so too early for it now
-  //  gtk_about_dialog_set_license_type(GTK_ABOUT_DIALOG(dialog), GtkLicense.GTK_LICENSE_GPL_3_0);
-  gtk_about_dialog_set_license(GTK_ABOUT_DIALOG(dialog),
-"This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with this program.\n"
-"If not, see <http://www.gnu.org/licenses>\n"
-"\n"
-" The latest Tomb sourcecode is published on <http://tomb.dyne.org>\n");
-  gtk_about_dialog_set_wrap_license(GTK_ABOUT_DIALOG(dialog), TRUE);
-  gtk_dialog_run(GTK_DIALOG (dialog));
-  gtk_widget_destroy(dialog);
-  return TRUE;
-}
-  
-
-  // GtkWidget *dialog = 
-  //   gtk_message_dialog_new (NULL,
-  // 			    GTK_DIALOG_DESTROY_WITH_PARENT,
-  // 			    GTK_MESSAGE_INFO,
-  // 			    GTK_BUTTONS_CLOSE,
-  // 			    "Tomb '%s' open on '%s'\n"
-  // 			    "device mapper: %s", filename, mountpoint, mapper);
-  // gtk_dialog_run (GTK_DIALOG (dialog));
-  // gtk_widget_destroy (dialog);
diff --git a/tomb b/tomb
@@ -40,7 +40,7 @@
 
 # {{{ Global variables
 
-VERSION=1.3.1
+VERSION=1.4
 DATE="Jun/2013"
 TOMBEXEC=$0
 typeset -a OLDARGS