* gpgsm.c: New option --agent-program
authorWerner Koch <wk@gnupg.org>
Mon, 26 Nov 2001 17:54:49 +0000 (17:54 +0000)
committerWerner Koch <wk@gnupg.org>
Mon, 26 Nov 2001 17:54:49 +0000 (17:54 +0000)
* call-agent.c (start_agent): Allow to override the default path
to the agent.

sm/ChangeLog
sm/call-agent.c
sm/gpgsm.c
sm/gpgsm.h

index 878002c..f0d7c2f 100644 (file)
@@ -1,5 +1,9 @@
 2001-11-26  Werner Koch  <wk@gnupg.org>
 
+       * gpgsm.c: New option --agent-program
+       * call-agent.c (start_agent): Allow to override the default path
+       to the agent.
+
        * keydb.c (keydb_add_resource): Create keybox
 
        * keylist.c (gpgsm_list_keys): Fixed non-server keylisting.
index 16cc46f..7140217 100644 (file)
@@ -335,8 +335,9 @@ start_agent (void)
       if (!pid)
         { /* child */
           int i, n;
-          char errbuf[100];
+          char errbuf[512];
           int log_fd = log_get_fd ();
+          const char *pgmname;
 
           /* close all files which will not be duped but keep stderr
              and log_stream for now */
@@ -371,10 +372,17 @@ start_agent (void)
             }
 
           /* and start it */
-          execl ("../agent/gpg-agent", "gpg-agent", "--server", NULL); 
+          if (!opt.agent_program || !*opt.agent_program)
+            opt.agent_program = "../agent/gpg-agent";
+          if ( !(pgmname = strrchr (opt.agent_program, '/')))
+            pgmname = opt.agent_program;
+          else
+            pgmname++;
+          execl (opt.agent_program, pgmname, "--server", NULL); 
           /* oops - tell the parent about it */
-          snprintf (errbuf, DIM(errbuf)-1, "ERR %d execl failed: %.50s\n",
-                    ASSUAN_Problem_Starting_Server, strerror (errno));
+          snprintf (errbuf, DIM(errbuf)-1, "ERR %d can't exec `%s': %.50s\n",
+                    ASSUAN_Problem_Starting_Server, opt.agent_program,
+                    strerror (errno));
           errbuf[DIM(errbuf)-1] = 0;
           writen (1, errbuf, strlen (errbuf));
           _exit (4);
index c7ee419..0b6b7c2 100644 (file)
@@ -77,7 +77,7 @@ enum cmd_and_opt_values {
   aServer,                        
 
   oEnableSpecialFilenames,
-
+  oAgentProgram,
 
   oTextmode,
   oFingerprint,
@@ -279,6 +279,8 @@ static ARGPARSE_OPTS opts[] = {
     { oNoGreeting, "no-greeting", 0, "@" },
     { oNoOptions, "no-options", 0, "@" }, /* shortcut for --options /dev/null */
     { oHomedir, "homedir", 2, "@" },   /* defaults to "~/.gnupg" */
+    { oAgentProgram, "agent-program", 2 , "@" },
+
     { oNoBatch, "no-batch", 0, "@" },
     { oWithColons, "with-colons", 0, "@"},
     { oWithKeyData,"with-key-data", 0, "@"},
@@ -707,6 +709,7 @@ main ( int argc, char **argv)
           break;
         case oNoOptions: break; /* no-options */
         case oHomedir: opt.homedir = pargs.r.ret_str; break;
+        case oAgentProgram: opt.agent_program = pargs.r.ret_str;  break;
           
         case oNoDefKeyring: default_keyring = 0; break;
         case oNoGreeting: nogreeting = 1; break;
index a6eaf26..00ae32e 100644 (file)
@@ -38,6 +38,7 @@ struct {
   int dry_run;      /* don't change any persistent data */
 
   const char *homedir; /* configuration directory name */
+  const char *agent_program; 
   char *outfile;    /* name of output file */
 
   int with_key_data;/* include raw key in the column delimted output */