/[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 190 by twoaday, Mon Mar 27 10:05:14 2006 UTC revision 231 by twoaday, Tue Jun 20 09:18:44 2006 UTC
# Line 43  Line 43 
43  #include "wptUTF8.h"  #include "wptUTF8.h"
44    
45  void remove_crit_file_attrs (const char *fname, int force);  void remove_crit_file_attrs (const char *fname, int force);
46    BOOL user_is_admin (void);
47    
48    /* Global variables. */
49  HINSTANCE glob_hinst;   /* global instance for the dialogs */  HINSTANCE glob_hinst;   /* global instance for the dialogs */
50  HWND glob_hwnd;         /* global window handle for the dialogs */  HWND glob_hwnd;         /* global window handle for the dialogs */
 HWND activ_hwnd;  
51  int scard_support = 0;  int scard_support = 0;
52  int debug = 0;  int debug = 0;
53  int mobile_mode_active = 0;  int mobile_mode_active = 0;
54  int gpg_read_only = 0;  int gpg_read_only = 0;
55    int admin_user = 0;
56  char gpgver[3];  char gpgver[3];
57    /* End */
58    
59    
60  /* Load the key cache and rebuild the signature cache. */  /* Load the key cache and rebuild the signature cache. */
# Line 65  update_keycache (HWND hwnd) Line 67  update_keycache (HWND hwnd)
67      rcs.tr_update = 1;      rcs.tr_update = 1;
68      DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, hwnd,      DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, hwnd,
69                      keycache_dlg_proc, (LPARAM)&rcs);                      keycache_dlg_proc, (LPARAM)&rcs);
70        /* XXX: the dialog return 0 when an error occurs.
71                in this case figure out if the gpg env is OK
72                and supress dialogs to configure gpg. */
73  }  }
74    
75    
# Line 86  gpg_set_debug_mode (int val) Line 91  gpg_set_debug_mode (int val)
91  }  }
92    
93    
 /* Return the name of the gettext language file. */  
 static char*  
 get_gettext_lang (void)  
 {      
     char *fname;  
     fname = get_reg_entry_mo ();  
     if (!fname)  
         return NULL;  
     return fname;  
 }  
   
   
