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

Diff of /trunk/Src/wptKeyManagerDlg.cpp

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

revision 2 by twoaday, Mon Jan 31 11:02:21 2005 UTC revision 22 by twoaday, Wed Aug 10 11:33:35 2005 UTC
# Line 1  Line 1 
1  /* wptKeyManagerDlg.cpp - WinPT Key Manager  /* wptKeyManagerDlg.cpp - WinPT Key Manager
2   *      Copyright (C) 2000-2004 Timo Schulz   *      Copyright (C) 2000-2005 Timo Schulz
3   *      Copyright (C) 2004 Andreas Jobs   *      Copyright (C) 2004 Andreas Jobs
4   *   *
5   * This file is part of WinPT.   * This file is part of WinPT.
# Line 43  Line 43 
43  #define WINDOWCLASS_SEPARATOR_CHILD "WINPT_SEP_CHILD"  #define WINDOWCLASS_SEPARATOR_CHILD "WINPT_SEP_CHILD"
44  #define SEPARATOR_HEIGHT            5  #define SEPARATOR_HEIGHT            5
45    
46  int treeview_add_item (HWND tree, HTREEITEM parent, const char * text);  void km_dump_key (gpgme_key_t key);
47    
48    //int treeview_add_item (HWND tree, HTREEITEM parent, const char * text);
49    
50  static subclass_s keylist_proc;  static subclass_s keylist_proc;
51  static int km_index = -1;  static int km_index = -1;
# Line 80  struct mybuttons myb[] = { Line 82  struct mybuttons myb[] = {
82  };  };
83    
84    
85    #ifndef VK_F
86    #define VK_F 70
87    #endif
88    #ifndef VK_A
89    #define VK_A 65
90    #endif
91    #ifndef VK_C
92    #define VK_C 67
93    #endif
94    #ifndef VK_P
95    #define VK_P 80
96    #endif
97    
98  static BOOL CALLBACK  static BOOL CALLBACK
99  keylist_subclass_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)  keylist_subclass_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
100  {  {
101      switch (msg)      struct listview_ctrl_s lv;
102      {  
103        switch (msg) {
104      case WM_LBUTTONDBLCLK:      case WM_LBUTTONDBLCLK:
105          send_cmd_id( keylist_proc.dlg, ID_KEYMISC_PROPS );          send_cmd_id (keylist_proc.dlg, ID_KEYMISC_PROPS);
106          break;          break;
107                    
108      case WM_KEYUP:      case WM_KEYUP:
109          int virt_key = (int)wparam;          int virt_key = (int)wparam;
110          if (virt_key == VK_SPACE)          switch (virt_key) {
111          {          case VK_SPACE:
112              send_cmd_id( keylist_proc.dlg, ID_KEYMISC_PROPS );              send_cmd_id( keylist_proc.dlg, ID_KEYMISC_PROPS );
113              break;              break;
114          }          
115          if (virt_key == VK_DELETE)          case VK_DELETE:
         {  
116              send_cmd_id( keylist_proc.dlg, ID_KEYMISC_DELETE );              send_cmd_id( keylist_proc.dlg, ID_KEYMISC_DELETE );
117              break;              break;
118          }          
119          if (virt_key == VK_INSERT)          case VK_INSERT:
         {  
120              send_cmd_id (keylist_proc.dlg, ID_KEYMISC_PASTE);              send_cmd_id (keylist_proc.dlg, ID_KEYMISC_PASTE);
121              break;              break;
122    
123            case VK_A:
124                if (GetAsyncKeyState (VK_CONTROL)) {
125                    lv.ctrl = GetDlgItem (keylist_proc.dlg, IDC_KEYMISC_KEYLIST);
126                    listview_select_all (&lv);
127                }
128                break;
129                
130            case VK_C:
131                if (GetAsyncKeyState (VK_CONTROL)) {
132                    lv.ctrl = GetDlgItem (keylist_proc.dlg, IDC_KEYMISC_KEYLIST);
133                    km_index = listview_get_curr_pos (&lv);
134                    km_clip_export (keylist_proc.dlg, &lv);
135                }
136                break;
137    
138            case VK_P:
139                if (GetAsyncKeyState (VK_CONTROL)) {
140                    km_index = -1;
141                    km_clip_import (keylist_proc.dlg);
142                }
143                break;
144    
145            case VK_F:
146                if (GetAsyncKeyState (VK_CONTROL)) {
147                    lv.ctrl = GetDlgItem (keylist_proc.dlg, IDC_KEYMISC_KEYLIST);
148                    km_find_key (dlg, &lv);
149                }
150                break;
151          }          }
152          break;          break;
153      }      }
# Line 495  popup_gpg_readonly (HWND dlg, HMENU hm) Line 538  popup_gpg_readonly (HWND dlg, HMENU hm)
538  static void  static void
539  menu_gpg_readonly (HWND dlg, HMENU hm, int id)  menu_gpg_readonly (HWND dlg, HMENU hm, int id)
540  {  {
541      int key_resids[] =      int key_resids[] = {
     {  
542          ID_KEYMISC_SIGN,          ID_KEYMISC_SIGN,
543          ID_KEYMISC_DELETE,          ID_KEYMISC_DELETE,
544          ID_KEYMISC_REVCERT,          ID_KEYMISC_REVCERT,
# Line 509  menu_gpg_readonly (HWND dlg, HMENU hm, i Line 551  menu_gpg_readonly (HWND dlg, HMENU hm, i
551          ID_KEYMISC_NEWKEY,          ID_KEYMISC_NEWKEY,
552          0,          0,
553      };      };
554      int edit_resids[] =      int edit_resids[] = {
     {  
555          ID_KEYMISC_PASTE,          ID_KEYMISC_PASTE,
556          ID_KEYMISC_OT,          ID_KEYMISC_OT,
557          ID_KEYMISC_EDITKEY,          ID_KEYMISC_EDITKEY,
# Line 522  menu_gpg_readonly (HWND dlg, HMENU hm, i Line 563  menu_gpg_readonly (HWND dlg, HMENU hm, i
563            
564      if (gpg_read_only == 0)      if (gpg_read_only == 0)
565          return;          return;
566      switch (id)      switch (id) {
     {  
567      case 0: return;      case 0: return;
568      case 3: resids = key_resids; break;      case 3: resids = key_resids; break;
569      case 1: resids = edit_resids;break;      case 1: resids = edit_resids;break;
# Line 534  menu_gpg_readonly (HWND dlg, HMENU hm, i Line 574  menu_gpg_readonly (HWND dlg, HMENU hm, i
574  }  }
575    
576    
577    static char*
578    gen_export_filename (const char *keyid)
579    {
580        gpgme_key_t key;
581        const char *s;
582        char *p;
583    
584        if (get_pubkey (keyid, &key))
585            return m_strdup (keyid);
586        s = gpgme_key_get_string_attr (key, GPGME_ATTR_NAME, NULL, 0);
587        if (!s)
588            return m_strdup (keyid);
589        p = new char[strlen (s) + 8];
590        if (!p)
591            BUG (0);
592        sprintf (p, "%s.asc", s);
593        for (size_t i=0; i < strlen (p); i++) {
594            if (p[i] == ' ' || p[i] == ':' || p[i] == '?' || p[i] == '|')
595                p[i] = '_';
596        }
597        return p;
598    }
599    
600    
601    static void
602    update_key (listview_ctrl_t lv, int pos, const char *keyid, int keypair)
603    {
604        gpgme_key_t key;
605    
606        keycache_update (0, keyid);
607        if (keypair)
608            keycache_update (1, keyid);
609    
610        /* because we replaced the key item, we need to update the
611           address of the pointer in the ListView control. */
612        get_pubkey (keyid, &key);
613        keylist_upd_key (lv, pos, key);
614    }
615    
616    
617    
618  BOOL CALLBACK  BOOL CALLBACK
619  keymanager_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)  keymanager_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
620  {  {
# Line 545  keymanager_dlg_proc (HWND dlg, UINT msg, Line 626  keymanager_dlg_proc (HWND dlg, UINT msg,
626      HWND kl;      HWND kl;
627      HMENU hm;      HMENU hm;
628      gpgme_keycache_t c;      gpgme_keycache_t c;
629      gpgme_key_t pk;      gpgme_key_t key;
630      km_group_cb_s gcb;          /*km_group_cb_s gcb; XXX */
631        struct genkey_s genkey;
632      struct winpt_key_s k = {0};      struct winpt_key_s k = {0};
633      struct http_file_s * http;      struct URL_ctx_s *url;
634      refresh_cache_s rcs = {0};      refresh_cache_s rcs = {0};
635      char keyid[48], uid[128], type[32], * q;      char keyid[48], uid[128], type[32], * name;
636      const char *t, * host;      const char *t, * host;
637      u16 port = 0;      u16 port = 0;
638      int idx = 0, i=0, rc;      int idx = 0, i=0, rc;
# Line 618  keymanager_dlg_proc (HWND dlg, UINT msg, Line 700  keymanager_dlg_proc (HWND dlg, UINT msg,
700                  BUG( NULL );                  BUG( NULL );
701              }              }
702          }          }
703            #if 0
704          km_groups_new( &gc, GetDlgItem( dlg, IDC_KEYMISC_GROUP ) );          km_groups_new( &gc, GetDlgItem( dlg, IDC_KEYMISC_GROUP ) );
705          km_groups_load( gc );          km_groups_load( gc );
706            #endif
707          SetForegroundWindow( dlg );          SetForegroundWindow( dlg );
708                    
709          kmi->statbar = CreateStatusWindow( WS_CHILD | WS_VISIBLE | CCS_BOTTOM, "status bar", dlg, 100000 );          kmi->statbar = CreateStatusWindow( WS_CHILD | WS_VISIBLE | CCS_BOTTOM, "status bar", dlg, 100000 );
# Line 763  keymanager_dlg_proc (HWND dlg, UINT msg, Line 847  keymanager_dlg_proc (HWND dlg, UINT msg,
847              break;              break;
848    
849          case NM_RCLICK:          case NM_RCLICK:
850              if (notify->idFrom == IDC_KEYMISC_KEYLIST)              if (notify->idFrom == IDC_KEYMISC_KEYLIST) {
             {  
851                  if (listview_get_curr_pos (kmi->lv) == -1)                  if (listview_get_curr_pos (kmi->lv) == -1)
852                      return TRUE; /* Popup only when a item was selected */                      return TRUE; /* Popup only when a item was selected */
853                  do_check_cache (kmi->lv, dlg, kmi->statbar);                  do_check_cache (kmi->lv, dlg, kmi->statbar);
# Line 778  keymanager_dlg_proc (HWND dlg, UINT msg, Line 861  keymanager_dlg_proc (HWND dlg, UINT msg,
861                  set_menu_text( popup, ID_KEYCTX_RECVFROM, _("Refresh from Keyserver") );                  set_menu_text( popup, ID_KEYCTX_RECVFROM, _("Refresh from Keyserver") );
862              #endif              #endif
863                  idx = listview_get_curr_pos (kmi->lv);                  idx = listview_get_curr_pos (kmi->lv);
864                  if (km_check_for_seckey (kmi->lv, idx, &i) && i == 0)                  if (km_check_for_seckey (kmi->lv, idx, &i))
                 {  
865                      set_menu_state (popup, ID_KEYCTX_SETDEFKEY, MF_ENABLED);                      set_menu_state (popup, ID_KEYCTX_SETDEFKEY, MF_ENABLED);
866                    if (i == 0)
867                      set_menu_state (popup, ID_KEYCTX_MAXTRUST, MF_ENABLED);                      set_menu_state (popup, ID_KEYCTX_MAXTRUST, MF_ENABLED);
868                  }                  if (!km_check_for_seckey (kmi->lv, idx, NULL)) {
                 if( !km_check_for_seckey( kmi->lv, idx, NULL ) ) {  
869                      set_menu_state( popup, ID_KEYCTX_REV, MF_DISABLED|MF_GRAYED );                      set_menu_state( popup, ID_KEYCTX_REV, MF_DISABLED|MF_GRAYED );
870                      set_menu_state( popup, ID_KEYCTX_ADDKEY, MF_DISABLED|MF_GRAYED );                      set_menu_state( popup, ID_KEYCTX_ADDKEY, MF_DISABLED|MF_GRAYED );
871                      set_menu_state( popup, ID_KEYCTX_ADDUID, MF_DISABLED|MF_GRAYED );                      set_menu_state( popup, ID_KEYCTX_ADDUID, MF_DISABLED|MF_GRAYED );
# Line 796  keymanager_dlg_proc (HWND dlg, UINT msg, Line 878  keymanager_dlg_proc (HWND dlg, UINT msg,
878                  {                  {
879                      /* PGP 2 keys, version 3 have no no support for photo-id's,                      /* PGP 2 keys, version 3 have no no support for photo-id's,
880                         designated revokers and secondary keys. */                         designated revokers and secondary keys. */
881                      set_menu_state( popup, ID_KEYCTX_ADDKEY, MF_DISABLED|MF_GRAYED );                      set_menu_state (popup, ID_KEYCTX_ADDKEY, MF_DISABLED|MF_GRAYED);
882                      set_menu_state( popup, ID_KEYCTX_ADDREV, MF_DISABLED|MF_GRAYED );                      set_menu_state (popup, ID_KEYCTX_ADDREV, MF_DISABLED|MF_GRAYED);
883                      set_menu_state( popup, ID_KEYCTX_ADDPHOTO, MF_DISABLED|MF_GRAYED );                      set_menu_state (popup, ID_KEYCTX_ADDPHOTO, MF_DISABLED|MF_GRAYED);
884                  }                  }
885                  if( km_get_key_status( kmi->lv, idx ) & KM_FLAG_DISABLED )                  if( km_get_key_status( kmi->lv, idx ) & KM_FLAG_DISABLED )
886                      set_menu_state( popup, ID_KEYCTX_DISABLE, MF_DISABLED|MF_GRAYED );                      set_menu_state( popup, ID_KEYCTX_DISABLE, MF_DISABLED|MF_GRAYED );
# Line 806  keymanager_dlg_proc (HWND dlg, UINT msg, Line 888  keymanager_dlg_proc (HWND dlg, UINT msg,
888                      set_menu_state( popup, ID_KEYCTX_ENABLE, MF_DISABLED|MF_GRAYED );                      set_menu_state( popup, ID_KEYCTX_ENABLE, MF_DISABLED|MF_GRAYED );
889                  if (km_get_key_status (kmi->lv, idx) & KM_FLAG_REVOKED)                  if (km_get_key_status (kmi->lv, idx) & KM_FLAG_REVOKED)
890                      set_menu_state (popup, ID_KEYCTX_SIGN, MF_DISABLED|MF_GRAYED);                      set_menu_state (popup, ID_KEYCTX_SIGN, MF_DISABLED|MF_GRAYED);
891                  if( mapi_init() )                  if (mapi_init())
892                      set_menu_state( popup, ID_KEYCTX_SENDMAIL, MF_DISABLED|MF_GRAYED );                      set_menu_state (popup, ID_KEYCTX_SENDMAIL, MF_DISABLED|MF_GRAYED);
893                    /* Override 'Default Keyserver' with the actual name. */
894                    host = kserver_get_hostname (0, -1, &port);
895                    set_menu_text (popup, ID_KEYCTX_KS_DEFAULT, host);
896                  popup_gpg_readonly (dlg, popup);                  popup_gpg_readonly (dlg, popup);
897                  TrackPopupMenu( popup, TPM_RIGHTALIGN, p.x, p.y, 0, dlg, NULL );                  TrackPopupMenu (popup, TPM_RIGHTALIGN, p.x, p.y, 0, dlg, NULL);
898                  DestroyMenu( popup );                  DestroyMenu (popup);
899                  DestroyMenu( hm );                  DestroyMenu (hm);
900                  return TRUE;                  return TRUE;
901              }              }
902                #if 0 /* XXX */
903              if( notify->idFrom == IDC_KEYMISC_GROUP ) {              if( notify->idFrom == IDC_KEYMISC_GROUP ) {
904                  HWND tree = GetDlgItem( dlg, IDC_KEYMISC_GROUP );                  HWND tree = GetDlgItem( dlg, IDC_KEYMISC_GROUP );
905                  if( TreeView_GetSelection( tree ) ) {                  if( TreeView_GetSelection( tree ) ) {
# Line 830  keymanager_dlg_proc (HWND dlg, UINT msg, Line 916  keymanager_dlg_proc (HWND dlg, UINT msg,
916                      return TRUE;                      return TRUE;
917                  }                  }
918              }              }
919                #endif
920              break;              break;
921    
922          case LVN_COLUMNCLICK:          case LVN_COLUMNCLICK:
# Line 895  keymanager_dlg_proc (HWND dlg, UINT msg, Line 982  keymanager_dlg_proc (HWND dlg, UINT msg,
982              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_MAIL, GetDesktopWindow (),              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_MAIL, GetDesktopWindow (),
983                              winpt_mail_proc, NULL);                              winpt_mail_proc, NULL);
984              break;              break;
985                        
986            case ID_KEYMISC_FIND:
987                km_find_key (dlg, kmi->lv);
988                break;
989    
990          case ID_KEYMISC_DELETE:          case ID_KEYMISC_DELETE:
991              if (km_delete_keys (kmi->lv, dlg))              if (km_delete_keys (kmi->lv, dlg))
992                  return FALSE;                  return FALSE;
             refresh_keys = 1;  
