diff options
author | Werner Koch <wk@gnupg.org> | 2016-08-14 20:17:51 +0200 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2016-08-14 20:17:51 +0200 |
commit | b781113cf1391926dedf8dc943624d3bb9726318 (patch) | |
tree | 6a1d128f05bd2e18daea306602df026c2966c156 /g13/sh-cmd.c | |
parent | g13: Fix double free bug. (diff) | |
download | gnupg2-b781113cf1391926dedf8dc943624d3bb9726318.tar.xz gnupg2-b781113cf1391926dedf8dc943624d3bb9726318.zip |
g13: Implement --umount for dm-crypt.
* g13/g13.c (main): Implement command --umount.
* g13/mount.c (g13_umount_container): use the syshelper if needed.
* g13/backend.c (be_umount_container): New.
* g13/be-dmcrypt.c (be_dmcrypt_umount_container): New.
* g13/call-syshelp.c (call_syshelp_run_umount): New.
* g13/sh-cmd.c (cmd_umount): New.
(register_commands): Register UMOUNT.
* g13/sh-dmcrypt.c (sh_dmcrypt_umount_container): New.
Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'g13/sh-cmd.c')
-rw-r--r-- | g13/sh-cmd.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/g13/sh-cmd.c b/g13/sh-cmd.c index 20db8dce0..821491982 100644 --- a/g13/sh-cmd.c +++ b/g13/sh-cmd.c @@ -500,6 +500,40 @@ cmd_mount (assuan_context_t ctx, char *line) } +static const char hlp_umount[] = + "UMOUNT <type>\n" + "\n" + "Unmount an encrypted partition and wipe the key.\n" + "<type> must be \"dm-crypt\" for now."; +static gpg_error_t +cmd_umount (assuan_context_t ctx, char *line) +{ + ctrl_t ctrl = assuan_get_pointer (ctx); + gpg_error_t err = 0; + + line = skip_options (line); + + if (strcmp (line, "dm-crypt")) + { + err = set_error (GPG_ERR_INV_ARG, "Type must be \"dm-crypt\""); + goto leave; + } + + if (!ctrl->server_local->devicename + || !ctrl->server_local->devicefp + || !ctrl->devti) + { + err = set_error (GPG_ERR_ENOENT, "No device has been set"); + goto leave; + } + + err = sh_dmcrypt_umount_container (ctrl, ctrl->server_local->devicename); + + leave: + return leave_cmd (ctx, err); +} + + static const char hlp_suspend[] = "SUSPEND <type>\n" "\n" @@ -713,6 +747,7 @@ register_commands (assuan_context_t ctx, int fail_all) { "CREATE", cmd_create, hlp_create }, { "GETKEYBLOB", cmd_getkeyblob, hlp_getkeyblob }, { "MOUNT", cmd_mount, hlp_mount }, + { "UMOUNT", cmd_umount, hlp_umount }, { "SUSPEND", cmd_suspend,hlp_suspend}, { "RESUME", cmd_resume, hlp_resume }, { "INPUT", NULL }, |