/[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 201 by twoaday, Sat Apr 22 18:30:24 2006 UTC revision 211 by twoaday, Sun May 7 12:36:48 2006 UTC
# Line 64  enum keyedit_commands { Line 64  enum keyedit_commands {
64      CMD_LSIGN,      CMD_LSIGN,
65      CMD_CHECK,      CMD_CHECK,
66      CMD_CLEAN,      CMD_CLEAN,
67        CMD_MINIMIZE
68  };  };
69    
70  struct cmdlist_s {  struct cmdlist_s {
# Line 91  struct cmdlist_s { Line 92  struct cmdlist_s {
92      {"LSIGN", 0, CMD_LSIGN},      {"LSIGN", 0, CMD_LSIGN},
93      {"CHECK", 0, CMD_CHECK},      {"CHECK", 0, CMD_CHECK},
94      {"CLEAN", 0, CMD_CLEAN},      {"CLEAN", 0, CMD_CLEAN},
95        {"MINIMIZE", 0, CMD_MINIMIZE},
96      {NULL, 0}        {NULL, 0}  
97  };  };
98    
# Line 121  struct keyedit_cb_s { Line 123  struct keyedit_cb_s {
123      const char     *keyid;      const char     *keyid;
124      const char     *pass;      const char     *pass;
125      listview_ctrl_t lv;      listview_ctrl_t lv;
126        int             lv_pos;
127      void           *opaque;      void           *opaque;
128      unsigned int    finished:1;      unsigned int    finished:1;
129      unsigned int    is_protected:1;      unsigned int    is_protected:1;
# Line 150  int keygen_check_date (SYSTEMTIME *st); Line 153  int keygen_check_date (SYSTEMTIME *st);
153  void get_userid_preflist (char **r_prefs, int * r_flags);  void get_userid_preflist (char **r_prefs, int * r_flags);
154  char* get_subkey_keyid (const char *keyid);  char* get_subkey_keyid (const char *keyid);
155    
156    void ComboBox_AddString_utf8 (HWND cb, const char *txt);
157    
158  static GpgKeyEdit*  static GpgKeyEdit*
159  create_GpgKeyEdit (const char *keyid)  create_GpgKeyEdit (const char *keyid)
# Line 171  do_init_keylist (HWND dlg, const char *k Line 175  do_init_keylist (HWND dlg, const char *k
175      gpg_keycache_t pub;      gpg_keycache_t pub;
176      gpgme_key_t key;      gpgme_key_t key;
177      const char *s, *kid;      const char *s, *kid;
     char *u;  
178      int i, n;      int i, n;
179    
180      pub = keycache_get_ctx (1);      pub = keycache_get_ctx (1);
# Line 187  do_init_keylist (HWND dlg, const char *k Line 190  do_init_keylist (HWND dlg, const char *k
190          kid = key->subkeys->keyid;          kid = key->subkeys->keyid;
191          if (!s || !strcmp (kid+8, keyid))          if (!s || !strcmp (kid+8, keyid))
192              continue;              continue;
193          u = utf8_to_native (s);          ComboBox_AddString_utf8 (GetDlgItem (dlg, IDC_ADDREV_KEYLIST), s);
         SendDlgItemMessage (dlg, IDC_ADDREV_KEYLIST, CB_ADDSTRING,  
                             0, (WPARAM)(char *)u);  
         free (u);  
