/[winpt]/trunk/Src/wptKeyEditDlgs.cpp
ViewVC logotype

Diff of /trunk/Src/wptKeyEditDlgs.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 273 by twoaday, Fri Dec 8 10:22:17 2006 UTC revision 314 by twoaday, Sun May 13 09:44:03 2007 UTC
# Line 1  Line 1 
1  /* wptKeyEditDlgs.cpp - GPG key edit dialogs  /* wptKeyEditDlgs.cpp - GPG key edit dialogs
2   *      Copyright (C) 2002-2006 Timo Schulz   *      Copyright (C) 2002-2007 Timo Schulz
3   *   *
4   * This file is part of WinPT.   * This file is part of WinPT.
5   *   *
# Line 12  Line 12 
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU General Public License for more details.   * GNU General Public License for more details.
  *  
  * You should have received a copy of the GNU General Public License  
  * along with WinPT; if not, write to the Free Software Foundation,  
  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA  
15   */   */
16  #ifdef HAVE_CONFIG_H  #ifdef HAVE_CONFIG_H
17  #include <config.h>  #include <config.h>
# Line 41  Line 37 
37  #include "wptKeyManager.h"  #include "wptKeyManager.h"
38  #include "wptRegistry.h"  #include "wptRegistry.h"
39  #include "wptKeyEdit.h"  #include "wptKeyEdit.h"
40    #include "StringBuffer.h"
41    
42    
43  /* All edit key commands. */  /* All edit key commands. */
44  enum keyedit_commands {      enum keyedit_commands {    
# Line 80  struct cmdlist_s { Line 78  struct cmdlist_s {
78      {"DELKEY", 1, CMD_DELKEY},      {"DELKEY", 1, CMD_DELKEY},
79      {"EXPIRE", 1, CMD_EXPIRE},      {"EXPIRE", 1, CMD_EXPIRE},
80      {"SHOWPREF", 0, CMD_SHOWPREF},      {"SHOWPREF", 0, CMD_SHOWPREF},
81      {"SETPREF", 1, CMD_SETPREF},      /*{"SETPREF", 1, CMD_SETPREF},*/
82      {"PASSWD", 1, CMD_PASSWD},      {"PASSWD", 1, CMD_PASSWD},
83      {"PRIMARY", 1, CMD_PRIMARY},      {"PRIMARY", 1, CMD_PRIMARY},
84      {"TRUST", 0, CMD_TRUST},      {"TRUST", 0, CMD_TRUST},
# Line 136  typedef struct keyedit_cb_s *keyedit_cb_ Line 134  typedef struct keyedit_cb_s *keyedit_cb_
134  struct keygen_cb_s {  struct keygen_cb_s {
135      int    bits;      int    bits;
136      int    algo;      int    algo;
137      DWORD  expire;      DWORD  expire; /* date of expiration or '0' for infinite valid. */
138      char  *fpr;      char  *fpr;
139      char  *name;      char  *name;
140      char  *comment;      char  *comment;
# Line 156  char* get_subkey_keyid (const char *keyi Line 154  char* get_subkey_keyid (const char *keyi
154  void ComboBox_AddString_utf8 (HWND cb, const char *txt);  void ComboBox_AddString_utf8 (HWND cb, const char *txt);
155    
156    
 /* Safe wrapper for allocation. */  
 static GpgKeyEdit*  
 create_GpgKeyEdit (const char *keyid)  
 {  
     GpgKeyEdit *ke;  
   
     ke = new GpgKeyEdit (keyid);  
     if (!ke)  
         BUG (NULL);  
     return ke;  
 }  
   
   
157  /* Associate each key with a combo box entry.  /* Associate each key with a combo box entry.
158     Skip the key in @k. */     Skip the key in @k. */
159  static void  static void
# Line 182  do_init_keylist (HWND dlg, const char *k Line 167  do_init_keylist (HWND dlg, const char *k
167      pub = keycache_get_ctx (1);      pub = keycache_get_ctx (1);
168      gpg_keycache_rewind (pub);      gpg_keycache_rewind (pub);
169      while (!gpg_keycache_next_key (pub, 0, &key)) {      while (!gpg_keycache_next_key (pub, 0, &key)) {
170          if (key->expired || key->revoked ||          if (!key_is_useable (key) || key->invalid)
             key->disabled || key->invalid)  
171              continue;              continue;
172          s = key->uids->uid;          s = key->uids->uid;
173          kid = key->subkeys->keyid;          kid = key->subkeys->keyid;
# Line 191  do_init_keylist (HWND dlg, const char *k Line 175  do_init_keylist (HWND dlg, const char *k
175              continue;              continue;
176          ComboBox_AddString_utf8 (GetDlgItem (dlg, IDC_ADDREV_KEYLIST), s);          ComboBox_AddString_utf8 (GetDlgItem (dlg, IDC_ADDREV_KEYLIST), s);
177      }      }
178        
179      gpg_keycache_rewind (pub);      gpg_keycache_rewind (pub);
180        /* In the second loop, we set a key pointer for each element. */
181      n = SendDlgItemMessage (dlg, IDC_ADDREV_KEYLIST, CB_GETCOUNT, 0, 0);      n = SendDlgItemMessage (dlg, IDC_ADDREV_KEYLIST, CB_GETCOUNT, 0, 0);
182      for (i = 0; i < n; i++) {      for (i = 0; i < n; i++) {
183          gpg_keycache_next_key (pub, 0, &key);          gpg_keycache_next_key (pub, 0, &key);
# Line 208  do_add_new_userid (listview_ctrl_t lv, Line 194  do_add_new_userid (listview_ctrl_t lv,
194                     const char *utf8_name, const char *email,                     const char *utf8_name, const char *email,
195                     const char *utf8_comment)                     const char *utf8_comment)
196  {  {
197      char *p, *native;      StringBuffer p;
198      size_t n;      char *native;
199            
200      n = strlen (utf8_name) + strlen (email) + 16;      if (utf8_comment != NULL)
201      if (utf8_comment)          p = p + utf8_name + " (" + utf8_comment + ")";
         n += strlen (utf8_comment);  
     p = new char[n+1];  
     if (!p)  
         BUG (NULL);  
     if (utf8_comment)  
         sprintf (p, "%s (%s)", utf8_name, utf8_comment);  
202      else      else
203          sprintf (p, "%s", utf8_name);          p = p + utf8_name;
204      native = utf8_to_native (p);      native = utf8_to_native (p.getBuffer ());
     free_if_alloc (p);  
205    
206      listview_add_item (lv, "");      listview_add_item (lv, "");
207      listview_add_sub_item (lv, 0, UID_COL_VALID, _("Ultimate" ));      listview_add_sub_item (lv, 0, UID_COL_VALID, _("Ultimate" ));
208      listview_add_sub_item (lv, 0, UID_COL_NAME, native);      listview_add_sub_item (lv, 0, UID_COL_NAME, native);
209      listview_add_sub_item (lv, 0, UID_COL_EMAIL, email && *email? email : "");      listview_add_sub_item (lv, 0, UID_COL_EMAIL, email && *email? email : "");
210      listview_add_sub_item (lv, 0, UID_COL_CREATION, get_key_created (time (NULL)));      listview_add_sub_item (lv, 0, UID_COL_CREATION,
211                               get_key_created (time (NULL)));
212      free_if_alloc (native);      free_if_alloc (native);
213  }  }
214    
# Line 241  do_add_new_subkey (listview_ctrl_t lv, k Line 221  do_add_new_subkey (listview_ctrl_t lv, k
221      int n;      int n;
222            
223      expdate = keygen->expire? get_key_expire_date (keygen->expire) : _("Never");      expdate = keygen->expire? get_key_expire_date (keygen->expire) : _("Never");
224      _snprintf (info, sizeof (info)-1, "%d-bit %s",      _snprintf (info, DIM (info)-1, "%d-bit %s", keygen->bits,
                keygen->bits,  
225                 get_key_pubalgo ((gpgme_pubkey_algo_t)keygen->algo));                 get_key_pubalgo ((gpgme_pubkey_algo_t)keygen->algo));
226      kid = get_keyid_from_fpr (keygen->fpr);      kid = get_keyid_from_fpr (keygen->fpr);
227      _snprintf (keyid, sizeof (keyid)-1, "0x%s", kid);      _snprintf (keyid, DIM (keyid)-1, "0x%s", kid);
228      s = get_key_created (time (NULL));      s = get_key_created (time (NULL));
229      n = listview_count_items (lv, 0);      n = listview_count_items (lv, 0);
230      listview_add_item_pos (lv, n);      listview_add_item_pos (lv, n);
# Line 271  static int Line 250  static int
250  do_find_userid (const char *keyid, const char *email,  do_find_userid (const char *keyid, const char *email,
251                  const char *name, gpg_uid_info_t *r_inf)                  const char *name, gpg_uid_info_t *r_inf)
252  {  {
253      GpgKeyEdit *ke;      GpgKeyEdit ke;
254      gpgme_error_t err;      gpgme_error_t err;
255      gpg_uid_info_t inf, ui;      gpg_uid_info_t inf, ui;
256      int pos = -1;      int pos = -1;
257    
258      ke = create_GpgKeyEdit (keyid);      ke.setKeyID (keyid);
259      err = ke->getUseridInfo (&inf);      err = ke.getUseridInfo (&inf);
     delete ke;  
260      if (err) {      if (err) {
261          log_box (_("user ID"), MB_ERR,          log_box (_("user ID"), MB_ERR,
262                   _("Could not get key information for: \"%s\":\n%s"),                   _("Could not get key information for: \"%s\":\n%s"),
# Line 342  BOOL CALLBACK Line 320  BOOL CALLBACK
320  keyedit_addphoto_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)  keyedit_addphoto_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
321  {  {
322      static keyedit_cb_t cb;      static keyedit_cb_t cb;
     GpgKeyEdit *ke;  
323      gpgme_error_t err;      gpgme_error_t err;
324      const char *s;          const char *s;    
325      char file[128];      char file[128];
# Line 389  keyedit_addphoto_dlg_proc (HWND dlg, UIN Line 366  keyedit_addphoto_dlg_proc (HWND dlg, UIN
366                  if (id == IDNO)                  if (id == IDNO)
367                      return TRUE;                      return TRUE;
368              }              }
369              ke = create_GpgKeyEdit (cb->keyid);              
370              if (cb->pass)              {
371                  ke->setPassphrase (cb->pass);                  GpgKeyEdit ke;
372              else                  
373                  ke->setNoPassphrase (true);                  ke.setKeyID (cb->keyid);
374              err = ke->addPhotoid (file);                  if (cb->pass)
375              delete ke;                      ke.setPassphrase (cb->pass);
376                    else
377                        ke.setNoPassphrase (true);
378                    err = ke.addPhotoid (file);
379                }
380              if (err) {              if (err) {
381                  msg_box (dlg, gpgme_strerror (err), _("Add Photo"), MB_ERR);                  msg_box (dlg, gpgme_strerror (err), _("Add Photo"), MB_ERR);
382                  return FALSE;                  return FALSE;
# Line 424  keyedit_addrevoker_dlg_proc (HWND dlg, U Line 405  keyedit_addrevoker_dlg_proc (HWND dlg, U
405  {  {
406      static keyedit_cb_t cb;      static keyedit_cb_t cb;
407      gpgme_error_t err;      gpgme_error_t err;
     GpgKeyEdit *ke;  
408      char *uid=NULL;      char *uid=NULL;
409    
410      switch (msg) {      switch (msg) {
# Line 451  keyedit_addrevoker_dlg_proc (HWND dlg, U Line 431  keyedit_addrevoker_dlg_proc (HWND dlg, U
431                  return FALSE;                  return FALSE;
432              }              }
433                    
434              ke = create_GpgKeyEdit (cb->keyid);              {
435              if (cb->pass)                  GpgKeyEdit ke;
436                  ke->setPassphrase (cb->pass);                  
437              else                  ke.setKeyID (cb->keyid);
438                  ke->setNoPassphrase (true);                  if (cb->pass)
439              err = ke->addDesignatedRevoker (uid);                      ke.setPassphrase (cb->pass);
440              delete ke;                  else
441                        ke.setNoPassphrase (true);
442                    err = ke.addDesignatedRevoker (uid);
443                }
444    
445              safe_free (uid);              safe_free (uid);
446              if (err) {              if (err) {
447                  msg_box (dlg, gpgme_strerror (err), _("Add Revoker"), MB_ERR);                  msg_box (dlg, gpgme_strerror (err), _("Add Revoker"), MB_ERR);
# Line 488  keyedit_adduid_dlg_proc (HWND dlg, UINT Line 472  keyedit_adduid_dlg_proc (HWND dlg, UINT
472      static keyedit_cb_t ctx;      static keyedit_cb_t ctx;
473      keygen_cb_t keygen;      keygen_cb_t keygen;
474      gpgme_error_t err;      gpgme_error_t err;
     GpgKeyEdit *ke;  
475      char *utf8_name = NULL;      char *utf8_name = NULL;
476      char *utf8_comment = NULL;      char *utf8_comment = NULL;
477      char email[128];      char email[128];
# Line 539  keyedit_adduid_dlg_proc (HWND dlg, UINT Line 522  keyedit_adduid_dlg_proc (HWND dlg, UINT
522                            
523              rc = GetDlgItemText_utf8 (dlg, IDC_ADDUID_COMMENT, &utf8_comment);              rc = GetDlgItemText_utf8 (dlg, IDC_ADDUID_COMMENT, &utf8_comment);
524    
525              ke = create_GpgKeyEdit (ctx->keyid);              {
526              if (ctx->is_protected)                  GpgKeyEdit ke;
527                  ke->setPassphrase (ctx->pass);                  
528              else                  ke.setKeyID (ctx->keyid);
529                  ke->setNoPassphrase (true);                  if (ctx->is_protected)
530              err = ke->addUserid (utf8_name, utf8_comment, email);                      ke.setPassphrase (ctx->pass);
531                    else
532                        ke.setNoPassphrase (true);
533                    err = ke.addUserid (utf8_name, utf8_comment, email);
534                }
535              if (err)              if (err)
536                  msg_box (dlg, gpgme_strerror (err), _("UserID"), MB_ERR);                  msg_box (dlg, gpgme_strerror (err), _("UserID"), MB_ERR);
537              else {              else {
# Line 555  keyedit_adduid_dlg_proc (HWND dlg, UINT Line 542  keyedit_adduid_dlg_proc (HWND dlg, UINT
542                  keygen->comment = utf8_comment;                  keygen->comment = utf8_comment;
543                  keygen->email = m_strdup (email);                  keygen->email = m_strdup (email);
544              }              }
             delete ke;  
545              EndDialog (dlg, TRUE);              EndDialog (dlg, TRUE);
546              return TRUE;              return TRUE;
547                            
# Line 574  keyedit_adduid_dlg_proc (HWND dlg, UINT Line 560  keyedit_adduid_dlg_proc (HWND dlg, UINT
560  static void  static void
561  init_keysize_box (HWND dlg, int ctlid)  init_keysize_box (HWND dlg, int ctlid)
562  {  {
563        /* Array with standard key-length in bits. */
564      const char *sizelist[] = {      const char *sizelist[] = {
565          "1024", "1536",          "1024", "1536",
566          "2048", "3072",          "2048", "3072",
# Line 622  keyedit_addsubkey_dlg_proc (HWND dlg, UI Line 609  keyedit_addsubkey_dlg_proc (HWND dlg, UI
609  {  {
610      static keyedit_cb_t ctx;      static keyedit_cb_t ctx;
611      keygen_cb_t keygen;      keygen_cb_t keygen;
     GpgKeyEdit *ke;  
612      gpgme_error_t err;      gpgme_error_t err;
613      SYSTEMTIME st;      SYSTEMTIME st;
614      HWND hwnd;      HWND hwnd;
# Line 707  keyedit_addsubkey_dlg_proc (HWND dlg, UI Line 693  keyedit_addsubkey_dlg_proc (HWND dlg, UI
693              if (valid > 0)              if (valid > 0)
694                  keygen->expire = time (NULL) + valid*24*60*60;                  keygen->expire = time (NULL) + valid*24*60*60;
695    
696              ke = create_GpgKeyEdit (ctx->keyid);              {
697              ke->setCallback (keygen_cb, NULL);                  GpgKeyEdit ke;
698              if (ctx->is_protected)                  
699                  ke->setPassphrase (ctx->pass);                  ke.setKeyID (ctx->keyid);
700              else                  ke.setCallback (keygen_cb, NULL);
701                  ke->setNoPassphrase (true);                  if (ctx->is_protected)
702              keygen_cb_dlg_create ();                      ke.setPassphrase (ctx->pass);
703                    else
704              err = ke->addSubkey ((gpgme_pubkey_algo_t)index, size, valid);                      ke.setNoPassphrase (true);
705                    keygen_cb_dlg_create ();
706                    err = ke.addSubkey ((gpgme_pubkey_algo_t)index, size, valid);
707                }
708              keygen->fpr = get_subkey_keyid (ctx->keyid);              keygen->fpr = get_subkey_keyid (ctx->keyid);
709              keygen_cb_dlg_destroy (1);              keygen_cb_dlg_destroy (1);
710              if (err)              if (err)
# Line 725  keyedit_addsubkey_dlg_proc (HWND dlg, UI Line 714  keyedit_addsubkey_dlg_proc (HWND dlg, UI
714                           _("GnuPG Status"), MB_OK);                           _("GnuPG Status"), MB_OK);
715                  ctx->finished = 1;                  ctx->finished = 1;
716              }              }
             delete ke;  
717              EndDialog (dlg, TRUE);              EndDialog (dlg, TRUE);
718              return TRUE;              return TRUE;
719                            
# Line 761  keyedit_add_userid (winpt_key_t k, HWND Line 749  keyedit_add_userid (winpt_key_t k, HWND
749      }      }
750    
751      memset (&keygen, 0, sizeof (keygen));      memset (&keygen, 0, sizeof (keygen));
752      memset (&cb, 0, sizeof cb);      memset (&cb, 0, sizeof (cb));
753      cb.parent = dlg;      cb.parent = dlg;
754      cb.opaque = &keygen;      cb.opaque = &keygen;
755      cb.is_protected = k->is_protected;      cb.is_protected = k->is_protected;
# Line 853  keyedit_add_subkey (winpt_key_t k, HWND Line 841  keyedit_add_subkey (winpt_key_t k, HWND
841  BOOL  BOOL
842  keyedit_set_pref_keyserver (winpt_key_t k, HWND dlg)  keyedit_set_pref_keyserver (winpt_key_t k, HWND dlg)
843  {  {
844      GpgKeyEdit *ke;      GpgKeyEdit ke;
845      gpgme_error_t err;      gpgme_error_t err;
846      struct URL_ctx_s *url;      struct URL_ctx_s *url;
847      char *pass = NULL;      char *pass = NULL;
# Line 870  keyedit_set_pref_keyserver (winpt_key_t Line 858  keyedit_set_pref_keyserver (winpt_key_t
858          return FALSE;          return FALSE;
859      }      }
860    
861      ke = create_GpgKeyEdit (k->keyid);      ke.setKeyID (k->keyid);
862      if (k->is_protected)      if (k->is_protected)
863          ke->setPassphrase (pass);          ke.setPassphrase (pass);
864      else      else
865          ke->setNoPassphrase (true);          ke.setNoPassphrase (true);
866      err = ke->setPreferredKeyserver (-1, url->url);      err = ke.setPreferredKeyserver (-1, url->url);
867      if (!err)      if (!err)
868          msg_box (dlg, _("Preferred keyserver successfully set."),          msg_box (dlg, _("Preferred keyserver successfully set."),
869                   _("Key Edit"), MB_OK);                   _("Key Edit"), MB_OK);
# Line 883  keyedit_set_pref_keyserver (winpt_key_t Line 871  keyedit_set_pref_keyserver (winpt_key_t
871          msg_box (dlg, gpgme_strerror (err), _("Key Edit"), MB_ERR);          msg_box (dlg, gpgme_strerror (err), _("Key Edit"), MB_ERR);
872    
873      sfree_if_alloc (pass);      sfree_if_alloc (pass);
     delete ke;  
874      delete url;      delete url;
875      return err == 0? 0 : WPTERR_GENERAL;      return err == 0? 0 : WPTERR_GENERAL;
876  }  }
# Line 1007  BOOL Line 994  BOOL
994  keyedit_change_passwd (winpt_key_t k, HWND dlg)  keyedit_change_passwd (winpt_key_t k, HWND dlg)
995  {  {
996      gpgme_error_t err;      gpgme_error_t err;
997      GpgKeyEdit *ke;      GpgKeyEdit ke;
998      char *old_pass = NULL;      char *old_pass = NULL;
999      char *new_pass = NULL;      char *new_pass = NULL;
1000      int cancel = 0;      int cancel = 0;
# Line 1049  keyedit_change_passwd (winpt_key_t k, HW Line 1036  keyedit_change_passwd (winpt_key_t k, HW
1036          }          }
1037      }      }
1038    
1039      ke = create_GpgKeyEdit (k->keyid);      ke.setKeyID (k->keyid);
1040      ke->setPassphrase (k->is_protected? old_pass : NULL);      ke.setPassphrase (k->is_protected? old_pass : NULL);
1041      if (!k->is_protected)      if (!k->is_protected)
1042          ke->setNoPassphrase (true);          ke.setNoPassphrase (true);
1043      err = ke->changePassphrase (new_pass, 1);      err = ke.changePassphrase (new_pass, 1);
1044      if (err)      if (err)
1045          msg_box (dlg, gpgme_strerror (err), _("Change Password"), MB_ERR);          msg_box (dlg, gpgme_strerror (err), _("Change Password"), MB_ERR);
1046      else      else
1047          msg_box (dlg, _("Passphrase successfully changed."),  _("GnuPG status"), MB_OK);          msg_box (dlg, _("Passphrase successfully changed."),  _("GnuPG status"), MB_OK);
1048      sfree_if_alloc (old_pass);      sfree_if_alloc (old_pass);
1049      sfree_if_alloc (new_pass);      sfree_if_alloc (new_pass);
1050      delete ke;  
1051      return TRUE;      return TRUE;
1052  }  }
1053    
# Line 1109  subkey_list_init (HWND dlg, winpt_key_t Line 1096  subkey_list_init (HWND dlg, winpt_key_t
1096                    
1097      listview_set_ext_style (lv);      listview_set_ext_style (lv);
1098      for (i = 0, sub = k->ctx->subkeys; i < nkeys; i++, sub = sub->next) {      for (i = 0, sub = k->ctx->subkeys; i < nkeys; i++, sub = sub->next) {
1099          _snprintf (buf, sizeof buf-1, "%d-bit %s", sub->length,          _snprintf (buf, DIM (buf)-1, "%d-bit %s", sub->length,
1100                                  get_key_pubalgo (sub->pubkey_algo));                                  get_key_pubalgo (sub->pubkey_algo));
1101          listview_add_sub_item (lv, i, SUBK_COL_DESC, buf);          listview_add_sub_item (lv, i, SUBK_COL_DESC, buf);
1102          t = sub->keyid;          t = sub->keyid;
1103          assert (t != NULL);          assert (t != NULL);
1104          _snprintf (tmp, sizeof tmp-1, "0x%s", t+8);          _snprintf (tmp, DIM (tmp)-1, "0x%s", t+8);
1105          listview_add_sub_item (lv, i, SUBK_COL_KEYID, tmp);          listview_add_sub_item (lv, i, SUBK_COL_KEYID, tmp);
1106    
1107          t = get_key_created (sub->timestamp);          t = get_key_created (sub->timestamp);
# Line 1255  do_show_help (HWND dlg) Line 1242  do_show_help (HWND dlg)
1242           "ADDREVOKER  add a revocation key\r\n"           "ADDREVOKER  add a revocation key\r\n"
1243           "EXPIRE      change the expire date\r\n"           "EXPIRE      change the expire date\r\n"
1244           "SHOWPREF    list preferences (verbose)\r\n"           "SHOWPREF    list preferences (verbose)\r\n"
1245           "SETPREF     update specific algorithm preferences\r\n"           /*"SETPREF     update specific algorithm preferences\r\n"*/
1246           "PASSWD      change the passphrase\r\n"           "PASSWD      change the passphrase\r\n"
1247           "PRIMARY     flag user ID as primary\r\n"           "PRIMARY     flag user ID as primary\r\n"
1248           "TRUST       change the ownertrust\r\n"           "TRUST       change the ownertrust\r\n"
# Line 1289  do_editkey_delkey (winpt_key_t k, HWND d Line 1276  do_editkey_delkey (winpt_key_t k, HWND d
1276  {  {
1277      gpgme_error_t err;      gpgme_error_t err;
1278      gpgme_subkey_t subk;      gpgme_subkey_t subk;
1279      GpgKeyEdit *ke;      GpgKeyEdit ke;
1280      int pos, id;      int pos, id;
1281      const char *warn;      const char *warn;
1282      char tmp[64];      char tmp[64];
# Line 1311  do_editkey_delkey (winpt_key_t k, HWND d Line 1298  do_editkey_delkey (winpt_key_t k, HWND d
1298          return FALSE;          return FALSE;
1299      }      }
1300    
1301      listview_get_item_text (lv, pos, 0, tmp, sizeof (tmp) -1);      listview_get_item_text (lv, pos, 0, tmp, DIM (tmp) -1);
1302      subk = get_subkey_bypos (k->keyid, pos);      subk = get_subkey_bypos (k->keyid, pos);
1303      /* Issue different warning for the different key capabilities. */      /* Issue different warning for the different key capabilities. */
1304      if (subk->can_encrypt)      if (subk->can_encrypt)
# Line 1330  do_editkey_delkey (winpt_key_t k, HWND d Line 1317  do_editkey_delkey (winpt_key_t k, HWND d
1317      if (id == IDNO)      if (id == IDNO)
1318          return FALSE;          return FALSE;
1319    
1320      ke = create_GpgKeyEdit (k->keyid);      ke.setKeyID (k->keyid);
1321      err = ke->delKey (pos);      err = ke.delKey (pos);
1322      if (err)      if (err)
1323          msg_box (dlg, gpgme_strerror (err), _("Delete Subkey"), MB_ERR);          msg_box (dlg, gpgme_strerror (err), _("Delete Subkey"), MB_ERR);
1324      else {      else {
# Line 1339  do_editkey_delkey (winpt_key_t k, HWND d Line 1326  do_editkey_delkey (winpt_key_t k, HWND d
1326          k->update = 1;          k->update = 1;
1327          status_box (dlg, _("Subkey successfully deleted."), _("GnuPG status"));          status_box (dlg, _("Subkey successfully deleted."), _("GnuPG status"));
1328      }      }
     delete ke;  
1329      return err? FALSE : TRUE;      return err? FALSE : TRUE;
1330  }  }
1331    
# Line 1350  static int Line 1336  static int
1336  do_editkey_expire (winpt_key_t k, HWND dlg, listview_ctrl_t lv)  do_editkey_expire (winpt_key_t k, HWND dlg, listview_ctrl_t lv)
1337  {  {
1338      gpgme_error_t err;      gpgme_error_t err;
1339      GpgKeyEdit *ke;      GpgKeyEdit ke;
1340      date_s udd = {0};      date_s udd = {0};
1341      char buf[256], * pass = NULL;      char buf[256], * pass = NULL;
1342      time_t exp;      time_t exp;
# Line 1368  do_editkey_expire (winpt_key_t k, HWND d Line 1354  do_editkey_expire (winpt_key_t k, HWND d
1354    
1355      /* If a key already expired, it is possible the user wants to      /* If a key already expired, it is possible the user wants to
1356         set a new expiration date.. */         set a new expiration date.. */
1357      listview_get_item_text (lv, pos, SUBK_COL_STATUS, buf, sizeof (buf)-1);      listview_get_item_text (lv, pos, SUBK_COL_STATUS, buf, DIM (buf)-1);
1358      if (!strcmp (buf, _("Expired"))) {      if (!strcmp (buf, _("Expired"))) {
1359          cancel = msg_box (dlg, _("Key already expired.\n\n"          cancel = msg_box (dlg, _("Key already expired.\n\n"
1360                            "Do you want to change the expiration date?"),                            "Do you want to change the expiration date?"),
# Line 1378  do_editkey_expire (winpt_key_t k, HWND d Line 1364  do_editkey_expire (winpt_key_t k, HWND d
1364          cancel = 0;          cancel = 0;
1365      }      }
1366    
1367      memset (&udd, 0, sizeof udd);      memset (&udd, 0, sizeof (udd));
1368      udd.text = _("Key Expiration Date");      udd.text = _("Key Expiration Date");
1369      dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_DATE, dlg,          dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_DATE, dlg,    
1370                        date_dlg_proc, (LPARAM)&udd,                        date_dlg_proc, (LPARAM)&udd,
# Line 1396  do_editkey_expire (winpt_key_t k, HWND d Line 1382  do_editkey_expire (winpt_key_t k, HWND d
1382              return FALSE;              return FALSE;
1383      }      }
1384      exp = w32_mktime (&udd.st);      exp = w32_mktime (&udd.st);
1385      ke = create_GpgKeyEdit (k->keyid);  
1386        ke.setKeyID (k->keyid);
1387      if (k->is_protected)      if (k->is_protected)
1388          ke->setPassphrase (pass);          ke.setPassphrase (pass);
1389      else      else
1390          ke->setNoPassphrase (true);          ke.setNoPassphrase (true);
1391      err = ke->setKeyExpireDate (pos, exp, false);      err = ke.setKeyExpireDate (pos, exp, false);
1392      if (err)      if (err)
1393          msg_box (dlg, gpgme_strerror (err), _("Expire Subkey"), MB_ERR);          msg_box (dlg, gpgme_strerror (err), _("Expire Subkey"), MB_ERR);
1394      else {      else {
1395          _snprintf (buf, sizeof (buf)-1, "%s", get_key_created (exp));          _snprintf (buf, DIM (buf)-1, "%s", get_key_created (exp));
1396          listview_add_sub_item (lv, pos, SUBK_COL_EXPIRES, buf);          listview_add_sub_item (lv, pos, SUBK_COL_EXPIRES, buf);
1397          k->update = 1;          k->update = 1;
1398          msg_box (dlg, _("Subkey expire date successfully set."),          msg_box (dlg, _("Subkey expire date successfully set."),
1399                   _("GnuPG status"), MB_OK);                   _("GnuPG status"), MB_OK);
1400      }      }
1401      sfree_if_alloc (pass);      sfree_if_alloc (pass);
     delete ke;  
1402      return TRUE;      return TRUE;
1403  }  }
1404    
# Line 1424  static int Line 1410  static int
1410  do_editkey_revoke (winpt_key_t k, HWND dlg, listview_ctrl_t lv)  do_editkey_revoke (winpt_key_t k, HWND dlg, listview_ctrl_t lv)
1411  {  {
1412      gpgme_error_t err;      gpgme_error_t err;
1413      GpgKeyEdit *ke;      GpgKeyEdit ke;
1414      char buf[256];      char buf[256];
1415      char *pass = NULL;      char *pass = NULL;
1416      int j, cancel = 0;      int j, cancel = 0;
# Line 1446  do_editkey_revoke (winpt_key_t k, HWND d Line 1432  do_editkey_revoke (winpt_key_t k, HWND d
1432          return FALSE;          return FALSE;
1433      }      }
1434                            
1435      listview_get_item_text (lv, j, SUBK_COL_STATUS, buf, sizeof (buf)-1);      listview_get_item_text (lv, j, SUBK_COL_STATUS, buf, DIM (buf)-1);
1436      if (!strcmp (buf, _("Revoked"))) {      if (!strcmp (buf, _("Revoked"))) {
1437          msg_box (dlg, _("Key already revoked."), _("Key Edit"), MB_ERR);          msg_box (dlg, _("Key already revoked."), _("Key Edit"), MB_ERR);
1438          return FALSE;          return FALSE;
# Line 1458  do_editkey_revoke (winpt_key_t k, HWND d Line 1444  do_editkey_revoke (winpt_key_t k, HWND d
1444              return FALSE;                        return FALSE;          
1445      }      }
1446    
1447      ke = create_GpgKeyEdit (k->keyid);      ke.setKeyID (k->keyid);
1448      if (k->is_protected)      if (k->is_protected)
1449          ke->setPassphrase (pass);          ke.setPassphrase (pass);
1450      else      else
1451          ke->setNoPassphrase (true);          ke.setNoPassphrase (true);
1452      err = ke->revokeSubkey (j, 0, NULL);      err = ke.revokeSubkey (j, 0, NULL);
1453      if (err)      if (err)
1454          msg_box( dlg, gpgme_strerror (err), _("Revoke Subkey"), MB_ERR);          msg_box( dlg, gpgme_strerror (err), _("Revoke Subkey"), MB_ERR);
1455      else {      else {
# Line 1472  do_editkey_revoke (winpt_key_t k, HWND d Line 1458  do_editkey_revoke (winpt_key_t k, HWND d
1458          msg_box( dlg, _("Subkey successfully revoked."), _("GnuPG Status"), MB_OK );          msg_box( dlg, _("Subkey successfully revoked."), _("GnuPG Status"), MB_OK );
1459      }      }
1460      sfree_if_alloc (pass);      sfree_if_alloc (pass);
     delete ke;  
1461      return TRUE;      return TRUE;
1462  }  }
1463    
# Line 1483  int Line 1468  int
1468  do_editkey_revuid (winpt_key_t k, HWND dlg, listview_ctrl_t lv)  do_editkey_revuid (winpt_key_t k, HWND dlg, listview_ctrl_t lv)
1469  {  {
1470      gpgme_error_t err;      gpgme_error_t err;
1471      GpgKeyEdit *ke;      GpgKeyEdit ke;
1472      char buf[128], email[128];      char buf[128], email[128];
1473      char inf[512];      char inf[512];
1474      char *pass = NULL;      char *pass = NULL;
# Line 1501  do_editkey_revuid (winpt_key_t k, HWND d Line 1486  do_editkey_revuid (winpt_key_t k, HWND d
1486      }      }
1487    
1488      if( (j = listview_get_curr_pos( lv )) == -1 ) {      if( (j = listview_get_curr_pos( lv )) == -1 ) {
1489          msg_box( dlg, _("Please select a user ID."), _("Key Edit"), MB_ERR );            msg_box( dlg, _("Please select a user ID."), _("Key Edit"), MB_ERR );
1490          return FALSE;            return FALSE;  
1491      }      }
1492                            
1493      listview_get_item_text( lv, j, UID_COL_VALID, buf, sizeof buf - 1);      listview_get_item_text( lv, j, UID_COL_VALID, buf, DIM (buf) - 1);
1494      if (strstr (buf, _("Revoked"))) {      if (strstr (buf, _("Revoked"))) {
1495          msg_box (dlg, _("This user ID has been already revoked."),          msg_box (dlg, _("This user ID has been already revoked."),
1496                   _("Key Edit"), MB_INFO);                   _("Key Edit"), MB_INFO);
# Line 1513  do_editkey_revuid (winpt_key_t k, HWND d Line 1498  do_editkey_revuid (winpt_key_t k, HWND d
1498      }      }
1499                            
1500      listview_get_item_text (lv, j, UID_COL_NAME, buf, sizeof buf -1);      listview_get_item_text (lv, j, UID_COL_NAME, buf, sizeof buf -1);
1501      _snprintf (inf, sizeof (inf) -1, _("user ID \"%s\".\n\n"      _snprintf (inf, DIM (inf) -1, _("user ID \"%s\".\n\n"
1502                 "Do you really want to revoke this user ID?"), buf);                 "Do you really want to revoke this user ID?"), buf);
1503      if (msg_box (dlg, inf, _("Key Edit"), MB_WARN_ASK) == IDNO)      if (msg_box (dlg, inf, _("Key Edit"), MB_WARN_ASK) == IDNO)
1504          return FALSE;          return FALSE;
# Line 1522  do_editkey_revuid (winpt_key_t k, HWND d Line 1507  do_editkey_revuid (winpt_key_t k, HWND d
1507          if (cancel)          if (cancel)
1508              return FALSE;                        return FALSE;          
1509      }      }
1510      listview_get_item_text (lv, j, UID_COL_EMAIL, email, sizeof (email)-1);      listview_get_item_text (lv, j, UID_COL_EMAIL, email, DIM (email)-1);
1511      listview_get_item_text (lv, j, UID_COL_NAME, buf, sizeof (buf)-1);      listview_get_item_text (lv, j, UID_COL_NAME, buf, DIM (buf)-1);
1512      id = do_find_userid (k->keyid, email, buf, NULL);      id = do_find_userid (k->keyid, email, buf, NULL);
1513      if (id == -1)      if (id == -1)
1514          BUG (NULL);          BUG (NULL);
1515    
1516      ke = create_GpgKeyEdit (k->keyid);      ke.setKeyID (k->keyid);
1517      if (k->is_protected)      if (k->is_protected)
1518          ke->setPassphrase (pass);          ke.setPassphrase (pass);
1519      else      else
1520          ke->setNoPassphrase (true);          ke.setNoPassphrase (true);
1521      err = ke->revokeUserid (id);      err = ke.revokeUserid (id);
1522      if (err)      if (err)
1523          msg_box (dlg, gpgme_strerror (err), _("Revoke User ID"), MB_ERR);          msg_box (dlg, gpgme_strerror (err), _("Revoke User ID"), MB_ERR);
1524      else {      else {
# Line 1542  do_editkey_revuid (winpt_key_t k, HWND d Line 1527  do_editkey_revuid (winpt_key_t k, HWND d
1527          status_box (dlg, _("User ID successfully revoked"), _("GnuPG Status"));          status_box (dlg, _("User ID successfully revoked"), _("GnuPG Status"));
1528      }      }
1529      sfree_if_alloc (pass);      sfree_if_alloc (pass);
     delete ke;  
1530      return err? FALSE : TRUE;      return err? FALSE : TRUE;
1531  }  }
1532    
# Line 1551  static int Line 1535  static int
1535  do_editkey_setpref (winpt_key_t k, HWND dlg, listview_ctrl_t lv)  do_editkey_setpref (winpt_key_t k, HWND dlg, listview_ctrl_t lv)
1536  {  {
1537      gpgme_error_t err;      gpgme_error_t err;
1538      GpgKeyEdit *ke;      GpgKeyEdit ke;
1539      gpg_uid_info_t uidinf = NULL;      gpg_uid_info_t uidinf = NULL;
1540      char buf[256], *pass = NULL, *prefs = NULL;      char buf[256], *pass = NULL, *prefs = NULL;
1541      int pos, id, cancel=0, flags=0;      int pos, id, cancel=0, flags=0;
# Line 1561  do_editkey_setpref (winpt_key_t k, HWND Line 1545  do_editkey_setpref (winpt_key_t k, HWND
1545          msg_box (dlg, _("Please select a user ID."), _("Key Edit"), MB_ERR);          msg_box (dlg, _("Please select a user ID."), _("Key Edit"), MB_ERR);
1546          return FALSE;          return FALSE;
1547      }      }
1548      listview_get_item_text (lv, pos, 2, buf, sizeof buf-1);      listview_get_item_text (lv, pos, 2, buf, DIM (buf)-1);
1549      id = do_find_userid (k->keyid, buf, NULL, &uidinf);      id = do_find_userid (k->keyid, buf, NULL, &uidinf);
1550      if (id == -1)      if (id == -1)
1551          BUG (NULL);          BUG (NULL);
# Line 1579  do_editkey_setpref (winpt_key_t k, HWND Line 1563  do_editkey_setpref (winpt_key_t k, HWND
1563          return FALSE;          return FALSE;
1564      }      }
1565    
1566      ke = create_GpgKeyEdit (k->keyid);      ke.setKeyID (k->keyid);
1567      if (k->is_protected)      if (k->is_protected)
1568          ke->setPassphrase (pass);          ke.setPassphrase (pass);
1569      else      else
1570          ke->setNoPassphrase (true);              ke.setNoPassphrase (true);    
1571      err = ke->setUseridPreferences (id, prefs);      err = ke.setUseridPreferences (id, prefs);
1572      if (err)      if (err)
1573          msg_box (dlg, gpgme_strerror (err), _("Set user ID preferences"), MB_ERR);          msg_box (dlg, gpgme_strerror (err), _("Set user ID preferences"), MB_ERR);
1574      else {      else {
# Line 1594  do_editkey_setpref (winpt_key_t k, HWND Line 1578  do_editkey_setpref (winpt_key_t k, HWND
1578    
1579      sfree_if_alloc (pass);      sfree_if_alloc (pass);
1580      free_if_alloc (prefs);      free_if_alloc (prefs);
     delete ke;  
1581      return err? FALSE: TRUE;      return err? FALSE: TRUE;
1582  }  }
1583    
# Line 1603  static int Line 1586  static int
1586  do_editkey_primary (winpt_key_t k, HWND dlg, listview_ctrl_t lv)  do_editkey_primary (winpt_key_t k, HWND dlg, listview_ctrl_t lv)
1587  {  {
1588      gpgme_error_t err;      gpgme_error_t err;
1589      GpgKeyEdit *ke;      GpgKeyEdit ke;
1590      int j, id, cancel=0;      int j, id, cancel=0;
1591      char valid[32];      char valid[32];
1592      char buf[256], *pass = NULL;      char buf[256], *pass = NULL;
# Line 1614  do_editkey_primary (winpt_key_t k, HWND Line 1597  do_editkey_primary (winpt_key_t k, HWND
1597          msg_box (dlg, _("Please select a user ID."), _("Key Edit"), MB_ERR);          msg_box (dlg, _("Please select a user ID."), _("Key Edit"), MB_ERR);
1598          return FALSE;          return FALSE;
1599      }      }
1600      listview_get_item_text (lv, j, UID_COL_VALID, valid, sizeof (valid)-1);      listview_get_item_text (lv, j, UID_COL_VALID, valid, DIM (valid)-1);
1601      if (!strcmp (valid, _("Revoked")))      if (!strcmp (valid, _("Revoked")))
1602          return FALSE;          return FALSE;
1603      listview_get_item_text (lv, j, UID_COL_EMAIL, buf, sizeof (buf)-1);      listview_get_item_text (lv, j, UID_COL_EMAIL, buf, DIM (buf)-1);
1604      id = do_find_userid (k->keyid, buf, NULL, NULL);      id = do_find_userid (k->keyid, buf, NULL, NULL);
1605      if (id == -1)      if (id == -1)
1606          BUG (NULL);          BUG (NULL);
# Line 1627  do_editkey_primary (winpt_key_t k, HWND Line 1610  do_editkey_primary (winpt_key_t k, HWND
1610              return FALSE;              return FALSE;
1611      }      }
1612    
1613      ke = create_GpgKeyEdit (k->keyid);      ke.setKeyID (k->keyid);
1614      if (k->is_protected)      if (k->is_protected)
1615          ke->setPassphrase (pass);          ke.setPassphrase (pass);
1616      else      else
1617          ke->setNoPassphrase (true);          ke.setNoPassphrase (true);
1618      err = ke->setPrimaryUserid (id);      err = ke.setPrimaryUserid (id);
1619      if (err)      if (err)
1620          msg_box (dlg, gpgme_strerror (err), _("Primary"), MB_ERR);          msg_box (dlg, gpgme_strerror (err), _("Primary"), MB_ERR);
1621      else {      else {
# Line 1641  do_editkey_primary (winpt_key_t k, HWND Line 1624  do_editkey_primary (winpt_key_t k, HWND
1624      }      }
1625    
1626      sfree_if_alloc (pass);      sfree_if_alloc (pass);
     delete ke;  
