/[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 193 by twoaday, Sat Apr 1 12:36:35 2006 UTC revision 271 by twoaday, Sun Nov 5 08:57:45 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    extern "C" int  pcsc_available (void);
48    
49    /* Global variables. */
50  HINSTANCE glob_hinst;   /* global instance for the dialogs */  HINSTANCE glob_hinst;   /* global instance for the dialogs */
51  HWND glob_hwnd;         /* global window handle for the dialogs */  HWND glob_hwnd;         /* global window handle for the dialogs */
 HWND activ_hwnd;  
52  int scard_support = 0;  int scard_support = 0;
53  int debug = 0;  int debug = 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 *cfgf = get_gnupg_config ();
74            if (cfgf && check_gnupg_options (cfgf, 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 (cfgf);
77            return -1;
78        }
79        return 0;
80  }  }
81    
82    
# Line 77  gpg_set_debug_mode (int val) Line 89  gpg_set_debug_mode (int val)
89            
90      /* XXX: no gpgme.dbg is created. */      /* XXX: no gpgme.dbg is created. */
91      if (val > 0) {      if (val > 0) {
92          GetTempPath (sizeof (tmp)-1, tmp);          GetTempPath (DIM (tmp)-1, tmp);
93          _snprintf (buf, sizeof (buf)-1, "GPGME_DEBUG=5:%sgpgme.dbg", tmp);          _snprintf (buf, DIM (buf)-1, "GPGME_DEBUG=5:%sgpgme.dbg", tmp);
94          putenv (buf);          putenv (buf);
95      }      }
96      else      else
# Line 90  gpg_set_debug_mode (int val) Line 102  gpg_set_debug_mode (int val)
102  static void  static void
103  load_gettext (void)  load_gettext (void)
104  {  {
105      char *nls = NULL;      char *nls;
106    
107      /* Return the name of the gettext language file. */      /* Return the name of the gettext language file. */
108      nls = get_reg_entry_mo ();      nls = get_reg_entry_mo ();
# Line 118  gpg_prefs_ok (void) Line 130  gpg_prefs_ok (void)
130          }          }
131      }      }
132      free_if_alloc (p);      free_if_alloc (p);
133      p = get_reg_entry_gpg4win (NULL);          p = get_reg_entry_gpg4win (NULL);
134      if (!p || dir_exist_check (p) != 0) {      if (!p || dir_exist_check (p) != 0) {
135          free_if_alloc (p);          free_if_alloc (p);
136          p = get_reg_entry_gpg ("HomeDir");          p = get_reg_entry_gpg ("HomeDir");
# Line 161  load_gpg_env (void) Line 173  load_gpg_env (void)
173      SECURITY_ATTRIBUTES sec_attr;      SECURITY_ATTRIBUTES sec_attr;
174      char *p;      char *p;
175      char *pkr;      char *pkr;
176        int err = 0;
177    
178      p = get_reg_entry_gpg4win ("gpg.exe");      p = get_reg_entry_gpg4win ("gpg.exe");
179      if (!p)      if (!p)
# Line 189  load_gpg_env (void) Line 202  load_gpg_env (void)
202      check_readonly_attr (p);      check_readonly_attr (p);
203      pkr = make_filename (p, "pubring", "gpg");      pkr = make_filename (p, "pubring", "gpg");
204      free_if_alloc (p);      free_if_alloc (p);
205      if (!pkr)      if (get_file_size (pkr) == 0)
206          return -1;          err = -1;
207      if (get_file_size (pkr) == 0) {      free_if_alloc (pkr);
208          free_if_alloc (pkr);      return err;
         return -1;  
     }  
     return 0;  
209  }  }
210    
211    
# Line 213  check_default_key (gpg_keycache_t kc) Line 223  check_default_key (gpg_keycache_t kc)
223          err = gpg_keycache_find_key (kc, defkey, 0, &key);          err = gpg_keycache_find_key (kc, defkey, 0, &key);
224      else      else
225          msg_box (NULL, _("No useable secret key found."),          msg_box (NULL, _("No useable secret key found."),
226                   _("WinPT Error"), MB_ERR);                   _("WinPT Warning"), MB_WARN);
227      free_if_alloc (defkey);      free_if_alloc (defkey);
228      return err? -1 : 0;      return err? -1 : 0;
229  }  }
# Line 223  check_default_key (gpg_keycache_t kc) Line 233  check_default_key (gpg_keycache_t kc)
233  static const char*  static const char*
234  get_prog_part (const char * fname, int use_cwd)  get_prog_part (const char * fname, int use_cwd)
235  {  {
236      static char program[512];      static char program[2*MAX_PATH+1];
237      char currdir[256];      char currdir[MAX_PATH+1];
238      char *cmd = NULL;      char *cmd = NULL;
239      int j;      int j;
240                    
# Line 237  get_prog_part (const char * fname, int u Line 247  get_prog_part (const char * fname, int u
247      }      }
248      else {      else {
249          cmd = GetCommandLine ();          cmd = GetCommandLine ();
250          if (cmd == NULL)          if (!cmd)
251              return NULL;              return NULL;
252          strncpy (currdir, cmd, sizeof (currdir)-1);          strncpy (currdir, cmd, DIM (currdir)-1);
253          j = strlen (currdir);          j = strlen (currdir);
254          while (j--) {          while (j--) {
255              if (currdir[j] == '\\')              if (currdir[j] == '\\')
# Line 273  check_crypto_engine (void) Line 283  check_crypto_engine (void)
283                     ma, mi, pa);                     ma, mi, pa);
284          return false;          return false;
285      }      }
286      /* We enable smartcard support for GPG: >= 2 or >= 1.4.3 */      /* Enable smart card support for GPG 2 or >= 1.4 */
287      if (ma > 1 || pa >= 3)      if ((ma > 1 || pa >= 4) && pcsc_available ())
288          scard_support = 1;          scard_support = 1;
289    
290      gpgver[0] = ma;      gpgver[0] = ma;
# Line 288  check_crypto_engine (void) Line 298  check_crypto_engine (void)
298     do not show any errors. */     do not show any errors. */
299  static int  static int
300  load_keyserver_conf (int quiet)  load_keyserver_conf (int quiet)
301  {  {    
     char *buf;  
302      const char *t, *conf;      const char *t, *conf;
303        char *buf;
304      int rc;      int rc;
305    
306        #ifdef WINPT_MOBILE
307        /* In mobile mode we automatically assume the config file
308           in the current directory. */
309        return kserver_load_conf ("keyserver.conf");
310        #endif
311    
312      /* Create $APPDATA\winpt if needed. */      /* Create $APPDATA\winpt if needed. */
313      buf = make_special_filename (CSIDL_APPDATA, "winpt", NULL);      buf = make_special_filename (CSIDL_APPDATA, "winpt", NULL);
314      if (buf && dir_exist_check (buf) && !CreateDirectory (buf, NULL)) {      if (buf && dir_exist_check (buf) && !CreateDirectory (buf, NULL)) {
# Line 357  check_for_empty_keyrings (bool pub_only) Line 373  check_for_empty_keyrings (bool pub_only)
373  }  }
374    
375    
376  /* Enable the mobility mode. */  #ifdef WINPT_MOBILE
377    /* Enable the mobile mode if possible.
378       There are some constraints which must be fullfilled.
379       Return value: 0 on success. */
380  static int  static int
381  enable_mobile_mode (void)  enable_mobile_mode (void)
382  {  {
383      if (dir_exist_check ("temp") != 0) {      static const char *test_fname = "winpt_mobile_test.txt";
384          if (!CreateDirectory ("temp", NULL)) {      FILE *fp;
385              MessageBox (NULL, "Could not create mobile temp directory",      char *pubring;
386                          "WinPT Mobile Error", MB_ERR);      ULARGE_INTEGER caller, total;
387              return -1;      DWORD temp_size;
388          }  
389        fp = fopen (test_fname, "wb");
390        if (fp == NULL) {
391            MessageBox (NULL, "Mobile mode cannot be used without write permission\n"
392                              "for the current directory", "WinPT Error", MB_ERR);
393                
394            return -1;
395        }
396        fclose (fp);
397        DeleteFile (test_fname);
398        if (file_exist_check ("gpg.exe")) {
399            MessageBox (NULL, "The GnuPG program needs to be in the same directory\n"
400                              "as the WinPT program", "WinPT Error", MB_ERR);
401            return -1;
402        }
403        
404        /* Because write operations to the keyring result in a temporary
405           file, we need at least 2 MB plus the size of the keyring for
406           free space. */
407        pubring = get_gnupg_keyring (1);
408        temp_size = get_file_size (pubring) + 2097152;
409        free_if_alloc (pubring);
410    
411        if (!GetDiskFreeSpaceEx (NULL, &caller, &total, NULL) ||
412            caller.LowPart < temp_size) {
413            log_box ("WinPT Error", MB_ERR,
414                     "The mobile mode needs at least %lu KB for temporary files",
415                     temp_size/1024);
416            return -1;
417      }      }
418    
419      memset (&reg_prefs, 0, sizeof (reg_prefs));      /* XXX: shall we check for 'temp-directory' in the gpg.conf? */
420      reg_prefs.always_trust = 0;  
     reg_prefs.auto_backup = 0;  
     reg_prefs.cache_time = 0;  
     reg_prefs.expert = 0;  
     reg_prefs.kserv_conf = m_strdup ("keyserver.conf");  
     reg_prefs.no_zip_mmedia = 1;  
     reg_prefs.use_tmpfiles = 1;  
     reg_prefs.word_wrap = 80;  
     reg_prefs.use_viewer = 0; /* XXX */  
421      return 0;      return 0;
422  }  }
423    #endif
424    
425    
426    /* Set the default keyserver for this instance. */
427  void  void
428  set_default_keyserver (void)  set_default_keyserver (void)
429  {  {
# Line 409  winpt_debug_msg (void) Line 450  winpt_debug_msg (void)
450      char output[512];      char output[512];
451      char temp[128];      char temp[128];
452                    
453      GetTempPath (sizeof temp -1, temp);      GetTempPath (DIM (temp) -1, temp);
454      _snprintf (output, sizeof output - 1,      _snprintf (output, DIM (output)-1,
455          "The GPGME output file is %sgpgme.dbg\n"          "The GPGME output file is %sgpgme.dbg\n"
456          "The WinPT output file is %swinpt.log\n", temp, temp);          "The WinPT output file is %swinpt.log\n", temp, temp);
457      MessageBox (NULL, output, "WinPT now runs in DEBUG MODE", MB_INFO);      MessageBox (NULL, output, "WinPT now runs in DEBUG MODE", MB_INFO);
458  }  }
459    
460    
461    /* Search for insecure ElGamal keys and return the
462       number of founded keys. */
463    static int
464    count_insecure_elgkeys (void)
465    {
466        gpg_keycache_t pc;
467        gpgme_key_t key;
468        int n = 0;
469    
470        pc = keycache_get_ctx (1);
471        while (!gpg_keycache_next_key (pc, 0, &key)) {
472            if (key->subkeys->pubkey_algo == GPGME_PK_ELG)
473                n++;
474        }
475        gpg_keycache_rewind (pc);
476        return n;
477    }
478    
479    
480  /* Main entry point. */  /* Main entry point. */
481  int WINAPI  int WINAPI
482  WinMain (HINSTANCE hinst, HINSTANCE hprev, LPSTR cmdline, int showcmd)  WinMain (HINSTANCE hinst, HINSTANCE hprev, LPSTR cmdline, int showcmd)
# Line 425  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 485  WinMain (HINSTANCE hinst, HINSTANCE hpre
485      HACCEL accel_tab;      HACCEL accel_tab;
486      MSG msg;      MSG msg;
487      HWND hwnd = NULL;      HWND hwnd = NULL;
488      /*WORD ver[3], ptdver[4];*/      WORD ver[3], ptdver[4];
489        const char *s;
490      int rc, ec, created = 0;      int rc, ec, created = 0;
491      int first_start = 0, start_gpgprefs = 0;      int first_start = 0, start_gpgprefs = 0;
492      int winpt_inst_found = 0;      int winpt_inst_found = 0;
493      int start_manager = 0;      int start_manager = 0;    
494      const char *s;  
495    #ifdef WINPT_MOBILE
496        /* Do not continue in case of problems. */
497        if (enable_mobile_mode ())
498            return 0;
499    #endif
500    
501      glob_hinst = hinst;      glob_hinst = hinst;
502      if (cmdline && stristr (cmdline, "--stop")) {      if (cmdline && stristr (cmdline, "--stop")) {
# Line 445  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 511  WinMain (HINSTANCE hinst, HINSTANCE hpre
511      debug = 1;      debug = 1;
512      #endif      #endif
513    
     /* XXX  
514      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]);
515      get_file_version ("PTD.dll", &ptdver[0], &ptdver[1],      ec = get_file_version ("PTD.dll", &ptdver[0], &ptdver[1],  
516                                   &ptdver[2], &ptdver[3]);                                   &ptdver[2], &ptdver[3]);
517            
518      if (ptdver[0] != ver[0] || ptdver[1] != ver[1]|| ptdver[2] != ver[2]) {      if (!ec && (ptdver[0] != ver[0] ||
519                    ptdver[1] != ver[1] ||
520                    ptdver[2] != ver[2])) {
521          log_box (_("WinPT Error"), MB_ERR,          log_box (_("WinPT Error"), MB_ERR,
522                   _("The PTD.dll file has a different version than WinPT.exe\n"                   _("The PTD.dll file has a different version than WinPT.exe\n"
523                     "Please update the PTD.dll to version %d.%d.%d"),                     "Please update the PTD.dll to version %d.%d.%d"),
524                     ver[0], ver[1], ver[2]);                     ver[0], ver[1], ver[2]);
525          return 0;          return 0;
526      }      }
     */  
527    
528      if (gpg_md_selftest ()) {      if (gpg_md_selftest ()) {
529          msg_box (NULL, _("Cryptographic selftest failed."),          msg_box (NULL, _("Cryptographic selftest failed."),
# Line 475  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 541  WinMain (HINSTANCE hinst, HINSTANCE hpre
541      CreateMutex (NULL, TRUE, PGM_NAME);      CreateMutex (NULL, TRUE, PGM_NAME);
542      if (GetLastError () == ERROR_ALREADY_EXISTS)      if (GetLastError () == ERROR_ALREADY_EXISTS)
543          winpt_inst_found = 1;          winpt_inst_found = 1;
   
     if (cmdline && stristr (cmdline, "--mobile")) {  
         msg_box (NULL, "WARNING: mobile modus is not fully implemented yet!",  
                  "WinPT", MB_INFO);  
         mobile_mode_active = 1;  
     }  
544            
545      set_default_keyserver ();      set_default_keyserver ();
546      load_gettext ();      load_gettext ();
547        admin_user = user_is_admin ();
548    
549      if (!mobile_mode_active) {      regist_inst_gnupg (1);
550          regist_inst_gnupg (1);      regist_inst_winpt (1, &created);
         regist_inst_winpt (1, &created);  
     }  
     else {  
         if (enable_mobile_mode ())  
             return 0;  
         created = 1; /* Disable registry writing */  
     }  
551    
552      if (!created) {      if (!created) {
553          memset (&reg_prefs, 0, sizeof (reg_prefs));          memset (&reg_prefs, 0, sizeof (reg_prefs));
         reg_prefs.use_tmpfiles = 1; /* default */  
         reg_prefs.fm.progress = 0; /* XXX: fix the bug and enable it again */  
554          get_reg_winpt_prefs (&reg_prefs);          get_reg_winpt_prefs (&reg_prefs);
555            reg_prefs.fm.progress = 0; /* XXX: fix the bug and enable it again */
556          gnupg_load_config ();          gnupg_load_config ();
557      }      }
558    
# Line 508  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 561  WinMain (HINSTANCE hinst, HINSTANCE hpre
561    
562      rc = gnupg_check_homedir ();      rc = gnupg_check_homedir ();
563      if (rc) {      if (rc) {
564            char *p;
565    
566          log_box (_("WinPT Error"), MB_ERR,          log_box (_("WinPT Error"), MB_ERR,
567                   _("GPG home directory is not set correctly.\n"                   _("GPG home directory is not set correctly.\n"
568                     "Please check the GPG registry settings:\n%s."),                     "Please check the GPG registry settings:\n%s."),
# Line 516  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 571  WinMain (HINSTANCE hinst, HINSTANCE hpre
571                                _("Select GPG Public Keyring"),                                _("Select GPG Public Keyring"),
572                                "GPG Keyrings (*.gpg)\0*.gpg\0\0",                                "GPG Keyrings (*.gpg)\0*.gpg\0\0",
573                                NULL);                                NULL);
574          if (s != NULL) {          if (s != NULL && (p=strrchr (s, '\\'))) {
575              size_t n;              char *path = substr (s, 0, (p-s));
576              char *p = strrchr (s, '\\');  
577              if (!p)              set_reg_entry_gpg ("HomeDir", path);
578                  BUG (0);              free_if_alloc (path);
             n = p - s;  
             if (n) {  
                 char *file = new char[n+1];  
                 if (!file)  
                     BUG (NULL);  
                 memset (file, 0, n);  
                 memcpy (file, s, n);  
                 file[n] = '\0';          
                 set_reg_entry_gpg ("HomeDir", file);  
                 free_if_alloc (file);  
                 gnupg_check_homedir (); /* change gpgProgram if needed */  
             }  
579          }          }
580          else {          else {
581              msg_box (NULL, _("GPG home directory could not be determited."),              msg_box (NULL, _("GPG home directory could not be determined."),
582                       _("WinPT Error"), MB_ERR);                       _("WinPT Error"), MB_ERR);
583              goto start;              goto start;
584          }          }
# Line 560  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 603  WinMain (HINSTANCE hinst, HINSTANCE hpre
603              ec = msg_box (NULL,              ec = msg_box (NULL,
604                  _("Could not access and/or find the public and secret keyring.\n"                  _("Could not access and/or find the public and secret keyring.\n"
605                    "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"
606                    "Continue if you want that WinPT offers you more choices.\n"),                    "Continue if you want WinPT to offer you more choices.\n"),
607                    "WinPT", MB_INFO|MB_YESNO);                    "WinPT", MB_INFO|MB_YESNO);
608              if (ec == IDYES)              if (ec == IDYES)
609                  first_start = 1;                  first_start = 1;
# Line 575  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 618  WinMain (HINSTANCE hinst, HINSTANCE hpre
618    
619      if (!first_start) {      if (!first_start) {
620          rc = gpg_check_permissions (1);          rc = gpg_check_permissions (1);
621          if (rc && rc == 2)          if (rc && rc == 2) /* 2 means read-only mode. */
622              gpg_read_only = 1;              gpg_read_only = 1;
623          else if (rc)          else if (rc)
624              return 0;              return 0;
# Line 601  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 644  WinMain (HINSTANCE hinst, HINSTANCE hpre
644      if (cmdline && (stristr (cmdline, "--keymanager")      if (cmdline && (stristr (cmdline, "--keymanager")
645                  || stristr (cmdline, "--cardmanager"))) {                  || stristr (cmdline, "--cardmanager"))) {
646          /* If an instance of WinPT is running, just send the command          /* If an instance of WinPT is running, just send the command
647             to open the key manager. Otherwise start a new instance.             to open the key manager. Otherwise start a new instance. */
          */  
648          HWND tray = FindWindow ("WinPT", "WinPT");          HWND tray = FindWindow ("WinPT", "WinPT");
649          if (stristr (cmdline, "keymanager"))          if (stristr (cmdline, "keymanager"))
650              start_manager = ID_WINPT_KEY;              start_manager = ID_WINPT_KEY;
# Line 623  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 665  WinMain (HINSTANCE hinst, HINSTANCE hpre
665          return 0;          return 0;
666      }      }
667    
668        #ifndef WINPT_MOBILE
669      if (cmdline && (stristr (cmdline, "--enable-debug") ||      if (cmdline && (stristr (cmdline, "--enable-debug") ||
670                      stristr (cmdline, "--debug"))) {                      stristr (cmdline, "--debug"))) {
671          gpg_set_debug_mode (1);          gpg_set_debug_mode (1);
672          winpt_debug_msg ();          winpt_debug_msg ();
673          debug = 1;          debug = 1;
674      }      }
675        #endif
676    
677      wc.hIcon = LoadIcon (glob_hinst, MAKEINTRESOURCE (IDI_WINPT));      wc.hIcon = LoadIcon (glob_hinst, MAKEINTRESOURCE (IDI_WINPT));
678      rc = RegisterClass (&wc);      rc = RegisterClass (&wc);
# Line 667  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 711  WinMain (HINSTANCE hinst, HINSTANCE hpre
711          DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, hwnd,          DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, hwnd,
712                          gpgprefs_dlg_proc, 0);                          gpgprefs_dlg_proc, 0);
713          if (check_for_empty_keyrings (true))          if (check_for_empty_keyrings (true))
714              first_start = 1; /* The public keyring is empty! */              first_start = 1; /* The public keyring is empty. */
715      }      }
716    
717      if (first_start) {      if (first_start) {
# Line 699  start: Line 743  start:
743              }              }
744              break;              break;
745    
746            case SETUP_CARDGEN:
747                rc = DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_CARD_KEYGEN,
748                                     h, card_keygen_dlg_proc, 0);
749                if (!rc)
750                    goto start;
751                break;
752    
753          case 0: /* Cancel/Abort. */          case 0: /* Cancel/Abort. */
754          default:          default:
755              DestroyWindow (hwnd);              DestroyWindow (hwnd);
# Line 709  start: Line 760  start:
760          if (!check_crypto_engine ()) {          if (!check_crypto_engine ()) {
761              DestroyWindow (hwnd);              DestroyWindow (hwnd);
762              free_gnupg_table ();              free_gnupg_table ();
763                keycache_release (1);
764              return 0;              return 0;
765          }          }
766          if (!is_gpg4win_installed ()) {          if (!is_gpg4win_installed ()) {
# Line 718  start: Line 770  start:
770      }      }
771      else {      else {
772          gpg_keycache_t c, sec_c;          gpg_keycache_t c, sec_c;
773          update_keycache (hwnd);          if (update_keycache (hwnd)) {
774                DestroyWindow (hwnd);
775                free_gnupg_table ();
776                keycache_release (1);
777                return 0;
778            }
779            /* XXX: rewrite this part. */
780          c = keycache_get_ctx (1);          c = keycache_get_ctx (1);
781          if (!c || !gpg_keycache_get_size (c)) {          if (!gpg_keycache_get_size (c)) {
             gnupg_display_error ();  
782              msg_box (hwnd, _("The keycache was not initialized or is empty.\n"              msg_box (hwnd, _("The keycache was not initialized or is empty.\n"
783                               "Please check your GPG config (keyrings, pathes...)"),                               "Please check your GPG config (keyrings, pathes...)"),
784                               _("WinPT Error"), MB_ERR);                               _("WinPT Error"), MB_ERR);
785              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"
786                                    "Do you want to start the GPG preferences dialog?"),                                    "Do you want to start the GPG preferences dialog?"),
787                              "WinPT", MB_INFO|MB_YESNO);                              "WinPT", MB_INFO|MB_YESNO);
788              if (ec == IDYES) {              if (ec == IDYES) {
# Line 736  start: Line 793  start:
793              else {              else {
794                  DestroyWindow (hwnd);                  DestroyWindow (hwnd);
795                  free_gnupg_table ();                  free_gnupg_table ();
796                    keycache_release (1);
797                  return 0;                  return 0;
798              }              }
799          }          }
# Line 746  start: Line 804  start:
804                       _("Default key (from the GPG config file) could not be found.\n"                       _("Default key (from the GPG config file) could not be found.\n"
805                         "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"
806                         "%s: public key not found."), p? p : "[null]");                         "%s: public key not found."), p? p : "[null]");
807              free_if_alloc (p);              set_gnupg_default_key (NULL);
             DestroyWindow (hwnd);  
             free_gnupg_table ();  
             return 0;  
808          }          }
809          if (count_insecure_elgkeys ())          if (count_insecure_elgkeys ())
810              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_ELGWARN, glob_hwnd,              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_ELGWARN, glob_hwnd,

Legend:
Removed from v.193  
changed lines
  Added in v.271

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26