Add option --no-autostart.
authorWerner Koch <wk@gnupg.org>
Fri, 28 Nov 2014 08:44:19 +0000 (09:44 +0100)
committerWerner Koch <wk@gnupg.org>
Fri, 28 Nov 2014 08:44:19 +0000 (09:44 +0100)
* g10/gpg.c: Add option --no-autostart.
* sm/gpgsm.c: Ditto.
* g10/options.h (opt): Add field autostart.
* sm/gpgsm.h (opt): Ditto.
* g10/call-agent.c (start_agent): Print note if agent was not
autostarted.
* sm/call-agent.c (start_agent): Ditto.
* g10/call-dirmngr.c (create_context): Likewise.
* sm/call-dirmngr.c (start_dirmngr_ext): Ditto.

Signed-off-by: Werner Koch <wk@gnupg.org>
doc/gpg.texi
doc/gpgsm.texi
doc/tools.texi
g10/call-agent.c
g10/call-dirmngr.c
g10/gpg.c
g10/options.h
sm/call-agent.c
sm/call-dirmngr.c
sm/gpgsm.c
sm/gpgsm.h

index 634b4e2..71ffaf8 100644 (file)
@@ -1735,6 +1735,14 @@ fallback when the environment variable @code{DIRMNGR_INFO} is not set or
 a running dirmngr cannot be connected.
 @end ifset
 
+@item --no-autostart
+@opindex no-autostart
+Do not start the gpg-agent or the dirmngr if it has not yet been
+started and its service is required.  This option is mostly useful on
+machines where the connection to gpg-agent has been redirected to
+another machines.  If dirmngr is required on the remote machine, it
+may be started manually using @command{gpgconf --launch dirmngr}.
+
 @item --lock-once
 @opindex lock-once
 Lock the databases the first time a lock is requested
index 2ddedcd..dcfe292 100644 (file)
@@ -384,6 +384,14 @@ always used.
 @item --disable-dirmngr
 Entirely disable the use of the Dirmngr.
 
+@item --no-autostart
+@opindex no-autostart
+Do not start the gpg-agent or the dirmngr if it has not yet been
+started and its service is required.  This option is mostly useful on
+machines where the connection to gpg-agent has been redirected to
+another machines.  If dirmngr is required on the remote machine, it
+may be started manually using @command{gpgconf --launch dirmngr}.
+
 @item --no-secmem-warning
 @opindex no-secmem-warning
 Do not print a warning when the so called "secure memory" cannot be used.
index d556b6d..0de214b 100644 (file)
@@ -1241,6 +1241,11 @@ When using @option{-S} or @option{--exec}, @command{gpg-connect-agent}
 connects to the assuan server in extended mode to allow descriptor
 passing.  This option makes it use the old mode.
 
+@item --no-autostart
+@opindex no-autostart
+Do not start the gpg-agent or the dirmngr if it has not yet been
+started.
+
 @item --run @var{file}
 @opindex run
 Run the commands from @var{file} at startup and then continue with the
index 74d8cec..f5c943d 100644 (file)
@@ -285,9 +285,19 @@ start_agent (ctrl_t ctrl, int for_card)
                                 opt.agent_program,
                                 opt.lc_ctype, opt.lc_messages,
                                 opt.session_env,
-                                1, opt.verbose, DBG_ASSUAN,
+                                opt.autostart, opt.verbose, DBG_ASSUAN,
                                 NULL, NULL);
-      if (!rc)
+      if (!opt.autostart && gpg_err_code (rc) == GPG_ERR_NO_AGENT)
+        {
+          static int shown;
+
+          if (!shown)
+            {
+              shown = 1;
+              log_info (_("no gpg-agent running in this session\n"));
+            }
+        }
+      else if (!rc)
         {
           /* Tell the agent that we support Pinentry notifications.
              No error checking so that it will work also with older
index 7150853..b802f81 100644 (file)
@@ -130,9 +130,19 @@ create_context (ctrl_t ctrl, assuan_context_t *r_ctx)
                            GPG_ERR_SOURCE_DEFAULT,
                            opt.homedir,
                            opt.dirmngr_program,
-                           1, opt.verbose, DBG_ASSUAN,
+                           opt.autostart, opt.verbose, DBG_ASSUAN,
                            NULL /*gpg_status2*/, ctrl);
-  if (!err)
+  if (!opt.autostart && gpg_err_code (err) == GPG_ERR_NO_DIRMNGR)
+    {
+      static int shown;
+
+      if (!shown)
+        {
+          shown = 1;
+          log_info (_("no dirmngr running in this session\n"));
+        }
+    }
+  else if (!err)
     {
       keyserver_spec_t ksi;
 
index a2225a0..6e6407a 100644 (file)
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -379,6 +379,7 @@ enum cmd_and_opt_values
     oNoAllowMultipleMessages,
     oAllowWeakDigestAlgos,
     oFakedSystemTime,
+    oNoAutostart,
 
     oNoop
   };
