mirror of
git://git.gnupg.org/gnupg.git
synced 2025-04-17 15:44:34 +02:00
g13: Move 'call-gpg.c' to common.
* common/Makefile.am (common_sources): Add files. * g13/call-gpg.c: Move to 'common' and adapt slightly. Add a parameter to let callees override the gpg program to execute. * g13/call-gpg.h: Likewise. * g13/Makefile.am (g13_SOURCES): Drop files. * g13/create.c (encrypt_keyblob): Hand in the gpg program to execute. * g13/mount.c (decrypt_keyblob): Likewise. Signed-off-by: Justus Winter <justus@g10code.com>
This commit is contained in:
parent
e9c16fee25
commit
ba1a5cc17d
@ -86,7 +86,8 @@ common_sources = \
|
|||||||
agent-opt.c \
|
agent-opt.c \
|
||||||
helpfile.c \
|
helpfile.c \
|
||||||
mkdir_p.c mkdir_p.h \
|
mkdir_p.c mkdir_p.h \
|
||||||
strlist.c strlist.h
|
strlist.c strlist.h \
|
||||||
|
call-gpg.c call-gpg.h
|
||||||
|
|
||||||
if HAVE_W32_SYSTEM
|
if HAVE_W32_SYSTEM
|
||||||
common_sources += w32-reg.c w32-afunix.c w32-afunix.h
|
common_sources += w32-reg.c w32-afunix.c w32-afunix.h
|
||||||
|
@ -18,27 +18,29 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <npth.h>
|
|
||||||
|
|
||||||
#include "g13.h"
|
|
||||||
#include <assuan.h>
|
#include <assuan.h>
|
||||||
#include "i18n.h"
|
#include <errno.h>
|
||||||
#include "call-gpg.h"
|
#include <npth.h>
|
||||||
#include "utils.h"
|
#include <stdlib.h>
|
||||||
#include "../common/exechelp.h"
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
#include "call-gpg.h"
|
||||||
|
#include "exechelp.h"
|
||||||
|
#include "i18n.h"
|
||||||
|
#include "logging.h"
|
||||||
|
#include "membuf.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
|
||||||
/* Fire up a new GPG. Handle the server's initial greeting. Returns
|
/* Fire up a new GPG. Handle the server's initial greeting. Returns
|
||||||
0 on success and stores the assuan context at R_CTX. */
|
0 on success and stores the assuan context at R_CTX. */
|
||||||
static gpg_error_t
|
static gpg_error_t
|
||||||
start_gpg (ctrl_t ctrl, int input_fd, int output_fd, assuan_context_t *r_ctx)
|
start_gpg (ctrl_t ctrl, const char *gpg_program,
|
||||||
|
int input_fd, int output_fd, assuan_context_t *r_ctx)
|
||||||
{
|
{
|
||||||
gpg_error_t err;
|
gpg_error_t err;
|
||||||
assuan_context_t ctx = NULL;
|
assuan_context_t ctx = NULL;
|
||||||
@ -60,15 +62,12 @@ start_gpg (ctrl_t ctrl, int input_fd, int output_fd, assuan_context_t *r_ctx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* The first time we are used, intialize the gpg_program variable. */
|
/* The first time we are used, intialize the gpg_program variable. */
|
||||||
if ( !opt.gpg_program || !*opt.gpg_program )
|
if ( !gpg_program || !*gpg_program )
|
||||||
opt.gpg_program = gnupg_module_name (GNUPG_MODULE_NAME_GPG);
|
gpg_program = gnupg_module_name (GNUPG_MODULE_NAME_GPG);
|
||||||
|
|
||||||
if (opt.verbose)
|
|
||||||
log_info (_("no running gpg - starting '%s'\n"), opt.gpg_program);
|
|
||||||
|
|
||||||
/* Compute argv[0]. */
|
/* Compute argv[0]. */
|
||||||
if ( !(pgmname = strrchr (opt.gpg_program, '/')))
|
if ( !(pgmname = strrchr (gpg_program, '/')))
|
||||||
pgmname = opt.gpg_program;
|
pgmname = gpg_program;
|
||||||
else
|
else
|
||||||
pgmname++;
|
pgmname++;
|
||||||
|
|
||||||
@ -82,8 +81,6 @@ start_gpg (ctrl_t ctrl, int input_fd, int output_fd, assuan_context_t *r_ctx)
|
|||||||
i = 0;
|
i = 0;
|
||||||
argv[i++] = pgmname;
|
argv[i++] = pgmname;
|
||||||
argv[i++] = "--server";
|
argv[i++] = "--server";
|
||||||
if ((opt.debug & 1024))
|
|
||||||
argv[i++] = "--debug=1024";
|
|
||||||
argv[i++] = "-z";
|
argv[i++] = "-z";
|
||||||
argv[i++] = "0";
|
argv[i++] = "0";
|
||||||
argv[i++] = "--trust-model";
|
argv[i++] = "--trust-model";
|
||||||
@ -101,7 +98,7 @@ start_gpg (ctrl_t ctrl, int input_fd, int output_fd, assuan_context_t *r_ctx)
|
|||||||
no_close_list[i] = -1;
|
no_close_list[i] = -1;
|
||||||
|
|
||||||
/* Connect to GPG and perform initial handshaking. */
|
/* Connect to GPG and perform initial handshaking. */
|
||||||
err = assuan_pipe_connect (ctx, opt.gpg_program, argv, no_close_list,
|
err = assuan_pipe_connect (ctx, gpg_program, argv, no_close_list,
|
||||||
NULL, NULL, 0);
|
NULL, NULL, 0);
|
||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
@ -135,9 +132,6 @@ start_gpg (ctrl_t ctrl, int input_fd, int output_fd, assuan_context_t *r_ctx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
*r_ctx = ctx;
|
*r_ctx = ctx;
|
||||||
|
|
||||||
if (DBG_IPC)
|
|
||||||
log_debug ("connection to GPG established\n");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -328,8 +322,10 @@ start_reader (int fd, membuf_t *mb, npth_t *r_thread, gpg_error_t *err_addr)
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
gpg_error_t
|
gpg_error_t
|
||||||
gpg_encrypt_blob (ctrl_t ctrl, const void *plain, size_t plainlen,
|
gpg_encrypt_blob (ctrl_t ctrl, const char *gpg_program,
|
||||||
strlist_t keys, void **r_ciph, size_t *r_ciphlen)
|
const void *plain, size_t plainlen,
|
||||||
|
strlist_t keys,
|
||||||
|
void **r_ciph, size_t *r_ciphlen)
|
||||||
{
|
{
|
||||||
gpg_error_t err;
|
gpg_error_t err;
|
||||||
assuan_context_t ctx = NULL;
|
assuan_context_t ctx = NULL;
|
||||||
@ -360,7 +356,7 @@ gpg_encrypt_blob (ctrl_t ctrl, const void *plain, size_t plainlen,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Start GPG and send the INPUT and OUTPUT commands. */
|
/* Start GPG and send the INPUT and OUTPUT commands. */
|
||||||
err = start_gpg (ctrl, outbound_fds[0], inbound_fds[1], &ctx);
|
err = start_gpg (ctrl, gpg_program, outbound_fds[0], inbound_fds[1], &ctx);
|
||||||
if (err)
|
if (err)
|
||||||
goto leave;
|
goto leave;
|
||||||
close (outbound_fds[0]); outbound_fds[0] = -1;
|
close (outbound_fds[0]); outbound_fds[0] = -1;
|
||||||
@ -471,7 +467,8 @@ gpg_encrypt_blob (ctrl_t ctrl, const void *plain, size_t plainlen,
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
gpg_error_t
|
gpg_error_t
|
||||||
gpg_decrypt_blob (ctrl_t ctrl, const void *ciph, size_t ciphlen,
|
gpg_decrypt_blob (ctrl_t ctrl, const char *gpg_program,
|
||||||
|
const void *ciph, size_t ciphlen,
|
||||||
void **r_plain, size_t *r_plainlen)
|
void **r_plain, size_t *r_plainlen)
|
||||||
{
|
{
|
||||||
gpg_error_t err;
|
gpg_error_t err;
|
||||||
@ -501,7 +498,7 @@ gpg_decrypt_blob (ctrl_t ctrl, const void *ciph, size_t ciphlen,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Start GPG and send the INPUT and OUTPUT commands. */
|
/* Start GPG and send the INPUT and OUTPUT commands. */
|
||||||
err = start_gpg (ctrl, outbound_fds[0], inbound_fds[1], &ctx);
|
err = start_gpg (ctrl, gpg_program, outbound_fds[0], inbound_fds[1], &ctx);
|
||||||
if (err)
|
if (err)
|
||||||
goto leave;
|
goto leave;
|
||||||
close (outbound_fds[0]); outbound_fds[0] = -1;
|
close (outbound_fds[0]); outbound_fds[0] = -1;
|
@ -20,11 +20,16 @@
|
|||||||
#ifndef G13_CALL_GPG_H
|
#ifndef G13_CALL_GPG_H
|
||||||
#define G13_CALL_GPG_H
|
#define G13_CALL_GPG_H
|
||||||
|
|
||||||
gpg_error_t gpg_encrypt_blob (ctrl_t ctrl,
|
#include "strlist.h"
|
||||||
|
|
||||||
|
typedef struct server_control_s *ctrl_t;
|
||||||
|
|
||||||
|
gpg_error_t gpg_encrypt_blob (ctrl_t ctrl, const char *gpg_program,
|
||||||
const void *plain, size_t plainlen,
|
const void *plain, size_t plainlen,
|
||||||
strlist_t keys,
|
strlist_t keys,
|
||||||
void **r_ciph, size_t *r_ciphlen);
|
void **r_ciph, size_t *r_ciphlen);
|
||||||
gpg_error_t gpg_decrypt_blob (ctrl_t ctrl, const void *ciph, size_t ciphlen,
|
gpg_error_t gpg_decrypt_blob (ctrl_t ctrl, const char *gpg_program,
|
||||||
|
const void *ciph, size_t ciphlen,
|
||||||
void **r_plain, size_t *r_plainlen);
|
void **r_plain, size_t *r_plainlen);
|
||||||
|
|
||||||
|
|
@ -37,7 +37,6 @@ g13_SOURCES = \
|
|||||||
create.c create.h \
|
create.c create.h \
|
||||||
mount.c mount.h \
|
mount.c mount.h \
|
||||||
mountinfo.c mountinfo.h \
|
mountinfo.c mountinfo.h \
|
||||||
call-gpg.c call-gpg.h \
|
|
||||||
runner.c runner.h \
|
runner.c runner.h \
|
||||||
backend.c backend.h \
|
backend.c backend.h \
|
||||||
be-encfs.c be-encfs.h \
|
be-encfs.c be-encfs.h \
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
#include "keyblob.h"
|
#include "keyblob.h"
|
||||||
#include "backend.h"
|
#include "backend.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "call-gpg.h"
|
#include "../common/call-gpg.h"
|
||||||
|
|
||||||
/* Create a new blob with all the session keys and other meta
|
/* Create a new blob with all the session keys and other meta
|
||||||
information which are to be stored encrypted in the crypto
|
information which are to be stored encrypted in the crypto
|
||||||
@ -111,7 +111,7 @@ encrypt_keyblob (ctrl_t ctrl, void *keyblob, size_t keybloblen,
|
|||||||
gpg_error_t err;
|
gpg_error_t err;
|
||||||
|
|
||||||
/* FIXME: For now we only implement OpenPGP. */
|
/* FIXME: For now we only implement OpenPGP. */
|
||||||
err = gpg_encrypt_blob (ctrl, keyblob, keybloblen, keys,
|
err = gpg_encrypt_blob (ctrl, opt.gpg_program, keyblob, keybloblen, keys,
|
||||||
r_encblob, r_encbloblen);
|
r_encblob, r_encbloblen);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
#include "backend.h"
|
#include "backend.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "../common/sysutils.h"
|
#include "../common/sysutils.h"
|
||||||
#include "call-gpg.h"
|
#include "../common/call-gpg.h"
|
||||||
#include "mountinfo.h"
|
#include "mountinfo.h"
|
||||||
#include "runner.h"
|
#include "runner.h"
|
||||||
#include "host2net.h"
|
#include "host2net.h"
|
||||||
@ -202,7 +202,7 @@ decrypt_keyblob (ctrl_t ctrl, const void *enckeyblob, size_t enckeybloblen,
|
|||||||
gpg_error_t err;
|
gpg_error_t err;
|
||||||
|
|
||||||
/* FIXME: For now we only implement OpenPGP. */
|
/* FIXME: For now we only implement OpenPGP. */
|
||||||
err = gpg_decrypt_blob (ctrl, enckeyblob, enckeybloblen,
|
err = gpg_decrypt_blob (ctrl, opt.gpg_program, enckeyblob, enckeybloblen,
|
||||||
r_keyblob, r_keybloblen);
|
r_keyblob, r_keybloblen);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user