add new gpgsm server command PASSWD
authorWerner Koch <wk@gnupg.org>
Mon, 14 Dec 2009 12:33:23 +0000 (12:33 +0000)
committerWerner Koch <wk@gnupg.org>
Mon, 14 Dec 2009 12:33:23 +0000 (12:33 +0000)
sm/ChangeLog
sm/server.c

index 5ddec9c..6b52cd8 100644 (file)
@@ -1,3 +1,8 @@
+2009-12-14  Werner Koch  <wk@g10code.com>
+
+       * server.c (cmd_passwd): New.
+       (register_commands): Register new command.
+
 2009-12-10  Werner Koch  <wk@g10code.com>
 
        * gpgsm.c: Add option --ignore-cert-extension.
index ad39e93..de245f5 100644 (file)
@@ -1068,7 +1068,6 @@ cmd_getauditlog (assuan_context_t ctx, char *line)
   return rc;
 }
 
-
 static const char hlp_getinfo[] = 
   "GETINFO <what>\n"
   "\n"
@@ -1141,6 +1140,39 @@ cmd_getinfo (assuan_context_t ctx, char *line)
 }
 
 
+static const char hlp_passwd[] =
+  "PASSWD <userID>\n"
+  "\n"
+  "Change the passphrase of the secret key for USERID.";
+static gpg_error_t
+cmd_passwd (assuan_context_t ctx, char *line)
+{
+  ctrl_t ctrl = assuan_get_pointer (ctx);
+  gpg_error_t err;
+  ksba_cert_t cert = NULL;
+  char *grip = NULL;
+
+  line = skip_options (line);
+
+  err = gpgsm_find_cert (line, NULL, &cert);
+  if (err)
+    ;
+  else if (!(grip = gpgsm_get_keygrip_hexstring (cert)))
+    err = gpg_error (GPG_ERR_INTERNAL);
+  else 
+    {
+      char *desc = gpgsm_format_keydesc (cert);
+      err = gpgsm_agent_passwd (ctrl, grip, desc);
+      xfree (desc);
+    }
+
+  xfree (grip);
+  ksba_cert_release (cert);
+
+  return err;
+}
+
+
 \f
 /* Return true if the command CMD implements the option OPT.  */
 static int
@@ -1184,6 +1216,7 @@ register_commands (assuan_context_t ctx)
     { "DELKEYS",       cmd_delkeys,   hlp_delkeys },
     { "GETAUDITLOG",   cmd_getauditlog,    hlp_getauditlog },
     { "GETINFO",       cmd_getinfo,   hlp_getinfo },
+    { "PASSWD",        cmd_passwd,    hlp_passwd },
     { NULL }
   };
   int i, rc;