diff options
author | Werner Koch <[email protected]> | 2016-02-13 16:01:45 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2016-02-13 16:06:54 +0000 |
commit | b0e6ab1109d05fc664f46e17d721fe9b01d38115 (patch) | |
tree | 70cf20d908523ef099962ee90730fd053082b5cf /g13/create.c | |
parent | g13: Improve dump_keyblob. (diff) | |
download | gnupg-b0e6ab1109d05fc664f46e17d721fe9b01d38115.tar.gz gnupg-b0e6ab1109d05fc664f46e17d721fe9b01d38115.zip |
g13: Second chunk of code to support dm-crypt.
* g13/be-dmcrypt.c, g13/be-dmcrypt.h: New.
* g13/Makefile.am (g13_SOURCES): Add them.
* g13/backend.c: Include be-dmcrypt.h and call-syshelp.h.
(no_such_backend): Rename to _no_such_backend and provide replacement
macro.
(be_is_supported_conttype): Support DM-Crypt.
(be_take_lock_for_create): Call set_segvice for DM-Crypt.
(be_create_new_keys): Make it a dummy for DM-Crypt.
(be_create_container): Call be_dmcrypt_create_container.
(be_mount_container): call be_dmcrypt_mount_container.
* g13/g13-syshelp.c (main): Enable verbose mode.
* g13/g13tuple.c (get_tupledesc_data): New.
* g13/g13tuple.h (unref_tupledesc): New.
* g13/g13.h (server_control_): Add field "recipients".
* g13/g13.c (main): Fix setting of recipients via cmdline.
(g13_deinit_default_ctrl): Release recipients list.
(g13_request_shutdown): New. Replace all direct update of
shutdown_pending by calls this function.
* g13/server.c (server_local_s): Remove field recipients which is now
part of CTRL.
(reset_notify, cmd_recipient, cmd_create): Adjust for this change.
* g13/create.c (encrypt_keyblob): Rename to g13_encrypt_keyblob.
(g13_create_container): Support DM-Crypt.
* g13/mount.c (parse_header): Allow for meta data copies.
(g13_mount_container): Support DM-Crypt.
* g13/sh-cmd.c (cmd_create): Make it work.
(cmd_mount): New.
* g13/sh-dmcrypt.c (sh_dmcrypt_create_container): Make it work.
(sh_dmcrypt_mount_container): New.
--
With this patch we can now create an encrypted partition and partly
mount it (i.e. setup keys and create the mapped device). We do not yet
create a file system or mount that file system
Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'g13/create.c')
-rw-r--r-- | g13/create.c | 67 |
1 files changed, 34 insertions, 33 deletions
diff --git a/g13/create.c b/g13/create.c index fc2761877..0126f5b47 100644 --- a/g13/create.c +++ b/g13/create.c @@ -103,17 +103,16 @@ create_new_keyblob (ctrl_t ctrl, int is_detached, CTRL the result is a single OpenPGP binary message, a single special OpenPGP packet encapsulating a CMS message or a concatenation of both with the CMS packet being the last. */ -static gpg_error_t -encrypt_keyblob (ctrl_t ctrl, void *keyblob, size_t keybloblen, - strlist_t keys, - void **r_encblob, size_t *r_encbloblen) +gpg_error_t +g13_encrypt_keyblob (ctrl_t ctrl, void *keyblob, size_t keybloblen, + void **r_encblob, size_t *r_encbloblen) { gpg_error_t err; /* FIXME: For now we only implement OpenPGP. */ err = gpg_encrypt_blob (ctrl, opt.gpg_program, opt.gpg_arguments, keyblob, keybloblen, - keys, + ctrl->recipients, r_encblob, r_encbloblen); return err; @@ -219,11 +218,10 @@ write_keyblob (const char *filename, /* Create a new container under the name FILENAME and intialize it - using the current settings. KEYS is a list of public keys to which - the container will be encrypted. If the file already exists an - error is returned. */ + using the current settings. If the file already exists an error is + returned. */ gpg_error_t -g13_create_container (ctrl_t ctrl, const char *filename, strlist_t keys) +g13_create_container (ctrl_t ctrl, const char *filename) { gpg_error_t err; dotlock_t lock; @@ -236,7 +234,7 @@ g13_create_container (ctrl_t ctrl, const char *filename, strlist_t keys) tupledesc_t tuples = NULL; unsigned int dummy_rid; - if (!keys) + if (!ctrl->recipients) return gpg_error (GPG_ERR_NO_PUBKEY); err = be_take_lock_for_create (ctrl, filename, &lock); @@ -259,29 +257,32 @@ g13_create_container (ctrl_t ctrl, const char *filename, strlist_t keys) } } - /* Create a new keyblob. */ - err = create_new_keyblob (ctrl, !!detachedname, &keyblob, &keybloblen); - if (err) - goto leave; - - /* Encrypt that keyblob. */ - err = encrypt_keyblob (ctrl, keyblob, keybloblen, keys, - &enckeyblob, &enckeybloblen); - if (err) - goto leave; - - /* Put a copy of the keyblob into a tuple structure. */ - err = create_tupledesc (&tuples, keyblob, keybloblen); - if (err) - goto leave; - keyblob = NULL; - /* if (opt.verbose) */ - /* dump_keyblob (tuples); */ - - /* Write out the header, the encrypted keyblob and some padding. */ - err = write_keyblob (filename, enckeyblob, enckeybloblen); - if (err) - goto leave; + if (ctrl->conttype != CONTTYPE_DM_CRYPT) + { + /* Create a new keyblob. */ + err = create_new_keyblob (ctrl, !!detachedname, &keyblob, &keybloblen); + if (err) + goto leave; + + /* Encrypt that keyblob. */ + err = g13_encrypt_keyblob (ctrl, keyblob, keybloblen, + &enckeyblob, &enckeybloblen); + if (err) + goto leave; + + /* Put a copy of the keyblob into a tuple structure. */ + err = create_tupledesc (&tuples, keyblob, keybloblen); + if (err) + goto leave; + keyblob = NULL; + /* if (opt.verbose) */ + /* dump_keyblob (tuples); */ + + /* Write out the header, the encrypted keyblob and some padding. */ + err = write_keyblob (filename, enckeyblob, enckeybloblen); + if (err) + goto leave; + } /* Create and append the container. FIXME: We should pass the estream object in addition to the filename, so that the backend |