From 3dfa2e6df5fba64935cede32cdac74e815a99494 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Fri, 12 Mar 2010 18:08:02 +0000 Subject: [PATCH] Add command passwd. --- sm/ChangeLog | 5 +++++ sm/server.c | 41 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/sm/ChangeLog b/sm/ChangeLog index 9b8d867ad..14b61e1da 100644 --- a/sm/ChangeLog +++ b/sm/ChangeLog @@ -1,3 +1,8 @@ +2010-03-12 Werner Koch + + * server.c (cmd_passwd): New. From trunk. + (register_commands): Register it. + 2010-02-11 Marcus Brinkmann From trunk 2009-09-23, 2009-11-02, 2009-11-04, 2009-11-05, 2009-11-25, diff --git a/sm/server.c b/sm/server.c index 20cfc48b8..fcf47a79d 100644 --- a/sm/server.c +++ b/sm/server.c @@ -1,6 +1,6 @@ /* server.c - Server mode and main entry point - * Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, - * 2007, 2008, 2009 Free Software Foundation, Inc. + * Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, + * 2009, 2010 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -1141,6 +1141,42 @@ cmd_getinfo (assuan_context_t ctx, char *line) } + +static const char hlp_passwd[] = + "PASSWD \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; +} + + + + /* Return true if the command CMD implements the option OPT. */ static int @@ -1184,6 +1220,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;