/[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 255 by twoaday, Tue Aug 1 16:37:23 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. */
61  void  int
62  update_keycache (HWND hwnd)  update_keycache (HWND hwnd)
63  {  {
64        int err;
65    
66      refresh_cache_s rcs = {0};      refresh_cache_s rcs = {0};
67      rcs.kr_reload = 0;      rcs.kr_reload = 0;
68      rcs.kr_update = 1;      rcs.kr_update = 1;
69      rcs.tr_update = 1;      rcs.tr_update = 1;
70      DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, hwnd,      err = DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, hwnd,
71                      keycache_dlg_proc, (LPARAM)&rcs);                      keycache_dlg_proc, (LPARAM)&rcs);
72        if (err) {
73            char *cfg = get_gnupg_config ();
74            if (cfg && check_gnupg_options (cfg, 0) == WPTERR_FILE_EXIST)
75                msg_box (NULL, _("The gpg.conf contains at least one argument which points to a non-existing file."), "WinPT", MB_ERR);
76            free_if_alloc (cfg);
77            return -1;
78        }
79        return 0;
80  }  }
81    
82    
# Line 86  gpg_set_debug_mode (int val) Line 98  gpg_set_debug_mode (int val)
98  }  }
99    
100    
 /* 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;  
 }  
   
   
101  /* Initialize the gettext sub system. */  /* Initialize the gettext sub system. */
102  static void  static void
103  load_gettext (int prev_inst)  load_gettext (void)
104  {  {
105      char *nls = NULL;      char *nls = NULL;
106    
107      nls = get_gettext_lang ();      /* Return the name of the gettext language file. */
108        nls = get_reg_entry_mo ();
109      if (nls != NULL) {      if (nls != NULL) {
110          set_gettext_file ("winpt", nls);          set_gettext_file ("winpt", nls);
111          free_if_alloc (nls);          free_if_alloc (nls);
# Line 216  static int Line 217  static int
217  check_default_key (gpg_keycache_t kc)  check_default_key (gpg_keycache_t kc)
218  {  {
219      gpgme_key_t key;      gpgme_key_t key;
220      gpgme_error_t err = GPG_ERR_NO_ERROR;      gpgme_error_t err = gpg_error (GPG_ERR_NO_ERROR);
221      char *defkey;      char *defkey;
222    
223      defkey = get_gnupg_default_key ();      defkey = get_gnupg_default_key ();
# Line 224  check_default_key (gpg_keycache_t kc) Line 225  check_default_key (gpg_keycache_t kc)
225          err = gpg_keycache_find_key (kc, defkey, 0, &key);          err = gpg_keycache_find_key (kc, defkey, 0, &key);
226      else      else
227          msg_box (NULL, _("No useable secret key found."),          msg_box (NULL, _("No useable secret key found."),
228                   _("WinPT Error"), MB_ERR);                   _("WinPT Warning"), MB_WARN);
229      free_if_alloc (defkey);      free_if_alloc (defkey);
230      return err? -1 : 0;      return err? -1 : 0;
231  }  }
# Line 268  get_prog_part (const char * fname, int u Line 269  get_prog_part (const char * fname, int u
269  static bool  static bool
270  check_crypto_engine (void)  check_crypto_engine (void)
271  {  {
272      int ma=0, mi=0, pa=0;      int ma = 0, mi = 0, pa = 0;
273      int rc;      int rc;
274    
275      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 286  check_crypto_engine (void)
286          return false;          return false;
287      }      }
288      /* We enable smartcard support for GPG: >= 2 or >= 1.4.3 */      /* We enable smartcard support for GPG: >= 2 or >= 1.4.3 */
289      if (ma > 1 || pa >= 3)          if (ma > 1 || pa >= 3)
290          scard_support = 1;          scard_support = 1;
291    
292      gpgver[0] = ma;      gpgver[0] = ma;
# Line 299  check_crypto_engine (void) Line 300  check_crypto_engine (void)
300     do not show any errors. */     do not show any errors. */
301  static int  static int
302  load_keyserver_conf (int quiet)  load_keyserver_conf (int quiet)
303  {  {    
304        const char *t, *conf;
305      char *buf;      char *buf;
     const char *t;  
306      int rc;      int rc;
307    
308      /* Create $APPDATA\winpt if needed. */      /* Create $APPDATA\winpt if needed. */
# Line 317  load_keyserver_conf (int quiet) Line 318  load_keyserver_conf (int quiet)
318      /* Check for $APPDATA\winpt\keyserver.conf */      /* Check for $APPDATA\winpt\keyserver.conf */
319      buf = make_special_filename (CSIDL_APPDATA, "winpt\\keyserver.conf", NULL);      buf = make_special_filename (CSIDL_APPDATA, "winpt\\keyserver.conf", NULL);
320    
321      if (!file_exist_check (get_prog_part ("keyserver.conf", 0)))      conf = get_prog_part ("keyserver.conf", 0);
322          t = get_prog_part ("keyserver.conf", 0);      if (!file_exist_check (conf))
323            t = conf;
324      else      else
325          t = "keyserver.conf";          t = "keyserver.conf";
326      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);  
327          if (!CopyFile (t, buf, FALSE)) {          if (!CopyFile (t, buf, FALSE)) {
328              MessageBox (NULL, _("Failed to copy the keyserver.conf"),              MessageBox (NULL, _("Failed to copy the keyserver.conf"),
329                          _("Keyserver"), MB_ERR);                          _("Keyserver"), MB_ERR);
# Line 388  enable_mobile_mode (void) Line 388  enable_mobile_mode (void)
388      reg_prefs.expert = 0;      reg_prefs.expert = 0;
389      reg_prefs.kserv_conf = m_strdup ("keyserver.conf");      reg_prefs.kserv_conf = m_strdup ("keyserver.conf");
390      reg_prefs.no_zip_mmedia = 1;      reg_prefs.no_zip_mmedia = 1;
     reg_prefs.use_tmpfiles = 1;  
391      reg_prefs.word_wrap = 80;      reg_prefs.word_wrap = 80;
392      reg_prefs.use_viewer = 0; /* XXX */      reg_prefs.use_viewer = 0; /* XXX */
393      return 0;      return 0;
# Line 429  winpt_debug_msg (void) Line 428  winpt_debug_msg (void)
428  }  }
429    
430    
431    /* Search for insecure ElGamal keys and return the
432       number of founded keys. */
433    static int
434    count_insecure_elgkeys (void)
435    {
436        gpg_keycache_t pc;
437        gpgme_key_t key;
438        int n = 0;
439    
440        pc = keycache_get_ctx (1);
441        while (!gpg_keycache_next_key (pc, 0, &key)) {
442            if (key->subkeys->pubkey_algo == GPGME_PK_ELG)
443                n++;
444        }
445        gpg_keycache_rewind (pc);
446        return n;
447    }
448    
449    
450  /* Main entry point. */  /* Main entry point. */
451  int WINAPI  int WINAPI
452  WinMain (HINSTANCE hinst, HINSTANCE hprev, LPSTR cmdline, int showcmd)  WinMain (HINSTANCE hinst, HINSTANCE hprev, LPSTR cmdline, int showcmd)
# Line 438  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 456  WinMain (HINSTANCE hinst, HINSTANCE hpre
456      MSG msg;      MSG msg;
457      HWND hwnd = NULL;      HWND hwnd = NULL;
458      WORD ver[3], ptdver[4];      WORD ver[3], ptdver[4];
459        const char *s;
460      int rc, ec, created = 0;      int rc, ec, created = 0;
461      int first_start = 0, start_gpgprefs = 0;      int first_start = 0, start_gpgprefs = 0;
462      int winpt_inst_found = 0;      int winpt_inst_found = 0;
463      int start_manager = 0;      int start_manager = 0;    
     const char *s;  
464    
465      glob_hinst = hinst;      glob_hinst = hinst;
466      if (cmdline && stristr (cmdline, "--stop")) {      if (cmdline && stristr (cmdline, "--stop")) {
# Line 452  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 470  WinMain (HINSTANCE hinst, HINSTANCE hpre
470          return 0;          return 0;
471      }      }
472    
     /*  
     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);  
     }  
     */  
   
473      #ifdef _DEBUG      #ifdef _DEBUG
474      gpg_set_debug_mode (1);      gpg_set_debug_mode (1);
475      debug = 1;      debug = 1;
476      #endif      #endif
477    
478      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]);
479      get_file_version ("PTD.dll", &ptdver[0], &ptdver[1],      ec = get_file_version ("PTD.dll", &ptdver[0], &ptdver[1],
480                                   &ptdver[2], &ptdver[3]);                                   &ptdver[2], &ptdver[3]);
481      /* XXX      
482      if (ptdver[0] != ver[0] || ptdver[1] != ver[1]|| ptdver[2] != ver[2]) {      if (!ec && (ptdver[0] != ver[0] || ptdver[1] != ver[1]|| ptdver[2] != ver[2])) {
483          log_box (_("WinPT Error"), MB_ERR,          log_box (_("WinPT Error"), MB_ERR,
484                   _("The PTD.dll file has a different version than WinPT.exe\n"                   _("The PTD.dll file has a different version than WinPT.exe\n"
485                     "Please update the PTD.dll to version %d.%d.%d"),                     "Please update the PTD.dll to version %d.%d.%d"),
486                     ver[0], ver[1], ver[2]);                     ver[0], ver[1], ver[2]);
487          return 0;          return 0;
488      }      }
     */  
489    
490      if (gpg_md_selftest ()) {      if (gpg_md_selftest ()) {
491          msg_box (NULL, _("Cryptographic selftest failed."),          msg_box (NULL, _("Cryptographic selftest failed."),
# Line 505  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 511  WinMain (HINSTANCE hinst, HINSTANCE hpre
511      }      }
512            
513      set_default_keyserver ();      set_default_keyserver ();
514      load_gettext (winpt_inst_found);      load_gettext ();
515        admin_user = user_is_admin ();
516    
517      if (!mobile_mode_active) {      if (!mobile_mode_active) {
518          regist_inst_gnupg (1);          regist_inst_gnupg (1);
# Line 519  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 526  WinMain (HINSTANCE hinst, HINSTANCE hpre
526    
527      if (!created) {      if (!created) {
528          memset (&reg_prefs, 0, sizeof (reg_prefs));          memset (&reg_prefs, 0, sizeof (reg_prefs));
         reg_prefs.use_tmpfiles = 1; /* default */  
529          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 */
530          get_reg_winpt_prefs (&reg_prefs);          get_reg_winpt_prefs (&reg_prefs);
531          gnupg_load_config ();          gnupg_load_config ();
# Line 557  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 563  WinMain (HINSTANCE hinst, HINSTANCE hpre
563              }              }
564          }          }
565          else {          else {
566              msg_box (NULL, _("GPG home directory could not be determited."),              msg_box (NULL, _("GPG home directory could not be determined."),
567                       _("WinPT Error"), MB_ERR);                       _("WinPT Error"), MB_ERR);
568              goto start;              goto start;
569          }          }
# Line 582  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 588  WinMain (HINSTANCE hinst, HINSTANCE hpre
588              ec = msg_box (NULL,              ec = msg_box (NULL,
589                  _("Could not access and/or find the public and secret keyring.\n"                  _("Could not access and/or find the public and secret keyring.\n"
590                    "If this is an accident, quit the program and fix it.\n\n"                    "If this is an accident, quit the program and fix it.\n\n"
591                    "Continue if you want that WinPT offers you more choices.\n"),                    "Continue if you want WinPT to offer you more choices.\n"),
592                    "WinPT", MB_INFO|MB_YESNO);                    "WinPT", MB_INFO|MB_YESNO);
593              if (ec == IDYES)              if (ec == IDYES)
594                  first_start = 1;                  first_start = 1;
# Line 731  start: Line 737  start:
737          if (!check_crypto_engine ()) {          if (!check_crypto_engine ()) {
738              DestroyWindow (hwnd);              DestroyWindow (hwnd);
739              free_gnupg_table ();              free_gnupg_table ();
740                keycache_release (1);
741              return 0;              return 0;
742          }          }
743            if (!is_gpg4win_installed ()) {
744                select_language ();
745                load_gettext ();
746            }
747      }      }
748      else {      else {
749          gpg_keycache_t c, sec_c;          gpg_keycache_t c, sec_c;
750          update_keycache (hwnd);          if (update_keycache (hwnd)) {
751                DestroyWindow (hwnd);
752                free_gnupg_table ();
753                keycache_release (1);
754                return 0;
755            }
756          c = keycache_get_ctx (1);          c = keycache_get_ctx (1);
757          if (!c || !gpg_keycache_get_size (c)) {          if (!gpg_keycache_get_size (c)) {
             gnupg_display_error ();  
758              msg_box (hwnd, _("The keycache was not initialized or is empty.\n"              msg_box (hwnd, _("The keycache was not initialized or is empty.\n"
759                               "Please check your GPG config (keyrings, pathes...)"),                               "Please check your GPG config (keyrings, pathes...)"),
760                               _("WinPT Error"), MB_ERR);                               _("WinPT Error"), MB_ERR);
761              ec = msg_box (NULL, _("It seems that GPG is not set properly.\n"              ec = msg_box (NULL, _("It seems that GPG is not configured properly.\n"
762                                    "Do you want to start the GPG preferences dialog?"),                                    "Do you want to start the GPG preferences dialog?"),
763                              "WinPT", MB_INFO|MB_YESNO);                              "WinPT", MB_INFO|MB_YESNO);
764              if (ec == IDYES) {              if (ec == IDYES) {
# Line 754  start: Line 769  start:
769              else {              else {
770                  DestroyWindow (hwnd);                  DestroyWindow (hwnd);
771                  free_gnupg_table ();                  free_gnupg_table ();
772                    keycache_release (1);
773                  return 0;                  return 0;
774              }              }
775          }          }
# Line 764  start: Line 780  start:
780                       _("Default key (from the GPG config file) could not be found.\n"                       _("Default key (from the GPG config file) could not be found.\n"
781                         "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"
782                         "%s: public key not found."), p? p : "[null]");                         "%s: public key not found."), p? p : "[null]");
783              free_if_alloc (p);              set_gnupg_default_key (NULL);
             DestroyWindow (hwnd);  
             free_gnupg_table ();  
             return 0;  
784          }          }
785          if (count_insecure_elgkeys ())          if (count_insecure_elgkeys ())
786              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.255

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26