1627      return err? FALSE : TRUE;      return err? FALSE : TRUE;
1628  }  }
1629    
# Line 1711  showpref_dlg_proc (HWND dlg, UINT msg, W Line 1693  showpref_dlg_proc (HWND dlg, UINT msg, W
1693              BUG (NULL);              BUG (NULL);
1694          key = (gpgme_key_t)cb->opaque;          key = (gpgme_key_t)cb->opaque;
1695          listview_get_item_text (cb->lv, cb->lv_pos,          listview_get_item_text (cb->lv, cb->lv_pos,
1696                                  UID_COL_EMAIL, buf, sizeof (buf)-1);                                  UID_COL_EMAIL, buf, DIM (buf)-1);
1697          pos = do_find_userid (cb->keyid, buf, NULL, &inf);          pos = do_find_userid (cb->keyid, buf, NULL, &inf);
1698          if (pos < 0 || !inf) {          if (pos < 0 || !inf) {
1699              gpg_uid_info_release (inf);              gpg_uid_info_release (inf);
# Line 1720  showpref_dlg_proc (HWND dlg, UINT msg, W Line 1702  showpref_dlg_proc (HWND dlg, UINT msg, W
1702          }          }
1703          for (u=inf; u; u = u->next) {          for (u=inf; u; u = u->next) {
1704              if (u->index == pos && u->prefs && *u->prefs) {              if (u->index == pos && u->prefs && *u->prefs) {
1705                  _snprintf (buf, sizeof (buf)-1, "%s", u->name);                  _snprintf (buf, DIM (buf)-1, "%s", u->name);
1706                  SetDlgItemText (dlg, IDC_SHOWPREF_INFO, buf);                  SetDlgItemText (dlg, IDC_SHOWPREF_INFO, buf);
1707                  if (parse_preflist (dlg, u->prefs) <= 0)                  if (parse_preflist (dlg, u->prefs) <= 0)
1708                      pos = -1;                      pos = -1;
# Line 1780  do_editkey_showpref (winpt_key_t k, HWND Line 1762  do_editkey_showpref (winpt_key_t k, HWND
1762      cb.lv_pos = listview_get_curr_pos (lv);      cb.lv_pos = listview_get_curr_pos (lv);
1763    
1764      listview_get_item_text (lv, cb.lv_pos, UID_COL_VALID,      listview_get_item_text (lv, cb.lv_pos, UID_COL_VALID,
1765                              status, sizeof (status)-1);                              status, DIM (status)-1);
1766      if (!strcmp (status, _("Revoked")))      if (!strcmp (status, _("Revoked")))
1767          return TRUE;          return TRUE;
1768            
# Line 1794  static int Line 1776  static int
1776  do_editkey_deluid (winpt_key_t k, HWND dlg, listview_ctrl_t lv)  do_editkey_deluid (winpt_key_t k, HWND dlg, listview_ctrl_t lv)
1777  {  {
1778      gpgme_error_t err;      gpgme_error_t err;
1779      GpgKeyEdit *ke;      GpgKeyEdit ke;
1780      char email[128], name[128];      char email[128], name[128];
1781      char inf[384];      char inf[384];
1782      int pos, id = 0;      int pos, id = 0;
# Line 1828  do_editkey_deluid (winpt_key_t k, HWND d Line 1810  do_editkey_deluid (winpt_key_t k, HWND d
1810      if (id == -1)      if (id == -1)
1811          BUG (NULL);          BUG (NULL);
1812    
1813      ke = create_GpgKeyEdit (k->keyid);      ke.setKeyID (k->keyid);
1814      err = ke->delUserid (id);      err = ke.delUserid (id);
1815      if (err)      if (err)
1816          msg_box (dlg, gpgme_strerror (err), _("Delete User ID"), MB_ERR);          msg_box (dlg, gpgme_strerror (err), _("Delete User ID"), MB_ERR);
1817      else {      else {
# Line 1837  do_editkey_deluid (winpt_key_t k, HWND d Line 1819  do_editkey_deluid (winpt_key_t k, HWND d
1819          k->update = 1;          k->update = 1;
1820          status_box (dlg, _("User ID successfully deleted"), _("GnuPG Status"));          status_box (dlg, _("User ID successfully deleted"), _("GnuPG Status"));
1821      }      }
     delete ke;  
1822      return err? FALSE : TRUE;      return err? FALSE : TRUE;
1823  }  }
1824    
# Line 1919  static void Line 1900  static void
1900  do_editkey_minimize (winpt_key_t k, HWND dlg)  do_editkey_minimize (winpt_key_t k, HWND dlg)
1901  {  {
1902      gpgme_error_t err;      gpgme_error_t err;
1903      GpgKeyEdit *ke;      GpgKeyEdit ke;
1904    
1905      ke = create_GpgKeyEdit (k->keyid);      ke.setKeyID (k->keyid);
1906      err = ke->minimizeKey ();      err = ke.minimizeKey ();
1907      if (err)      if (err)
1908          msg_box (dlg, gpgme_strerror (err), _("Key Edit"), MB_ERR);          msg_box (dlg, gpgme_strerror (err), _("Key Edit"), MB_ERR);
1909      else {      else {
1910          msg_box (dlg, _("Finished to compact key."), _("Key Edit"), MB_OK);          msg_box (dlg, _("Finished to compact key."), _("Key Edit"), MB_OK);
1911          k->update = 1;          k->update = 1;
1912      }      }
     delete ke;  
1913  }  }
1914    
1915    
# Line 1937  static void Line 1917  static void
1917  do_editkey_clean (winpt_key_t k, HWND dlg)  do_editkey_clean (winpt_key_t k, HWND dlg)
1918  {  {
1919      gpgme_error_t err;      gpgme_error_t err;
1920      GpgKeyEdit *ke;      GpgKeyEdit ke;
1921            
1922      ke = create_GpgKeyEdit (k->keyid);      ke.setKeyID (k->keyid);
1923      err = ke->cleanKey ();      err = ke.cleanKey ();
1924      if (err)      if (err)
1925          msg_box (dlg, gpgme_strerror (err), _("Key Edit"), MB_ERR);            msg_box (dlg, gpgme_strerror (err), _("Key Edit"), MB_ERR);  
1926      else {      else {
1927          msg_box (dlg, _("Finished to compact key."), _("Key Edit"), MB_OK);          msg_box (dlg, _("Finished to compact key."), _("Key Edit"), MB_OK);
1928          k->update = 1;          k->update = 1;
1929      }      }
     delete ke;  
1930  }  }
1931    
1932    
# Line 1970  do_editkey_sign_userid (winpt_key_t k, H Line 1949  do_editkey_sign_userid (winpt_key_t k, H
1949  {  {
1950      gpgme_error_t err;      gpgme_error_t err;
1951      winpt_key_s signer;      winpt_key_s signer;
1952      GpgKeyEdit *ke;      GpgKeyEdit ke;
1953      char *pass = NULL;      char *pass = NULL;
1954      char *defkey;      char *defkey;
1955      char email[64], name[128], valid[32];      char email[64], name[128], valid[32];
# Line 1982  do_editkey_sign_userid (winpt_key_t k, H Line 1961  do_editkey_sign_userid (winpt_key_t k, H
1961          msg_box (dlg, _("Please select a user ID."), _("Key Edit"), MB_ERR);          msg_box (dlg, _("Please select a user ID."), _("Key Edit"), MB_ERR);
1962          return FALSE;          return FALSE;
1963      }      }
1964      listview_get_item_text (lv, uid_index, UID_COL_VALID, valid, sizeof (valid)-1);      listview_get_item_text (lv, uid_index, UID_COL_VALID, valid, DIM (valid)-1);
1965      if (!strcmp (valid, _("Revoked")))      if (!strcmp (valid, _("Revoked")))
1966          return TRUE;          return TRUE;
1967      if (mode == CMD_SIGN) {      if (mode == CMD_SIGN) {
# Line 1991  do_editkey_sign_userid (winpt_key_t k, H Line 1970  do_editkey_sign_userid (winpt_key_t k, H
1970          if (cancel == IDNO)          if (cancel == IDNO)
1971              return FALSE;              return FALSE;
1972      }      }
1973      listview_get_item_text (lv, uid_index, UID_COL_EMAIL, email, sizeof (email)-1);      listview_get_item_text (lv, uid_index, UID_COL_EMAIL, email, DIM (email)-1);
1974      listview_get_item_text (lv, uid_index, UID_COL_NAME, name, sizeof (name)-1);      listview_get_item_text (lv, uid_index, UID_COL_NAME, name, DIM (name)-1);
1975      uid_index = do_find_userid (k->keyid, email, name, NULL);      uid_index = do_find_userid (k->keyid, email, name, NULL);
1976    
1977      defkey = get_gnupg_default_key ();      defkey = get_gnupg_default_key ();
# Line 2007  do_editkey_sign_userid (winpt_key_t k, H Line 1986  do_editkey_sign_userid (winpt_key_t k, H
1986          if (cancel)          if (cancel)
1987              return FALSE;              return FALSE;
1988      }      }
1989      ke = create_GpgKeyEdit (k->keyid);      ke.setKeyID (k->keyid);
1990      if (signer.is_protected)      if (signer.is_protected)
1991          ke->setPassphrase (pass);          ke.setPassphrase (pass);
1992      else      else
1993          ke->setNoPassphrase (true);          ke.setNoPassphrase (true);
1994      ke->setLocalUser (signer.ctx);      ke.setLocalUser (signer.ctx);
1995      err = ke->signUserid (uid_index,      err = ke.signUserid (uid_index,
1996                            mode == CMD_SIGN? GPG_EDITKEY_SIGN : GPG_EDITKEY_LSIGN,                            mode == CMD_SIGN? GPG_EDITKEY_SIGN : GPG_EDITKEY_LSIGN,
1997                            0, NULL);                            0, NULL);
1998      if (!err) {      if (!err) {
# Line 2022  do_editkey_sign_userid (winpt_key_t k, H Line 2001  do_editkey_sign_userid (winpt_key_t k, H
2001      }      }
2002      else      else
2003          msg_box (dlg, gpgme_strerror (err), _("Key Edit"), MB_ERR);          msg_box (dlg, gpgme_strerror (err), _("Key Edit"), MB_ERR);
2004      delete ke;  
2005      sfree_if_alloc (pass);      sfree_if_alloc (pass);
2006      return !err? TRUE : FALSE;      return !err? TRUE : FALSE;
2007  }  }
# Line 2037  lookup_cmd (HWND dlg) Line 2016  lookup_cmd (HWND dlg)
2016      i = SendDlgItemMessage (dlg, IDC_KEYEDIT_CMD, CB_GETCURSEL, 0, 0);      i = SendDlgItemMessage (dlg, IDC_KEYEDIT_CMD, CB_GETCURSEL, 0, 0);
2017      if (i == LB_ERR)      if (i == LB_ERR)
2018          return LB_ERR;          return LB_ERR;
2019      GetDlgItemText (dlg, IDC_KEYEDIT_CMD, buf, sizeof (buf)-1);      GetDlgItemText (dlg, IDC_KEYEDIT_CMD, buf, DIM (buf)-1);
2020      for (i=0; cmdlist[i].name != NULL; i++) {      for (i=0; cmdlist[i].name != NULL; i++) {
2021          if (!strcmp (buf, cmdlist[i].name))          if (!strcmp (buf, cmdlist[i].name))
2022              return cmdlist[i].id;              return cmdlist[i].id;
# Line 2113  create_header_tooltip (HWND dlg) Line 2092  create_header_tooltip (HWND dlg)
2092      if (!tt)      if (!tt)
2093          BUG (NULL);          BUG (NULL);
2094      memset (&ti, 0, sizeof (ti));      memset (&ti, 0, sizeof (ti));
2095      ti.cbSize = sizeof(TOOLINFO);      ti.cbSize = sizeof (TOOLINFO);
2096      ti.uFlags = TTF_IDISHWND|TTF_SUBCLASS;          ti.uFlags = TTF_IDISHWND|TTF_SUBCLASS;    
2097      ti.hwnd = dlg;          ti.hwnd = dlg;    
2098      ti.uId = (UINT) ListView_GetHeader (GetDlgItem (dlg, IDC_KEYEDIT_KEYLIST));      ti.uId = (UINT) ListView_GetHeader (GetDlgItem (dlg, IDC_KEYEDIT_KEYLIST));

Legend:
Removed from v.273  
changed lines
  Added in v.314

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26