aboutsummaryrefslogtreecommitdiffstats
path: root/gpgme/rungpg.c
diff options
context:
space:
mode:
Diffstat (limited to 'gpgme/rungpg.c')
-rw-r--r--gpgme/rungpg.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/gpgme/rungpg.c b/gpgme/rungpg.c
index e437ba88..a370f5e9 100644
--- a/gpgme/rungpg.c
+++ b/gpgme/rungpg.c
@@ -312,6 +312,8 @@ build_argv ( GpgObject gpg )
size_t datac=0, argc=0;
char **argv;
int need_special = 0;
+ int use_agent = !!getenv ("GPG_AGENT_INFO");
+
if ( gpg->argv ) {
free_argv ( gpg->argv );
@@ -337,6 +339,8 @@ build_argv ( GpgObject gpg )
}
if ( need_special )
argc++;
+ if (use_agent)
+ argc++;
argv = xtrycalloc ( argc+1, sizeof *argv );
if (!argv)
@@ -364,6 +368,15 @@ build_argv ( GpgObject gpg )
}
argc++;
}
+ if ( use_agent ) {
+ argv[argc] = xtrystrdup ( "--use-agent" );
+ if (!argv[argc]) {
+ xfree (fd_data_map);
+ free_argv (argv);
+ return mk_error (Out_Of_Core);
+ }
+ argc++;
+ }
for ( a=gpg->arglist; a; a = a->next ) {
if ( a->data ) {
switch ( _gpgme_data_get_mode (a->data) ) {
@@ -535,7 +548,7 @@ _gpgme_gpg_spawn( GpgObject gpg, void *opaque )
close (fd);
}
- execv ("./gpg", gpg->argv );
+ execv ("/usr/local/bin/gpg", gpg->argv );
fprintf (stderr,"exec of gpg failed\n");
_exit (8);
}