/[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 260 by twoaday, Wed Aug 16 10:01:30 2006 UTC revision 278 by twoaday, Mon Jan 15 22:02:04 2007 UTC
# Line 12  Line 12 
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU General Public License for more details.   * GNU General Public License for more details.
  *  
  * You should have received a copy of the GNU General Public License  
  * along with WinPT; if not, write to the Free Software Foundation,  
  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA  
15   */   */
16  #ifdef HAVE_CONFIG_H  #ifdef HAVE_CONFIG_H
17  #include <config.h>  #include <config.h>
# Line 44  Line 40 
40    
41  void remove_crit_file_attrs (const char *fname, int force);  void remove_crit_file_attrs (const char *fname, int force);
42  BOOL user_is_admin (void);  BOOL user_is_admin (void);
43    int  pcsc_available (void);
44    
45  /* Global variables. */  /* Global variables. */
46  HINSTANCE glob_hinst;   /* global instance for the dialogs */  HINSTANCE glob_hinst;   /* global instance for the dialogs */
47  HWND glob_hwnd;         /* global window handle for the dialogs */  HWND glob_hwnd;         /* global window handle for the dialogs */
48  int scard_support = 0;  int scard_support = 0;
49  int debug = 0;  int debug = 0;
 int mobile_mode_active = 0;  
50  int gpg_read_only = 0;  int gpg_read_only = 0;
51  int admin_user = 0;  int admin_user = 0;
52  char gpgver[3];  char gpgver[3];
# Line 62  int Line 58  int
58  update_keycache (HWND hwnd)  update_keycache (HWND hwnd)
59  {  {
60      int err;      int err;
61        refresh_cache_s rcs;
62    
63      refresh_cache_s rcs = {0};      /* no need to rebuild the sig cache each time. */
64      rcs.kr_reload = 0;      memset (&rcs, 0, sizeof (rcs));
65      rcs.kr_update = 1;      rcs.kring_update = 1;
     rcs.tr_update = 1;  
66      err = DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, hwnd,      err = DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, hwnd,
67                      keycache_dlg_proc, (LPARAM)&rcs);                      keycache_dlg_proc, (LPARAM)&rcs);
68      if (err) {      if (err) {
69          char *cfg = get_gnupg_config ();          char *cfgf = get_gnupg_config ();
70          if (cfg && check_gnupg_options (cfg, 0) == WPTERR_FILE_EXIST)          if (cfgf && check_gnupg_options (cfgf, 0) == WPTERR_FILE_EXIST)
71              msg_box (NULL, _("The gpg.conf contains at least one argument which points to a non-existing file."), "WinPT", MB_ERR);              msg_box (NULL, _("The gpg.conf contains at least one argument which points to a non-existing file."), "WinPT", MB_ERR);
72          free_if_alloc (cfg);          free_if_alloc (cfgf);
73          return -1;          return -1;
74      }      }
75      return 0;      return 0;
# Line 89  gpg_set_debug_mode (int val) Line 85  gpg_set_debug_mode (int val)
85            
86      /* XXX: no gpgme.dbg is created. */      /* XXX: no gpgme.dbg is created. */
87      if (val > 0) {      if (val > 0) {
88          GetTempPath (sizeof (tmp)-1, tmp);          GetTempPath (DIM (tmp)-1, tmp);
89          _snprintf (buf, sizeof (buf)-1, "GPGME_DEBUG=5:%sgpgme.dbg", tmp);          _snprintf (buf, DIM (buf)-1, "GPGME_DEBUG=5:%sgpgme.dbg", tmp);
90          putenv (buf);          putenv (buf);
91      }      }
92      else      else
# Line 102  gpg_set_debug_mode (int val) Line 98  gpg_set_debug_mode (int val)
98  static void  static void
99  load_gettext (void)  load_gettext (void)
100  {  {
101      char *nls = NULL;      char *nls;
102    
103      /* Return the name of the gettext language file. */      /* Return the name of the gettext language file. */
104      nls = get_reg_entry_mo ();      nls = get_reg_entry_mo ();
105      if (nls != NULL) {      if (nls != NULL) {
106          set_gettext_file ("winpt", nls);          gettext_set_file ("winpt", nls);
107          free_if_alloc (nls);          free_if_alloc (nls);
108      }      }
109  }  }
# Line 130  gpg_prefs_ok (void) Line 126  gpg_prefs_ok (void)
126          }          }
127      }      }
128      free_if_alloc (p);      free_if_alloc (p);
129      p = get_reg_entry_gpg4win (NULL);          p = get_reg_entry_gpg4win (NULL);
130      if (!p || dir_exist_check (p) != 0) {      if (!p || dir_exist_check (p) != 0) {
131          free_if_alloc (p);          free_if_alloc (p);
132          p = get_reg_entry_gpg ("HomeDir");          p = get_reg_entry_gpg ("HomeDir");
# Line 173  load_gpg_env (void) Line 169  load_gpg_env (void)
169      SECURITY_ATTRIBUTES sec_attr;      SECURITY_ATTRIBUTES sec_attr;
170      char *p;      char *p;
171      char *pkr;      char *pkr;
172        int err = 0;
173    
174      p = get_reg_entry_gpg4win ("gpg.exe");      p = get_reg_entry_gpg4win ("gpg.exe");
175      if (!p)      if (!p)
# Line 201  load_gpg_env (void) Line 198  load_gpg_env (void)
198      check_readonly_attr (p);      check_readonly_attr (p);
199      pkr = make_filename (p, "pubring", "gpg");      pkr = make_filename (p, "pubring", "gpg");
200      free_if_alloc (p);      free_if_alloc (p);
201      if (!pkr)      if (get_file_size (pkr) == 0)
202          return -1;          err = -1;
203      if (get_file_size (pkr) == 0) {      free_if_alloc (pkr);
204          free_if_alloc (pkr);      return err;
         return -1;  
     }  
     return 0;  
205  }  }
206    
207    
208  /* check if the default key from the gpg.conf file is available in the  /* check if the default key from the gpg.conf file is available in the
209     keyring. if not, bail out because encryption won't work properly then. */     keyring. if not, bail out because encryption won't work properly then. */
210  static int  static int
211  check_default_key (gpg_keycache_t kc)  check_default_key (void)
212  {  {
213      gpgme_key_t key;      gpgme_key_t key;
214      gpgme_error_t err = gpg_error (GPG_ERR_NO_ERROR);      gpgme_error_t err = gpg_error (GPG_ERR_NO_ERROR);
215        gpg_keycache_t kc;
216      char *defkey;      char *defkey;
217    
218        kc = keycache_get_ctx (0);
219      defkey = get_gnupg_default_key ();      defkey = get_gnupg_default_key ();
220      if (defkey)      if (defkey) {
221          err = gpg_keycache_find_key (kc, defkey, 0, &key);          err = gpg_keycache_find_key (kc, defkey, 0, &key);
222      else          if (err) {
223                free_if_alloc (defkey);
224                return -1;
225            }
226        }
227        else {
228            /* Actually this is just a warning but we still continue. */
229          msg_box (NULL, _("No useable secret key found."),          msg_box (NULL, _("No useable secret key found."),
230                   _("WinPT Warning"), MB_WARN);                   _("WinPT Warning"), MB_WARN);
231            free_if_alloc (defkey);
232            return 0;
233        }
234    
235        /* Because the secret key listing has no information
236           about the validity/status, we need to check the public key. */
237        kc = keycache_get_ctx (1);
238        if (!gpg_keycache_find_key (kc, defkey, 0, &key) &&
239            (key->revoked || key->expired)) {
240            msg_box (NULL, _("Default secret key is unuseable"),
241                     _("WinPT Warning"), MB_ERR);
242            free_if_alloc (defkey);
243            return -1;
244        }
245      free_if_alloc (defkey);      free_if_alloc (defkey);
246      return err? -1 : 0;      return 0;
247  }  }
248    
249    
250  /* Return the WinPT program file name (with full pathname). */  /* Return the WinPT program file name (with full pathname). */
251  static const char*  static const char*
252  get_prog_part (const char * fname, int use_cwd)  get_prog_part (const char *fname, int use_cwd)
253  {  {
254      static char program[512];      static char program[2*MAX_PATH+1];
255      char currdir[256];      char currdir[MAX_PATH+1];
256      char *cmd = NULL;      char *cmd = NULL;
257      int j;      int j;
258                    
# Line 249  get_prog_part (const char * fname, int u Line 265  get_prog_part (const char * fname, int u
265      }      }
266      else {      else {
267          cmd = GetCommandLine ();          cmd = GetCommandLine ();
268          if (cmd == NULL)          if (!cmd)
269              return NULL;              return NULL;
270          strncpy (currdir, cmd, sizeof (currdir)-1);          strncpy (currdir, cmd, DIM (currdir)-1);
271          j = strlen (currdir);          j = strlen (currdir);
272          while (j--) {          while (j--) {
273              if (currdir[j] == '\\')              if (currdir[j] == '\\')
# Line 280  check_crypto_engine (void) Line 296  check_crypto_engine (void)
296      }      }
297      else if (rc) {      else if (rc) {
298          log_box (_("WinPT Error"), MB_ERR,          log_box (_("WinPT Error"), MB_ERR,
299                   _("Sorry, you need a newer GPG version.\n"                   _("A newer GPG version is needed.\n"
300                     "GPG version %d.%d.%d required GPG version "NEED_GPG_VERSION),                     "Current GPG version %d.%d.%d, required "NEED_GPG_VERSION),
301                     ma, mi, pa);                     ma, mi, pa);
302          return false;          return false;
303      }      }
304      /* We enable smartcard support for GPG: >= 2 or >= 1.4.3 */      /* Enable smart card support for GPG 2 or >= 1.4 */
305      if (ma > 1 || pa >= 3)      if ((ma > 1 || pa >= 4) && pcsc_available ())
306          scard_support = 1;          scard_support = 1;
307    
308      gpgver[0] = ma;      gpgver[0] = ma;
# Line 305  load_keyserver_conf (int quiet) Line 321  load_keyserver_conf (int quiet)
321      char *buf;      char *buf;
322      int rc;      int rc;
323    
324        #ifdef WINPT_MOBILE
325        /* In mobile mode we automatically assume the config file
326           in the current directory. */
327        return kserver_load_conf ("keyserver.conf");
328        #endif
329    
330      /* Create $APPDATA\winpt if needed. */      /* Create $APPDATA\winpt if needed. */
331      buf = make_special_filename (CSIDL_APPDATA, "winpt", NULL);      buf = make_special_filename (CSIDL_APPDATA, "winpt", NULL);
332      if (buf && dir_exist_check (buf) && !CreateDirectory (buf, NULL)) {      if (buf && dir_exist_check (buf) && !CreateDirectory (buf, NULL)) {
# Line 369  check_for_empty_keyrings (bool pub_only) Line 391  check_for_empty_keyrings (bool pub_only)
391  }  }
392    
393    
394  /* Enable the mobility mode. */  #ifdef WINPT_MOBILE
395    /* Enable the mobile mode if possible.
396       There are some constraints which must be fullfilled.
397       Return value: 0 on success. */
398  static int  static int
399  enable_mobile_mode (void)  enable_mobile_mode (void)
400  {  {
401      if (dir_exist_check ("temp") != 0) {      static const char *test_fname = "winpt_mobile_test.txt";
402          if (!CreateDirectory ("temp", NULL)) {      FILE *fp;
403              MessageBox (NULL, "Could not create mobile temp directory",      char *pubring;
404                          "WinPT Mobile Error", MB_ERR);      ULARGE_INTEGER caller, total;
405              return -1;      DWORD temp_size;
406          }  
407        fp = fopen (test_fname, "wb");
408        if (fp == NULL) {
409            MessageBox (NULL, "Mobile mode cannot be used without write permission\n"
410                              "for the current directory", "WinPT Error", MB_ERR);
411                
412            return -1;
413        }
414        fclose (fp);
415        DeleteFile (test_fname);
416        if (file_exist_check ("gpg.exe")) {
417            MessageBox (NULL, "The GnuPG program needs to be in the same directory\n"
418                              "as the WinPT program", "WinPT Error", MB_ERR);
419            return -1;
420        }
421        
422        /* Because write operations to the keyring result in a temporary
423           file, we need at least 2 MB plus the size of the keyring for
424           free space. */
425        pubring = get_gnupg_keyring (1);
426        temp_size = get_file_size (pubring) + 2097152;
427        free_if_alloc (pubring);
428    
429        if (!GetDiskFreeSpaceEx (NULL, &caller, &total, NULL) ||
430            caller.LowPart < temp_size) {
431            log_box ("WinPT Error", MB_ERR,
432                     "The mobile mode needs at least %lu KB for temporary files",
433                     temp_size/1024);
434            return -1;
435      }      }
436    
437      memset (&reg_prefs, 0, sizeof (reg_prefs));      /* XXX: shall we check for 'temp-directory' in the gpg.conf? */
438      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.word_wrap = 80;  
     reg_prefs.use_viewer = 0; /* XXX */  
439      return 0;      return 0;
440  }  }
441    #endif
442    
443    
444    /* Set the default keyserver for this instance. */
445  void  void
446  set_default_keyserver (void)  set_default_keyserver (void)
447  {  {
# Line 420  winpt_debug_msg (void) Line 468  winpt_debug_msg (void)
468      char output[512];      char output[512];
469      char temp[128];      char temp[128];
470                    
471      GetTempPath (sizeof temp -1, temp);      GetTempPath (DIM (temp) -1, temp);
472      _snprintf (output, sizeof output - 1,      _snprintf (output, DIM (output)-1,
473          "The GPGME output file is %sgpgme.dbg\n"          "The GPGME output file is %sgpgme.dbg\n"
474          "The WinPT output file is %swinpt.log\n", temp, temp);          "The WinPT output file is %swinpt.log\n", temp, temp);
475      MessageBox (NULL, output, "WinPT now runs in DEBUG MODE", MB_INFO);      MessageBox (NULL, output, "WinPT now runs in DEBUG MODE", MB_INFO);
# Line 462  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 510  WinMain (HINSTANCE hinst, HINSTANCE hpre
510      int winpt_inst_found = 0;      int winpt_inst_found = 0;
511      int start_manager = 0;          int start_manager = 0;    
512    
513    #ifdef WINPT_MOBILE
514        /* Do not continue in case of problems. */
515        if (enable_mobile_mode ())
516            return 0;
517    #endif
518    
519      glob_hinst = hinst;      glob_hinst = hinst;
520      if (cmdline && stristr (cmdline, "--stop")) {      if (cmdline && stristr (cmdline, "--stop")) {
521          hwnd = FindWindow ("WinPT", "WinPT");          hwnd = FindWindow ("WinPT", "WinPT");
# Line 470  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 524  WinMain (HINSTANCE hinst, HINSTANCE hpre
524          return 0;          return 0;
525      }      }
526    
527      #ifdef _DEBUG  #ifdef _DEBUG
528      gpg_set_debug_mode (1);      gpg_set_debug_mode (1);
529      debug = 1;      debug = 1;
530      #endif  #endif
531    
532      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]);
533      ec = get_file_version ("PTD.dll", &ptdver[0], &ptdver[1],      ec = get_file_version ("PTD.dll", &ptdver[0], &ptdver[1],  
534                                   &ptdver[2], &ptdver[3]);                                   &ptdver[2], &ptdver[3]);
535            
536      if (!ec && (ptdver[0] != ver[0] || ptdver[1] != ver[1]|| ptdver[2] != ver[2])) {      if (!ec && (ptdver[0] != ver[0] ||
537                    ptdver[1] != ver[1] ||
538                    ptdver[2] != ver[2])) {
539          log_box (_("WinPT Error"), MB_ERR,          log_box (_("WinPT Error"), MB_ERR,
540                   _("The PTD.dll file has a different version than WinPT.exe\n"                   _("The PTD.dll file has a different version than WinPT.exe\n"
541                     "Please update the PTD.dll to version %d.%d.%d"),                     "Please update the PTD.dll to version %d.%d.%d"),
# Line 503  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 559  WinMain (HINSTANCE hinst, HINSTANCE hpre
559      CreateMutex (NULL, TRUE, PGM_NAME);      CreateMutex (NULL, TRUE, PGM_NAME);
560      if (GetLastError () == ERROR_ALREADY_EXISTS)      if (GetLastError () == ERROR_ALREADY_EXISTS)
561          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;  
     }  
562            
563      set_default_keyserver ();      set_default_keyserver ();
564      load_gettext ();      load_gettext ();
565      admin_user = user_is_admin ();      admin_user = user_is_admin ();
566    
567      if (!mobile_mode_active) {      regist_inst_gnupg (1);
568          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 */  
     }  
569    
570      if (!created) {      if (!created) {
571          memset (&reg_prefs, 0, sizeof (reg_prefs));          memset (&reg_prefs, 0, sizeof (reg_prefs));
         reg_prefs.fm.progress = 0; /* XXX: fix the bug and enable it again */  
572          get_reg_winpt_prefs (&reg_prefs);          get_reg_winpt_prefs (&reg_prefs);
573          gnupg_load_config ();          reg_prefs.fm.progress = 0; /* XXX: fix the bug and enable it again */
574            if (gnupg_load_config () == -2)
575                msg_box (NULL, _("The gpg.conf file contains the 'textmode' option\n"
576                                 "which leads to broken binary output during decryption.\n"
577                                 "If this is on purpose, just continue otherwise the option should be disabled."),
578                                _("WinPT Error"), MB_ERR);
579      }      }
580    
581      if (is_gpg4win_installed ())      if (is_gpg4win_installed ())
# Line 536  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 583  WinMain (HINSTANCE hinst, HINSTANCE hpre
583    
584      rc = gnupg_check_homedir ();      rc = gnupg_check_homedir ();
585      if (rc) {      if (rc) {
586            char *p;
587    
588          log_box (_("WinPT Error"), MB_ERR,          log_box (_("WinPT Error"), MB_ERR,
589                   _("GPG home directory is not set correctly.\n"                   _("GPG home directory is not set correctly.\n"
590                     "Please check the GPG registry settings:\n%s."),                     "Please check the GPG registry settings:\n%s."),
# Line 544  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 593  WinMain (HINSTANCE hinst, HINSTANCE hpre
593                                _("Select GPG Public Keyring"),                                _("Select GPG Public Keyring"),
594                                "GPG Keyrings (*.gpg)\0*.gpg\0\0",                                "GPG Keyrings (*.gpg)\0*.gpg\0\0",
595                                NULL);                                NULL);
596          if (s != NULL) {          if (s != NULL && (p=strrchr (s, '\\'))) {
597              size_t n;              char *path = substr (s, 0, (p-s));
598              char *p = strrchr (s, '\\');  
599              if (!p)              set_reg_entry_gpg ("HomeDir", path);
600                  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 */  
             }  
601          }          }
602          else {          else {
603              msg_box (NULL, _("GPG home directory could not be determined."),              msg_box (NULL, _("GPG home directory could not be determined."),
# Line 603  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 640  WinMain (HINSTANCE hinst, HINSTANCE hpre
640    
641      if (!first_start) {      if (!first_start) {
642          rc = gpg_check_permissions (1);          rc = gpg_check_permissions (1);
643          if (rc && rc == 2)          if (rc && rc == 2) /* 2 means read-only mode. */
644              gpg_read_only = 1;              gpg_read_only = 1;
645          else if (rc)          else if (rc)
646              return 0;              return 0;
# Line 629  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 666  WinMain (HINSTANCE hinst, HINSTANCE hpre
666      if (cmdline && (stristr (cmdline, "--keymanager")      if (cmdline && (stristr (cmdline, "--keymanager")
667                  || stristr (cmdline, "--cardmanager"))) {                  || stristr (cmdline, "--cardmanager"))) {
668          /* If an instance of WinPT is running, just send the command          /* If an instance of WinPT is running, just send the command
669             to open the key manager. Otherwise start a new instance.             to open the key manager. Otherwise start a new instance. */
          */  
670          HWND tray = FindWindow ("WinPT", "WinPT");          HWND tray = FindWindow ("WinPT", "WinPT");
671          if (stristr (cmdline, "keymanager"))          if (stristr (cmdline, "keymanager"))
672              start_manager = ID_WINPT_KEY;              start_manager = ID_WINPT_KEY;
# Line 651  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 687  WinMain (HINSTANCE hinst, HINSTANCE hpre
687          return 0;          return 0;
688      }      }
689    
690    #ifndef WINPT_MOBILE
691      if (cmdline && (stristr (cmdline, "--enable-debug") ||      if (cmdline && (stristr (cmdline, "--enable-debug") ||
692                      stristr (cmdline, "--debug"))) {                      stristr (cmdline, "--debug"))) {
693          gpg_set_debug_mode (1);          gpg_set_debug_mode (1);
694          winpt_debug_msg ();          winpt_debug_msg ();
695          debug = 1;          debug = 1;
696      }      }
697    #endif
698    
699      wc.hIcon = LoadIcon (glob_hinst, MAKEINTRESOURCE (IDI_WINPT));      wc.hIcon = LoadIcon (glob_hinst, MAKEINTRESOURCE (IDI_WINPT));
700      rc = RegisterClass (&wc);      rc = RegisterClass (&wc);
# Line 695  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 733  WinMain (HINSTANCE hinst, HINSTANCE hpre
733          DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, hwnd,          DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, hwnd,
734                          gpgprefs_dlg_proc, 0);                          gpgprefs_dlg_proc, 0);
735          if (check_for_empty_keyrings (true))          if (check_for_empty_keyrings (true))
736              first_start = 1; /* The public keyring is empty! */              first_start = 1; /* The public keyring is empty. */
737      }      }
738    
739      if (first_start) {      if (first_start) {
# Line 753  start: Line 791  start:
791          }          }
792      }      }
793      else {      else {
794          gpg_keycache_t c, sec_c;          gpg_keycache_t c;
795          if (update_keycache (hwnd)) {          if (update_keycache (hwnd)) {
796              DestroyWindow (hwnd);              DestroyWindow (hwnd);
797              free_gnupg_table ();              free_gnupg_table ();
798              keycache_release (1);              keycache_release (1);
799              return 0;              return 0;
800          }          }
801            /* XXX: rewrite this part. */
802          c = keycache_get_ctx (1);          c = keycache_get_ctx (1);
803          if (!gpg_keycache_get_size (c)) {          if (!gpg_keycache_get_size (c)) {
804              msg_box (hwnd, _("The keycache was not initialized or is empty.\n"              msg_box (hwnd, _("The keycache was not initialized or is empty.\n"
# Line 779  start: Line 818  start:
818                  keycache_release (1);                  keycache_release (1);
819                  return 0;                  return 0;
820              }              }
821          }          }      
822          sec_c = keycache_get_ctx (0);          if (check_default_key ()) {
         if (check_default_key (sec_c)) {  
823              char *p = get_gnupg_default_key ();              char *p = get_gnupg_default_key ();
824              log_box (_("WinPT Error"), MB_ERR,              log_box (_("WinPT Error"), MB_ERR,
825                       _("Default key (from the GPG config file) could not be found.\n"                       _("Default key (from the GPG config file) could not be found or is unuseable.\n"
826                         "Please check your gpg.conf or set a new default key to correct it:\n\n"                         "The default key will be resetted and can be set later in the Key Manager again.\n\n"
827                         "%s: public key not found."), p? p : "[null]");                         "%s: secret key not found."), p? p : "?");
828              set_gnupg_default_key (NULL);              set_gnupg_default_key (NULL);
829                free_if_alloc (p);
830          }          }
831          if (count_insecure_elgkeys ())          if (count_insecure_elgkeys ())
832              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_ELGWARN, glob_hwnd,              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_ELGWARN, glob_hwnd,

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26