63 |
|
|
64 |
static subclass_s keylist_proc; |
static subclass_s keylist_proc; |
65 |
|
|
66 |
|
/* Handle to the global image list. */ |
67 |
HIMAGELIST glob_imagelist; |
HIMAGELIST glob_imagelist; |
68 |
|
|
69 |
struct km_info_s { |
struct km_info_s { |
72 |
int ypos_sep; |
int ypos_sep; |
73 |
int ypercent_sep; |
int ypercent_sep; |
74 |
|
|
75 |
|
/* Different kind of windows. */ |
76 |
HWND dlg; |
HWND dlg; |
77 |
HWND hwnd_sep; |
HWND hwnd_sep; |
78 |
HWND toolbar; |
HWND toolbar; |
81 |
listview_ctrl_t lv; |
listview_ctrl_t lv; |
82 |
int lv_idx; |
int lv_idx; |
83 |
int keylist_sortby; |
int keylist_sortby; |
84 |
|
int magic; |
85 |
}; |
}; |
86 |
|
|
87 |
/* Toolbar button structure. */ |
/* Toolbar button structure. */ |
102 |
|
|
103 |
static void km_gui_import (struct km_info_s *kmi, int cmd_id, void *param); |
static void km_gui_import (struct km_info_s *kmi, int cmd_id, void *param); |
104 |
|
|
105 |
|
|
106 |
/* Subclass the keylist listview control to allow extended commands. */ |
/* Subclass the keylist listview control to allow extended commands. */ |
107 |
static BOOL CALLBACK |
static BOOL CALLBACK |
108 |
keylist_subclass_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam) |
keylist_subclass_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam) |
212 |
/* Restore the width of the columns from the registry. |
/* Restore the width of the columns from the registry. |
213 |
If no bitstring was found, the default size is used. */ |
If no bitstring was found, the default size is used. */ |
214 |
int |
int |
215 |
restore_column_info (listview_ctrl_t hd) |
restore_column_info (struct km_info_s *kmi) |
216 |
{ |
{ |
217 |
WORD *buf; |
WORD *buf; |
218 |
HKEY root; |
HKEY root; |
219 |
DWORD type; |
DWORD type; |
220 |
DWORD size = hd->cols*sizeof (WORD), i; |
DWORD size = kmi->lv->cols*sizeof (WORD), i; |
221 |
LONG ec; |
LONG ec; |
222 |
|
|
223 |
ec = RegOpenKeyEx (HKEY_CURRENT_USER, "Software\\WinPT", 0, |
ec = RegOpenKeyEx (HKEY_CURRENT_USER, "Software\\WinPT", 0, |
229 |
if (!buf) |
if (!buf) |
230 |
BUG (NULL); |
BUG (NULL); |
231 |
ec = RegQueryValueEx (root, "KMColumnSize", NULL, &type, |
ec = RegQueryValueEx (root, "KMColumnSize", NULL, &type, |
232 |
(BYTE*)buf, &size); |
(BYTE*)buf, &size); |
|
RegCloseKey (root); |
|
233 |
if (ec != ERROR_SUCCESS) { |
if (ec != ERROR_SUCCESS) { |
234 |
|
RegCloseKey (root); |
235 |
free_if_alloc (buf); |
free_if_alloc (buf); |
236 |
return -1; |
return -1; |
237 |
} |
} |
244 |
} |
} |
245 |
} |
} |
246 |
for (i=0; i < size/2; i++) |
for (i=0; i < size/2; i++) |
247 |
listview_set_column_width (hd, i, buf[i]); |
listview_set_column_width (kmi->lv, i, buf[i]); |
248 |
free_if_alloc (buf); |
free_if_alloc (buf); |
249 |
|
|
250 |
|
size = sizeof (kmi->keylist_sortby); |
251 |
|
ec = RegQueryValueEx (root, "KMSortBy", NULL, &type, |
252 |
|
(BYTE*)&kmi->keylist_sortby, &size); |
253 |
|
if (ec != ERROR_SUCCESS) |
254 |
|
kmi->keylist_sortby = KEY_SORT_USERID; |
255 |
|
RegCloseKey (root); |
256 |
return 0; |
return 0; |
257 |
} |
} |
258 |
|
|
259 |
|
|
260 |
/* Save the current column width to the registry. */ |
/* Save the current column width to the registry. */ |
261 |
int |
int |
262 |
save_column_info (listview_ctrl_t hd) |
save_column_info (struct km_info_s *kmi) |
263 |
{ |
{ |
|
WORD *buf; |
|
264 |
HKEY root; |
HKEY root; |
265 |
|
WORD *buf; |
266 |
LONG ec; |
LONG ec; |
267 |
int i; |
int i; |
268 |
|
|
269 |
buf = new WORD[hd->cols]; |
buf = new WORD[kmi->lv->cols]; |
270 |
if (!buf) |
if (!buf) |
271 |
BUG (NULL); |
BUG (NULL); |
272 |
for (i=0; i < hd->cols; i++) { |
for (i=0; i < kmi->lv->cols; i++) { |
273 |
LVCOLUMN lvc; |
LVCOLUMN lvc; |
274 |
|
|
275 |
memset (&lvc, 0, sizeof (lvc)); |
memset (&lvc, 0, sizeof (lvc)); |
276 |
lvc.mask = LVCF_WIDTH; |
lvc.mask = LVCF_WIDTH; |
277 |
ListView_GetColumn (hd->ctrl, i, &lvc); |
ListView_GetColumn (kmi->lv->ctrl, i, &lvc); |
278 |
buf[i] = lvc.cx; |
buf[i] = lvc.cx; |
279 |
} |
} |
280 |
|
|
286 |
} |
} |
287 |
|
|
288 |
ec = RegSetValueEx (root, "KMColumnSize", 0, REG_BINARY, |
ec = RegSetValueEx (root, "KMColumnSize", 0, REG_BINARY, |
289 |
(const BYTE*)buf, 2*hd->cols); |
(const BYTE*)buf, 2*kmi->lv->cols); |
290 |
|
if (ec == ERROR_SUCCESS) { |
291 |
|
ec = RegSetValueEx (root, "KMSortBy", 0, REG_DWORD_BIG_ENDIAN, |
292 |
|
(const BYTE*)&kmi->keylist_sortby, |
293 |
|
sizeof (kmi->keylist_sortby)); |
294 |
|
} |
295 |
RegCloseKey (root); |
RegCloseKey (root); |
296 |
free_if_alloc (buf); |
free_if_alloc (buf); |
297 |
return ec == ERROR_SUCCESS? 0 : -1; |
return ec == ERROR_SUCCESS? 0 : -1; |
814 |
static void |
static void |
815 |
update_key (listview_ctrl_t lv, int pos, const char *keyid, int keypair) |
update_key (listview_ctrl_t lv, int pos, const char *keyid, int keypair) |
816 |
{ |
{ |
817 |
gpgme_key_t key; |
struct winpt_key_s key; |
818 |
|
|
819 |
keycache_update (0, keyid); |
keycache_update (0, keyid); |
820 |
if (keypair) |
if (keypair) |
822 |
|
|
823 |
/* because we replaced the key item, we need to update the |
/* because we replaced the key item, we need to update the |
824 |
address of the pointer in the ListView control. */ |
address of the pointer in the ListView control. */ |
825 |
get_pubkey (keyid, &key); |
memset (&key, 0, sizeof (key)); |
826 |
keylist_upd_key (lv, pos, key); |
winpt_get_pubkey (keyid, &key); |
827 |
|
keylist_upd_key (lv, pos, key.ext, key.ctx); |
828 |
keyring_check_last_access (); |
keyring_check_last_access (); |
829 |
} |
} |
830 |
|
|
1055 |
kc = keycache_get_ctx (1); |
kc = keycache_get_ctx (1); |
1056 |
while (!gpg_keycache_next_updated_key (kc, &ctx, &status)) { |
while (!gpg_keycache_next_updated_key (kc, &ctx, &status)) { |
1057 |
if (status == KC_FLAG_ADD) |
if (status == KC_FLAG_ADD) |
1058 |
keylist_add_key (kmi->lv, KEYLIST_LIST, ctx->key); |
keylist_add_key (kmi->lv, KEYLIST_LIST, ctx, ctx->key); |
1059 |
else { |
else { |
1060 |
pos = find_keypos (kmi->lv, ctx->key); |
pos = find_keypos (kmi->lv, ctx->key); |
1061 |
if (pos != -1) |
if (pos != -1) |
1062 |
keylist_upd_key (kmi->lv, pos, ctx->key); |
keylist_upd_key (kmi->lv, pos, ctx, ctx->key); |
1063 |
} |
} |
1064 |
} |
} |
1065 |
keylist_sort (kmi->lv, KEY_SORT_USERID); |
keylist_sort (kmi->lv, KEY_SORT_USERID); |
1142 |
struct km_info_s *kmi = NULL; |
struct km_info_s *kmi = NULL; |
1143 |
HWND kl; |
HWND kl; |
1144 |
HMENU hm; |
HMENU hm; |
1145 |
|
struct keycache_s *kci; |
1146 |
gpg_keycache_t c; |
gpg_keycache_t c; |
1147 |
gpgme_key_t key; |
gpgme_key_t key; |
1148 |
struct genkey_s genkey; |
struct genkey_s genkey; |
1212 |
do_center_window (dlg, kmi); |
do_center_window (dlg, kmi); |
1213 |
do_resize_window (dlg, kmi); |
do_resize_window (dlg, kmi); |
1214 |
update_ui_items (dlg, kmi->lv); |
update_ui_items (dlg, kmi->lv); |
1215 |
restore_column_info (kmi->lv); |
restore_column_info (kmi); |
1216 |
|
keylist_sort (kmi->lv, kmi->keylist_sortby); |
1217 |
|
|
1218 |
SetDlgItemText (dlg, IDC_KEYMISC_GTEXT, _("Groups")); |
SetDlgItemText (dlg, IDC_KEYMISC_GTEXT, _("Groups")); |
1219 |
SetClassLong (dlg, GCL_HICON, (LONG)LoadIcon (glob_hinst, |
SetClassLong (dlg, GCL_HICON, (LONG)LoadIcon (glob_hinst, |
1220 |
(LPCTSTR)IDI_WINPT)); |
(LPCTSTR)IDI_WINPT)); |
1221 |
SetForegroundWindow (dlg); |
SetForegroundWindow (dlg); |
1222 |
force_foreground_window (dlg, 1000); |
kmi->magic = SetTimer (dlg, 1, 1000, NULL); |
1223 |
return TRUE; |
return TRUE; |
1224 |
|
|
1225 |
|
case WM_TIMER: |
1226 |
|
KillTimer (dlg, kmi->magic); |
1227 |
|
SetForegroundWindow (dlg); |
1228 |
|
break; |
1229 |
|
|
1230 |
case WM_DESTROY: |
case WM_DESTROY: |
1231 |
save_column_info (kmi->lv); |
save_column_info (kmi); |
1232 |
if (kmi->lv) { |
if (kmi->lv) { |
1233 |
keylist_delete (kmi->lv); |
keylist_delete (kmi->lv); |
1234 |
kmi->lv = NULL; |
kmi->lv = NULL; |
1521 |
} |
} |
1522 |
if (km_check_key_status (kmi->lv, kmi->lv_idx)) |
if (km_check_key_status (kmi->lv, kmi->lv_idx)) |
1523 |
return TRUE; |
return TRUE; |
1524 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
km_get_key (kmi->lv, kmi->lv_idx, &k); |
|
memset (&k, 0, sizeof (k)); |
|
|
strncpy (k.tmp_keyid, key->subkeys->keyid+8, 8); |
|
|
k.ctx = key; |
|
|
k.keyid = key->subkeys->keyid; |
|
1525 |
dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYSIGN, dlg, |
dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYSIGN, dlg, |
1526 |
keysign_dlg_proc, (LPARAM)&k, |
keysign_dlg_proc, (LPARAM)&k, |
1527 |
_("Key Signing"), IDS_WINPT_KEYSIGN); |
_("Key Signing"), IDS_WINPT_KEYSIGN); |
1534 |
msg_box (dlg, _("Please select a key."), _("Key Manager"), MB_ERR); |
msg_box (dlg, _("Please select a key."), _("Key Manager"), MB_ERR); |
1535 |
return TRUE; |
return TRUE; |
1536 |
} |
} |
1537 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
|
|
if (!key) |
|
|
BUG (NULL); |
|
|
if (!km_check_for_seckey (kmi->lv, kmi->lv_idx, NULL)) { |
|
|
msg_box (dlg, _("There is no secret key available!"), |
|
|
_("Key Manager"), MB_ERR); |
|
|
return TRUE; |
|
|
} |
|
|
|
|
1538 |
{ |
{ |
1539 |
char state[64]; |
char state[64]; |
1540 |
listview_get_item_text (kmi->lv, kmi->lv_idx, 5, |
listview_get_item_text (kmi->lv, kmi->lv_idx, 5, |
1545 |
return TRUE; |
return TRUE; |
1546 |
} |
} |
1547 |
} |
} |
1548 |
|
|
1549 |
memset (&k, 0, sizeof (k)); |
km_get_key (kmi->lv, kmi->lv_idx, &k); |
1550 |
k.key_pair = 1; |
if (!k.key_pair) { |
1551 |
k.keyid = key->subkeys->keyid+8; |
msg_box (dlg, _("There is no secret key available!"), |
1552 |
k.is_protected = km_check_if_protected (kmi->lv, kmi->lv_idx); |
_("Key Manager"), MB_ERR); |
1553 |
|
return TRUE; |
1554 |
|
} |
1555 |
dialog_box_param(glob_hinst, (LPCSTR)IDD_WINPT_KEYREVOKE, dlg, |
dialog_box_param(glob_hinst, (LPCSTR)IDD_WINPT_KEYREVOKE, dlg, |
1556 |
key_revoke_dlg_proc, (LPARAM)&k, |
key_revoke_dlg_proc, (LPARAM)&k, |
1557 |
_("Key Revocation Cert"), IDS_WINPT_KEYREVOKE); |
_("Key Revocation Cert"), IDS_WINPT_KEYREVOKE); |
1562 |
msg_box (dlg, _("Please select a key."), _("Key Manager"), MB_ERR); |
msg_box (dlg, _("Please select a key."), _("Key Manager"), MB_ERR); |
1563 |
return TRUE; |
return TRUE; |
1564 |
} |
} |
1565 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
km_get_key (kmi->lv, kmi->lv_idx, &k); |
1566 |
if (km_check_for_seckey (kmi->lv, kmi->lv_idx, NULL)) { |
if (!k.key_pair) { |
1567 |
msg_box (dlg, _("It does not make any sense with a key pair!"), |
msg_box (dlg, _("It does not make any sense with a key pair!"), |
1568 |
_("Key Manager"), MB_ERR); |
_("Key Manager"), MB_ERR); |
1569 |
return TRUE; |
return TRUE; |
1570 |
} |
} |
|
memset (&k, 0, sizeof (k)); |
|
|
k.keyid = key->subkeys->keyid+8; |
|
|
k.uid = key->uids->uid; |
|
1571 |
dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYTRUST, dlg, |
dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYTRUST, dlg, |
1572 |
keytrust_dlg_proc, (LPARAM)&k, |
keytrust_dlg_proc, (LPARAM)&k, |
1573 |
_("List Trust Path"), IDS_WINPT_KEYTRUST); |
_("List Trust Path"), IDS_WINPT_KEYTRUST); |
1578 |
msg_box (dlg, _("Please select a key."), _("Key Manager"), MB_ERR); |
msg_box (dlg, _("Please select a key."), _("Key Manager"), MB_ERR); |
1579 |
return TRUE; |
return TRUE; |
1580 |
} |
} |
1581 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
km_get_key (kmi->lv, kmi->lv_idx, &k); |
|
if (!key) |
|
|
BUG (NULL); |
|
|
memset (&k, 0, sizeof (k)); |
|
|
strncpy (k.tmp_keyid, key->subkeys->keyid+8, 8); |
|
|
k.keyid = k.tmp_keyid; |
|
|
k.uid = key->uids->uid; |
|
|
k.ctx = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
|
1582 |
dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYSIG_TREE, dlg, |
dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYSIG_TREE, dlg, |
1583 |
sigtree_dlg_proc, (LPARAM)&k, |
sigtree_dlg_proc, (LPARAM)&k, |
1584 |
_("Key Signature List"), IDS_WINPT_KEYSIG); |
_("Key Signature List"), IDS_WINPT_KEYSIG); |
1591 |
msg_box (dlg, _("Please select a key."), _("Key Manager"), MB_ERR); |
msg_box (dlg, _("Please select a key."), _("Key Manager"), MB_ERR); |
1592 |
return TRUE; |
return TRUE; |
1593 |
} |
} |
1594 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
km_get_key (kmi->lv, kmi->lv_idx, &k); |
|
if (!key) |
|
|
BUG (NULL); |
|
|
memset (&k, 0, sizeof (k)); |
|
|
strncpy (k.tmp_keyid, key->subkeys->keyid+8, 8); |
|
|
k.keyid = k.tmp_keyid; |
|
|
k.key_pair = km_check_for_seckey (kmi->lv, kmi->lv_idx, NULL)? 1 : 0; |
|
1595 |
k.callback.ctl = kmi->lv; |
k.callback.ctl = kmi->lv; |
1596 |
k.callback.idx = kmi->lv_idx; |
k.callback.idx = kmi->lv_idx; |
|
k.is_v3 = km_key_is_v3 (kmi->lv, kmi->lv_idx); |
|
1597 |
dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYPROPS, dlg, |
dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYPROPS, dlg, |
1598 |
keyprops_dlg_proc, (LPARAM)&k, |
keyprops_dlg_proc, (LPARAM)&k, |
1599 |
_("Key Properties"), IDS_WINPT_KEYPROPS); |
_("Key Properties"), IDS_WINPT_KEYPROPS); |
1605 |
if (updated_keys_avail ()) |
if (updated_keys_avail ()) |
1606 |
l_idx = IDYES; |
l_idx = IDYES; |
1607 |
else { |
else { |
1608 |
char inf[256]; |
l_idx = log_box (_("Key Manager"), MB_YESNO, |
|
_snprintf (inf, sizeof (inf) -1, |
|
1609 |
_("This is only useful when the keyring has been " |
_("This is only useful when the keyring has been " |
1610 |
"modified (sign a key...).\n" |
"modified (sign a key...).\n" |
1611 |
"Do you really want to reload the keycache?")); |
"Do you really want to reload the keycache?")); |
|
l_idx = msg_box (dlg, inf, _("Key Manager"), MB_YESNO); |
|
1612 |
} |
} |
1613 |
if (l_idx == IDYES) |
if (l_idx == IDYES) |
1614 |
reload_keycache (kmi); |
reload_keycache (kmi); |
1702 |
if (listview_count_items (kmi->lv, 1) > 1) |
if (listview_count_items (kmi->lv, 1) > 1) |
1703 |
name = m_strdup ("Exported_GPG_Keys.asc"); |
name = m_strdup ("Exported_GPG_Keys.asc"); |
1704 |
else { |
else { |
1705 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
key = km_get_key_ptr (kmi->lv, kmi->lv_idx, NULL); |
1706 |
name = km_gen_export_filename (key->subkeys->keyid+8, 0); |
name = km_gen_export_filename (key->subkeys->keyid+8, 0); |
1707 |
} |
} |
1708 |
t = get_filesave_dlg (dlg, _("Choose Name for Key File"), NULL, name); |
t = get_filesave_dlg (dlg, _("Choose Name for Key File"), NULL, name); |
1735 |
"Do you really want to export the key?"), |
"Do you really want to export the key?"), |
1736 |
_("WARNING"), MB_INFO|MB_YESNO); |
_("WARNING"), MB_INFO|MB_YESNO); |
1737 |
if (i == IDYES) { |
if (i == IDYES) { |
1738 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
key = km_get_key_ptr (kmi->lv, kmi->lv_idx, NULL); |
|
if (!key) |
|
|
BUG (NULL); |
|
1739 |
name = km_gen_export_filename (key->subkeys->keyid+8, 1); |
name = km_gen_export_filename (key->subkeys->keyid+8, 1); |
1740 |
t = get_filesave_dlg (dlg, _("Choose Name for Key File"), NULL, name); |
t = get_filesave_dlg (dlg, _("Choose Name for Key File"), NULL, name); |
1741 |
if (t != NULL) |
if (t != NULL) |
1765 |
break; |
break; |
1766 |
|
|
1767 |
case ID_KEYMISC_EDITKEY: |
case ID_KEYMISC_EDITKEY: |
1768 |
if (kmi->lv_idx == -1) |
if (km_get_key (kmi->lv, kmi->lv_idx, &k)) |
1769 |
break; |
break; |
|
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
|
|
if (!key) |
|
|
BUG (NULL); |
|
|
/* XXX: pub/crd = secret key does not work */ |
|
|
memset (&k, 0, sizeof (k)); |
|
|
strncpy (k.tmp_keyid, key->subkeys->keyid+8, 8); |
|
|
k.keyid = k.tmp_keyid; |
|
|
k.is_protected = km_check_if_protected (kmi->lv, kmi->lv_idx); |
|
|
k.key_pair = km_check_for_seckey (kmi->lv, kmi->lv_idx, NULL); |
|
|
k.is_v3 = km_key_is_v3 (kmi->lv, kmi->lv_idx); |
|
|
k.flags = km_get_key_status (kmi->lv, kmi->lv_idx); |
|
1770 |
dialog_box_param (glob_hinst, (LPCTSTR)IDD_WINPT_KEYEDIT, dlg, |
dialog_box_param (glob_hinst, (LPCTSTR)IDD_WINPT_KEYEDIT, dlg, |
1771 |
keyedit_main_dlg_proc, (LPARAM)&k, |
keyedit_main_dlg_proc, (LPARAM)&k, |
1772 |
_("Key Edit"), IDS_KEYCTX_EDIT); |
_("Key Edit"), IDS_KEYCTX_EDIT); |
1787 |
break; |
break; |
1788 |
|
|
1789 |
case ID_KEYCTX_SETPREFKS: |
case ID_KEYCTX_SETPREFKS: |
1790 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
if (km_get_key (kmi->lv, kmi->lv_idx, &k)) |
1791 |
if (!key) |
break; |
|
BUG (NULL); |
|
|
memset (&k, 0, sizeof (k)); |
|
|
strncpy (k.tmp_keyid, key->subkeys->keyid+8, 8); |
|
|
k.keyid = k.tmp_keyid; |
|
|
k.is_protected = km_check_if_protected (kmi->lv, kmi->lv_idx); |
|
1792 |
keyedit_set_pref_keyserver (&k, dlg); |
keyedit_set_pref_keyserver (&k, dlg); |
1793 |
break; |
break; |
1794 |
|
|
1836 |
break; |
break; |
1837 |
|
|
1838 |
case ID_KEYCTX_ADDKEY: |
case ID_KEYCTX_ADDKEY: |
1839 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
km_get_key (kmi->lv, kmi->lv_idx, &k); |
|
if (!key) |
|
|
BUG (NULL); |
|
|
memset (&k, 0, sizeof (k)); |
|
|
strncpy (k.tmp_keyid, key->subkeys->keyid+8, 8); |
|
|
k.keyid = k.tmp_keyid; |
|
|
k.key_pair = km_check_for_seckey (kmi->lv, kmi->lv_idx, NULL); |
|
|
k.is_protected = km_check_if_protected (kmi->lv, kmi->lv_idx); |
|
1840 |
keyedit_add_subkey (&k, dlg, NULL); |
keyedit_add_subkey (&k, dlg, NULL); |
1841 |
if (k.update) |
if (k.update) |
1842 |
update_key (kmi->lv, kmi->lv_idx, k.tmp_keyid, 1); |
update_key (kmi->lv, kmi->lv_idx, k.tmp_keyid, 1); |
1843 |
break; |
break; |
1844 |
|
|
1845 |
case ID_KEYCTX_ADDUID: |
case ID_KEYCTX_ADDUID: |
1846 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
km_get_key (kmi->lv, kmi->lv_idx, &k); |
|
if (!key) |
|
|
BUG (NULL); |
|
|
memset (&k, 0, sizeof (k)); |
|
|
strncpy (k.tmp_keyid, key->subkeys->keyid+8, 8); |
|
|
k.keyid = k.tmp_keyid; |
|
|
k.key_pair = km_check_for_seckey (kmi->lv, kmi->lv_idx, NULL); |
|
|
k.is_protected = km_check_if_protected (kmi->lv, kmi->lv_idx); |
|
1847 |
keyedit_add_userid (&k, dlg, NULL); |
keyedit_add_userid (&k, dlg, NULL); |
1848 |
if (k.update) |
if (k.update) |
1849 |
update_key (kmi->lv, kmi->lv_idx, k.tmp_keyid, 1); |
update_key (kmi->lv, kmi->lv_idx, k.tmp_keyid, 1); |
1850 |
break; |
break; |
1851 |
|
|
1852 |
case ID_KEYCTX_ADDREV: |
case ID_KEYCTX_ADDREV: |
1853 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
km_get_key (kmi->lv, kmi->lv_idx, &k); |
|
if (!key) |
|
|
BUG (NULL); |
|
|
memset (&k, 0, sizeof (k)); |
|
|
strncpy (k.tmp_keyid, key->subkeys->keyid+8, 8); |
|
|
k.keyid = k.tmp_keyid; |
|
|
k.is_protected = km_check_if_protected (kmi->lv, kmi->lv_idx); |
|
|
k.key_pair = km_check_for_seckey (kmi->lv, kmi->lv_idx, NULL); |
|
1854 |
keyedit_add_revoker (&k, dlg); |
keyedit_add_revoker (&k, dlg); |
1855 |
if (k.update) |
if (k.update) |
1856 |
update_key (kmi->lv, kmi->lv_idx, k.tmp_keyid, 1); |
update_key (kmi->lv, kmi->lv_idx, k.tmp_keyid, 1); |
1857 |
break; |
break; |
1858 |
|
|
1859 |
case ID_KEYCTX_ADDPHOTO: |
case ID_KEYCTX_ADDPHOTO: |
1860 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
km_get_key (kmi->lv, kmi->lv_idx, &k); |
|
if (!key) |
|
|
BUG (NULL); |
|
|
memset (&k, 0, sizeof (k)); |
|
|
strncpy (k.tmp_keyid, key->subkeys->keyid+8, 8); |
|
|
k.keyid = k.tmp_keyid; |
|
|
k.is_protected = km_check_if_protected (kmi->lv, kmi->lv_idx); |
|
|
k.key_pair = km_check_for_seckey (kmi->lv, kmi->lv_idx, NULL); |
|
1861 |
keyedit_add_photo (&k, dlg); |
keyedit_add_photo (&k, dlg); |
1862 |
if (k.update) |
if (k.update) |
1863 |
update_key (kmi->lv, kmi->lv_idx, k.tmp_keyid, 1); |
update_key (kmi->lv, kmi->lv_idx, k.tmp_keyid, 1); |
1872 |
case ID_KEYCTX_UID_COPY: |
case ID_KEYCTX_UID_COPY: |
1873 |
/* XXX: add generic function to support multiple selection |
/* XXX: add generic function to support multiple selection |
1874 |
with a callback */ |
with a callback */ |
1875 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
key = km_get_key_ptr (kmi->lv, kmi->lv_idx, &kci); |
1876 |
name = utf8_to_native (key->uids->uid); |
name = kci->uids->name; |
1877 |
set_clip_text (NULL, name, strlen (name)); |
set_clip_text (NULL, name, strlen (name)); |
|
safe_free (name); |
|
1878 |
break; |
break; |
1879 |
|
|
1880 |
case ID_KEYCTX_KEYID_COPY: |
case ID_KEYCTX_KEYID_COPY: |
1881 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
key = km_get_key_ptr (kmi->lv, kmi->lv_idx, NULL); |
1882 |
set_clip_text (NULL, key->subkeys->keyid+8, |
set_clip_text (NULL, key->subkeys->keyid+8, |
1883 |
strlen (key->subkeys->keyid+8)); |
strlen (key->subkeys->keyid+8)); |
1884 |
break; |
break; |
1885 |
|
|
1886 |
case ID_KEYCTX_FPR_COPY: |
case ID_KEYCTX_FPR_COPY: |
1887 |
key = (gpgme_key_t) listview_get_item2 (kmi->lv, kmi->lv_idx); |
key = km_get_key_ptr (kmi->lv, kmi->lv_idx, NULL); |
1888 |
t = key->subkeys->fpr; |
t = key->subkeys->fpr; |
1889 |
set_clip_text (NULL, t? t : "", t? strlen (t): 0); |
set_clip_text (NULL, t? t : "", t? strlen (t): 0); |
1890 |
break; |
break; |
1891 |
|
|
1892 |
case ID_KEYCTX_KINFO_COPY: |
case ID_KEYCTX_KINFO_COPY: |
1893 |
key = (gpgme_key_t) listview_get_item2 (kmi->lv, kmi->lv_idx); |
key = km_get_key_ptr (kmi->lv, kmi->lv_idx, NULL); |
|
if (!key) |
|
|
BUG (NULL); |
|
1894 |
km_set_clip_info (key->subkeys->keyid+8); |
km_set_clip_info (key->subkeys->keyid+8); |
1895 |
break; |
break; |
1896 |
|
|
1905 |
case ID_KEYCTX_DISABLE: |
case ID_KEYCTX_DISABLE: |
1906 |
case ID_KEYCTX_ENABLE: |
case ID_KEYCTX_ENABLE: |
1907 |
i = LOWORD (wparam) == ID_KEYCTX_ENABLE? 1 : 0; |
i = LOWORD (wparam) == ID_KEYCTX_ENABLE? 1 : 0; |
1908 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
if (km_get_key (kmi->lv, kmi->lv_idx, &k)) |
1909 |
if (!key) |
break; |
|
BUG (NULL); |
|
|
memset (&k, 0, sizeof (k)); |
|
|
strncpy (k.tmp_keyid, key->subkeys->keyid+8, 8); |
|
|
k.keyid = k.tmp_keyid; |
|
1910 |
rc = km_enable_disable_key (kmi->lv, dlg, kmi->lv_idx, i); |
rc = km_enable_disable_key (kmi->lv, dlg, kmi->lv_idx, i); |
1911 |
if (!rc) |
if (!rc) |
1912 |
update_key (kmi->lv, kmi->lv_idx, k.tmp_keyid, 0); |
update_key (kmi->lv, kmi->lv_idx, k.tmp_keyid, 0); |
|
/* XXX: switching a key from disabled -> enabled. does not |
|
|
change the validity field in the KM. */ |
|
1913 |
break; |
break; |
1914 |
|
|
1915 |
case ID_KEYCTX_LISTSIGS: |
case ID_KEYCTX_LISTSIGS: |
1917 |
break; |
break; |
1918 |
|
|
1919 |
case ID_KEYCTX_MAXTRUST: |
case ID_KEYCTX_MAXTRUST: |
1920 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
if (km_get_key (kmi->lv, kmi->lv_idx, &k)) |
1921 |
if (!key) |
break; |
|
BUG (NULL); |
|
|
memset (&k, 0, sizeof (k)); |
|
|
strncpy (k.tmp_keyid, key->subkeys->keyid+8, 8); |
|
|
k.keyid = k.tmp_keyid; |
|
1922 |
rc = km_set_implicit_trust (dlg, kmi->lv, kmi->lv_idx); |
rc = km_set_implicit_trust (dlg, kmi->lv, kmi->lv_idx); |
1923 |
if (!rc) |
if (!rc) |
1924 |
update_key (kmi->lv, kmi->lv_idx, k.tmp_keyid, 0); |
update_key (kmi->lv, kmi->lv_idx, k.tmp_keyid, 0); |
1926 |
|
|
1927 |
case ID_KEYCTX_SETDEFKEY: |
case ID_KEYCTX_SETDEFKEY: |
1928 |
if (!km_check_key_status (kmi->lv, kmi->lv_idx)) { |
if (!km_check_key_status (kmi->lv, kmi->lv_idx)) { |
1929 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
key = km_get_key_ptr (kmi->lv, kmi->lv_idx, NULL); |
1930 |
rc = set_gnupg_default_key (key->subkeys->keyid+8); |
rc = set_gnupg_default_key (key->subkeys->keyid+8); |
1931 |
if (rc) |
if (rc) |
1932 |
msg_box (dlg, winpt_strerror (rc), _("Key Manager"), MB_ERR); |
msg_box (dlg, winpt_strerror (rc), _("Key Manager"), MB_ERR); |
1939 |
case ID_KEYMISC_VIEWTYPE: |
case ID_KEYMISC_VIEWTYPE: |
1940 |
case ID_KEYMISC_VIEWCREAT: |
case ID_KEYMISC_VIEWCREAT: |
1941 |
case ID_KEYMISC_VIEWDESC: |
case ID_KEYMISC_VIEWDESC: |
|
DWORD n; |
|
|
|
|
1942 |
hm = GetMenu (dlg); |
hm = GetMenu (dlg); |
1943 |
n = get_menu_state (hm, LOWORD (wparam)); |
i = get_menu_state (hm, LOWORD (wparam)); |
1944 |
set_menu_state (hm, LOWORD (wparam), |
set_menu_state (hm, LOWORD (wparam), |
1945 |
n & MFS_CHECKED? MFS_UNCHECKED : MFS_CHECKED); |
i & MFS_CHECKED? MFS_UNCHECKED : MFS_CHECKED); |
1946 |
modify_listview_columns (kmi, LOWORD (wparam), !(n & MFS_CHECKED)); |
modify_listview_columns (kmi, LOWORD (wparam), !(i & MFS_CHECKED)); |
1947 |
break; |
break; |
1948 |
|
|
1949 |
case ID_GROUP_NEW: |
case ID_GROUP_NEW: |