194      }      }
195      gpg_keycache_rewind (pub);      gpg_keycache_rewind (pub);
196      n = SendDlgItemMessage( dlg, IDC_ADDREV_KEYLIST, CB_GETCOUNT, 0, 0 );      n = SendDlgItemMessage (dlg, IDC_ADDREV_KEYLIST, CB_GETCOUNT, 0, 0);
197      for (i = 0; i < n; i++) {      for (i = 0; i < n; i++) {
198          gpg_keycache_next_key (pub, 0, &key);          gpg_keycache_next_key (pub, 0, &key);
199          SendDlgItemMessage (dlg, IDC_ADDREV_KEYLIST, CB_SETITEMDATA,          SendDlgItemMessage (dlg, IDC_ADDREV_KEYLIST, CB_SETITEMDATA,
# Line 209  do_add_new_userid (listview_ctrl_t lv, Line 209  do_add_new_userid (listview_ctrl_t lv,
209                     const char *utf8_name, const char *email,                     const char *utf8_name, const char *email,
210                     const char *utf8_comment)                     const char *utf8_comment)
211  {  {
212      char *p, *uid, *com;      char *p;
213      size_t n;      size_t n;
214            
215      n = strlen (utf8_name) + strlen (email) + 16;      n = strlen (utf8_name) + strlen (email) + 16;
216      if (utf8_comment)      if (utf8_comment)
217          n += strlen (utf8_comment);          n += strlen (utf8_comment);
     uid = utf8_to_native (utf8_name);      
218      p = new char[n+1];      p = new char[n+1];
219      if (!p)      if (!p)
220          BUG (NULL);          BUG (NULL);
221      if (utf8_comment) {      if (utf8_comment) {
222          com = utf8_to_native (utf8_comment);          sprintf (p, "%s (%s)", utf8_name, utf8_comment);
         if (!com)  
             BUG (NULL);  
         sprintf (p, "%s (%s)", uid, com);  
         free_if_alloc (com);  
223      }      }
224      else      else
225          sprintf (p, "%s", uid);          sprintf (p, "%s", utf8_name);
     free (uid);  
226    
227      listview_add_item (lv, "");      listview_add_item (lv, "");
228      listview_add_sub_item (lv, 0, 0, _("Ultimate" ));      listview_add_sub_item (lv, 0, 0, _("Ultimate" ));
# Line 251  do_add_new_subkey (listview_ctrl_t lv, k Line 245  do_add_new_subkey (listview_ctrl_t lv, k
245                 keygen->bits,                 keygen->bits,
246                 get_key_pubalgo ((gpgme_pubkey_algo_t)keygen->algo));                 get_key_pubalgo ((gpgme_pubkey_algo_t)keygen->algo));
247      _snprintf (keyid, sizeof keyid-1, "0x%s", keygen->fpr+8);      _snprintf (keyid, sizeof keyid-1, "0x%s", keygen->fpr+8);
248        s = get_key_created (time (NULL));
249      n = listview_count_items (lv, 0);      n = listview_count_items (lv, 0);
250      listview_add_item_pos (lv, n);      listview_add_item_pos (lv, n);
251      listview_add_sub_item (lv, n, 0, info);      listview_add_sub_item (lv, n, SUBK_COL_DESC, info);
252      listview_add_sub_item (lv, n, 1, keyid);      listview_add_sub_item (lv, n, SUBK_COL_KEYID, keyid);
253      listview_add_sub_item (lv, n, 2, get_key_created (time (NULL)));      listview_add_sub_item (lv, n, SUBK_COL_CREATION, s);
254      listview_add_sub_item (lv, n, 3, expdate);      listview_add_sub_item (lv, n, SUBK_COL_EXPIRES, expdate);
255      if (flags & KM_FLAG_REVOKED)      if (flags & KM_FLAG_REVOKED)
256          s = _("Revoked");                s = _("Revoked");      
257      else if (flags & KM_FLAG_EXPIRED)      else if (flags & KM_FLAG_EXPIRED)
258          s = _("Expired");          s = _("Expired");
259      else      else
260          s = _("OK");          s = _("OK");
261      listview_add_sub_item (lv, n, 4, s);      listview_add_sub_item (lv, n, SUBK_COL_STATUS, s);
262  }  }
263    
264    
# Line 278  do_find_userid (const char *keyid, const Line 273  do_find_userid (const char *keyid, const
273      GpgKeyEdit *ke;      GpgKeyEdit *ke;
274      gpgme_error_t err;      gpgme_error_t err;
275      gpg_uid_info_t inf, ui;      gpg_uid_info_t inf, ui;
     char *ui_name = NULL;  
