/[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 180 by twoaday, Mon Mar 6 14:41:58 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 280  enable_mobile_mode (void) Line 368  enable_mobile_mode (void)
368      reg_prefs.auto_backup = 0;      reg_prefs.auto_backup = 0;
369      reg_prefs.cache_time = 0;      reg_prefs.cache_time = 0;
370      reg_prefs.expert = 0;      reg_prefs.expert = 0;
     reg_prefs.keylist_mode = 1;  
371      reg_prefs.kserv_conf = m_strdup ("keyserver.conf");      reg_prefs.kserv_conf = m_strdup ("keyserver.conf");
372      reg_prefs.no_zip_mmedia = 1;      reg_prefs.no_zip_mmedia = 1;
373      reg_prefs.use_tmpfiles = 1;      reg_prefs.use_tmpfiles = 1;
# Line 382  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 469  WinMain (HINSTANCE hinst, HINSTANCE hpre
469          reg_prefs.use_tmpfiles = 1; /* default */          reg_prefs.use_tmpfiles = 1; /* default */
470          reg_prefs.fm.progress = 0; /* XXX: fix the bug and enable it again */          reg_prefs.fm.progress = 0; /* XXX: fix the bug and enable it again */
471          get_reg_winpt_prefs (&reg_prefs);          get_reg_winpt_prefs (&reg_prefs);
         if (!reg_prefs.no_hotkeys)  
             hotkeys_modify ();  
472          gnupg_load_config ();          gnupg_load_config ();
473      }      }
474    
# Line 398  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 483  WinMain (HINSTANCE hinst, HINSTANCE hpre
483                   winpt_strerror (rc));                   winpt_strerror (rc));
484          s = get_fileopen_dlg (GetActiveWindow (),          s = get_fileopen_dlg (GetActiveWindow (),
485                                _("Select GPG Public Keyring"),                                _("Select GPG Public Keyring"),
486                                _("GPG Keyrings (*.gpg)\0*.gpg\0\0"),                                "GPG Keyrings (*.gpg)\0*.gpg\0\0",
487                                NULL);                                NULL);
488          if (s != NULL) {          if (s != NULL) {
489              size_t n;              size_t n;
# Line 557  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 642  WinMain (HINSTANCE hinst, HINSTANCE hpre
642      }      }
643    
644      if (first_start) {      if (first_start) {
         struct first_start_s fs;  
645          struct genkey_s c;          struct genkey_s c;
646            int choice;
647          HWND h;          HWND h;
648  start:  start:
649          h = GetDesktopWindow ();          h = GetDesktopWindow ();
650          DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, h,          if (!gpg_prefs_ok ())
651                DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, h,
652                              gpgprefs_dlg_proc, 0);                              gpgprefs_dlg_proc, 0);
653          DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_FIRST, h,          choice = DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_FIRST, h,
654                          first_run_dlg_proc, (LPARAM)&fs);                                   first_run_dlg_proc, 0);
655          switch (fs.choice) {          switch (choice) {
656          case SETUP_KEYGEN:          case SETUP_KEYGEN:
657              c.interactive = 1;              c.interactive = 1;
658              c.first_start = 1;              c.first_start = 1;
# Line 584  start: Line 670  start:
670              }              }
671              break;              break;
672    
673          case -1: /* Cancel/Abort. */          case 0: /* Cancel/Abort. */
674            default:
675              DestroyWindow (hwnd);              DestroyWindow (hwnd);
676              free_gnupg_table ();              free_gnupg_table ();
677              return 0;              return 0;
678          }          }
679          update_keycache (hwnd);          update_keycache (hwnd);
680          check_crypto_engine ();          if (!check_crypto_engine ()) {
681                DestroyWindow (hwnd);
682                free_gnupg_table ();
683                return 0;
684            }
685      }      }
686      else {      else {
687          gpg_keycache_t c;          gpg_keycache_t c, sec_c;
688          update_keycache (hwnd);          update_keycache (hwnd);
689          c = keycache_get_ctx (1);          c = keycache_get_ctx (1);
690          if (!c || !gpg_keycache_get_size (c)) {          if (!c || !gpg_keycache_get_size (c)) {
# Line 615  start: Line 706  start:
706                  return 0;                  return 0;
707              }              }
708          }          }
709          if (check_default_key (c)) {          sec_c = keycache_get_ctx (0);
710            if (check_default_key (sec_c)) {
711              char *p = get_gnupg_default_key ();              char *p = get_gnupg_default_key ();
712              log_box (_("WinPT Error"), MB_ERR,              log_box (_("WinPT Error"), MB_ERR,
713                       _("Default key from the GPG options file could not be found.\n"                       _("Default key (from the GPG config file) could not be found.\n"
714                         "Please check your gpg.conf (options) to correct this:\n\n"                         "Please check your gpg.conf or set a new default key to correct it:\n\n"
715                         "%s: public key not found."), p? p : "[null]");                         "%s: public key not found."), p? p : "[null]");
716              free_if_alloc (p);              free_if_alloc (p);
717              DestroyWindow (hwnd);              DestroyWindow (hwnd);

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26