/[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 154 by twoaday, Wed Jan 18 12:38:46 2006 UTC revision 260 by twoaday, Wed Aug 16 10:01:30 2006 UTC
# Line 40  Line 40 
40  #include "wptContext.h"  #include "wptContext.h"
41  #include "wptCardEdit.h"  #include "wptCardEdit.h"
42  #include "wptCrypto.h"  #include "wptCrypto.h"
43    #include "wptUTF8.h"
44    
45    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 = 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  static 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    
83  /* Set GPGME debug mode. If @val is 0, the debug mode is disabled. */  /* Set GPGME debug mode. If @val is 0, the debug mode is disabled. */
84  void  void
85  gpg_set_debug_mode (int val)  gpg_set_debug_mode (int val)
86  {        {
87      if (val)      static char buf[256];
88          putenv ("GPGME_DEBUG=5:gpgme.dbg");      char tmp[128];
89        
90        /* XXX: no gpgme.dbg is created. */
91        if (val > 0) {
92            GetTempPath (sizeof (tmp)-1, tmp);
93            _snprintf (buf, sizeof (buf)-1, "GPGME_DEBUG=5:%sgpgme.dbg", tmp);
94            putenv (buf);
95        }
96      else      else
97          putenv ("GPGME_DEBUG=");          putenv ("GPGME_DEBUG=");
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 102  load_gettext (int prev_inst) Line 113  load_gettext (int prev_inst)
113  }  }
114    
115    
116    /* Return true if the GPG environment is useable. */
117    static bool
118    gpg_prefs_ok (void)
119    {
120        char *p;
121    
122        p = get_reg_entry_gpg4win ("gpg.exe");
123        if (!p || file_exist_check (p) != 0) {
124            free_if_alloc (p);
125            p = get_reg_entry_gpg ("gpgProgram");
126            if (!p || file_exist_check (p) != 0) {
127                free_if_alloc (p);
128                log_debug ("gpg_prefs_ok: could not locate gpg.exe");
129                return false;
130            }
131        }
132        free_if_alloc (p);
133        p = get_reg_entry_gpg4win (NULL);    
134        if (!p || dir_exist_check (p) != 0) {
135            free_if_alloc (p);
136            p = get_reg_entry_gpg ("HomeDir");
137            if (!p || dir_exist_check (p) != 0) {
138                free_if_alloc (p);
139                log_debug ("gpg_prefs_ok: could not determine home directory");
140                return false;
141            }
142        }
143        free_if_alloc (p);
144        return true;
145    }
146    
147    
148    /* Check gpg files if they are read-only and ask the user
149       if this should be corrected. */
150    static void
151    check_readonly_attr (const char *homedir)
152    {
153        const char *files[] = {"pubring.gpg", "secring.gpg", "trustdb.gpg", NULL};
154        char *file;
155        int i;
156    
157        for (i=0; files[i] != NULL; i++) {
158            file = make_filename (homedir, files[i], NULL);
159            remove_crit_file_attrs (file, 0);
160            free_if_alloc (file);
161        }
162    }
163    
164    
165  /* Load the GPG environment. On the first start, some  /* Load the GPG environment. On the first start, some
166     checks are performed to find out in what state GPG is.     checks are performed to find out in what state GPG is.
167     Return value: 0  everything OK.     Return value: 0  everything OK.
# Line 122  load_gpg_env (void) Line 182  load_gpg_env (void)
182          return (1);          return (1);
183      }      }
184      free_if_alloc (p);      free_if_alloc (p);
185      p = multi_gnupg_path (0);  
186        p = get_reg_entry_gpg ("HomeDir");
187        if (!p || dir_exist_check (p) != 0) {
188            free_if_alloc (p);
189            p = multi_gnupg_path (0);
190        }
191      if (p && dir_exist_check (p)) {      if (p && dir_exist_check (p)) {
192          memset (&sec_attr, 0, sizeof (sec_attr));          memset (&sec_attr, 0, sizeof (sec_attr));
193          sec_attr.nLength = sizeof (sec_attr);          sec_attr.nLength = sizeof (sec_attr);
# Line 133  load_gpg_env (void) Line 198  load_gpg_env (void)
198              return (2);              return (2);
199          }          }
200      }      }
201        check_readonly_attr (p);
202      pkr = make_filename (p, "pubring", "gpg");      pkr = make_filename (p, "pubring", "gpg");
203      free_if_alloc (p);      free_if_alloc (p);
204      if (!pkr)      if (!pkr)
# Line 151  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 159  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 203  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 220  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 234  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 252  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 305  check_for_empty_keyrings (bool pub_only) Line 370  check_for_empty_keyrings (bool pub_only)
370    
371    
372  /* Enable the mobility mode. */  /* Enable the mobility mode. */
373  static void  static int
374  enable_mobile_mode (void)  enable_mobile_mode (void)
375  {  {
376        if (dir_exist_check ("temp") != 0) {
377            if (!CreateDirectory ("temp", NULL)) {
378                MessageBox (NULL, "Could not create mobile temp directory",
379                            "WinPT Mobile Error", MB_ERR);
380                return -1;
381            }
382        }
383    
384      memset (&reg_prefs, 0, sizeof (reg_prefs));      memset (&reg_prefs, 0, sizeof (reg_prefs));
385      reg_prefs.always_trust = 0;      reg_prefs.always_trust = 0;
386      reg_prefs.auto_backup = 0;      reg_prefs.auto_backup = 0;
387      reg_prefs.cache_time = 0;      reg_prefs.cache_time = 0;
388      reg_prefs.expert = 0;      reg_prefs.expert = 0;
     reg_prefs.keylist_mode = 1;  
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;
394    }
395    
396    
397    void
398    set_default_keyserver (void)
399    {
400        char *host = get_reg_entry_keyserver ("Default");
401        char *str_port = get_reg_entry_keyserver ("Default_Port");
402        WORD port = HKP_PORT;
403    
404        if (!host)
405            keyserver_set_default (NULL, 0);
406        else {
407            if (str_port && *str_port)
408                port = atoi (str_port);
409            keyserver_set_default (host, port);
410        }
411        free_if_alloc (host);
412        free_if_alloc (str_port);
413    }
414    
415    
416    /* Display info message that WinPT is now in debug mode. */
417    void
418    winpt_debug_msg (void)
419    {      
420        char output[512];
421        char temp[128];
422            
423        GetTempPath (sizeof temp -1, temp);
424        _snprintf (output, sizeof output - 1,
425            "The GPGME output file is %sgpgme.dbg\n"
426            "The WinPT output file is %swinpt.log\n", temp, temp);
427        MessageBox (NULL, output, "WinPT now runs in DEBUG MODE", MB_INFO);
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    
# Line 331  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 345  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 394  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 507  WinMain (HINSTANCE hinst, HINSTANCE hpre
507      if (cmdline && stristr (cmdline, "--mobile")) {      if (cmdline && stristr (cmdline, "--mobile")) {
508          msg_box (NULL, "WARNING: mobile modus is not fully implemented yet!",          msg_box (NULL, "WARNING: mobile modus is not fully implemented yet!",
509                   "WinPT", MB_INFO);                   "WinPT", MB_INFO);
510          mobile = 1;          mobile_mode_active = 1;
511      }      }
512        
513        set_default_keyserver ();
514        load_gettext ();
515        admin_user = user_is_admin ();
516    
517      set_default_kserver ();      if (!mobile_mode_active) {
     load_gettext (winpt_inst_found);  
   
     if (!mobile) {  
518          regist_inst_gnupg (1);          regist_inst_gnupg (1);
519          regist_inst_winpt (1, &created);          regist_inst_winpt (1, &created);
520      }      }
521      else {      else {
522          enable_mobile_mode ();          if (enable_mobile_mode ())
523          /* XXX: ask for GPG path */              return 0;
524          created = 1; /* Disable registry writing */          created = 1; /* Disable registry writing */
525      }      }
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);
         if (!reg_prefs.no_hotkeys)  
             hotkeys_modify ();  
531          gnupg_load_config ();          gnupg_load_config ();
532      }      }
533    
# Line 431  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 542  WinMain (HINSTANCE hinst, HINSTANCE hpre
542                   winpt_strerror (rc));                   winpt_strerror (rc));
543          s = get_fileopen_dlg (GetActiveWindow (),          s = get_fileopen_dlg (GetActiveWindow (),
544                                _("Select GPG Public Keyring"),                                _("Select GPG Public Keyring"),
545                                _("GPG Keyrings (*.gpg)\0*.gpg\0\0"),                                "GPG Keyrings (*.gpg)\0*.gpg\0\0",
546                                NULL);                                NULL);
547          if (s != NULL) {          if (s != NULL) {
548              size_t n;              size_t n;
# Line 452  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 477  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 540  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 651  WinMain (HINSTANCE hinst, HINSTANCE hpre
651          return 0;          return 0;
652      }      }
653    
654      if (cmdline) {      if (cmdline && (stristr (cmdline, "--enable-debug") ||
655          if (stristr (cmdline, "--enable-debug") ||                      stristr (cmdline, "--debug"))) {
656              stristr (cmdline, "--debug")) {          gpg_set_debug_mode (1);
657              gpg_set_debug_mode (1);          winpt_debug_msg ();
658              winpt_debug_msg ();          debug = 1;
             debug = 1;  
         }  
659      }      }
660    
661      wc.hIcon = LoadIcon (glob_hinst, MAKEINTRESOURCE (IDI_WINPT));      wc.hIcon = LoadIcon (glob_hinst, MAKEINTRESOURCE (IDI_WINPT));
# Line 590  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 699  WinMain (HINSTANCE hinst, HINSTANCE hpre
699      }      }
700    
701      if (first_start) {      if (first_start) {
         struct first_start_s fs;  
702          struct genkey_s c;          struct genkey_s c;
703            int choice;
704          HWND h;          HWND h;
705  start:  start:
706          h = GetDesktopWindow ();          h = GetDesktopWindow ();
707          DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, h,          if (!gpg_prefs_ok ())
708                DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, h,
709                              gpgprefs_dlg_proc, 0);                              gpgprefs_dlg_proc, 0);
710          DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_FIRST, h,          choice = DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_FIRST, h,
711                          first_run_dlg_proc, (LPARAM)&fs);                                   first_run_dlg_proc, 0);
712          switch (fs.choice) {          switch (choice) {
713          case SETUP_KEYGEN:          case SETUP_KEYGEN:
714              c.interactive = 1;              c.interactive = 1;
715              c.first_start = 1;              c.first_start = 1;
# Line 617  start: Line 727  start:
727              }              }
728              break;              break;
729    
730          case -1: /* Cancel/Abort. */          case SETUP_CARDGEN:
731                rc = DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_CARD_KEYGEN,
732                                     h, card_keygen_dlg_proc, 0);
733                if (!rc)
734                    goto start;
735                break;
736    
737            case 0: /* Cancel/Abort. */
738            default:
739              DestroyWindow (hwnd);              DestroyWindow (hwnd);
740              free_gnupg_table ();              free_gnupg_table ();
741              return 0;              return 0;
742          }          }
743          update_keycache (hwnd);          update_keycache (hwnd);
744          check_crypto_engine ();          if (!check_crypto_engine ()) {
745                DestroyWindow (hwnd);
746                free_gnupg_table ();
747                keycache_release (1);
748                return 0;
749            }
750            if (!is_gpg4win_installed ()) {
751                select_language ();
752                load_gettext ();
753            }
754      }      }
755      else {      else {
756          gpg_keycache_t c;          gpg_keycache_t c, sec_c;
757          update_keycache (hwnd);          if (update_keycache (hwnd)) {
758                DestroyWindow (hwnd);
759                free_gnupg_table ();
760                keycache_release (1);
761                return 0;
762            }
763          c = keycache_get_ctx (1);          c = keycache_get_ctx (1);
764          if (!c || !gpg_keycache_get_size (c)) {          if (!gpg_keycache_get_size (c)) {
             gnupg_display_error ();  
765              msg_box (hwnd, _("The keycache was not initialized or is empty.\n"              msg_box (hwnd, _("The keycache was not initialized or is empty.\n"
766                               "Please check your GPG config (keyrings, pathes...)"),                               "Please check your GPG config (keyrings, pathes...)"),
767                               _("WinPT Error"), MB_ERR);                               _("WinPT Error"), MB_ERR);
768              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"
769                                    "Do you want to start the GPG preferences dialog?"),                                    "Do you want to start the GPG preferences dialog?"),
770                              "WinPT", MB_INFO|MB_YESNO);                              "WinPT", MB_INFO|MB_YESNO);
771              if (ec == IDYES) {              if (ec == IDYES) {
# Line 645  start: Line 776  start:
776              else {              else {
777                  DestroyWindow (hwnd);                  DestroyWindow (hwnd);
778                  free_gnupg_table ();                  free_gnupg_table ();
779                    keycache_release (1);
780                  return 0;                  return 0;
781              }              }
782          }          }
783          if (check_default_key (c)) {          sec_c = keycache_get_ctx (0);
784            if (check_default_key (sec_c)) {
785              char *p = get_gnupg_default_key ();              char *p = get_gnupg_default_key ();
786              log_box (_("WinPT Error"), MB_ERR,              log_box (_("WinPT Error"), MB_ERR,
787                       _("Default key from the GPG options file could not be found.\n"                       _("Default key (from the GPG config file) could not be found.\n"
788                         "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"
789                         "%s: public key not found."), p? p : "[null]");                         "%s: public key not found."), p? p : "[null]");
790              free_if_alloc (p);              set_gnupg_default_key (NULL);
             DestroyWindow (hwnd);  
             free_gnupg_table ();  
             return 0;  
791          }          }
792          if (count_insecure_elgkeys ())          if (count_insecure_elgkeys ())
793              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_ELGWARN, glob_hwnd,              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_ELGWARN, glob_hwnd,

Legend:
Removed from v.154  
changed lines
  Added in v.260

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26