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

Contents of /trunk/Src/wptKeyserverSearchDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 219 - (show annotations)
Sat May 27 08:56:00 2006 UTC (18 years, 9 months ago) by twoaday
File size: 5855 byte(s)
2006-05-25  Timo Schulz  <ts@g10code.de>
                                                                                
        * wptGPGUtil.cpp (gpg_rebuild_cache): Return error code.
        * wptGPGME.cpp (winpt_get_seckey): Fix off-by-one bug.
        * wptVerifyList.cpp (verlist_build): New argument type.
        Change all callers.
        (verlist_set_info_control): New.
        (verlist_set_additional_info): New.
        * wptFileVerifyDlg.cpp (file_verify_dlg_proc): Adjust code.
        * wptClipVerifyDlg.cpp (clip_verify_dlg_proc): Likewise.
        * wptFileCBS.cpp (read_cb, write_cb): Add logging.
                                                                                


1 /* wptKeyserverSearchDlg.cpp - Keyserver Searching
2 * Copyright (C) 2001-2006 Timo Schulz
3 *
4 * This file is part of WinPT.
5 *
6 * WinPT is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * WinPT is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with WinPT; if not, write to the Free Software Foundation,
18 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19 */
20 #ifdef HAVE_CONFIG_H
21 #include <config.h>
22 #endif
23
24 #include <windows.h>
25 #include <stdio.h>
26
27 #include "resource.h"
28 #include "wptCommonCtl.h"
29 #include "wptKeyserver.h"
30 #include "wptErrors.h"
31 #include "wptTypes.h"
32 #include "wptGPG.h"
33 #include "wptContext.h" /* for passphrase_s */
34 #include "wptDlgs.h"
35 #include "wptNLS.h"
36 #include "wptKeylist.h"
37
38
39 #define MAX_N_KEYS 64
40
41
42 /* Symbolic column IDs. */
43 enum { KSS_COL_BITS = 0, KSS_COL_ALGO,
44 KSS_COL_KEYID, KSS_COL_DATE, KSS_COL_UID };
45
46 int hkp_recv_key2 (HWND dlg, const char *kserver, WORD port,
47 const char *pattern, int proto, char **r_fpr);
48
49 /* Initialize dialog. */
50 static listview_ctrl_t
51 on_init_dialog (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
52 {
53 struct listview_column_s keysearch[] = {
54 {0, 48, (char *)_("Size")},
55 {1, 48, (char*)_("Algorithm")},
56 {2, 80, (char *)_("Key ID")},
57 {3, 72, (char *)_("Creation")},
58 {4, 256, (char *)_("User ID")},
59 {0, 0, NULL}
60 };
61 char info[384];
62 int i;
63 listview_ctrl_t lv = NULL;
64
65 SetDlgItemText (dlg, IDC_HKPSEARCH_RECV, _("&Receive"));
66 SetDlgItemText (dlg, IDOK, _("&Cancel"));
67 _snprintf (info, sizeof (info) - 1,
68 _("Connect to '%s' to search for \"%s\""),
69 ((keyserver_ctx *)lparam)->name, ((keyserver_ctx *)lparam)->pattern);
70 SetDlgItemText (dlg, IDC_HKPSEARCH_INFO, info);
71 SetWindowText (dlg, _("Keyserver Searching"));
72 SetForegroundWindow (dlg);
73 listview_new (&lv, GetDlgItem (dlg, IDC_HKPSEARCH_LIST));
74 for (i = 0; keysearch[i].width; i++)
75 listview_add_column (lv, &keysearch[i]);
76 listview_set_ext_style (lv);
77 return lv;
78 }
79
80
81
82 static int
83 search_hkp_keys (HWND dlg, keyserver_ctx *ksc, listview_ctrl_t lv)
84 {
85 keyserver_key_s *key;
86 const char *uid;
87 char bits[32], algo[32], keyid[32];
88 int conn_fd = 0;
89 int rc, nkeys = 0;
90
91 rc = kserver_search_begin (ksc->name, ksc->port, ksc->pattern,
92 &conn_fd, &nkeys);
93 if (rc) {
94 msg_box (dlg, winpt_strerror (rc), _("Keyserver Search"), MB_ERR);
95 return rc;
96 }
97
98 if (nkeys > MAX_N_KEYS) {
99 rc = log_box (_("Keyserver Search"), MB_INFO_ASK,
100 _("The search result contains a lot of keys: %d\n\n"
101 "Do you really want to continue?"), nkeys);
102 if (rc == IDNO) {
103 kserver_search_end (conn_fd);
104 return -1;
105 }
106 }
107
108 while (nkeys-- > 0) {
109 if (kserver_search_next (conn_fd, &key))
110 break;
111 if (!key)
112 continue;
113
114 _snprintf (bits, sizeof (bits) - 1, "%d", key->bits);
115 _snprintf (algo, sizeof (algo)-1, "%s",
116 get_key_pubalgo ((gpgme_pubkey_algo_t)key->algo));
117 _snprintf (keyid, sizeof (keyid)-1, "0x%s", key->keyid);
118 uid = key->main_uid? key->main_uid->uid : "";
119 listview_add_item (lv, " ");
120 listview_add_sub_item (lv, 0, KSS_COL_BITS, bits);
121 listview_add_sub_item (lv, 0, KSS_COL_ALGO, algo);
122 listview_add_sub_item (lv, 0, KSS_COL_KEYID, keyid);
123 listview_add_sub_item (lv, 0, KSS_COL_DATE, get_key_created (key->creation));
124 listview_add_sub_item (lv, 0, KSS_COL_UID, uid);
125 kserver_release_key (key); key=NULL;
126 }
127
128 kserver_search_end (conn_fd);
129 return 0;
130 }
131
132
133 /* Fetch all selected keys from the keyserver in @ksc. */
134 static void
135 fetch_keys (HWND dlg, listview_ctrl_t lv, keyserver_ctx *ksc)
136 {
137 char keyid[32];
138 char *fpr;
139 int n, rc = 0;
140
141 n = listview_count_items (lv, 1);
142 if (!n) {
143 msg_box (dlg, _("Please select a key."), _("Keyserver Search"), MB_ERR);
144 return;
145 }
146
147 for (n=0; n < listview_count_items (lv, 0); n++) {
148 if (!listview_get_item_state (lv, n))
149 continue;
150
151 listview_get_item_text (lv, n, KSS_COL_KEYID, keyid, sizeof (keyid)-1);
152 rc = hkp_recv_key2 (dlg, ksc->name, ksc->port, keyid, 0, &fpr);
153 if (!rc && fpr != NULL) {
154 keycache_update (0, fpr);
155 free_if_alloc (fpr);
156 }
157 }
158 }
159
160
161 /* Dialog box procedure for keyserver searching. */
162 BOOL CALLBACK
163 hkpsearch_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
164 {
165 static listview_ctrl_t lv = NULL;
166 static keyserver_ctx *ksc;
167
168 switch (msg) {
169 case WM_INITDIALOG:
170 ksc = (keyserver_ctx *)lparam;
171 if (!ksc)
172 dlg_fatal_error (dlg, "Could not get dialog param.");
173 lv = on_init_dialog (dlg, msg, wparam, lparam);
174 if (search_hkp_keys (dlg, ksc, lv)) {
175 EndDialog (dlg, FALSE);
176 return FALSE;
177 }
178 return TRUE;
179
180 case WM_DESTROY:
181 if (lv) {
182 listview_release (lv);
183 lv = NULL;
184 }
185 return FALSE;
186
187 case WM_SYSCOMMAND:
188 if (LOWORD (wparam) == SC_CLOSE)
189 EndDialog (dlg, TRUE);
190 return FALSE;
191
192 case WM_COMMAND:
193 switch (LOWORD (wparam)) {
194 case IDOK:
195 EndDialog (dlg, TRUE);
196 return TRUE;
197
198 case IDCANCEL:
199 EndDialog (dlg, FALSE);
200 return FALSE;
201
202 case IDC_HKPSEARCH_RECV:
203 fetch_keys (dlg, lv, ksc);
204 return TRUE;
205 }
206 break;
207 }
208
209 return FALSE;
210 }

Properties

Name Value
svn:eol-style native

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26