g13: Require a confirmation before g13 is used for DM-Crypt.
authorWerner Koch <wk@gnupg.org>
Sat, 13 Feb 2016 16:30:14 +0000 (17:30 +0100)
committerWerner Koch <wk@gnupg.org>
Sat, 13 Feb 2016 16:30:14 +0000 (17:30 +0100)
* g13/g13-syshelp.c (g13_syshelp_i_know_what_i_am_doing):
* g13/sh-dmcrypt.c (sh_dmcrypt_create_container): Call it.
(sh_dmcrypt_mount_container): Call it.

Signed-off-by: Werner Koch <wk@gnupg.org>
g13/g13-syshelp.c
g13/g13-syshelp.h
g13/sh-dmcrypt.c

index cbb5f8d..b31964e 100644 (file)
@@ -577,6 +577,27 @@ release_tab_items (tab_item_t tab)
 }
 
 
+void
+g13_syshelp_i_know_what_i_am_doing (void)
+{
+  const char * const yesfile = "Yes-g13-I-know-what-I-am-doing";
+  char *fname;
+
+  fname = make_filename (gnupg_sysconfdir (), yesfile, NULL);
+  if (access (fname, F_OK))
+    {
+      log_info ("*******************************************************\n");
+      log_info ("* The G13 support for DM-Crypt is new and not matured.\n");
+      log_info ("* Bugs or improper use may delete all your disks!\n");
+      log_info ("* To confirm that you are ware of this risk, create\n");
+      log_info ("* the file '%s'.\n", fname);
+      log_info ("*******************************************************\n");
+      exit (1);
+    }
+  xfree (fname);
+}
+
+
 /* Parse the /etc/gnupg/g13tab for user USERNAME.  Return a table for
    the user on success.  Return NULL on error and print
    diagnostics. */
index 0503079..087fff6 100644 (file)
@@ -69,6 +69,7 @@ struct server_control_s
 
 /*-- g13-syshelp.c --*/
 void g13_syshelp_init_default_ctrl (struct server_control_s *ctrl);
+void g13_syshelp_i_know_what_i_am_doing (void);
 
 /*-- sh-cmd.c --*/
 gpg_error_t syshelp_server (ctrl_t ctrl);
index f0693b1..e4d67ae 100644 (file)
@@ -1,5 +1,5 @@
 /* sh-dmcrypt.c - The DM-Crypt part for g13-syshelp
- * Copyright (C) 2015 Werner Koch
+ * Copyright (C) 2015, 2016 Werner Koch
  *
  * This file is part of GnuPG.
  *
@@ -235,6 +235,8 @@ sh_dmcrypt_create_container (ctrl_t ctrl, const char *devname, estream_t devfp)
   if (!ctrl->devti)
     return gpg_error (GPG_ERR_INV_ARG);
 
+  g13_syshelp_i_know_what_i_am_doing ();
+
   header_space_size = SETUP_AREA_SECTORS * SECTOR_SIZE;
   header_space = xtrymalloc (header_space_size);
   if (!header_space)
@@ -543,6 +545,8 @@ sh_dmcrypt_mount_container (ctrl_t ctrl, const char *devname,
   if (!ctrl->devti)
     return gpg_error (GPG_ERR_INV_ARG);
 
+  g13_syshelp_i_know_what_i_am_doing ();
+
   /* Check that the device is not yet used by device mapper. */
   err = check_blockdev (devname);
   if (err)