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

Diff of /trunk/Src/WinPT.cpp

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

revision 137 by twoaday, Mon Jan 9 14:01:51 2006 UTC revision 172 by twoaday, Mon Jan 30 13:47:35 2006 UTC
# Line 22  Line 22 
22  #endif  #endif
23    
24  #include <windows.h>  #include <windows.h>
25    #include <shlobj.h>
26    
27  #include "resource.h"  #include "resource.h"
28  #include "wptTypes.h"  #include "wptTypes.h"
# Line 40  Line 41 
41  #include "wptCardEdit.h"  #include "wptCardEdit.h"
42  #include "wptCrypto.h"  #include "wptCrypto.h"
43    
44    void remove_crit_file_attrs (const char *fname, int force);
45    
46    
47  HINSTANCE glob_hinst;   /* global instance for the dialogs */  HINSTANCE glob_hinst;   /* global instance for the dialogs */
48  HWND glob_hwnd;         /* global window handle for the dialogs */  HWND glob_hwnd;         /* global window handle for the dialogs */
49  HWND activ_hwnd;  HWND activ_hwnd;
# Line 100  load_gettext (int prev_inst) Line 104  load_gettext (int prev_inst)
104  }  }
105    
106    
107    /* Return true if the GPG environment is useable. */
108    static bool
109    gpg_prefs_ok (void)
110    {
111        char *p;
112    
113        p = get_reg_entry_gpg4win ("gpg.exe");
114        if (!p || file_exist_check (p) != 0) {
115            free_if_alloc (p);
116            p = get_reg_entry_gpg ("gpgProgram");
117            if (!p || file_exist_check (p) != 0) {
118                free_if_alloc (p);
119                return false;
120            }
121        }
122        free_if_alloc (p);
123        p = get_reg_entry_gpg4win (NULL);    
124        if (!p || dir_exist_check (p) != 0) {
125            free_if_alloc (p);
126            p = get_reg_entry_gpg ("HomeDir");
127            if (!p || dir_exist_check (p) != 0) {
128                free_if_alloc (p);
129                return false;
130            }
131        }
132        free_if_alloc (p);
133        return true;
134    }
135    
136    
137    /* Check gpg files if they are read-only and ask the user
138       if this should be corrected. */
139    static void
140    check_readonly_attr (const char *homedir)
141    {
142        const char *files[] = {"pubring.gpg", "secring.gpg", "trustdb.gpg", NULL};
143        char *file;
144        int i;
145    
146        for (i=0; files[i] != NULL; i++) {
147            file = make_filename (homedir, files[i], NULL);
148            remove_crit_file_attrs (file, 0);
149            free_if_alloc (file);
150        }
151    }
152    
153    
154  /* Load the GPG environment. On the first start, some  /* Load the GPG environment. On the first start, some
155     checks are performed to find out in what state GPG is.     checks are performed to find out in what state GPG is.
156     Return value: 0  everything OK.     Return value: 0  everything OK.
# Line 120  load_gpg_env (void) Line 171  load_gpg_env (void)
171          return (1);          return (1);
172      }      }
173      free_if_alloc (p);      free_if_alloc (p);
174      p = multi_gnupg_path (0);  
175        p = get_reg_entry_gpg ("HomeDir");
176        if (!p || dir_exist_check (p) != 0) {
177            free_if_alloc (p);
178            p = multi_gnupg_path (0);
179        }
180      if (p && dir_exist_check (p)) {      if (p && dir_exist_check (p)) {
181          memset (&sec_attr, 0, sizeof (sec_attr));          memset (&sec_attr, 0, sizeof (sec_attr));
182          sec_attr.nLength = sizeof (sec_attr);          sec_attr.nLength = sizeof (sec_attr);
# Line 131  load_gpg_env (void) Line 187  load_gpg_env (void)
187              return (2);              return (2);
188          }          }
189      }      }
190        check_readonly_attr (p);
191      pkr = make_filename (p, "pubring", "gpg");      pkr = make_filename (p, "pubring", "gpg");
192      free_if_alloc (p);      free_if_alloc (p);
193      if (!pkr)      if (!pkr)
# Line 218  check_crypto_engine (void) Line 275  check_crypto_engine (void)
275          return false;          return false;
276      }      }
277      /* We enable smartcard support for GPG: >= 2 or >= 1.4.3 */      /* We enable smartcard support for GPG: >= 2 or >= 1.4.3 */
278      if (ma > 1 || pa >= 3)      if (ma > 1 || pa >= 3)    
279          scard_support = 1;          scard_support = 1;
280    
281      gpgver[0] = ma;      gpgver[0] = ma;
# Line 233  check_crypto_engine (void) Line 290  check_crypto_engine (void)
290  static int  static int
291  load_keyserver_conf (int quiet)  load_keyserver_conf (int quiet)
292  {  {
293        char *buf;
294      const char *t;      const char *t;
295      int rc;      int rc;
296    
297      if (reg_prefs.kserv_conf)      /* Create $APPDATA\winpt if needed. */
298          t = reg_prefs.kserv_conf;      buf = make_special_filename (CSIDL_APPDATA, "winpt", NULL);
299      else if (!file_exist_check (get_prog_part ("keyserver.conf", 0)))      if (buf && dir_exist_check (buf) && !CreateDirectory (buf, NULL)) {
300            MessageBox (NULL, _("Failed to create WinPT directory"),
301                        _("Keyserver"), MB_ERR);
302            free_if_alloc (buf);
303            return -1;
304        }
305        free_if_alloc (buf);
306    
307        /* Check for $APPDATA\winpt\keyserver.conf */
308        buf = make_special_filename (CSIDL_APPDATA, "winpt\\keyserver.conf", NULL);
309    
310        if (!file_exist_check (get_prog_part ("keyserver.conf", 0)))
311          t = get_prog_part ("keyserver.conf", 0);          t = get_prog_part ("keyserver.conf", 0);
312      else      else
313          t = "keyserver.conf";          t = "keyserver.conf";
314        if (file_exist_check (t) == 0 && file_exist_check (buf) != 0) {
315            //log_box (_("Keyserver"), MB_INFO,
316            //       _("keyserver.conf will be copied to \"%s\"\r\n"), buf);
317            if (!CopyFile (t, buf, FALSE)) {
318                MessageBox (NULL, _("Failed to copy the keyserver.conf"),
319                            _("Keyserver"), MB_ERR);
320                free_if_alloc (buf);
321                return -1;
322            }
323            t = buf;
324        }
325        else
326            t = buf;
327        
328      rc = kserver_load_conf (t);      rc = kserver_load_conf (t);
329      if (rc && !quiet)      if (rc && !quiet)
330          msg_box (NULL, winpt_strerror (rc), _("Keyserver"), MB_ERR);          msg_box (NULL, winpt_strerror (rc), _("Keyserver"), MB_ERR);
331        else {
332            free_if_alloc (reg_prefs.kserv_conf);
333            reg_prefs.kserv_conf = m_strdup (t);
334        }
335        free_if_alloc (buf);
336      return rc;      return rc;
337  }  }
338    
# Line 386  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 474  WinMain (HINSTANCE hinst, HINSTANCE hpre
474              hotkeys_modify ();              hotkeys_modify ();
475          gnupg_load_config ();          gnupg_load_config ();
476      }      }
477        else { /* default settings. */
478            reg_prefs.keylist_mode = 1;
479        }
480    
481      if (is_gpg4win_installed ())      if (is_gpg4win_installed ())
482          load_gpg_env (); /* XXX: check return code. */          load_gpg_env (); /* XXX: check return code. */
# Line 398  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 489  WinMain (HINSTANCE hinst, HINSTANCE hpre
489                   winpt_strerror (rc));                   winpt_strerror (rc));
490          s = get_fileopen_dlg (GetActiveWindow (),          s = get_fileopen_dlg (GetActiveWindow (),
491                                _("Select GPG Public Keyring"),                                _("Select GPG Public Keyring"),
492                                _("GPG Keyrings (*.gpg)\0*.gpg\0\0"),                                "GPG Keyrings (*.gpg)\0*.gpg\0\0",
493                                NULL);                                NULL);
494          if (s != NULL) {          if (s != NULL) {
495              size_t n;              size_t n;
# Line 557  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 648  WinMain (HINSTANCE hinst, HINSTANCE hpre
648      }      }
649    
650      if (first_start) {      if (first_start) {
         struct first_start_s fs;  
651          struct genkey_s c;          struct genkey_s c;
652            int choice;
653          HWND h;          HWND h;
654  start:  start:
655          h = GetDesktopWindow ();          h = GetDesktopWindow ();
656          DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, h,          if (!gpg_prefs_ok ())
657                DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, h,
658                              gpgprefs_dlg_proc, 0);                              gpgprefs_dlg_proc, 0);
659          DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_FIRST, h,          choice = DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_FIRST, h,
660                          first_run_dlg_proc, (LPARAM)&fs);                                   first_run_dlg_proc, 0);
661          switch (fs.choice) {          switch (choice) {
662          case SETUP_KEYGEN:          case SETUP_KEYGEN:
663              c.interactive = 1;              c.interactive = 1;
664              c.first_start = 1;              c.first_start = 1;
# Line 584  start: Line 676  start:
676              }              }
677              break;              break;
678    
679          case -1: /* Cancel/Abort. */          case 0: /* Cancel/Abort. */
680            default:
681              DestroyWindow (hwnd);              DestroyWindow (hwnd);
682              free_gnupg_table ();              free_gnupg_table ();
683              return 0;              return 0;
684          }          }
685          update_keycache (hwnd);          update_keycache (hwnd);
686          check_crypto_engine ();          if (!check_crypto_engine ()) {
687                DestroyWindow (hwnd);
688                free_gnupg_table ();
689                return 0;
690            }
691      }      }
692      else {      else {
693          gpg_keycache_t c;          gpg_keycache_t c;

Legend:
Removed from v.137  
changed lines
  Added in v.172

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26