@@ -786,6 +787,7 @@ static ARGPARSE_OPTS opts[] = {
   /* New options.  Fixme: Should go more to the top.  */
   ARGPARSE_s_s (oAutoKeyLocate, "auto-key-locate", "@"),
   ARGPARSE_s_n (oNoAutoKeyLocate, "no-auto-key-locate", "@"),
+  ARGPARSE_s_n (oNoAutostart, "no-autostart", "@"),
 
   /* Dummy options with warnings.  */
   ARGPARSE_s_n (oUseAgent,      "use-agent", "@"),
@@ -2080,6 +2082,7 @@ main (int argc, char **argv)
 
     dotlock_create (NULL, 0); /* Register lock file cleanup. */
 
+    opt.autostart = 1;
     opt.session_env = session_env_new ();
     if (!opt.session_env)
       log_fatal ("error allocating session environment block: %s\n",
@@ -3131,6 +3134,8 @@ main (int argc, char **argv)
             }
             break;
 
+          case oNoAutostart: opt.autostart = 0; break;
+
          case oNoop: break;
 
          default:
index 6a94ff4..7ec81af 100644 (file)
@@ -53,6 +53,7 @@ struct
   estream_t outfp;  /* Hack, sometimes used in place of outfile.  */
   off_t max_output;
   int dry_run;
+  int autostart;
   int list_only;
   int textmode;
   int expert;
index 59b1509..f579200 100644 (file)
@@ -95,10 +95,20 @@ start_agent (ctrl_t ctrl)
                                 opt.agent_program,
                                 opt.lc_ctype, opt.lc_messages,
                                 opt.session_env,
-                                1, opt.verbose, DBG_ASSUAN,
+                                opt.autostart, opt.verbose, DBG_ASSUAN,
                                 gpgsm_status2, ctrl);
 
-      if (!rc)
+      if (!opt.autostart && gpg_err_code (rc) == GPG_ERR_NO_AGENT)
+        {
+          static int shown;
+
+          if (!shown)
+            {
+              shown = 1;
+              log_info (_("no gpg-agent running in this session\n"));
+            }
+        }
+      else if (!rc)
         {
           /* Tell the agent that we support Pinentry notifications.  No
              error checking so that it will work also with older
index 4dc8425..f8cfdf8 100644 (file)
@@ -209,8 +209,18 @@ start_dirmngr_ext (ctrl_t ctrl, assuan_context_t *ctx_r)
 
   err = start_new_dirmngr (&ctx, GPG_ERR_SOURCE_DEFAULT,
                            opt.homedir, opt.dirmngr_program,
-                           1, opt.verbose, DBG_ASSUAN,
+                           opt.autostart, opt.verbose, DBG_ASSUAN,
                            gpgsm_status2, ctrl);
+  if (!opt.autostart && gpg_err_code (err) == GPG_ERR_NO_DIRMNGR)
+    {
+      static int shown;
+
+      if (!shown)
+        {
+          shown = 1;
+          log_info (_("no dirmngr running in this session\n"));
+        }
+    }
   prepare_dirmngr (ctrl, ctx, err);
   if (err)
     return err;
index 03b9bb9..3398d17 100644 (file)
@@ -183,7 +183,8 @@ enum cmd_and_opt_values {
   oIgnoreTimeConflict,
   oNoRandomSeedFile,
   oNoCommonCertsImport,
-  oIgnoreCertExtension
+  oIgnoreCertExtension,
+  oNoAutostart
  };
 
 
@@ -391,6 +392,7 @@ static ARGPARSE_OPTS opts[] = {
   ARGPARSE_s_n (oNoRandomSeedFile,  "no-random-seed-file", "@"),
   ARGPARSE_s_n (oNoCommonCertsImport, "no-common-certs-import", "@"),
   ARGPARSE_s_s (oIgnoreCertExtension, "ignore-cert-extension", "@"),
+  ARGPARSE_s_n (oNoAutostart, "no-autostart", "@"),
 
   /* Command aliases.  */
   ARGPARSE_c (aListKeys, "list-key", "@"),
@@ -940,6 +942,7 @@ main ( int argc, char **argv)
 
   dotlock_create (NULL, 0); /* Register lockfile cleanup.  */
 
+  opt.autostart = 1;
   opt.session_env = session_env_new ();
   if (!opt.session_env)
     log_fatal ("error allocating session environment block: %s\n",
@@ -1417,6 +1420,8 @@ main ( int argc, char **argv)
           add_to_strlist (&opt.ignored_cert_extensions, pargs.r.ret_str);
           break;
 
+        case oNoAutostart: opt.autostart = 0; break;
+
         default:
           pargs.err = configfp? ARGPARSE_PRINT_WARNING:ARGPARSE_PRINT_ERROR;
           break;
index e8322b7..63c9d0b 100644 (file)
@@ -69,6 +69,7 @@ struct
   char *lc_ctype;
   char *lc_messages;
 
+  int autostart;
   const char *dirmngr_program;
   int disable_dirmngr;        /* Do not do any dirmngr calls.  */
   const char *protect_tool_program;