gpgconf: Add option --homedir
[gnupg.git] / tools / gpgconf.c
index f63c05e..63cc654 100644 (file)
@@ -87,6 +87,7 @@ static ARGPARSE_OPTS opts[] =
     { oDryRun, "dry-run",   0, N_("do not make any changes") },
     { oRuntime, "runtime",  0, N_("activate changes at runtime, if possible") },
     /* hidden options */
     { oDryRun, "dry-run",   0, N_("do not make any changes") },
     { oRuntime, "runtime",  0, N_("activate changes at runtime, if possible") },
     /* hidden options */
+    { oHomedir, "homedir", 2, "@" },
     { oNoVerbose, "no-verbose",  0, "@"},
     {0}
   };
     { oNoVerbose, "no-verbose",  0, "@"},
     {0}
   };
@@ -151,6 +152,7 @@ main (int argc, char **argv)
   enum cmd_and_opt_values cmd = 0;
   estream_t outfp = NULL;
 
   enum cmd_and_opt_values cmd = 0;
   estream_t outfp = NULL;
 
+  early_system_init ();
   gnupg_reopen_std (GPGCONF_NAME);
   set_strusage (my_strusage);
   log_set_prefix (GPGCONF_NAME, 1);
   gnupg_reopen_std (GPGCONF_NAME);
   set_strusage (my_strusage);
   log_set_prefix (GPGCONF_NAME, 1);
@@ -175,6 +177,7 @@ main (int argc, char **argv)
          break;
         case oVerbose:   opt.verbose++; break;
         case oNoVerbose: opt.verbose = 0; break;
          break;
         case oVerbose:   opt.verbose++; break;
         case oNoVerbose: opt.verbose = 0; break;
+        case oHomedir:   gnupg_set_homedir (pargs.r.ret_str); break;
 
        case aListDirs:
         case aListComponents:
 
        case aListDirs:
         case aListComponents:
@@ -205,7 +208,7 @@ main (int argc, char **argv)
 
       for (i=0; i < argc; i++)
         if (argv[i][0] == '-' && argv[i][1] == '-')
 
       for (i=0; i < argc; i++)
         if (argv[i][0] == '-' && argv[i][1] == '-')
-          log_info (_("NOTE: '%s' is not considered an option\n"), argv[i]);
+          log_info (_("Note: '%s' is not considered an option\n"), argv[i]);
     }
 
   fname = argc ? *argv : NULL;
     }
 
   fname = argc ? *argv : NULL;
@@ -281,9 +284,17 @@ main (int argc, char **argv)
               exit (1);
             }
           else if (cmd == aLaunch)
               exit (1);
             }
           else if (cmd == aLaunch)
-            gc_component_launch (idx);
+            {
+              if (gc_component_launch (idx))
+                exit (1);
+            }
           else
           else
-            gc_component_kill (idx);
+            {
+              /* We don't error out if the kill failed because this
+                 command should do nothing if the component is not
+                 running.  */
+              gc_component_kill (idx);
+            }
         }
       break;
 
         }
       break;
 
@@ -366,7 +377,7 @@ main (int argc, char **argv)
         }
 
       {
         }
 
       {
-        char *tmp = make_filename (default_homedir (),
+        char *tmp = make_filename (gnupg_socketdir (),
                                    GPG_AGENT_SOCK_NAME, NULL);
         es_fprintf (outfp, "agent-socket:%s\n", gc_percent_escape (tmp));
         xfree (tmp);
                                    GPG_AGENT_SOCK_NAME, NULL);
         es_fprintf (outfp, "agent-socket:%s\n", gc_percent_escape (tmp));
         xfree (tmp);