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

Diff of /trunk/Src/wptKeyPropsDlg.cpp

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

revision 42 by werner, Fri Oct 28 08:25:30 2005 UTC revision 208 by twoaday, Mon May 1 12:22:18 2006 UTC
# Line 1  Line 1 
1  /* wptKeyPropsDlg.cpp - WinPT key properties dialog  /* wptKeyPropsDlg.cpp - WinPT key properties dialog
2   *      Copyright (C) 2000, 2001, 2002, 2003, 2005 Timo Schulz   *      Copyright (C) 2000, 2001, 2002, 2003, 2005, 2006 Timo Schulz
3   *   *
4   * This file is part of WinPT.   * This file is part of WinPT.
5   *   *
# Line 17  Line 17 
17   * along with WinPT; if not, write to the Free Software Foundation,   * along with WinPT; if not, write to the Free Software Foundation,
18   * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA   * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19   */   */
   
20  #ifdef HAVE_CONFIG_H  #ifdef HAVE_CONFIG_H
21  #include <config.h>  #include <config.h>
22  #endif  #endif
23    
24  #include <windows.h>  #include <windows.h>
 #include <windows.h>  
25    
26  #include "../resource.h"  #include "resource.h"
27  #include "wptErrors.h"  #include "wptErrors.h"
28  #include "wptGPG.h"  #include "wptGPG.h"
29  #include "wptCommonCtl.h"  #include "wptCommonCtl.h"
# Line 53  do_check_key (gpgme_key_t key) Line 51  do_check_key (gpgme_key_t key)
51    
52  /* Convert a trust integer into a string representation. */  /* Convert a trust integer into a string representation. */
53  static const char*  static const char*
54  ownertrust_to_string (int val)  ownertrust_to_string (int val, bool is_keypair)
55  {  {
56      const char *inf;      const char *inf;
57      int id = val;      int id = val;
# Line 64  ownertrust_to_string (int val) Line 62  ownertrust_to_string (int val)
62      case 3: inf = _("I trust marginally"); break;      case 3: inf = _("I trust marginally"); break;
63      case 4: inf = _("I trust fully");      break;      case 4: inf = _("I trust fully");      break;
64      case 5:      case 5:
65      case 6: inf = _("I trust ultimately"); break;      case 6:
66            if (is_keypair)
67                inf = _("I trust ultimately (implicit)");
68            else
69                inf = _("I trust ultimately"); break;
70      default:inf = _("Unknown");            break;      default:inf = _("Unknown");            break;
71      }      }
72            
# Line 77  ownertrust_to_string (int val) Line 79  ownertrust_to_string (int val)
79  static const char*  static const char*
80  get_photo_tmpname (HWND dlg)  get_photo_tmpname (HWND dlg)
81  {  {
82      static char buf[64];      static char buf[MAX_PATH+128+1];
83        char name[64];
84    
85      _snprintf (buf, sizeof (buf)-1, "winpt_photo_%08lX.tmp", (DWORD)dlg);      _snprintf (name, sizeof (name)-1, "winpt_photo_%08lX.tmp", (DWORD)dlg);
86        get_temp_name (buf, DIM (buf), name);
87      return buf;      return buf;
88  }  }
89    
90    
91    static void
92    draw_nophoto_img (HWND dlg)
93    {
94        /*..
95        n = DrawText (hdc, "No Photo-ID", -1, &r, DT_LEFT);
96        ..*/
97    }
98    
99    
100  /* Load the photo from the key @key */  /* Load the photo from the key @key */
101  static int  static int
102  keyprops_load_photo (HWND dlg, gpgme_key_t key, gpgme_validity_t *r_valid)  keyprops_load_photo (HWND dlg, gpgme_key_t key, gpgme_validity_t *r_valid)
# Line 101  keyprops_load_photo (HWND dlg, gpgme_key Line 114  keyprops_load_photo (HWND dlg, gpgme_key
114          get_uat_validity (key->subkeys->keyid, &k.ext->attrib.validity);          get_uat_validity (key->subkeys->keyid, &k.ext->attrib.validity);
115      *r_valid = k.ext->attrib.validity;      *r_valid = k.ext->attrib.validity;
116    
117      if (!img || !imglen)      if (!img || !imglen) {
118            draw_nophoto_img (dlg);
119          return -1;          return -1;
120        }
121    
122      f = fopen (get_photo_tmpname (dlg), "wb");      f = fopen (get_photo_tmpname (dlg), "wb");
123      if (f) {      if (f) {
124          for (pos = 0; img[pos] != 0x10; pos++)          //for (pos = 0; img[pos] != 0x10; pos++)
125                  ;          //      ;
126          pos += 16;          pos += 16;
127          fwrite (img + pos, 1, imglen - pos, f);          fwrite (img + pos, 1, imglen - pos, f);
         fwrite (img, 1, imglen, f);  
128          fclose (f);          fclose (f);
129      }      }
130      return 0;      return 0;
# Line 157  get_validity (gpgme_key_t key) Line 172  get_validity (gpgme_key_t key)
172  static const char*  static const char*
173  get_pref_cipher (winpt_key_t k)  get_pref_cipher (winpt_key_t k)
174  {  {
     const char *sym_prefs=NULL;      
   
175      if (k->is_v3)      if (k->is_v3)
176          return "IDEA";          return "IDEA";
177      if (!k->ext->sym_prefs)      if (!k->ext->sym_prefs)
# Line 195  get_card_type (winpt_key_t k) Line 208  get_card_type (winpt_key_t k)
208  {      {    
209      static char buf[64];      static char buf[64];
210    
211      if (!k->ext->card_type)      if (!k->ext || !k->ext->card_type)
212          return "";          return "";
213      _snprintf (buf, sizeof (buf)-1, _("Card-Type: %s\r\n"), k->ext->card_type);      _snprintf (buf, sizeof (buf)-1, _("Card-Type: %s\r\n"), k->ext->card_type);
214      return buf;      return buf;
# Line 207  get_card_type (winpt_key_t k) Line 220  get_card_type (winpt_key_t k)
220  static void  static void
221  display_key_info (HWND dlg, winpt_key_t k, gpgme_key_t *r_key)  display_key_info (HWND dlg, winpt_key_t k, gpgme_key_t *r_key)
222  {  {
223      struct winpt_key_s k2;      gpgme_key_t key;
224      gpgme_key_t sk, key;      struct winpt_key_s pk, sk;
225      char info[512];      char info[512];
226      const char *inf;      const char *inf;
227      u32 created, expires;          DWORD created, expires;
228    
229      memset (&k2, 0, sizeof (k2));            memset (&pk, 0, sizeof (pk));
230      if (k->key_pair)      if (winpt_get_pubkey (k->keyid, &pk))
231          winpt_get_seckey (k->keyid, &k2);          BUG (0);
232      else          gpg_keycache_update_attr (pk.ext, KC_ATTR_PREFSYM, 0);
233          winpt_get_pubkey (k->keyid, &k2);      memset (&sk, 0, sizeof (sk));      
234      sk = k2.ctx;              if (k->key_pair && !winpt_get_seckey (k->keyid, &sk))
235      if (sk)          k->is_protected = sk.is_protected;
236          k->is_protected = k2.is_protected;      key = pk.ext->key;
237      if (get_pubkey (k->keyid, &key))      created = key->subkeys->timestamp;
238          BUG (0);          expires = key->subkeys->expires;
     created = key->subkeys->timestamp;    
     expires = key->subkeys->expires;      
239      _snprintf (info, DIM (info)-1,      _snprintf (info, DIM (info)-1,
240                 _("Type: %s\r\n"                 _("Type: %s\r\n"
241                 "Key ID: %s\r\n"                 "Key ID: %s\r\n"
242                 "Algorithm: %s\r\n"                 "Algorithm: %s\r\n"
243                 "Size: %s\r\n"                 "Size: %s bits\r\n"
244                 "Created: %s\r\n"                 "Created: %s\r\n"
245                 "Expires: %s\r\n"                 "Expires: %s\r\n"
246                 "Validity: %s\r\n"                 "Validity: %s\r\n"
# Line 242  display_key_info (HWND dlg, winpt_key_t Line 253  display_key_info (HWND dlg, winpt_key_t
253                 get_key_created (created),                 get_key_created (created),
254                 get_key_expire_date (expires),                 get_key_expire_date (expires),
255                 get_validity (key),                 get_validity (key),
256                 get_pref_cipher (&k2),                 get_pref_cipher (&pk),
257                 get_card_type (&k2));                 get_card_type (&sk));
258    
259      SetDlgItemText (dlg, IDC_KEYPROPS_INFO, info);      SetDlgItemText (dlg, IDC_KEYPROPS_INFO, info);
260      SetDlgItemText (dlg, IDC_KEYPROPS_FPR, get_key_fpr (key));        SetDlgItemText (dlg, IDC_KEYPROPS_FPR, get_key_fpr (key));  
261      inf = ownertrust_to_string (key->owner_trust);      inf = ownertrust_to_string (key->owner_trust, k->key_pair);
262      SetDlgItemText (dlg, IDC_KEYPROPS_OT, inf);      SetDlgItemText (dlg, IDC_KEYPROPS_OT, inf);
263    
264      *r_key = key;      *r_key = key;
# Line 261  keyprops_dlg_proc (HWND dlg, UINT msg, W Line 272  keyprops_dlg_proc (HWND dlg, UINT msg, W
272      static winpt_key_t k;      static winpt_key_t k;
273      static gpgme_key_t key;      static gpgme_key_t key;
274      gpgme_validity_t valid;      gpgme_validity_t valid;
     refresh_cache_s rcs = {0};  
275      const char *inf;      const char *inf;
     int cancel = 0;  
276      int rc;      int rc;
277            
278      /* XXX: static variable (k) prevent that the dialog can      /* XXX: static variable (k) prevent that the dialog can
# Line 273  keyprops_dlg_proc (HWND dlg, UINT msg, W Line 282  keyprops_dlg_proc (HWND dlg, UINT msg, W
282          if (!lparam)          if (!lparam)
283              dlg_fatal_error (dlg, "Could not get dialog param!");              dlg_fatal_error (dlg, "Could not get dialog param!");
284          k = (winpt_key_t)lparam;          k = (winpt_key_t)lparam;
         #ifndef LANG_DE  
285          SetWindowText (dlg, _("Key Properties"));          SetWindowText (dlg, _("Key Properties"));
286          SetDlgItemText (dlg, IDC_KEYPROPS_OT_CHANGE, _("&Change"));          SetDlgItemText (dlg, IDC_KEYPROPS_OT_CHANGE, _("&Change"));
287          SetDlgItemText (dlg, IDC_KEYPROPS_REVOKERS, _("&Revokers"));          SetDlgItemText (dlg, IDC_KEYPROPS_REVOKERS, _("&Revokers"));
288          SetDlgItemText (dlg, IDC_KEYPROPS_CHANGE_PWD, _("Change &Passwd"));          SetDlgItemText (dlg, IDC_KEYPROPS_CHANGE_PWD, _("Change &Password"));
289          SetDlgItemText (dlg, IDC_KEYPROPS_OTINF, _("Ownertrust"));          SetDlgItemText (dlg, IDC_KEYPROPS_OTINF, _("Ownertrust"));
290          #endif            
   
291          display_key_info (dlg, k, &key);          display_key_info (dlg, k, &key);
292          if (!keyprops_load_photo (dlg, key, &valid)) {          if (!keyprops_load_photo (dlg, key, &valid)) {
293              k->has_photo = 1;                k->has_photo = 1;  
# Line 291  keyprops_dlg_proc (HWND dlg, UINT msg, W Line 298  keyprops_dlg_proc (HWND dlg, UINT msg, W
298              EnableWindow (GetDlgItem (dlg, IDC_KEYPROPS_CHANGE_PWD), TRUE);              EnableWindow (GetDlgItem (dlg, IDC_KEYPROPS_CHANGE_PWD), TRUE);
299          if (check_for_desig_rev (key))          if (check_for_desig_rev (key))
300              EnableWindow (GetDlgItem (dlg, IDC_KEYPROPS_REVOKERS), TRUE);              EnableWindow (GetDlgItem (dlg, IDC_KEYPROPS_REVOKERS), TRUE);
301            if (key->revoked || key->expired)
302                EnableWindow (GetDlgItem (dlg, IDC_KEYPROPS_OT_CHANGE), FALSE);
303          center_window (dlg, NULL);          center_window (dlg, NULL);
304          SetForegroundWindow (dlg);                SetForegroundWindow (dlg);      
305          return TRUE;          return TRUE;
306    
307      case WM_DESTROY:      case WM_DESTROY:
308          unlink (get_photo_tmpname (dlg));          remove (get_photo_tmpname (dlg));
309          break;          break;
310                
311      case WM_PAINT:      case WM_PAINT:
# Line 306  keyprops_dlg_proc (HWND dlg, UINT msg, W Line 315  keyprops_dlg_proc (HWND dlg, UINT msg, W
315    
316      case WM_SYSCOMMAND:      case WM_SYSCOMMAND:
317          if (LOWORD (wparam) == SC_CLOSE)          if (LOWORD (wparam) == SC_CLOSE)
318              EndDialog (dlg, TRUE);              EndDialog (dlg, FALSE);
319          return FALSE;          return FALSE;
320                    
321      case WM_COMMAND:      case WM_COMMAND:
# Line 314  keyprops_dlg_proc (HWND dlg, UINT msg, W Line 323  keyprops_dlg_proc (HWND dlg, UINT msg, W
323          case IDOK:          case IDOK:
324              EndDialog (dlg, TRUE);              EndDialog (dlg, TRUE);
325              return TRUE;              return TRUE;
326    
327            case IDCANCEL:
328                EndDialog (dlg, FALSE);
329                return TRUE;
330                            
331          case IDC_KEYPROPS_OT_CHANGE:          case IDC_KEYPROPS_OT_CHANGE:
332              if (do_check_key (key)) {              if (do_check_key (key)) {
# Line 322  keyprops_dlg_proc (HWND dlg, UINT msg, W Line 335  keyprops_dlg_proc (HWND dlg, UINT msg, W
335                                  _("WinPT Warning"), MB_ERR);                                  _("WinPT Warning"), MB_ERR);
336                  return TRUE;                  return TRUE;
337              }              }
338              if( !k->key_pair && key->uids->validity < 3 ) {              if (!k->key_pair && key->uids->validity < 3) {
339                  rc = msg_box( dlg, _("This is a non-valid key.\n"                  rc = msg_box (dlg, _("This is a non-valid key.\n"
340                                       "Modifying the ownertrust has no effect on such keys.\n\n"                                       "Modifying the ownertrust has no effect on such keys.\n\n"
341                                       "Do you really want to continue?"),                                       "Do you really want to continue?"),
342                                       _("WinPT Warning"), MB_ICONWARNING|MB_YESNO );                                       _("WinPT Warning"), MB_ICONWARNING|MB_YESNO);
343                  if (rc == IDNO)                  if (rc == IDNO)
344                      return TRUE;                      return TRUE;
345              }              }
346              //GetDlgItemText (dlg, IDC_KEYPROPS_OT, info, sizeof info -1);              rc = dialog_box_param (glob_hinst,
347              dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYEDIT_OWNERTRUST,                                     (LPCSTR)IDD_WINPT_KEYEDIT_OWNERTRUST,
348                                dlg, (DLGPROC)keyedit_ownertrust_dlg_proc,                                      dlg, keyedit_ownertrust_dlg_proc,
349                                (LPARAM)k, _("Change Ownertrust"),                                     (LPARAM)k, _("Change Ownertrust"),
350                                IDS_WINPT_KEYEDIT_OWNERTRUST);                                      IDS_WINPT_KEYEDIT_OWNERTRUST);
351              if (k->callback.new_val == -1) { /* Cancel */              if (rc == FALSE) /* Cancel */
352                  EndDialog (dlg, FALSE);                  return TRUE;
                 break;  
             }  
353    
354              inf = ownertrust_to_string (k->callback.new_val);              inf = ownertrust_to_string (k->callback.new_val, k->key_pair);
355              SetDlgItemText (dlg, IDC_KEYPROPS_OT, inf);              SetDlgItemText (dlg, IDC_KEYPROPS_OT, inf);
356              msg_box (dlg, _("Ownertrust successfully changed."),              msg_box (dlg, _("Ownertrust successfully changed."),
357                       _("GnuPG Status"), MB_OK);                       _("GnuPG Status"), MB_OK);
358                            k->update = 1;
             /* XXX: modified ownertrust values can effect the entire  
                     WoT so we reload the cache. But this is very slow. */  
             memset (&rcs, 0, sizeof (rcs));  
             rcs.kr_reload = 1; rcs.kr_update = 1; /* reload only keylist */  
             DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, dlg,  
                             keycache_dlg_proc, (LPARAM)&rcs);  
359              return TRUE;              return TRUE;
360                            
361          case IDC_KEYPROPS_CHANGE_PWD:          case IDC_KEYPROPS_CHANGE_PWD:
# Line 358  keyprops_dlg_proc (HWND dlg, UINT msg, W Line 363  keyprops_dlg_proc (HWND dlg, UINT msg, W
363              return TRUE;              return TRUE;
364    
365          case IDC_KEYPROPS_REVOKERS:          case IDC_KEYPROPS_REVOKERS:
366              dialog_box_param (glob_hinst, (LPCTSTR)IDD_WINPT_KEYREVOKERS, dlg,              k->update = dialog_box_param (
367                                key_revokers_dlg_proc, (LPARAM)key,                  glob_hinst, (LPCTSTR)IDD_WINPT_KEYREVOKERS, dlg,
368                                _("Key Revokers"), IDS_WINPT_KEY_REVOKERS);                  key_revokers_dlg_proc, (LPARAM)k,
369                    _("Key Revokers"), IDS_WINPT_KEY_REVOKERS);
370              break;              break;
371          }          }
372      }      }

Legend:
Removed from v.42  
changed lines
  Added in v.208

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26