993              return TRUE;              return TRUE;
994                            
995          case ID_KEYMISC_SIGN:          case ID_KEYMISC_SIGN:        
             gpgme_key_t key;  
   
996              if ( (idx = listview_get_curr_pos( kmi->lv )) == -1 ) {              if ( (idx = listview_get_curr_pos( kmi->lv )) == -1 ) {
997                  msg_box( dlg, _("Please select a key."),  _("Key Manager"),                  msg_box( dlg, _("Please select a key."),  _("Key Manager"),
998                           MB_ERR );                           MB_ERR );
999                  return FALSE;                  return FALSE;
1000              }              }
1001              if( !km_check_key_status( kmi->lv, idx ) )              if (km_check_key_status (kmi->lv, idx))
1002                  return FALSE;                  return FALSE;
1003              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid );              key = (gpgme_key_t)listview_get_item2 (kmi->lv, idx);
1004              listview_get_item_text( kmi->lv, idx, 2, type, sizeof type -1 );              listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1005              rc = get_pubkey( keyid, &key );              memset (&k, 0, sizeof (k));
1006              if( rc )              k.ctx = key;
1007                  BUG( dlg );              k.keyid = keyid;
1008              if( key )              dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYSIGN, dlg,
1009                  dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYSIGN, dlg,                                keysign_dlg_proc, (LPARAM)&k,
1010                                    keysign_dlg_proc, (LPARAM)key,                                _("Key Signing"), IDS_WINPT_KEYSIGN);
1011                                    _("Key Signing"), IDS_WINPT_KEYSIGN);              if (k.update)
1012                    update_key (kmi->lv, idx, k.keyid, 0);
1013              return TRUE;              return TRUE;
1014                            
1015          case ID_KEYMISC_REVCERT:          case ID_KEYMISC_REVCERT:
# Line 945  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1034  keymanager_dlg_proc (HWND dlg, UINT msg,
1034                  }                  }
1035              }              }
1036                            
1037              q = km_quote_uid (uid);              name = km_quote_uid (uid);
1038                memset (&k, 0, sizeof (k));
1039              k.key_pair = 1;              k.key_pair = 1;
1040              k.keyid = keyid;              k.keyid = keyid;
1041              k.uid = q;              k.uid = name;
1042              k.is_protected = km_check_if_protected( kmi->lv, idx );              k.is_protected = km_check_if_protected( kmi->lv, idx );
1043              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYREVOKE, dlg,              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYREVOKE, dlg,
1044                               key_revoke_dlg_proc, (LPARAM)&k,                               key_revoke_dlg_proc, (LPARAM)&k,
1045                               _("Key Revocation"), IDS_WINPT_KEYREVOKE );                               _("Key Revocation"), IDS_WINPT_KEYREVOKE );
1046              free_if_alloc( q );              free_if_alloc (name);
1047              return TRUE;              return TRUE;
1048                            
1049          case ID_KEYMISC_TRUSTPATH:          case ID_KEYMISC_TRUSTPATH:
# Line 968  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1058  keymanager_dlg_proc (HWND dlg, UINT msg,
1058                  msg_box( dlg, _("It does not make any sense with a key pair!"), _("Key Manager"), MB_OK );                  msg_box( dlg, _("It does not make any sense with a key pair!"), _("Key Manager"), MB_OK );
1059                  return FALSE;                  return FALSE;
1060              }              }
1061                memset (&k, 0, sizeof (k));
1062              k.keyid = keyid;              k.keyid = keyid;
1063              k.uid = uid;              k.uid = uid;
1064              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYTRUST, dlg,              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYTRUST, dlg,
# Line 976  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1067  keymanager_dlg_proc (HWND dlg, UINT msg,
1067              return TRUE;              return TRUE;
1068                            
1069          case ID_KEYMISC_CHECKSIGS:          case ID_KEYMISC_CHECKSIGS:
1070              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos (kmi->lv);
1071              if( idx == -1 ) {              if( idx == -1 ) {
1072                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );
1073                  return FALSE;                  return FALSE;
1074              }              }
1075              listview_get_item_text( kmi->lv, idx, 0, uid, sizeof uid-1 );              listview_get_item_text (kmi->lv, idx, 0, uid, DIM (uid)-1);
1076              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid-1 );              listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1077                memset (&k, 0, sizeof (k));
1078              k.keyid = keyid;              k.keyid = keyid;
1079              k.uid = uid;              k.uid = uid;
1080              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYSIG, dlg,              k.ctx = (gpgme_key_t)listview_get_item2 (kmi->lv, idx);
1081                dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYSIG, dlg,
1082                                keysig_dlg_proc, (LPARAM)&k,                                keysig_dlg_proc, (LPARAM)&k,
1083                                _("Key Signature List" ), IDS_WINPT_KEYSIG );                                _("Key Signature List" ), IDS_WINPT_KEYSIG);
1084              return TRUE;              return TRUE;
1085                            
1086          case ID_KEYMISC_PROPS:          case ID_KEYMISC_PROPS:
# Line 996  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1089  keymanager_dlg_proc (HWND dlg, UINT msg,
1089                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );
1090                  return FALSE;                  return FALSE;
1091              }              }
1092              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid -1 );              listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1093              listview_get_item_text( kmi->lv, idx, 2, type, sizeof type -1 );              listview_get_item_text (kmi->lv, idx, 2, type, DIM (type)-1);
1094                memset (&k, 0, sizeof (k));
1095              k.key_pair = 0;              k.key_pair = 0;
1096              k.keyid = keyid;              k.keyid = keyid;
1097              if( !strcmp( type, "pub/sec" ) || !strcmp( type, "pub/crd" ) )              if( !strcmp( type, "pub/sec" ) || !strcmp( type, "pub/crd" ) )
# Line 1007  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1101  keymanager_dlg_proc (HWND dlg, UINT msg,
1101              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYPROPS, dlg,              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYPROPS, dlg,
1102                                keyprops_dlg_proc, (LPARAM)&k,                                keyprops_dlg_proc, (LPARAM)&k,
1103                                _("Key Properties"), IDS_WINPT_KEYPROPS );                                _("Key Properties"), IDS_WINPT_KEYPROPS );
1104              if (k.callback.new_val != 0)              if (k.callback.new_val != 0) {
             {  
1105                  t = get_key_trust_str (k.callback.new_val);                  t = get_key_trust_str (k.callback.new_val);
1106                  listview_add_sub_item (kmi->lv, idx, 6, t);                  listview_add_sub_item (kmi->lv, idx, 6, t);
1107              }              }
# Line 1040  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1133  keymanager_dlg_proc (HWND dlg, UINT msg,
1133              return TRUE;              return TRUE;
1134                            
1135          case ID_KEYMISC_REBUILD:          case ID_KEYMISC_REBUILD:
1136              rcs.kr_reload = rcs.kr_update = 1;              rcs.kr_reload = rcs.kr_update = 0;
1137              rcs.tr_update = 1;              rcs.tr_update = 1;
1138              DialogBoxParam( glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, dlg,              DialogBoxParam( glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, dlg,
1139                              keycache_dlg_proc, (LPARAM)&rcs );                              keycache_dlg_proc, (LPARAM)&rcs );
# Line 1051  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1144  keymanager_dlg_proc (HWND dlg, UINT msg,
1144              return TRUE;              return TRUE;
1145                            
1146          case ID_KEYMISC_NEWKEY:          case ID_KEYMISC_NEWKEY:
1147              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYGEN, dlg,              memset (&genkey, 0, sizeof (genkey));
1148                                keygen_dlg_proc, NULL, _("Key Generation"),              dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYGEN, dlg,
1149                                IDS_WINPT_KEYGEN );                                keygen_dlg_proc, (LPARAM)&genkey, _("Key Generation"),
1150              if( keycache_get_reload( ) )                                IDS_WINPT_KEYGEN);
1151                  send_cmd_id( dlg, ID_KEYMISC_RECACHE );              if (genkey.newkey != NULL)
1152                    keylist_add_key (kmi->lv, KEYLIST_LIST, genkey.newkey);
1153              return TRUE;              return TRUE;
1154    
1155          case ID_KEYMISC_CARDNEW:          case ID_KEYMISC_CARDNEW:
# Line 1066  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1160  keymanager_dlg_proc (HWND dlg, UINT msg,
1160              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_CARD_KEYGEN, dlg,              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_CARD_KEYGEN, dlg,
1161                                card_keygen_dlg_proc, NULL, _("Card Key Generation"),                                card_keygen_dlg_proc, NULL, _("Card Key Generation"),
1162                                IDS_WINPT_CARD_KEYGEN );                                IDS_WINPT_CARD_KEYGEN );
1163                /* XXX: use new code */
1164              if( keycache_get_reload() )              if( keycache_get_reload() )
1165                  send_cmd_id( dlg, ID_KEYMISC_RECACHE );                  send_cmd_id( dlg, ID_KEYMISC_RECACHE );
1166              return TRUE;              return TRUE;
1167    
1168          case ID_KEYMISC_KEYWIZARD:          case ID_KEYMISC_KEYWIZARD:
1169              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYWIZARD, dlg,              memset (&genkey, 0, sizeof (genkey));
1170                                keygen_wizard_dlg_proc, NULL, _("Key Generation Wizard"),              dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYWIZARD, dlg,
1171                                IDS_WINPT_KEYWIZARD );                                keygen_wizard_dlg_proc, (LPARAM)&genkey, _("Key Generation Wizard"),
1172              if( keycache_get_reload() )                                IDS_WINPT_KEYWIZARD);
1173                  send_cmd_id( dlg, ID_KEYMISC_RECACHE );              if (genkey.newkey != NULL)
1174                    keylist_add_key (kmi->lv, KEYLIST_LIST, genkey.newkey);
1175              return TRUE;              return TRUE;
1176                            
1177          case ID_KEYMISC_SENDRECV:          case ID_KEYMISC_SENDRECV:
# Line 1097  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1193  keymanager_dlg_proc (HWND dlg, UINT msg,
1193              return TRUE;              return TRUE;
1194                            
1195          case ID_KEYMISC_IMPORT:          case ID_KEYMISC_IMPORT:
1196              t = get_filename_dlg( dlg, FILE_OPEN, _("Choose Name of the Key File"), NULL, NULL );              t = get_filename_dlg (dlg, FILE_OPEN, _("Choose Name of the Key File"), NULL, NULL);
1197              if( t )              if (t)
1198                  km_file_import( dlg, t );                  km_file_import (dlg, t);
1199              return TRUE;              return TRUE;
1200    
1201          case ID_KEYMISC_IMPORT_HTTP:          case ID_KEYMISC_IMPORT_HTTP:
1202              http = (struct http_file_s *)get_http_file_dlg (dlg);              url = (struct URL_ctx_s*)get_http_file_dlg (dlg);
1203              if (http->cancel == 0)              if (url->cancel == 0)
1204                  km_http_import (dlg, http->url);                  km_http_import (dlg, url->url);
1205              delete http;              delete url; url=NULL;
1206              break;              break;
1207                            
1208          case ID_KEYMISC_EXPORT:          case ID_KEYMISC_EXPORT:
1209              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos (kmi->lv);
1210              if( idx == -1 ) {              if (idx == -1) {
1211                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );
1212                  return FALSE;                  return FALSE;
1213              }              }
1214              if( listview_count_items( kmi->lv, 1 ) > 1 )              if (listview_count_items (kmi->lv, 1) > 1)
1215                  strcpy( keyid, _("Exported_GPG_Keys.asc") );                  name = m_strdup ("Exported_GPG_Keys.asc");
1216              else {              else {
1217                  listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid-1 );                  listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1218                  strcat( keyid, ".asc" );                  name = gen_export_filename (keyid);
1219              }              }
1220              t = get_filename_dlg( dlg, FILE_SAVE, _("Choose Name for Key File"), NULL, keyid );              t = get_filename_dlg (dlg, FILE_SAVE, _("Choose Name for Key File"), NULL, name);
1221              if( !t || overwrite_file( t ) == 0 )              free_if_alloc (name);
1222                if (!t || overwrite_file (t) == 0)
1223                  return FALSE;                  return FALSE;
1224              km_file_export( dlg, kmi->lv, t );              km_file_export (dlg, kmi->lv, t);
1225              return TRUE;              return TRUE;
1226                            
1227          case ID_KEYMISC_EXPORT_PRIVKEY:          case ID_KEYMISC_EXPORT_PRIVKEY:
# Line 1152  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1249  keymanager_dlg_proc (HWND dlg, UINT msg,
1249              if( idx == IDYES ) {              if( idx == IDYES ) {
1250                  idx = listview_get_curr_pos( kmi->lv );                  idx = listview_get_curr_pos( kmi->lv );
1251                  listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof (keyid)-8 );                  listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof (keyid)-8 );
1252                  strcat( keyid, ".sec.asc" );                  name = gen_export_filename (keyid);
1253                  t = get_filename_dlg( dlg, 1, _("Choose Name for Key File"), NULL, keyid );                  t = get_filename_dlg (dlg, 1, _("Choose Name for Key File"), NULL, name);
1254                  if( t && !file_exist_check( t ) ) {                  if (t && !file_exist_check (t)) {
1255                      idx = log_box( _("Key Manager"), MB_INFO|MB_YESNO,                      idx = log_box (_("Key Manager"), MB_INFO|MB_YESNO,
1256                                     _("File %s already exists.\nOverwrite?"), t );                                     _("File %s already exists.\nOverwrite?"), t);
1257                      if( idx == IDNO )                      if (idx == IDNO)
1258                          return FALSE;                          return FALSE;
1259                  }                  }
1260                  if( t )                  if (t)
1261                      km_privkey_export( dlg, kmi->lv, t );                      km_privkey_export (dlg, kmi->lv, t);
1262              }              }
1263              break;              break;
1264    
# Line 1183  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1280  keymanager_dlg_proc (HWND dlg, UINT msg,
1280    
1281          case ID_KEYMISC_EDITKEY:          case ID_KEYMISC_EDITKEY:
1282              idx = listview_get_curr_pos (kmi->lv);              idx = listview_get_curr_pos (kmi->lv);
1283              if( idx == -1 )              if (idx == -1)
1284                  break;                  break;
1285              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid-1 );              listview_get_item_text (kmi->lv, idx, 1, keyid, sizeof (keyid)-1);
1286              k.is_protected = km_check_if_protected( kmi->lv, idx );              /* XXX: pub/crd = secret key does not work */
1287              k.key_pair = km_check_for_seckey( kmi->lv, idx, NULL );              memset (&k, 0, sizeof (k));
1288                k.is_protected = km_check_if_protected (kmi->lv, idx);
1289                k.key_pair = km_check_for_seckey (kmi->lv, idx, NULL);
1290              k.keyid = keyid;              k.keyid = keyid;
1291              k.flags = km_get_key_status( kmi->lv, idx );              k.is_v3 = km_key_is_v3 (kmi->lv, idx);
1292              dialog_box_param( glob_hinst, (LPCTSTR)IDD_WINPT_KEYEDIT, dlg,              k.flags = km_get_key_status (kmi->lv, idx);
1293                dialog_box_param (glob_hinst, (LPCTSTR)IDD_WINPT_KEYEDIT, dlg,
1294                                keyedit_main_dlg_proc, (LPARAM)&k,                                keyedit_main_dlg_proc, (LPARAM)&k,
1295                                _("Key Edit"), IDS_KEYCTX_EDIT );                                _("Key Edit"), IDS_KEYCTX_EDIT);
1296                if (k.update)
1297                    update_key (kmi->lv,  idx, keyid, 1);
1298              break;              break;
1299                            
         case ID_GROUP_NEW:  
             memset( &gcb, 0, sizeof gcb );  
             gcb.gc = gc;  
             dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_GROUP, glob_hwnd,  
                              group_manager_dlg_proc, (LPARAM)&gcb, _("New Group"),  
                              IDS_WINPT_GROUP );  
             if( gcb.use_name )  
                 treeview_add_item( GetDlgItem(dlg, IDC_KEYMISC_GROUP), NULL, gcb.name );  
             return TRUE;  
               