94  /* Initialize the gettext sub system. */  /* Initialize the gettext sub system. */
95  static void  static void
96  load_gettext (int prev_inst)  load_gettext (void)
97  {  {
98      char *nls = NULL;      char *nls = NULL;
99    
100      nls = get_gettext_lang ();      /* Return the name of the gettext language file. */
101        nls = get_reg_entry_mo ();
102      if (nls != NULL) {      if (nls != NULL) {
103          set_gettext_file ("winpt", nls);          set_gettext_file ("winpt", nls);
104          free_if_alloc (nls);          free_if_alloc (nls);
# Line 216  static int Line 210  static int
210  check_default_key (gpg_keycache_t kc)  check_default_key (gpg_keycache_t kc)
211  {  {
212      gpgme_key_t key;      gpgme_key_t key;
213      gpgme_error_t err = GPG_ERR_NO_ERROR;      gpgme_error_t err = gpg_error (GPG_ERR_NO_ERROR);
214      char *defkey;      char *defkey;
215    
216      defkey = get_gnupg_default_key ();      defkey = get_gnupg_default_key ();
# Line 224  check_default_key (gpg_keycache_t kc) Line 218  check_default_key (gpg_keycache_t kc)
218          err = gpg_keycache_find_key (kc, defkey, 0, &key);          err = gpg_keycache_find_key (kc, defkey, 0, &key);
219      else      else
220          msg_box (NULL, _("No useable secret key found."),          msg_box (NULL, _("No useable secret key found."),
221                   _("WinPT Error"), MB_ERR);                   _("WinPT Warning"), MB_WARN);
222      free_if_alloc (defkey);      free_if_alloc (defkey);
223      return err? -1 : 0;      return err? -1 : 0;
224  }  }
# Line 268  get_prog_part (const char * fname, int u Line 262  get_prog_part (const char * fname, int u
262  static bool  static bool
263  check_crypto_engine (void)  check_crypto_engine (void)
264  {  {
265      int ma=0, mi=0, pa=0;      int ma = 0, mi = 0, pa = 0;
266      int rc;      int rc;
267    
268      rc = check_gnupg_engine (NEED_GPG_VERSION, &ma, &mi, &pa);      rc = check_gnupg_engine (NEED_GPG_VERSION, &ma, &mi, &pa);
# Line 285  check_crypto_engine (void) Line 279  check_crypto_engine (void)
279          return false;          return false;
280      }      }
281      /* We enable smartcard support for GPG: >= 2 or >= 1.4.3 */      /* We enable smartcard support for GPG: >= 2 or >= 1.4.3 */
282      if (ma > 1 || pa >= 3)          if (ma > 1 || pa >= 3)
283          scard_support = 1;          scard_support = 1;
284    
285      gpgver[0] = ma;      gpgver[0] = ma;
# Line 301  static int Line 295  static int
295  load_keyserver_conf (int quiet)  load_keyserver_conf (int quiet)
296  {  {
297      char *buf;      char *buf;
298      const char *t;      const char *t, *conf;
299      int rc;      int rc;
300    
301      /* Create $APPDATA\winpt if needed. */      /* Create $APPDATA\winpt if needed. */
# Line 317  load_keyserver_conf (int quiet) Line 311  load_keyserver_conf (int quiet)
311      /* Check for $APPDATA\winpt\keyserver.conf */      /* Check for $APPDATA\winpt\keyserver.conf */
312      buf = make_special_filename (CSIDL_APPDATA, "winpt\\keyserver.conf", NULL);      buf = make_special_filename (CSIDL_APPDATA, "winpt\\keyserver.conf", NULL);
313    
314      if (!file_exist_check (get_prog_part ("keyserver.conf", 0)))      conf = get_prog_part ("keyserver.conf", 0);
315          t = get_prog_part ("keyserver.conf", 0);      if (!file_exist_check (conf))
316            t = conf;
317      else      else
318          t = "keyserver.conf";          t = "keyserver.conf";
319      if (file_exist_check (t) == 0 && file_exist_check (buf) != 0) {      if (file_exist_check (t) == 0 && file_exist_check (buf) != 0) {
         //log_box (_("Keyserver"), MB_INFO,  
         //       _("keyserver.conf will be copied to \"%s\"\r\n"), buf);  
320          if (!CopyFile (t, buf, FALSE)) {          if (!CopyFile (t, buf, FALSE)) {
321              MessageBox (NULL, _("Failed to copy the keyserver.conf"),              MessageBox (NULL, _("Failed to copy the keyserver.conf"),
322                          _("Keyserver"), MB_ERR);                          _("Keyserver"), MB_ERR);
# Line 388  enable_mobile_mode (void) Line 381  enable_mobile_mode (void)
381      reg_prefs.expert = 0;      reg_prefs.expert = 0;
382      reg_prefs.kserv_conf = m_strdup ("keyserver.conf");      reg_prefs.kserv_conf = m_strdup ("keyserver.conf");
383      reg_prefs.no_zip_mmedia = 1;      reg_prefs.no_zip_mmedia = 1;
     reg_prefs.use_tmpfiles = 1;  
384      reg_prefs.word_wrap = 80;      reg_prefs.word_wrap = 80;
385      reg_prefs.use_viewer = 0; /* XXX */      reg_prefs.use_viewer = 0; /* XXX */
386      return 0;      return 0;
# Line 429  winpt_debug_msg (void) Line 421  winpt_debug_msg (void)
421  }  }
422    
423    
424    /* Search for insecure ElGamal keys and return the
425       number of founded keys. */
426    static int
427    count_insecure_elgkeys (void)
428    {
429        gpg_keycache_t pc;
430        gpgme_key_t key;
431        int n = 0;
432    
433        pc = keycache_get_ctx (1);
434        while (!gpg_keycache_next_key (pc, 0, &key)) {
435            if (key->subkeys->pubkey_algo == GPGME_PK_ELG)
436                n++;
437        }
438        gpg_keycache_rewind (pc);
439        return n;
440    }
441    
442    
443  /* Main entry point. */  /* Main entry point. */
444  int WINAPI  int WINAPI
445  WinMain (HINSTANCE hinst, HINSTANCE hprev, LPSTR cmdline, int showcmd)  WinMain (HINSTANCE hinst, HINSTANCE hprev, LPSTR cmdline, int showcmd)
# Line 437  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 448  WinMain (HINSTANCE hinst, HINSTANCE hpre
448      HACCEL accel_tab;      HACCEL accel_tab;
449      MSG msg;      MSG msg;
450      HWND hwnd = NULL;      HWND hwnd = NULL;
     WORD ver[3], ptdver[4];  
451      int rc, ec, created = 0;      int rc, ec, created = 0;
452      int first_start = 0, start_gpgprefs = 0;      int first_start = 0, start_gpgprefs = 0;
453      int winpt_inst_found = 0;      int winpt_inst_found = 0;
# Line 452  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 462  WinMain (HINSTANCE hinst, HINSTANCE hpre
462          return 0;          return 0;
463      }      }
464    
     /*  
     OSVERSIONINFO osinf;  
     memset (&osinf, 0, sizeof (osinf));  
     if (GetVersionEx (&osinf) &&  
         osinf.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS &&  
         osinf.dwMinorVersion == 0) {  
         msg_box (NULL, "WinPT propably does not work on Windows 95 without restrictions",  
                  "WinPT Warning", MB_INFO);  
     }  
     */  
   
465      #ifdef _DEBUG      #ifdef _DEBUG
466      gpg_set_debug_mode (1);      gpg_set_debug_mode (1);
467      debug = 1;      debug = 1;
468      #endif      #endif
469    
470        /* XXX
471        WORD ver[3], ptdver[4];
472      get_file_version ("WinPT.exe", &ver[0], &ver[1], &ver[2], &ver[3]);      get_file_version ("WinPT.exe", &ver[0], &ver[1], &ver[2], &ver[3]);
473      get_file_version ("PTD.dll", &ptdver[0], &ptdver[1],      get_file_version ("PTD.dll", &ptdver[0], &ptdver[1],
474                                   &ptdver[2], &ptdver[3]);                                   &ptdver[2], &ptdver[3]);
475      /* XXX      
476      if (ptdver[0] != ver[0] || ptdver[1] != ver[1]|| ptdver[2] != ver[2]) {      if (ptdver[0] != ver[0] || ptdver[1] != ver[1]|| ptdver[2] != ver[2]) {
477          log_box (_("WinPT Error"), MB_ERR,          log_box (_("WinPT Error"), MB_ERR,
478                   _("The PTD.dll file has a different version than WinPT.exe\n"                   _("The PTD.dll file has a different version than WinPT.exe\n"
# Line 505  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 506  WinMain (HINSTANCE hinst, HINSTANCE hpre
506      }      }
507            
508      set_default_keyserver ();      set_default_keyserver ();
509      load_gettext (winpt_inst_found);      load_gettext ();
510        admin_user = user_is_admin ();
511    
512      if (!mobile_mode_active) {      if (!mobile_mode_active) {
513          regist_inst_gnupg (1);          regist_inst_gnupg (1);
# Line 519  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 521  WinMain (HINSTANCE hinst, HINSTANCE hpre
521    
522      if (!created) {      if (!created) {
523          memset (&reg_prefs, 0, sizeof (reg_prefs));          memset (&reg_prefs, 0, sizeof (reg_prefs));
         reg_prefs.use_tmpfiles = 1; /* default */  
524          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 */
525          get_reg_winpt_prefs (&reg_prefs);          get_reg_winpt_prefs (&reg_prefs);
526          gnupg_load_config ();          gnupg_load_config ();
# Line 557  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 558  WinMain (HINSTANCE hinst, HINSTANCE hpre
558              }              }
559          }          }
560          else {          else {
561              msg_box (NULL, _("GPG home directory could not be determited."),              msg_box (NULL, _("GPG home directory could not be determined."),
562                       _("WinPT Error"), MB_ERR);                       _("WinPT Error"), MB_ERR);
563              goto start;              goto start;
564          }          }
# Line 733  start: Line 734  start:
734              free_gnupg_table ();              free_gnupg_table ();
735              return 0;              return 0;
736          }          }
737            if (!is_gpg4win_installed ()) {
738                select_language ();
739                load_gettext ();
740            }
741      }      }
742      else {      else {
743          gpg_keycache_t c, sec_c;          gpg_keycache_t c, sec_c;
# Line 764  start: Line 769  start:
769                       _("Default key (from the GPG config file) could not be found.\n"                       _("Default key (from the GPG config file) could not be found.\n"
770                         "Please check your gpg.conf or set a new default key to correct it:\n\n"                         "Please check your gpg.conf or set a new default key to correct it:\n\n"
771                         "%s: public key not found."), p? p : "[null]");                         "%s: public key not found."), p? p : "[null]");
772              free_if_alloc (p);              set_gnupg_default_key (NULL);
             DestroyWindow (hwnd);  
             free_gnupg_table ();  
             return 0;  
773          }          }
774          if (count_insecure_elgkeys ())          if (count_insecure_elgkeys ())
775              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_ELGWARN, glob_hwnd,              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_ELGWARN, glob_hwnd,

Legend:
Removed from v.190  
changed lines
  Added in v.231

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26