276      int pos = -1;      int pos = -1;
277    
278      ke = create_GpgKeyEdit (keyid);      ke = create_GpgKeyEdit (keyid);
# Line 292  do_find_userid (const char *keyid, const Line 286  do_find_userid (const char *keyid, const
286      }      }
287    
288      for (ui = inf; ui; ui = ui->next) {      for (ui = inf; ui; ui = ui->next) {
289          safe_free (ui_name);          if (name && email && ui->email && ui->name) {
         ui_name = utf8_to_native (ui->name);  
         if (name && email && ui->email && ui_name) {  
290              if (!strcmp (ui->email, email) &&              if (!strcmp (ui->email, email) &&
291                  !strncmp (ui_name, name, strlen (name))) {                  !strncmp (ui->name, name, strlen (name))) {
292                  pos = ui->index;                  pos = ui->index;
293                  break;                  break;
294              }              }
295              continue;              continue;
296          }          }
297          if (ui->email) {          if (email && ui->email) {
298              if (!strcmp (ui->email, email)) {              if (!strcmp (ui->email, email)) {
299                  pos = ui->index;                  pos = ui->index;
300                  break;                  break;
# Line 311  do_find_userid (const char *keyid, const Line 303  do_find_userid (const char *keyid, const
303                 as the fallbck when no email address is available. */                 as the fallbck when no email address is available. */
304              continue;              continue;
305          }          }
306          if (ui_name && name && !strcmp (ui_name, name)) {          if (ui->name && name && !strcmp (ui->name, name)) {
307              pos = ui->index;              pos = ui->index;
308              break;              break;
309          }          }
# Line 320  do_find_userid (const char *keyid, const Line 312  do_find_userid (const char *keyid, const
312          *r_inf = inf;          *r_inf = inf;
313      else      else
314          gpg_uid_info_release (inf);          gpg_uid_info_release (inf);
     safe_free (ui_name);  
315      return pos;      return pos;
316  }  }
317    
# Line 440  keyedit_addrevoker_dlg_proc (HWND dlg, U Line 431  keyedit_addrevoker_dlg_proc (HWND dlg, U
431      static keyedit_cb_t cb;      static keyedit_cb_t cb;
432      gpgme_error_t err;      gpgme_error_t err;
433      GpgKeyEdit *ke;      GpgKeyEdit *ke;
434      char uid[128], *utf8_uid;      char *uid=NULL;
435    
436      switch (msg) {      switch (msg) {
437      case WM_INITDIALOG:      case WM_INITDIALOG:
# Line 457  keyedit_addrevoker_dlg_proc (HWND dlg, U Line 448  keyedit_addrevoker_dlg_proc (HWND dlg, U
448          SetForegroundWindow (dlg);          SetForegroundWindow (dlg);
449          break;          break;
450    
     case WM_DESTROY:      
         break;  
   
451      case WM_SYSCOMMAND:      case WM_SYSCOMMAND:
452          if (LOWORD (wparam) == SC_CLOSE)          if (LOWORD (wparam) == SC_CLOSE)
453              EndDialog (dlg, FALSE);              EndDialog (dlg, FALSE);
# Line 467  keyedit_addrevoker_dlg_proc (HWND dlg, U Line 455  keyedit_addrevoker_dlg_proc (HWND dlg, U
455    
456      case WM_COMMAND:      case WM_COMMAND:
457          switch (LOWORD (wparam)) {          switch (LOWORD (wparam)) {
458          case IDOK:                    case IDOK:
459              if( !GetDlgItemText( dlg, IDC_ADDREV_KEYLIST, uid, sizeof uid-1 ) ) {              if (!GetDlgItemText_utf8 (dlg, IDC_ADDREV_KEYLIST, &uid)) {
460                  msg_box( dlg, _("Please select a user ID."), _("Add Revoker"), MB_ERR );                  msg_box (dlg, _("Please select a user ID."), _("Add Revoker"), MB_ERR);
461                  return FALSE;                  return FALSE;
462              }              }
463              utf8_uid = native_to_utf8 (uid);          
464              ke = create_GpgKeyEdit (cb->keyid);              ke = create_GpgKeyEdit (cb->keyid);
465              if (cb->pass)              if (cb->pass)
466                  ke->setPassphrase (cb->pass);                  ke->setPassphrase (cb->pass);
467              else              else
468                  ke->setNoPassphrase (true);                  ke->setNoPassphrase (true);
469              err = ke->addDesignatedRevoker (utf8_uid);              err = ke->addDesignatedRevoker (uid);
             free_if_alloc (utf8_uid);  
470              delete ke;              delete ke;
471                safe_free (uid);
472              if (err) {              if (err) {
473                  msg_box (dlg, gpgme_strerror (err), _("Add Revoker"), MB_ERR);                  msg_box (dlg, gpgme_strerror (err), _("Add Revoker"), MB_ERR);
474                  return TRUE;                  return TRUE;
# Line 513  keyedit_adduid_dlg_proc (HWND dlg, UINT Line 501  keyedit_adduid_dlg_proc (HWND dlg, UINT
501      GpgKeyEdit *ke;      GpgKeyEdit *ke;
502      char *utf8_name = NULL;      char *utf8_name = NULL;
503      char *utf8_comment = NULL;      char *utf8_comment = NULL;
504      char name[128], email[128], comment[128];      char email[128];
505      int rc;      int rc;
506            
507      switch (msg) {      switch (msg) {
# Line 538  keyedit_adduid_dlg_proc (HWND dlg, UINT Line 526  keyedit_adduid_dlg_proc (HWND dlg, UINT
526          switch ( LOWORD( wparam ) )  {          switch ( LOWORD( wparam ) )  {
527          case IDOK:          case IDOK:
528              keygen = (keygen_cb_t)ctx->opaque;              keygen = (keygen_cb_t)ctx->opaque;
529              rc = GetDlgItemText (dlg, IDC_ADDUID_NAME, name, sizeof name-1);              rc = GetDlgItemText_utf8 (dlg, IDC_ADDUID_NAME, &utf8_name);
530              if (!rc || rc < 5) {              if (!rc || rc < 5) {
531                  msg_box( dlg, _("Please enter a name (min. 5 chars.)"), _("UserID"), MB_ERR );                  msg_box (dlg, _("Please enter a name (min. 5 chars.)"),
532                             _("UserID"), MB_ERR);
533                    free_if_alloc (utf8_name);
534                  return FALSE;                  return FALSE;
535              }              }
536              if (strchr (name, '@')) {              if (strchr (utf8_name, '@')) {
537                  msg_box( dlg, _("Please enter the email address in the email field and not in the name field"), _("UserID"), MB_INFO );                  msg_box (dlg, _("Please enter the email address in the email field and not in the name field"),
538                             _("UserID"), MB_INFO);
539                  return FALSE;                  return FALSE;
540              }              }
541                                      
542              if( !GetDlgItemText( dlg, IDC_ADDUID_EMAIL, email, sizeof email -1 ) ) {              if( !GetDlgItemText (dlg, IDC_ADDUID_EMAIL, email, sizeof (email) -1)) {
543                  msg_box( dlg, _("Please enter an email address."), _("UserID"), MB_ERR );                  msg_box( dlg, _("Please enter an email address."), _("UserID"), MB_ERR );
544                  return FALSE;                  return FALSE;
545              }              }
# Line 557  keyedit_adduid_dlg_proc (HWND dlg, UINT Line 548  keyedit_adduid_dlg_proc (HWND dlg, UINT
548                  return FALSE;                  return FALSE;
549              }              }
550                            
551              rc = GetDlgItemText (dlg, IDC_ADDUID_COMMENT,              rc = GetDlgItemText_utf8 (dlg, IDC_ADDUID_COMMENT, &utf8_comment);
                                  comment, sizeof comment -1);  
             if (rc > 0)  
                 utf8_comment = native_to_utf8 (comment);  
             utf8_name = native_to_utf8 (name);        
552    
553              ke = create_GpgKeyEdit (ctx->keyid);              ke = create_GpgKeyEdit (ctx->keyid);
554              if (ctx->is_protected)              if (ctx->is_protected)
# Line 598  init_keysize_box (HWND dlg, int ctlid) Line 585  init_keysize_box (HWND dlg, int ctlid)
585  {  {
586      const char *sizelist[] = {      const char *sizelist[] = {
587          "1024", "1536",          "1024", "1536",
588          "2048", "2560",          "2048", "3072",
         "3072", "3854",  
589          "4096", NULL          "4096", NULL
590      };      };
591      int i;      int i;
# Line 621  get_keysize_from_box (HWND dlg, int ctli Line 607  get_keysize_from_box (HWND dlg, int ctli
607      if (pos == CB_ERR)      if (pos == CB_ERR)
608          return -1;          return -1;
609      SendDlgItemMessage (dlg, ctlid, CB_GETLBTEXT, pos, (LPARAM)(char*)buf);      SendDlgItemMessage (dlg, ctlid, CB_GETLBTEXT, pos, (LPARAM)(char*)buf);
610      return atol (buf);      return atoi (buf);
611  }  }
612    
613    
# Line 742  keyedit_addsubkey_dlg_proc (HWND dlg, UI Line 728  keyedit_addsubkey_dlg_proc (HWND dlg, UI
728    
729              err = ke->addSubkey ((gpgme_pubkey_algo_t)index, size, valid);              err = ke->addSubkey ((gpgme_pubkey_algo_t)index, size, valid);
730              keygen->fpr = get_subkey_keyid (ctx->keyid);              keygen->fpr = get_subkey_keyid (ctx->keyid);
731              keygen_cb_dlg_destroy ();              keygen_cb_dlg_destroy (1);
             keygen_cb (NULL, NULL, 0, 0, 0); /* flush */  
732              if (err)              if (err)
733                  msg_box (dlg, gpgme_strerror (err), _("Add Subkey"), MB_ERR);                  msg_box (dlg, gpgme_strerror (err), _("Add Subkey"), MB_ERR);
734              else {              else {
# Line 1086  listview_ctrl_t Line 1071  listview_ctrl_t
1071  subkey_list_init (HWND dlg, winpt_key_t k)  subkey_list_init (HWND dlg, winpt_key_t k)
1072  {  {
1073      LV_ITEM lvi;      LV_ITEM lvi;
     gpgme_key_t key;  
1074      gpgme_subkey_t sub;      gpgme_subkey_t sub;
1075      struct listview_column_s cols[] = {      struct listview_column_s cols[] = {
1076          {0, 80, (char *)_("Description")},          {0, 80, (char *)_("Description")},
# Line 1103  subkey_list_init (HWND dlg, winpt_key_t Line 1087  subkey_list_init (HWND dlg, winpt_key_t
1087      listview_ctrl_t lv;      listview_ctrl_t lv;
1088      char buf[256], tmp[128];      char buf[256], tmp[128];
1089      const char *t;      const char *t;
1090      int nkeys = 0, rc = 0, i, bits;          int nkeys = 0, i, bits;
1091    
1092      if (get_pubkey (k->keyid, &key)) {      nkeys = count_subkeys (k->ctx);
         msg_box (dlg, _("Could not find key."), _("Key Edit"), MB_ERR);  
         return NULL;  
     }  
     if (!k->ctx)  
         k->ctx = key;  
     nkeys = count_subkeys (key);  
1093      if( !nkeys ) {      if( !nkeys ) {
1094          msg_box (dlg, _("No subkey(s) found."), _("Key Edit"), MB_ERR);          msg_box (dlg, _("No subkey(s) found."), _("Key Edit"), MB_ERR);
1095          return NULL;          return NULL;
1096      }      }
1097                    
1098      rc  = listview_new( &lv );      listview_new (&lv, GetDlgItem (dlg, IDC_KEYEDIT_KEYLIST));
1099      if( rc )      for (i = 0; cols[i].fieldname != NULL; i++)
1100          BUG( dlg );          listview_add_column (lv, &cols[i]);
           
     lv->ctrl = GetDlgItem( dlg, IDC_KEYEDIT_KEYLIST );  
     for( i = 0; cols[i].fieldname != NULL; i++ )      
         listview_add_column( lv, &cols[i] );  
1101                    
1102      for( i = 0; i < nkeys; i++ ) {      for( i = 0; i < nkeys; i++ ) {
1103          listview_add_item( lv, "" );          listview_add_item( lv, "" );
1104          listview_add_sub_item( lv, 0, 1, "" );          listview_add_sub_item( lv, 0, 1, "" );
1105          memset( &lvi, 0, sizeof lvi );          memset( &lvi, 0, sizeof lvi );
1106          lvi.mask = LVIF_PARAM;            lvi.mask = LVIF_PARAM;  
1107          lvi.lParam = (LPARAM)key;          lvi.lParam = (LPARAM)k->ctx;
1108          if( ListView_SetItem( lv->ctrl, &lvi ) == FALSE )          if( ListView_SetItem( lv->ctrl, &lvi ) == FALSE )
1109              return NULL;              return NULL;
1110      }      }
1111                    
1112      listview_set_ext_style( lv );      listview_set_ext_style( lv );
1113      for( i = 0, sub = key->subkeys; i < nkeys; i++, sub = sub->next ) {      for( i = 0, sub = k->ctx->subkeys; i < nkeys; i++, sub = sub->next ) {
1114          memset( buf, 0, sizeof buf );          memset( buf, 0, sizeof buf );
1115    
1116          bits = sub->length;          bits = sub->length;
# Line 1190  static listview_ctrl_t Line 1164  static listview_ctrl_t
1164  userid_list_init (HWND dlg, winpt_key_t k)  userid_list_init (HWND dlg, winpt_key_t k)
1165  {  {
1166      listview_ctrl_t lv = NULL;      listview_ctrl_t lv = NULL;
     gpgme_key_t key;  
1167      gpgme_key_sig_t ks;      gpgme_key_sig_t ks;
1168      gpgme_user_id_t u;      struct native_uid_s *u;
1169      int nuids = 0, rc, j, u_attr;      int nuids = 0, j, u_attr;
1170      struct listview_column_s cols[] = {      struct listview_column_s cols[] = {
1171          {0,  72, (char *)_("Validity")},          {0,  72, (char *)_("Validity")},
1172          {1, 150, (char *)_("Name")},          {1, 150, (char *)_("Name")},
# Line 1202  userid_list_init (HWND dlg, winpt_key_t Line 1175  userid_list_init (HWND dlg, winpt_key_t
1175          {0, 0, 0}          {0, 0, 0}
1176      };          };    
1177      const char *attr;      const char *attr;
   
     if (get_pubkey (k->keyid, &key)) {  
         msg_box (dlg, _("Could not find key."), _("Key Edit"), MB_ERR);  
         return NULL;  
     }  
1178            
1179      nuids = count_userids (key);      nuids = count_userids (k->ctx);
1180      if (!nuids) {      if (!nuids) {
1181          msg_box (dlg, _("No user ID(s) found."), _("Key Edit"), MB_ERR);          msg_box (dlg, _("No user ID(s) found."), _("Key Edit"), MB_ERR);
1182          return NULL;          return NULL;
1183      }      }
1184                    
1185      rc = listview_new (&lv);      listview_new (&lv, GetDlgItem (dlg, IDC_KEYEDIT_UIDLIST));
     if (rc)  
         BUG (dlg);  
     lv->ctrl = GetDlgItem( dlg, IDC_KEYEDIT_UIDLIST );  
1186      for( j = 0; cols[j].fieldname != NULL; j++ )      for( j = 0; cols[j].fieldname != NULL; j++ )
1187          listview_add_column( lv, &cols[j] );          listview_add_column (lv, &cols[j]);
1188                    
1189      for( j = 0; j < nuids; j++ ) {                for (j = 0; j < nuids; j++) {
1190          listview_add_item( lv, " " );          listview_add_item (lv, " ");
1191          listview_add_sub_item( lv, 0, 1, " " );                  listview_add_sub_item (lv, 0, 1, " " );        
1192      }      }
1193    
1194      listview_set_ext_style (lv);      listview_set_ext_style (lv);
1195      for (j = 0, u=key->uids; j < nuids; u=u->next, j++) {      for (j = 0, u=k->ext->uids; j < nuids; u=u->next, j++) {
1196          if (u->revoked)          if (u->revoked)
1197              attr = _("Revoked");              attr = _("Revoked");
1198          else {          else {
1199              u_attr = (int)u->validity;              u_attr = (int)u->validity;
1200              attr = get_key_trust2 (NULL, u_attr, 0, 0);              attr = get_key_trust2 (NULL, u_attr, 0, 0);
1201          }          }
1202          listview_add_sub_item( lv, j, 0, (char *)attr );                  listview_add_sub_item (lv, j, UID_COL_VALID, (char *)attr);
   
1203          /* XXX: add comment if available */          /* XXX: add comment if available */
1204          attr = u->name;          listview_add_sub_item (lv, j, UID_COL_NAME,
1205          if (attr) {                                 u->name? u->name : _("Invalid user ID"));
1206              char *uid = utf8_to_native (attr);          if (u->email)
1207              if (uid) {              listview_add_sub_item (lv, j, UID_COL_EMAIL, u->email);
                 listview_add_sub_item (lv, j, 1, uid);  
                 free (uid);  
             }  
         }  
         else  
             listview_add_sub_item (lv, j, 1, _("Invalid user ID"));  
         attr = u->email;  
         if (attr)  
             listview_add_sub_item (lv, j, 2, attr);  
1208    
1209          ks = get_selfsig (u, k->keyid, 1);          ks = get_selfsig (u->signatures, k->keyid, 1);
1210          if (ks)          if (ks)
1211              listview_add_sub_item (lv, j, 3, get_key_created (ks->timestamp));              listview_add_sub_item (lv, j, UID_COL_CREATION,
1212                                       get_key_created (ks->timestamp));
1213      }      }
1214      if( !k->key_pair ) {      if( !k->key_pair ) {
1215          CheckDlgButton( dlg, IDC_KEYUID_ADD, BST_INDETERMINATE );          CheckDlgButton (dlg, IDC_KEYUID_ADD, BST_INDETERMINATE);
1216          CheckDlgButton( dlg, IDC_KEYUID_REVOKE, BST_INDETERMINATE );              CheckDlgButton (dlg, IDC_KEYUID_REVOKE, BST_INDETERMINATE);
1217      }      }
1218      return lv;      return lv;
1219  }  }
# Line 1324  do_show_help (HWND dlg) Line 1280  do_show_help (HWND dlg)
1280           "SIGN      \t\tsign a user-id (exportable)\r\n"           "SIGN      \t\tsign a user-id (exportable)\r\n"
1281           "LSIGN     \t\tsign a user-id (non-exportable)\r\n"           "LSIGN     \t\tsign a user-id (non-exportable)\r\n"
1282           "CLEAN     \t\tremove unusable signatures from key\r\n"           "CLEAN     \t\tremove unusable signatures from key\r\n"
1283             "MINIMIZE  \t\tremove all signatures from key\r\n"
1284           ));           ));
1285      msg_box (dlg, helptext, _("Key Edit Help"), MB_OK);      msg_box (dlg, helptext, _("Key Edit Help"), MB_OK);
1286  }  }
# Line 1727  BOOL CALLBACK Line 1684  BOOL CALLBACK
1684  showpref_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)  showpref_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
1685  {  {
1686      static keyedit_cb_t cb = NULL;      static keyedit_cb_t cb = NULL;
1687      gpg_uid_info_t inf=NULL;      gpg_uid_info_t inf=NULL, u;
1688      gpgme_key_t key;      gpgme_key_t key;
1689      char buf[128];      char buf[128];
1690      int pos;      int pos;
# Line 1738  showpref_dlg_proc (HWND dlg, UINT msg, W Line 1695  showpref_dlg_proc (HWND dlg, UINT msg, W
1695          if (!cb)          if (!cb)
1696              BUG (NULL);              BUG (NULL);
1697          key = (gpgme_key_t)cb->opaque;          key = (gpgme_key_t)cb->opaque;
1698          _snprintf (buf, sizeof (buf)-1, "%s <%s>",          listview_get_item_text (cb->lv, cb->lv_pos,
1699                      key->uids->name, key->uids->email);                                  UID_COL_EMAIL, buf, sizeof (buf)-1);
1700          SetDlgItemText (dlg, IDC_SHOWPREF_INFO, buf);          pos = do_find_userid (cb->keyid, buf, NULL, &inf);
1701          pos = do_find_userid (cb->keyid, key->uids->email, NULL, &inf);          if (pos < 0 || !inf) {
         if (inf) {  
             const char *prefs = inf->prefs;  
             if (prefs && *prefs) {  
                 if (parse_preflist (dlg, prefs) <= 0)  
                     pos = -1;  
             }  
             else  
                 pos = -1;  
1702              gpg_uid_info_release (inf);              gpg_uid_info_release (inf);
1703              if (pos == -1) {              EndDialog (dlg, FALSE);
1704                  msg_box (dlg, _("No preferences available."), _("Key Edit"), MB_ERR);              break;
1705                  EndDialog (dlg, TRUE);          }
1706            for (u=inf; u; u = u->next) {
1707                if (u->index == pos && u->prefs && *u->prefs) {
1708                    _snprintf (buf, sizeof (buf)-1, "%s", u->name);
1709                    SetDlgItemText (dlg, IDC_SHOWPREF_INFO, buf);
1710                    if (parse_preflist (dlg, u->prefs) <= 0)
1711                        pos = -1;
1712                    if (u->flags.mdc)
1713                        CheckDlgButton (dlg, IDC_SHOWPREF_MDC, BST_CHECKED);
1714                    break;
1715              }              }
1716              if (inf->flags.mdc)          }
1717                  CheckDlgButton (dlg, IDC_SHOWPREF_MDC, BST_CHECKED);          gpg_uid_info_release (inf);
1718            if (pos == -1) {        
1719                msg_box (dlg, _("No preferences available."), _("Key Edit"), MB_ERR);
1720                EndDialog (dlg, FALSE);
1721                break;
1722          }          }
1723          SetDlgItemText (dlg, IDC_SHOWPREF_MDC, _("MDC feature"));          SetDlgItemText (dlg, IDC_SHOWPREF_MDC, _("MDC feature"));
1724          SetDlgItemText (dlg, IDC_SHOWPREF_PREFINF, _("Preferences"));          SetDlgItemText (dlg, IDC_SHOWPREF_PREFINF, _("Preferences"));
# Line 1770  showpref_dlg_proc (HWND dlg, UINT msg, W Line 1732  showpref_dlg_proc (HWND dlg, UINT msg, W
1732          case IDOK:          case IDOK:
1733              EndDialog (dlg, TRUE);              EndDialog (dlg, TRUE);
1734              break;              break;
1735    
1736            case IDCANCEL:
1737                EndDialog (dlg, FALSE);
1738                break;
1739          }          }
1740          break;          break;
1741      }      }
# Line 1781  static int Line 1747  static int
1747  do_editkey_showpref (winpt_key_t k, HWND dlg, listview_ctrl_t lv)  do_editkey_showpref (winpt_key_t k, HWND dlg, listview_ctrl_t lv)
1748  {  {
1749      struct keyedit_cb_s cb;      struct keyedit_cb_s cb;
1750        char status[32];
1751    
1752      if (k->is_v3)      if (k->is_v3)
1753          return TRUE;          return TRUE;
# Line 1789  do_editkey_showpref (winpt_key_t k, HWND Line 1756  do_editkey_showpref (winpt_key_t k, HWND
1756          msg_box (dlg, _("Please select a user ID."), _("Key Edit"), MB_ERR);          msg_box (dlg, _("Please select a user ID."), _("Key Edit"), MB_ERR);
1757          return FALSE;          return FALSE;
1758      }      }
   
1759      memset (&cb, 0, sizeof (cb));      memset (&cb, 0, sizeof (cb));
1760      cb.opaque = k->ctx;      cb.opaque = k->ctx;
1761      cb.keyid = k->keyid;      cb.keyid = k->keyid;
1762        cb.lv = lv;
1763        cb.lv_pos = listview_get_curr_pos (lv);
1764    
1765        listview_get_item_text (lv, cb.lv_pos, UID_COL_VALID,
1766                                status, sizeof (status)-1);
1767        if (!strcmp (status, _("Revoked")))
1768            return TRUE;
1769        
1770      DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_KEYEDIT_SHOWPREF, dlg,      DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_KEYEDIT_SHOWPREF, dlg,
1771                      showpref_dlg_proc, (LPARAM)&cb);                      showpref_dlg_proc, (LPARAM)&cb);
1772      return TRUE;      return TRUE;
# Line 1942  get_default_key (void) Line 1916  get_default_key (void)
1916    
1917    
1918  static void  static void
1919    do_editkey_minimize (winpt_key_t k, HWND dlg)
1920    {
1921        gpgme_error_t err;
1922        GpgKeyEdit *ke;
1923    
1924        ke = create_GpgKeyEdit (k->keyid);
1925        err = ke->minimizeKey ();
1926        if (err)
1927            msg_box (dlg, gpgme_strerror (err), _("Key Edit"), MB_ERR);
1928        else {
1929            msg_box (dlg, _("Finished to compact key."), _("Key Edit"), MB_OK);
1930            k->update = 1;
1931        }
1932        delete ke;
1933    }
1934    
1935    
1936    static void
1937  do_editkey_clean (winpt_key_t k, HWND dlg)  do_editkey_clean (winpt_key_t k, HWND dlg)
1938  {  {
1939      gpgme_error_t err;      gpgme_error_t err;
# Line 2042  lookup_cmd (HWND dlg) Line 2034  lookup_cmd (HWND dlg)
2034  }  }
2035    
2036    
2037    
2038    gpgme_error_t key_get_revokers (winpt_key_t key, int reload,
2039                                    gpg_desig_rev_t *r_rev);
2040    
2041    /* Check if the key supports designated revokers and if
2042        secret keys exist to generate such a revoke cert. */
2043    static bool
2044    check_desig_rev (winpt_key_t key)
2045    {
2046        gpg_desig_rev_t rev, u;
2047        struct winpt_key_s sk;
2048    
2049        if (!key->ext->gloflags.has_desig_rev)
2050            return false;
2051        key_get_revokers (key, 0, &rev);
2052        for (u = rev; u; u = u->next) {
2053            memset (&sk, 0, sizeof (sk));
2054            if (!winpt_get_seckey (u->fpr+32, &sk))
2055                return true;
2056        }
2057        return false;
2058    }
2059    
2060    
2061    /* Use the gpg --desig-revoker command to create a revocation
2062       cert for a key that lists our key as a designated revoker. */
2063    static void
2064    gen_desig_revoke_cert (winpt_key_t key, HWND dlg)
2065    {
2066        const char *warn;
2067        char *inf, *p;
2068        int id;
2069    
2070        inf = km_key_get_info (key, 0);
2071        warn = _("Your keys is listed as a designated revoker for the key\n\n"
2072                 "%s\n\n"
2073                 "Are you sure you want to create a revocation certificate\n"
2074                 "which allow to revoke the key listed above?");
2075        p = new char[strlen (inf)+1+strlen (warn)+1];
2076        sprintf (p, warn, inf);
2077        free_if_alloc (inf);
2078    
2079        id = msg_box (dlg, p, _("Key Edit"), MB_YESNO|MB_ICONWARNING);
2080        free_if_alloc (p);
2081        if (id == IDNO)
2082            return;
2083    
2084        key->internal = 1;
2085        DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_KEYREVOKE, dlg,
2086                        key_revoke_dlg_proc, (LPARAM)key);
2087    }
2088    
2089    
2090  /* Dialog box procedure for the edit key dialog. */  /* Dialog box procedure for the edit key dialog. */
2091  BOOL CALLBACK  BOOL CALLBACK
2092  keyedit_main_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)  keyedit_main_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
# Line 2096  keyedit_main_dlg_proc (HWND dlg, UINT ms Line 2141  keyedit_main_dlg_proc (HWND dlg, UINT ms
2141          SetDlgItemText (dlg, IDC_KEYEDIT_CMDINF, _("Command>"));          SetDlgItemText (dlg, IDC_KEYEDIT_CMDINF, _("Command>"));
2142          SetDlgItemText (dlg, IDCANCEL, _("&Close"));          SetDlgItemText (dlg, IDCANCEL, _("&Close"));
2143          SetDlgItemText (dlg, IDC_KEYEDIT_HELP, _("&Help"));          SetDlgItemText (dlg, IDC_KEYEDIT_HELP, _("&Help"));
2144            SetDlgItemText (dlg, IDC_KEYEDIT_REVOKE, _("&Revoke..."));
2145            if (!check_desig_rev (k))
2146                ShowWindow (GetDlgItem (dlg, IDC_KEYEDIT_REVOKE), SW_HIDE);
2147          SetWindowText (dlg, _("Key Edit"));          SetWindowText (dlg, _("Key Edit"));
2148          SetForegroundWindow (dlg);          SetForegroundWindow (dlg);
2149          center_window (dlg, NULL);          center_window (dlg, NULL);
# Line 2156  keyedit_main_dlg_proc (HWND dlg, UINT ms Line 2204  keyedit_main_dlg_proc (HWND dlg, UINT ms
2204                                                      lvuid, cmd);                                                      lvuid, cmd);
2205                              break;                              break;
2206              case CMD_CLEAN: do_editkey_clean (k, dlg);              case CMD_CLEAN: do_editkey_clean (k, dlg);
2207                case CMD_MINIMIZE: do_editkey_minimize (k, dlg);
2208              }              }
2209              break;              break;
2210                
2211          case IDCANCEL:          case IDCANCEL:
2212              EndDialog (dlg, FALSE);              EndDialog (dlg, FALSE);
2213              break;              break;
# Line 2166  keyedit_main_dlg_proc (HWND dlg, UINT ms Line 2215  keyedit_main_dlg_proc (HWND dlg, UINT ms
2215          case IDC_KEYEDIT_HELP:          case IDC_KEYEDIT_HELP:
2216              do_show_help (dlg);              do_show_help (dlg);
2217              break;              break;
2218    
2219            case IDC_KEYEDIT_REVOKE:
2220                gen_desig_revoke_cert (k, dlg);
2221                break;
2222          }          }
2223          break;          break;
2224      }      }

Legend:
Removed from v.201  
changed lines
  Added in v.211

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26