1300          case ID_KEYMISC_COPY:          case ID_KEYMISC_COPY:
1301              km_index = listview_get_curr_pos( kmi->lv );              km_index = listview_get_curr_pos (kmi->lv);
1302              km_clip_export( dlg, kmi->lv );              km_clip_export (dlg, kmi->lv);
1303              break;              break;
1304                            
1305          case ID_KEYMISC_SELALL:          case ID_KEYMISC_SELALL:
# Line 1220  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1312  keymanager_dlg_proc (HWND dlg, UINT msg,
1312              break;              break;
1313                            
1314          case ID_KEYCTX_SETPREFKS:          case ID_KEYCTX_SETPREFKS:
1315              /* XXX: todo */              listview_get_item_text (kmi->lv, idx, 1, keyid, DIM(keyid)-1);
1316                memset (&k, 0, sizeof (k));
1317                k.keyid = keyid;
1318                keyedit_set_pref_keyserver (&k, dlg);
1319              break;              break;
1320    
1321          case ID_KEYMISC_REFRESH_KEYS:          case ID_KEYMISC_REFRESH_KEYS:
1322              if (listview_count_items (kmi->lv, 1) == 0)              if (listview_count_items (kmi->lv, 1) == 0) {
             {  
1323                  msg_box (dlg, _("No key was selected, select all by default."), _("Key Manager"), MB_INFO);                  msg_box (dlg, _("No key was selected, select all by default."), _("Key Manager"), MB_INFO);
1324                  listview_select_all (kmi->lv);                  listview_select_all (kmi->lv);
1325              }              }
# Line 1258  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1352  keymanager_dlg_proc (HWND dlg, UINT msg,
1352              break;              break;
1353    
1354          case ID_KEYCTX_SENDMAIL:          case ID_KEYCTX_SENDMAIL:
1355              km_send_to_mail_recipient( kmi->lv, dlg );              km_send_to_mail_recipient (kmi->lv, dlg);
1356              break;              break;
1357    
1358          case ID_KEYCTX_KS_DEFAULT:          case ID_KEYCTX_KS_DEFAULT:
# Line 1267  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1361  keymanager_dlg_proc (HWND dlg, UINT msg,
1361              break;              break;
1362    
1363          case ID_KEYCTX_ADDKEY:          case ID_KEYCTX_ADDKEY:
1364              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos (kmi->lv);
1365              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid - 1 );              listview_get_item_text( kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1366              k.key_pair = km_check_for_seckey( kmi->lv, idx, NULL );              memset (&k, 0, sizeof (k));
1367              k.is_protected = km_check_if_protected( kmi->lv, idx );              k.key_pair = km_check_for_seckey (kmi->lv, idx, NULL);
1368                k.is_protected = km_check_if_protected (kmi->lv, idx);
1369              k.keyid = keyid;              k.keyid = keyid;
1370              keyedit_add_subkey( &k, dlg, NULL );              keyedit_add_subkey (&k, dlg, NULL);
1371                if (k.update)
1372                    update_key (kmi->lv, idx, keyid, 1);
1373              break;              break;
1374    
1375          case ID_KEYCTX_ADDUID:          case ID_KEYCTX_ADDUID:
1376              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos (kmi->lv);
1377              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid-1 );              listview_get_item_text( kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1378              k.key_pair = km_check_for_seckey( kmi->lv, idx, NULL );              memset (&k, 0, sizeof (k));
1379              k.is_protected = km_check_if_protected( kmi->lv, idx );              k.key_pair = km_check_for_seckey (kmi->lv, idx, NULL);
1380                k.is_protected = km_check_if_protected (kmi->lv, idx);
1381              k.keyid = keyid;              k.keyid = keyid;
1382              keyedit_add_userid( &k, dlg, NULL );              keyedit_add_userid (&k, dlg, NULL);
1383                if (k.update)
1384                    update_key (kmi->lv, idx, keyid, 1);
1385              break;              break;
1386    
1387          case ID_KEYCTX_ADDREV:          case ID_KEYCTX_ADDREV:
1388              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos (kmi->lv);
1389              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid-1 );                    listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1390                memset (&k, 0, sizeof (k));
1391              k.keyid = keyid;              k.keyid = keyid;
1392              k.is_protected = km_check_if_protected( kmi->lv, idx );              k.is_protected = km_check_if_protected (kmi->lv, idx);
1393              k.key_pair = km_check_for_seckey( kmi->lv, idx, NULL );              k.key_pair = km_check_for_seckey( kmi->lv, idx, NULL );
1394              keyedit_add_revoker( &k, dlg );              keyedit_add_revoker (&k, dlg);
1395                if (k.update)
1396                    update_key (kmi->lv, idx, keyid, 1);
1397              break;              break;
1398    
1399          case ID_KEYCTX_ADDPHOTO:          case ID_KEYCTX_ADDPHOTO:
1400              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos (kmi->lv);
1401              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid-1 );              listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1402                memset (&k, 0, sizeof (k));
1403              k.keyid = keyid;              k.keyid = keyid;
1404              k.is_protected = km_check_if_protected( kmi->lv, idx );              k.is_protected = km_check_if_protected (kmi->lv, idx);
1405              k.key_pair = km_check_for_seckey( kmi->lv, idx, NULL );              k.key_pair = km_check_for_seckey (kmi->lv, idx, NULL);
1406              keyedit_add_photo( &k, dlg );              keyedit_add_photo (&k, dlg);
1407                if (k.update)
1408                    update_key (kmi->lv, idx, keyid, 1);
1409              break;              break;
1410    
1411          case ID_KEYCTX_KS_NL:          case ID_KEYCTX_KS_NL:
# Line 1334  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1440  keymanager_dlg_proc (HWND dlg, UINT msg,
1440    
1441          case ID_KEYCTX_FPR_COPY:          case ID_KEYCTX_FPR_COPY:
1442              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos( kmi->lv );
1443              listview_get_item_text( kmi->lv, idx, 1, uid, sizeof uid-1 );              key = (gpgme_key_t) listview_get_item2 (kmi->lv, idx);        
1444              get_pubkey( uid, &pk );              if (key) {
1445              if( pk ) {                  const char * s = get_key_fpr (key);
1446                  const char * s = get_key_fpr( pk );                  set_clip_text (NULL, s? s : "", s? strlen (s): 0);
                 set_clip_text( NULL, s? s : "", s? strlen( s ): 0 );  
1447              }              }
1448              break;              break;
1449    
# Line 1374  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1479  keymanager_dlg_proc (HWND dlg, UINT msg,
1479    
1480          case ID_KEYCTX_MAXTRUST:          case ID_KEYCTX_MAXTRUST:
1481              idx = listview_get_curr_pos (kmi->lv);              idx = listview_get_curr_pos (kmi->lv);
1482              km_set_implicit_trust (dlg, kmi->lv, idx);              listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1483                rc = km_set_implicit_trust (dlg, kmi->lv, idx);
1484                if (!rc)
1485                    update_key (kmi->lv, idx, keyid, 0);
1486              break;              break;
1487    
1488          case ID_KEYCTX_SETDEFKEY:          case ID_KEYCTX_SETDEFKEY:
1489              idx = listview_get_curr_pos (kmi->lv);              idx = listview_get_curr_pos (kmi->lv);
1490              if (km_check_key_status (kmi->lv, idx))              if (!km_check_key_status (kmi->lv, idx)) {
1491              {                  listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
                 listview_get_item_text (kmi->lv, idx, 1, keyid, sizeof keyid -1);  
1492                  rc = set_gnupg_default_key (keyid);                  rc = set_gnupg_default_key (keyid);
1493                  if (rc)                  if (rc)
1494                      msg_box( dlg, winpt_strerror (rc), _("Key Manager"), MB_ERR);                      msg_box( dlg, winpt_strerror (rc), _("Key Manager"), MB_ERR);
1495                  km_update_default_key_str (kmi->statbar, &km_def_pos);                  km_update_default_key_str (kmi->statbar, &km_def_pos);
1496              }              }
1497              break;              break;
1498    
1499            #if 0 /* XXX */
1500            case ID_GROUP_NEW:
1501                memset (&gcb, 0, sizeof (gcb));
1502                gcb.gc = gc;
1503                dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_GROUP, glob_hwnd,
1504                                 group_manager_dlg_proc, (LPARAM)&gcb, _("New Group"),
1505                                 IDS_WINPT_GROUP);
1506                if( gcb.use_name )
1507                    treeview_add_item( GetDlgItem(dlg, IDC_KEYMISC_GROUP), NULL, gcb.name );
1508                return TRUE;
1509                            
1510          case ID_GROUP_PASTE:          case ID_GROUP_PASTE:
1511              km_groups_add (gc, kmi->lv, km_index);              km_groups_add (gc, kmi->lv, km_index);
# Line 1396  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1514  keymanager_dlg_proc (HWND dlg, UINT msg,
1514          case ID_GROUP_DELETE:          case ID_GROUP_DELETE:
1515              km_groups_del (gc);              km_groups_del (gc);
1516              break;              break;
1517          }                #endif
1518            }
1519            
1520          break;          break;
1521      }      }
1522            

Legend:
Removed from v.2  
changed lines
  Added in v.22

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26