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

Diff of /trunk/Src/wptKeyserverDlg.cpp

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

revision 35 by twoaday, Mon Oct 24 08:03:48 2005 UTC revision 36 by werner, Thu Oct 27 15:25:13 2005 UTC
# Line 1  Line 1 
1  /* wptKeyserverDlg.cpp - Keyserver dialog  /* wptKeyserverDlg.cpp - Keyserver dialog
2   *      Copyright (C) 2000-2005 Timo Schulz   *      Copyright (C) 2000-2005 Timo Schulz
3   *   *
4   * This file is part of WinPT.   * This file is part of WinPT.
5   *   *
6   * WinPT is free software; you can redistribute it and/or modify   * 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   * 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   * the Free Software Foundation; either version 2 of the License, or
9   * (at your option) any later version.   * (at your option) any later version.
10   *   *
11   * WinPT is distributed in the hope that it will be useful,   * WinPT is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU General Public License for more details.   * GNU General Public License for more details.
15   *   *
16   * You should have received a copy of the GNU General Public License   * You should have received a copy of the GNU General Public License
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    
21  #include <windows.h>  #ifdef HAVE_CONFIG_H
22  #include <commctrl.h>  #include <config.h>
23  #include <malloc.h>  #endif
24    
25  #include "../resource.h"  #include <windows.h>
26  #include "wptKeyserver.h"  #include <windows.h>
27  #include "wptErrors.h"  #include <commctrl.h>
28  #include "wptTypes.h"  #include <malloc.h>
29  #include "wptCommonCtl.h"  
30  #include "wptNLS.h"  #include "../resource.h"
31  #include "wptW32API.h"  #include "wptKeyserver.h"
32  #include "wptVersion.h"  #include "wptErrors.h"
33  #include "wptGPG.h"  #include "wptTypes.h"
34  #include "wptKeyManager.h"  #include "wptCommonCtl.h"
35  #include "wptContext.h" /* for passphrase_s */  #include "wptNLS.h"
36  #include "wptDlgs.h"  #include "wptW32API.h"
37    #include "wptVersion.h"
38    #include "wptGPG.h"
39  #define MAX_KEYSIZE 70000  #include "wptKeyManager.h"
40    #include "wptContext.h" /* for passphrase_s */
41  char * get_reg_entry_keyserver (const char *);  #include "wptDlgs.h"
42  int set_reg_entry_keyserver (const char *, const char *);  
43    
44    #define MAX_KEYSIZE 70000
45  static void  
46  hkp_err_box (HWND dlg, const char * host, u16 port, int rc)  char * get_reg_entry_keyserver (const char *);
47  {  int set_reg_entry_keyserver (const char *, const char *);
48      const char *err = kserver_strerror();  
49    
50      log_box( _("Keyserver"), MB_ERR, "%s:%d: %s", host, port, winpt_strerror (rc));  static void
51      if (err)  hkp_err_box (HWND dlg, const char * host, u16 port, int rc)
52          msg_box (dlg, err, wsock_strerror (), MB_ERR);  {
53  } /* hkp_err_box */      const char *err = kserver_strerror();
54    
55        log_box( _("Keyserver"), MB_ERR, "%s:%d: %s", host, port, winpt_strerror (rc));
56  int      if (err)
57  hkp_send_key (HWND dlg, const char *kserver, u16 port, const char *pattern)          msg_box (dlg, err, wsock_strerror (), MB_ERR);
58  {  } /* hkp_err_box */
59      gpgme_ctx_t c;  
60      gpgme_data_t keydata;  
61      gpgme_error_t ec;  int
62      char *rawkey = NULL, msg[1024];  hkp_send_key (HWND dlg, const char *kserver, u16 port, const char *pattern)
63      size_t n;  {
64      int rc;      gpgme_ctx_t c;
65            gpgme_data_t keydata;
66      ec = gpgme_new( &c );      gpgme_error_t ec;
67      if( ec )      char *rawkey = NULL, msg[1024];
68          BUG( NULL );      size_t n;
69      gpgme_set_armor (c, 1);      int rc;
70      ec = gpgme_data_new( &keydata );      
71      if( ec )      ec = gpgme_new( &c );
72          BUG( NULL );      if( ec )
73      rc = (int) gpgme_op_export( c, pattern, 0, keydata );          BUG( NULL );
74      if( rc ) {      gpgme_set_armor (c, 1);
75          msg_box( dlg, gpgme_strerror( (gpgme_error_t)rc ), _("Export"), MB_ERR );      ec = gpgme_data_new( &keydata );
76          goto leave;      if( ec )
77      }          BUG( NULL );
78      rawkey = gpgme_data_release_and_get_mem (keydata, &n);      rc = (int) gpgme_op_export( c, pattern, 0, keydata );
79      rc = kserver_sendkey (kserver, port, rawkey, n);      if( rc ) {
80      if (rc) {          msg_box( dlg, gpgme_strerror( (gpgme_error_t)rc ), _("Export"), MB_ERR );
81          hkp_err_box (dlg, kserver, port, rc);          goto leave;
82          goto leave;      }
83      }      rawkey = gpgme_data_release_and_get_mem (keydata, &n);
84            rc = kserver_sendkey (kserver, port, rawkey, n);
85      _snprintf (msg, sizeof (msg) -1, _("Key '%s' successfully sent"), pattern);      if (rc) {
86      status_box (dlg, msg, _("GnuPG status"));          hkp_err_box (dlg, kserver, port, rc);
87                goto leave;
88  leave:      }
89      gpgme_release (c);      
90      if (rawkey)      _snprintf (msg, sizeof (msg) -1, _("Key '%s' successfully sent"), pattern);
91          gpgme_free (rawkey);      status_box (dlg, msg, _("GnuPG status"));
92      return rc;      
93  } /* hkp_send_key */  leave:
94        gpgme_release (c);
95        if (rawkey)
96  int          gpgme_free (rawkey);
97  hkp_recv_key (HWND dlg, const char *kserver, u16 port,      return rc;
98                const char *pattern, int proto, int flags)  } /* hkp_send_key */
99  {  
100      gpgme_ctx_t ctx;  
101      gpgme_data_t keydata;  int
102      gpgme_error_t ec;  hkp_recv_key (HWND dlg, const char *kserver, u16 port,
103      gpgme_import_result_t import_res;                const char *pattern, int proto, int flags)
104      int rc;  {
105      char *rawkey = NULL, msg[384];      gpgme_ctx_t ctx;
106            gpgme_data_t keydata;
107      rawkey = new char[MAX_KEYSIZE];      gpgme_error_t ec;
108      if (!rawkey)      gpgme_import_result_t import_res;
109          BUG (0);      int rc;
110      memset (rawkey, 0, MAX_KEYSIZE);      char *rawkey = NULL, msg[384];
111      if( proto == KSPROTO_LDAP ) {      
112          rc = ldap_recvkey( kserver, pattern, rawkey, MAX_KEYSIZE-1 );      rawkey = new char[MAX_KEYSIZE];
113          if( rc ) {      if (!rawkey)
114              msg_box( dlg, _("LDAP key import failed.\n"          BUG (0);
115                              "Please make sure you have an online connection"      memset (rawkey, 0, MAX_KEYSIZE);
116                              " and gpgkeys_ldap.exe is installed"),      if( proto == KSPROTO_LDAP ) {
117                              _("Keyserver"), MB_ERR );          rc = ldap_recvkey( kserver, pattern, rawkey, MAX_KEYSIZE-1 );
118              free_if_alloc( rawkey );          if( rc ) {
119              return rc;              msg_box( dlg, _("LDAP key import failed.\n"
120          }                              "Please make sure you have an online connection"
121      }                              " and gpgkeys_ldap.exe is installed"),
122      else if (proto == KSPROTO_FINGER) {                              _("Keyserver"), MB_ERR );
123          rc = finger_recvkey (kserver, pattern, rawkey, MAX_KEYSIZE-1);              free_if_alloc( rawkey );
124          if (rc) {              return rc;
125              log_box (_("Keyserver"), MB_ERR, _("Finger key import failed: %s\n"),          }
126                       winpt_strerror (rc));      }
127              free_if_alloc (rawkey);      else if (proto == KSPROTO_FINGER) {
128              return rc;          rc = finger_recvkey (kserver, pattern, rawkey, MAX_KEYSIZE-1);
129          }          if (rc) {
130      }              log_box (_("Keyserver"), MB_ERR, _("Finger key import failed: %s\n"),
131      else if( ( rc = kserver_recvkey( kserver, port, kserver_check_keyid( pattern ),                       winpt_strerror (rc));
132                                       rawkey, MAX_KEYSIZE-1 ) ) ) {              free_if_alloc (rawkey);
133          hkp_err_box (dlg, kserver, port, rc);              return rc;
134          free_if_alloc (rawkey);          }
135          return rc;      }
136      }      else if( ( rc = kserver_recvkey( kserver, port, kserver_check_keyid( pattern ),
137      else {                                       rawkey, MAX_KEYSIZE-1 ) ) ) {
138          if( !strstr( rawkey, "BEGIN PGP PUBLIC KEY BLOCK" ) ) {          hkp_err_box (dlg, kserver, port, rc);
139              msg_box( dlg, _("This is not a valid OpenPGP key."), _("Keyserver"), MB_ERR );          free_if_alloc (rawkey);
140              goto leave;          return rc;
141          }      }
142          ec = gpgme_new( &ctx );      else {
143          if( ec )          if( !strstr( rawkey, "BEGIN PGP PUBLIC KEY BLOCK" ) ) {
144              BUG( NULL );              msg_box( dlg, _("This is not a valid OpenPGP key."), _("Keyserver"), MB_ERR );
145          gpgme_data_new_from_mem( &keydata, rawkey, strlen( rawkey ), 1 );              goto leave;
146          rc = gpgme_op_import( ctx, keydata );          }
147          if( rc ) {          ec = gpgme_new( &ctx );
148              msg_box( dlg, gpgme_strerror( (gpgme_error_t)rc ), _("Import"), MB_ERR );          if( ec )
149              goto leave;              BUG( NULL );
150          }          gpgme_data_new_from_mem( &keydata, rawkey, strlen( rawkey ), 1 );
151          import_res = gpgme_op_import_result (ctx);          rc = gpgme_op_import( ctx, keydata );
152      }          if( rc ) {
153                    msg_box( dlg, gpgme_strerror( (gpgme_error_t)rc ), _("Import"), MB_ERR );
154      /* if we use the refresh mode, a lot of keys will be fetched and thus only              goto leave;
155         a summarize at the end is presented and not for each key. */          }
156      if (!(flags & KM_KS_REFRESH)) {          import_res = gpgme_op_import_result (ctx);
157          if (import_res->new_user_ids == 0) {      }
158              _snprintf (msg, DIM (msg)-1,      
159                         _("Key '%s' successfully received but nothing was changed."), pattern );      /* if we use the refresh mode, a lot of keys will be fetched and thus only
160              status_box (dlg, msg, _("GnuPG Status"));         a summarize at the end is presented and not for each key. */
161              rc = WPTERR_GENERAL;      if (!(flags & KM_KS_REFRESH)) {
162              goto leave;          if (import_res->new_user_ids == 0) {
163          }              _snprintf (msg, DIM (msg)-1,
164          _snprintf (msg, DIM (msg)-1, _("Key '%s' sucessfully received and imported."), pattern);                         _("Key '%s' successfully received but nothing was changed."), pattern );
165          status_box (dlg, msg, _("GnuPG Status"));              status_box (dlg, msg, _("GnuPG Status"));
166      }              rc = WPTERR_GENERAL;
167                    goto leave;
168  leave:          }
169      free_if_alloc (rawkey);          _snprintf (msg, DIM (msg)-1, _("Key '%s' sucessfully received and imported."), pattern);
170      gpgme_release (ctx);          status_box (dlg, msg, _("GnuPG Status"));
171      gpgme_data_release (keydata);      }
172        
173      return rc;  leave:
174  } /* hkp_recv_key */      free_if_alloc (rawkey);
175        gpgme_release (ctx);
176        gpgme_data_release (keydata);
177  #define my_iskeychar(a) ( ( (a) >='0' && (a) <= '9' ) || ( (a) >= 'A' && (a) <= 'F' ) )  
178        return rc;
179  static int  } /* hkp_recv_key */
180  check_pattern( const char *pattern )  
181  {  
182      int rc = 1;  #define my_iskeychar(a) ( ( (a) >='0' && (a) <= '9' ) || ( (a) >= 'A' && (a) <= 'F' ) )
183        
184      /* Whitespace are not allowed! */  static int
185      if( strchr( pattern, ' ') ) {  check_pattern( const char *pattern )
186          rc = WPTERR_GENERAL;  {
187          goto leave;      int rc = 1;
188      }      
189            /* Whitespace are not allowed! */
190      if( (( strstr( pattern, "0x" ) ) && ( strlen( pattern ) == 10 ) )      if( strchr( pattern, ' ') ) {
191           || (strstr(pattern, "0x")) && ( strlen( pattern )  == 18 ) ) {          rc = WPTERR_GENERAL;
192          rc = 0;          goto leave;
193          goto leave;      }
194      }      
195            if( (( strstr( pattern, "0x" ) ) && ( strlen( pattern ) == 10 ) )
196      if( (( my_iskeychar( pattern[0] )) && ( strlen( pattern )  == 8 ) )           || (strstr(pattern, "0x")) && ( strlen( pattern )  == 18 ) ) {
197           || (my_iskeychar(pattern[0])) && ( strlen( pattern ) == 16) ) {          rc = 0;
198          rc = 0;          goto leave;
199          goto leave;      }
200      }      
201            if( (( my_iskeychar( pattern[0] )) && ( strlen( pattern )  == 8 ) )
202      if( ( strchr( pattern, '@' ) ) && ( strlen( pattern ) >= 3 ) ) {           || (my_iskeychar(pattern[0])) && ( strlen( pattern ) == 16) ) {
203          rc = 0;          rc = 0;
204          goto leave;          goto leave;
205      }      }
206            
207  leave:      if( ( strchr( pattern, '@' ) ) && ( strlen( pattern ) >= 3 ) ) {
208      return rc;          rc = 0;
209  } /* check_pattern */          goto leave;
210        }
211        
212  static void  leave:
213  set_proxy (HWND dlg)      return rc;
214  {  } /* check_pattern */
215      char proxy[384];  
216      int port = 0;  
217        static void
218      strcpy (proxy, "HTTP proxy: ");  set_proxy (HWND dlg)
219      if (kserver_get_proxy (&port)) {  {
220          char t[256];      char proxy[384];
221          const char *http = kserver_get_proxy (&port);      int port = 0;
222          _snprintf (t, sizeof (t) - 1, "\"%s:%d\"", http, port);      
223          strcat (proxy, t);      strcpy (proxy, "HTTP proxy: ");
224      }      if (kserver_get_proxy (&port)) {
225      else          char t[256];
226          strcat( proxy, "none" );          const char *http = kserver_get_proxy (&port);
227      SetDlgItemText( dlg, IDC_KEYSERVER_PROXY, proxy );          _snprintf (t, sizeof (t) - 1, "\"%s:%d\"", http, port);
228  } /* set_proxy */          strcat (proxy, t);
229        }
230        else
231  static int inline          strcat( proxy, "none" );
232  kserver_get_pos (listview_ctrl_t lv)      SetDlgItemText( dlg, IDC_KEYSERVER_PROXY, proxy );
233  {  } /* set_proxy */
234      if (listview_count_items (lv, 0) == 1)  
235          return 0;  
236      return listview_get_curr_pos (lv);  static int inline
237  }  kserver_get_pos (listview_ctrl_t lv)
238    {
239        if (listview_count_items (lv, 0) == 1)
240  static u16 inline          return 0;
241  kserver_get_port (listview_ctrl_t lv)      return listview_get_curr_pos (lv);
242  {  }
243      char buf[16];  
244    
245      listview_get_item_text (lv, kserver_get_pos (lv), 3, buf, 15);  static u16 inline
246      return (u16)strtoul (buf, NULL, 10);  kserver_get_port (listview_ctrl_t lv)
247  }  {
248        char buf[16];
249  static void  
250  load_default_ks (listview_ctrl_t lv)      listview_get_item_text (lv, kserver_get_pos (lv), 3, buf, 15);
251  {      return (u16)strtoul (buf, NULL, 10);
252      char * p, buf[192];  }
253      int i;  
254    static void
255      p = get_reg_entry_keyserver ("Default");  load_default_ks (listview_ctrl_t lv)
256      if (!p)  {
257          return;      char * p, buf[192];
258      for( i = 0; i < listview_count_items( lv, 0 ); i++ ) {      int i;
259          listview_get_item_text( lv, i, 0, buf, sizeof (buf)-1 );  
260          if( !strncmp( p, buf, strlen( p ) ) ) {      p = get_reg_entry_keyserver ("Default");
261              listview_add_sub_item( lv, i, 2, "x" );      if (!p)
262              break;          return;
263          }      for( i = 0; i < listview_count_items( lv, 0 ); i++ ) {
264      }          listview_get_item_text( lv, i, 0, buf, sizeof (buf)-1 );
265      free_if_alloc (p);          if( !strncmp( p, buf, strlen( p ) ) ) {
266  } /* load_default_ks */              listview_add_sub_item( lv, i, 2, "x" );
267                break;
268            }
269  static int      }
270  save_default_ks (listview_ctrl_t lv)      free_if_alloc (p);
271  {  } /* load_default_ks */
272      char buf[192], port[32];  
273      int idx, i;    
274    static int
275      idx = listview_get_curr_pos( lv );  save_default_ks (listview_ctrl_t lv)
276      if( idx == -1 ) {  {
277          msg_box( NULL, _("Please select one of the servers."), _("Keyserver"), MB_ERR );      char buf[192], port[32];
278          return -1;      int idx, i;  
279      }  
280      listview_get_item_text( lv, idx, 1, buf, sizeof (buf)-1 );      idx = listview_get_curr_pos( lv );
281      if( *buf != 'H' ) {      if( idx == -1 ) {
282          msg_box( NULL, _("Only HTTP keyserver can be used."), _("Keyserver"), MB_ERR );          msg_box( NULL, _("Please select one of the servers."), _("Keyserver"), MB_ERR );
283          return -1;          return -1;
284      }      }
285      for (i = 0; i < listview_count_items( lv, 0 ); i++)      listview_get_item_text( lv, idx, 1, buf, sizeof (buf)-1 );
286          listview_add_sub_item (lv, i, 2, "");      if( *buf != 'H' ) {
287      listview_add_sub_item (lv, idx, 2, "x");          msg_box( NULL, _("Only HTTP keyserver can be used."), _("Keyserver"), MB_ERR );
288      listview_get_item_text (lv, idx, 0, buf, sizeof (buf)-1);          return -1;
289      set_reg_entry_keyserver ("Default", buf);      }
290      i = kserver_get_port (lv);      for (i = 0; i < listview_count_items( lv, 0 ); i++)
291      sprintf (port, "%d", i);          listview_add_sub_item (lv, i, 2, "");
292      set_reg_entry_keyserver ("Default_Port", port);      listview_add_sub_item (lv, idx, 2, "x");
293      keyserver_set_default (buf, (u16)i);      listview_get_item_text (lv, idx, 0, buf, sizeof (buf)-1);
294      return 0;      set_reg_entry_keyserver ("Default", buf);
295  } /* save_default_ks */      i = kserver_get_port (lv);
296        sprintf (port, "%d", i);
297        set_reg_entry_keyserver ("Default_Port", port);
298  int      keyserver_set_default (buf, (u16)i);
299  keyserver_list_build (listview_ctrl_t *r_lv, HWND hwnd)      return 0;
300  {  } /* save_default_ks */
301      struct listview_column_s keyserver[] = {  
302          {0, 160, (char *)_("DNS Name")},          
303          {1,  52, (char *)_("Protocol")},  int
304          {2,  46, (char *)_("Default")},  keyserver_list_build (listview_ctrl_t *r_lv, HWND hwnd)
305          {3,  46, (char *)_("Port")},  {
306          {0,   0, NULL}      struct listview_column_s keyserver[] = {
307      };          {0, 160, (char *)_("DNS Name")},        
308      listview_ctrl_t lv;          {1,  52, (char *)_("Protocol")},
309      char buf[32];          {2,  46, (char *)_("Default")},
310      int j;          {3,  46, (char *)_("Port")},
311            {0,   0, NULL}
312      listview_new (&lv);          };
313      lv->ctrl = hwnd;            listview_ctrl_t lv;
314      for (j=0; keyserver[j].fieldname; j++)      char buf[32];
315          listview_add_column (lv, &keyserver[j]);              int j;
316      for (j = 0; j<MAX_KEYSERVERS; j++) {  
317          if (!server[j].used)      listview_new (&lv);    
318              continue;      lv->ctrl = hwnd;      
319          listview_add_item (lv, " ");      for (j=0; keyserver[j].fieldname; j++)
320          listview_add_sub_item (lv, 0, 0, server[j].name);          listview_add_column (lv, &keyserver[j]);        
321          switch (server[j].proto) {      for (j = 0; j<MAX_KEYSERVERS; j++) {
322          case KSPROTO_HTTP:          if (!server[j].used)
323              listview_add_sub_item( lv, 0, 1, "H" ); break;              continue;
324          case KSPROTO_LDAP:          listview_add_item (lv, " ");
325              listview_add_sub_item( lv, 0, 1, "L" ); break;          listview_add_sub_item (lv, 0, 0, server[j].name);
326          case KSPROTO_FINGER:          switch (server[j].proto) {
327              listview_add_sub_item( lv, 0, 1, "F" ); break;          case KSPROTO_HTTP:
328          }              listview_add_sub_item( lv, 0, 1, "H" ); break;
329          sprintf (buf, "%d", server[j].port);          case KSPROTO_LDAP:
330          listview_add_sub_item (lv, 0, 3, buf);              listview_add_sub_item( lv, 0, 1, "L" ); break;
331      }          case KSPROTO_FINGER:
332      load_default_ks (lv);              listview_add_sub_item( lv, 0, 1, "F" ); break;
333      if (listview_count_items (lv, 0) == 0) {          }
334          listview_add_item (lv, "");          sprintf (buf, "%d", server[j].port);
335          listview_add_sub_item (lv, 0, 0, DEF_HKP_KEYSERVER);          listview_add_sub_item (lv, 0, 3, buf);
336          listview_add_sub_item (lv, 0, 1, "H");      }
337      }      load_default_ks (lv);
338      listview_set_ext_style (lv);      if (listview_count_items (lv, 0) == 0) {
339      *r_lv = lv;          listview_add_item (lv, "");
340      return 0;          listview_add_sub_item (lv, 0, 0, DEF_HKP_KEYSERVER);
341  }          listview_add_sub_item (lv, 0, 1, "H");
342        }
343        listview_set_ext_style (lv);
344  BOOL CALLBACK      *r_lv = lv;
345  keyserver_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)      return 0;
346  {  }
347      static listview_ctrl_t lv = NULL;  
348      static int lv_idx = 0;  
349      int rc, proto_nr = 0;  BOOL CALLBACK
350      char kserver[128], pattern[128];  keyserver_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
351      char proto[16];      {
352      keyserver_ctx ksc;      static listview_ctrl_t lv = NULL;
353            static int lv_idx = 0;
354      switch ( msg ) {      int rc, proto_nr = 0;
355      case WM_INITDIALOG:      char kserver[128], pattern[128];
356      #ifndef LANG_DE      char proto[16];    
357          SetWindowText (dlg, _("Keyserver Access"));      keyserver_ctx ksc;
358          SetDlgItemText (dlg, IDC_KEYSERVER_RECV, _("&Receive"));      
359          SetDlgItemText (dlg, IDC_KEYSERVER_SEND,      switch ( msg ) {
360                          _("Send key (default is receiving)"));      case WM_INITDIALOG:
361          SetDlgItemText (dlg, IDC_KEYSERVER_INFO,      #ifndef LANG_DE
362                          _("Please enter the key ID or email address you search for"));          SetWindowText (dlg, _("Keyserver Access"));
363          SetDlgItemText (dlg, IDC_KEYSERVER_INDEX, _("&Search"));          SetDlgItemText (dlg, IDC_KEYSERVER_RECV, _("&Receive"));
364          SetDlgItemText (dlg, IDC_KEYSERVER_PROXSETT, _("C&hange"));          SetDlgItemText (dlg, IDC_KEYSERVER_SEND,
365          SetDlgItemText (dlg, IDC_KEYSERVER_DEFAULT, _("Set &default"));                          _("Send key (default is receiving)"));
366      #endif          SetDlgItemText (dlg, IDC_KEYSERVER_INFO,
367          set_proxy (dlg);                          _("Please enter the key ID or email address you search for"));
368          keyserver_list_build (&lv, GetDlgItem (dlg, IDC_KEYSERVER_LIST));          SetDlgItemText (dlg, IDC_KEYSERVER_INDEX, _("&Search"));
369          center_window (dlg, NULL);          SetDlgItemText (dlg, IDC_KEYSERVER_PROXSETT, _("C&hange"));
370          SetForegroundWindow (dlg);          SetDlgItemText (dlg, IDC_KEYSERVER_DEFAULT, _("Set &default"));
371          return TRUE;      #endif
372                    set_proxy (dlg);
373      case WM_NOTIFY:          keyserver_list_build (&lv, GetDlgItem (dlg, IDC_KEYSERVER_LIST));
374          NMHDR *notify;          center_window (dlg, NULL);
375          notify = (NMHDR *)lparam;          SetForegroundWindow (dlg);
376          if( notify && notify->code == NM_CLICK          return TRUE;
377              && notify->idFrom == IDC_KEYSERVER_LIST )          
378              lv_idx = listview_get_curr_pos( lv );      case WM_NOTIFY:
379          return TRUE;          NMHDR *notify;
380                    notify = (NMHDR *)lparam;
381      case WM_DESTROY:          if( notify && notify->code == NM_CLICK
382          if( lv ) {              && notify->idFrom == IDC_KEYSERVER_LIST )
383              listview_release( lv );              lv_idx = listview_get_curr_pos( lv );
384              lv = NULL;          return TRUE;
385          }          
386          lv_idx = 0;      case WM_DESTROY:
387          return FALSE;          if( lv ) {
388                        listview_release( lv );
389      case WM_SYSCOMMAND:              lv = NULL;
390          if( LOWORD( wparam ) == SC_CLOSE )          }
391              EndDialog( dlg, TRUE );          lv_idx = 0;
392          return FALSE;          return FALSE;
393                    
394      case WM_COMMAND:      case WM_SYSCOMMAND:
395          switch( LOWORD( wparam ) ) {          if( LOWORD( wparam ) == SC_CLOSE )
396          case IDC_KEYSERVER_PROXSETT:              EndDialog( dlg, TRUE );
397              dialog_box_param( glob_hinst, (LPCTSTR)IDD_WINPT_KEYSERVER_PROXY, glob_hwnd,          return FALSE;
398                                keyserver_proxy_dlg_proc, NULL,          
399                                _("Proxy Settings"), IDS_WINPT_KEYSERVER_PROXY );      case WM_COMMAND:
400              set_proxy( dlg );          switch( LOWORD( wparam ) ) {
401              return TRUE;          case IDC_KEYSERVER_PROXSETT:
402                            dialog_box_param( glob_hinst, (LPCTSTR)IDD_WINPT_KEYSERVER_PROXY, glob_hwnd,
403          case IDC_KEYSERVER_INDEX:                                keyserver_proxy_dlg_proc, NULL,
404              if (!lv_idx) {                                _("Proxy Settings"), IDS_WINPT_KEYSERVER_PROXY );
405                  lv_idx = kserver_get_pos (lv);              set_proxy( dlg );
406                  if (lv_idx == -1) {              return TRUE;
407                      msg_box (dlg, _("Please select one of the keyservers."), _("Keyserver"), MB_INFO);              
408                      return FALSE;          case IDC_KEYSERVER_INDEX:
409                  }              if (!lv_idx) {
410              }                  lv_idx = kserver_get_pos (lv);
411              listview_get_item_text (lv, lv_idx, 1, proto, sizeof (proto)-1);                  if (lv_idx == -1) {
412              if (*proto == 'L') {                      msg_box (dlg, _("Please select one of the keyservers."), _("Keyserver"), MB_INFO);
413                  msg_box( dlg, _("This is not implemented yet!"), _("Keyserver"), MB_ERR );                      return FALSE;
414                  return FALSE;                  }
415              }              }
416              listview_get_item_text (lv, lv_idx, 0, kserver, sizeof (kserver)-1);              listview_get_item_text (lv, lv_idx, 1, proto, sizeof (proto)-1);
417              if (!GetDlgItemText (dlg, IDC_KEYSERVER_SEARCH, pattern, sizeof (pattern)-1)) {              if (*proto == 'L') {
418                  msg_box (dlg, _("Please enter the search pattern."), _("Keyserver"), MB_INFO);                  msg_box( dlg, _("This is not implemented yet!"), _("Keyserver"), MB_ERR );
419                  return FALSE;                  return FALSE;
420              }              }
421              ksc.name = kserver;              listview_get_item_text (lv, lv_idx, 0, kserver, sizeof (kserver)-1);
422              ksc.pattern = pattern;              if (!GetDlgItemText (dlg, IDC_KEYSERVER_SEARCH, pattern, sizeof (pattern)-1)) {
423              ksc.port = kserver_get_port (lv);                  msg_box (dlg, _("Please enter the search pattern."), _("Keyserver"), MB_INFO);
424              DialogBoxParam( glob_hinst, (LPCSTR)IDD_WINPT_HKPSEARCH, dlg,                  return FALSE;
425                              hkpsearch_dlg_proc, (LPARAM) &ksc );              }
426              return TRUE;              ksc.name = kserver;
427                            ksc.pattern = pattern;
428          case IDC_KEYSERVER_RECV:              ksc.port = kserver_get_port (lv);
429              memset (&kserver, 0, sizeof (kserver));              DialogBoxParam( glob_hinst, (LPCSTR)IDD_WINPT_HKPSEARCH, dlg,
430              if (!lv_idx) {                              hkpsearch_dlg_proc, (LPARAM) &ksc );
431                  lv_idx = kserver_get_pos (lv);              return TRUE;
432                  if (lv_idx == -1) {              
433                      msg_box( dlg, _("Please select one of the keyservers."), _("Keyserver"), MB_INFO );          case IDC_KEYSERVER_RECV:
434                      return FALSE;              memset (&kserver, 0, sizeof (kserver));
435                  }              if (!lv_idx) {
436              }                  lv_idx = kserver_get_pos (lv);
437              listview_get_item_text( lv, lv_idx, 1, proto, sizeof (proto)-1 );                  if (lv_idx == -1) {
438              proto_nr = KSPROTO_HTTP;                      msg_box( dlg, _("Please select one of the keyservers."), _("Keyserver"), MB_INFO );
439              if( *proto == 'L' )                      return FALSE;
440                  proto_nr = KSPROTO_LDAP;                  }
441              else if( *proto == 'F' )              }
442                  proto_nr = KSPROTO_FINGER;              listview_get_item_text( lv, lv_idx, 1, proto, sizeof (proto)-1 );
443              listview_get_item_text( lv, lv_idx, 0, kserver, sizeof (kserver)-1 );              proto_nr = KSPROTO_HTTP;
444              if( !GetDlgItemText( dlg, IDC_KEYSERVER_SEARCH, pattern, sizeof (pattern)-1 ) ) {              if( *proto == 'L' )
445                  msg_box( dlg, _("Please enter the search pattern."), _("Keyserver"), MB_INFO );                  proto_nr = KSPROTO_LDAP;
446                  return FALSE;              else if( *proto == 'F' )
447              }                  proto_nr = KSPROTO_FINGER;
448              if( proto_nr == KSPROTO_LDAP && strchr( pattern, '@' ) ) {              listview_get_item_text( lv, lv_idx, 0, kserver, sizeof (kserver)-1 );
449                  msg_box( dlg, _("Only keyids are allowed."), _("LDAP Keyserver"), MB_INFO );              if( !GetDlgItemText( dlg, IDC_KEYSERVER_SEARCH, pattern, sizeof (pattern)-1 ) ) {
450                  return FALSE;                  msg_box( dlg, _("Please enter the search pattern."), _("Keyserver"), MB_INFO );
451              }                  return FALSE;
452              else if (proto_nr == KSPROTO_FINGER) {              }
453                  if (strchr (pattern, '@') || strchr (pattern, ' ')) {              if( proto_nr == KSPROTO_LDAP && strchr( pattern, '@' ) ) {
454                      msg_box (dlg, _("Only enter the name of the user."), _("FINGER Keyserver"), MB_INFO);                  msg_box( dlg, _("Only keyids are allowed."), _("LDAP Keyserver"), MB_INFO );
455                      return FALSE;                  return FALSE;
456                  }              }
457              }              else if (proto_nr == KSPROTO_FINGER) {
458              else if( check_pattern( pattern ) ) {                  if (strchr (pattern, '@') || strchr (pattern, ' ')) {
459                  msg_box( dlg, _("Only email addresses or keyids are allowed."), _("HKP Keyserver"), MB_INFO );                      msg_box (dlg, _("Only enter the name of the user."), _("FINGER Keyserver"), MB_INFO);
460                  return FALSE;                      return FALSE;
461              }                  }
462              rc = hkp_recv_key (dlg, kserver, kserver_get_port (lv), pattern, proto_nr, 0);              }
463              if (!rc)              else if( check_pattern( pattern ) ) {
464                  keycache_set_reload (1);                  msg_box( dlg, _("Only email addresses or keyids are allowed."), _("HKP Keyserver"), MB_INFO );
465              return TRUE;                  return FALSE;
466                }
467          case IDC_KEYSERVER_DEFAULT:              rc = hkp_recv_key (dlg, kserver, kserver_get_port (lv), pattern, proto_nr, 0);
468              save_default_ks( lv );              if (!rc)
469              break;                  keycache_set_reload (1);
470                            return TRUE;
471          case IDCANCEL:  
472              EndDialog( dlg, FALSE );          case IDC_KEYSERVER_DEFAULT:
473              return FALSE;              save_default_ks( lv );
474          }              break;
475          break;              
476      }          case IDCANCEL:
477                    EndDialog( dlg, FALSE );
478      return FALSE;              return FALSE;
479  } /* keyserver_dlg_proc */          }
480            break;
481        }
482        
483        return FALSE;
484    } /* keyserver_dlg_proc */

Legend:
Removed from v.35  
changed lines
  Added in v.36

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26