/[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 273 by twoaday, Fri Dec 8 10:22:17 2006 UTC revision 337 by twoaday, Sun Nov 27 12:38:43 2011 UTC
# Line 1  Line 1 
1  /* WinPT.cpp - Windows Privacy Tray (WinPT)  /* WinPT.cpp - Windows Privacy Tray (WinPT)
2   *      Copyright (C) 2000-2006 Timo Schulz   *      Copyright (C) 2000-2009 Timo Schulz
3   *   *
4   * This file is part of WinPT.   * This file is part of WinPT.
5   *   *
# 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 43  Line 39 
39  #include "wptUTF8.h"  #include "wptUTF8.h"
40    
41  void remove_crit_file_attrs (const char *fname, int force);  void remove_crit_file_attrs (const char *fname, int force);
 BOOL user_is_admin (void);  
 int  pcsc_available (void);  
42    
43  /* Global variables. */  /* Global variables. */
44  HINSTANCE glob_hinst;   /* global instance for the dialogs */  HINSTANCE glob_hinst;   /* global instance for the dialogs */
# Line 52  HWND glob_hwnd;                /* global window handle Line 46  HWND glob_hwnd;                /* global window handle
46  int scard_support = 0;  int scard_support = 0;
47  int debug = 0;  int debug = 0;
48  int gpg_read_only = 0;  int gpg_read_only = 0;
 int admin_user = 0;  
49  char gpgver[3];  char gpgver[3];
50  /* End */  /* End */
51    
# Line 72  update_keycache (HWND hwnd) Line 65  update_keycache (HWND hwnd)
65      if (err) {      if (err) {
66          char *cfgf = get_gnupg_config ();          char *cfgf = get_gnupg_config ();
67          if (cfgf && check_gnupg_options (cfgf, 0) == WPTERR_FILE_EXIST)          if (cfgf && check_gnupg_options (cfgf, 0) == WPTERR_FILE_EXIST)
68              msg_box (NULL, _("The gpg.conf contains at least one argument which points to a non-existing file."), "WinPT", MB_ERR);              msg_box (GetDesktopWindow (),
69                         _("The gpg.conf contains at least one argument which points to a non-existing file."), "WinPT", MB_ERR);
70          free_if_alloc (cfgf);          free_if_alloc (cfgf);
71          return -1;          return -1;
72      }      }
# Line 84  update_keycache (HWND hwnd) Line 78  update_keycache (HWND hwnd)
78  void  void
79  gpg_set_debug_mode (int val)  gpg_set_debug_mode (int val)
80  {  {
81      static char buf[256];      static char buf[MAX_PATH+1];
82      char tmp[128];      char tmp[128];
83            
84      /* XXX: no gpgme.dbg is created. */      /* XXX: no gpgme.dbg is created. */
# Line 98  gpg_set_debug_mode (int val) Line 92  gpg_set_debug_mode (int val)
92  }  }
93    
94    
 /* Initialize the gettext sub system. */  
 static void  
 load_gettext (void)  
 {  
     char *nls;  
   
     /* Return the name of the gettext language file. */  
     nls = get_reg_entry_mo ();  
     if (nls != NULL) {  
         set_gettext_file ("winpt", nls);  
         free_if_alloc (nls);  
     }  
 }  
   
   
95  /* Return true if the GPG environment is useable. */  /* Return true if the GPG environment is useable. */
96  static bool  static bool
97  gpg_prefs_ok (void)  gpg_prefs_ok (void)
98  {  {
99      char *p;      char *p = get_reg_entry_gpg4win ("gpg.exe");
   
     p = get_reg_entry_gpg4win ("gpg.exe");  
100      if (!p || file_exist_check (p) != 0) {      if (!p || file_exist_check (p) != 0) {
101          free_if_alloc (p);          free_if_alloc (p);
102          p = get_reg_entry_gpg ("gpgProgram");          p = get_reg_entry_gpg ("gpgProgram");
# Line 151  static void Line 128  static void
128  check_readonly_attr (const char *homedir)  check_readonly_attr (const char *homedir)
129  {  {
130      const char *files[] = {"pubring.gpg", "secring.gpg", "trustdb.gpg", NULL};      const char *files[] = {"pubring.gpg", "secring.gpg", "trustdb.gpg", NULL};
     char *file;  
     int i;  
131    
132      for (i=0; files[i] != NULL; i++) {      for (int i=0; files[i] != NULL; i++) {
133          file = make_filename (homedir, files[i], NULL);          char *file = make_filename (homedir, files[i], NULL);
134          remove_crit_file_attrs (file, 0);          remove_crit_file_attrs (file, 0);
135          free_if_alloc (file);          free_if_alloc (file);
136      }      }
# Line 193  load_gpg_env (void) Line 168  load_gpg_env (void)
168          memset (&sec_attr, 0, sizeof (sec_attr));          memset (&sec_attr, 0, sizeof (sec_attr));
169          sec_attr.nLength = sizeof (sec_attr);          sec_attr.nLength = sizeof (sec_attr);
170          if (!CreateDirectory (p, &sec_attr)) {          if (!CreateDirectory (p, &sec_attr)) {
171              msg_box (NULL, _("Could not create GPG home directory"),              msg_box (GetDesktopWindow (),
172                         _("Could not create GPG home directory"),
173                       _("WinPT Error"), MB_ERR);                       _("WinPT Error"), MB_ERR);
174              free_if_alloc (p);              free_if_alloc (p);
175              return (2);              return (2);
# Line 221  check_default_key (void) Line 197  check_default_key (void)
197    
198      kc = keycache_get_ctx (0);      kc = keycache_get_ctx (0);
199      defkey = get_gnupg_default_key ();      defkey = get_gnupg_default_key ();
200      if (defkey) {      if (defkey != NULL) {
201          err = gpg_keycache_find_key (kc, defkey, 0, &key);          err = gpg_keycache_find_key (kc, defkey, 0, &key);
202          if (err) {          if (err) {
203              free_if_alloc (defkey);              free_if_alloc (defkey);
# Line 230  check_default_key (void) Line 206  check_default_key (void)
206      }      }
207      else {      else {
208          /* Actually this is just a warning but we still continue. */          /* Actually this is just a warning but we still continue. */
209          msg_box (NULL, _("No useable secret key found."),          msg_box (GetDesktopWindow (), _("No useable secret key found."),
210                   _("WinPT Warning"), MB_WARN);                   _("WinPT Warning"), MB_WARN);
         free_if_alloc (defkey);  
211          return 0;          return 0;
212      }      }
213    
# Line 241  check_default_key (void) Line 216  check_default_key (void)
216      kc = keycache_get_ctx (1);      kc = keycache_get_ctx (1);
217      if (!gpg_keycache_find_key (kc, defkey, 0, &key) &&      if (!gpg_keycache_find_key (kc, defkey, 0, &key) &&
218          (key->revoked || key->expired)) {          (key->revoked || key->expired)) {
219          msg_box (NULL, _("Default secret key is unuseable"),          msg_box (GetDesktopWindow (), _("Default secret key is unuseable"),
220                   _("WinPT Warning"), MB_ERR);                   _("WinPT Warning"), MB_ERR);
221          free_if_alloc (defkey);          free_if_alloc (defkey);
222          return -1;          return -1;
# Line 251  check_default_key (void) Line 226  check_default_key (void)
226  }  }
227    
228    
 /* Return the WinPT program file name (with full pathname). */  
 static const char*  
 get_prog_part (const char *fname, int use_cwd)  
 {  
     static char program[2*MAX_PATH+1];  
     char currdir[MAX_PATH+1];  
     char *cmd = NULL;  
     int j;  
           
     memset (currdir, 0, DIM (currdir));  
     memset (program, 0, DIM (program));  
           
     if (use_cwd) {  
         GetCurrentDirectory (DIM (currdir)-1, currdir);  
         _snprintf (program, DIM (program)-1, "%s\\%s", currdir, fname);  
     }  
     else {  
         cmd = GetCommandLine ();  
         if (!cmd)  
             return NULL;  
         strncpy (currdir, cmd, DIM (currdir)-1);  
         j = strlen (currdir);  
         while (j--) {  
             if (currdir[j] == '\\')  
                 break;  
         }  
         currdir[j] = 0;  
         _snprintf (program, DIM (program)-1, "%s\\%s", currdir + 1, fname);  
     }  
     return program;  
 }  
   
   
229  /* Check that the underlying crypto engine fullfills the minimal  /* Check that the underlying crypto engine fullfills the minimal
230     requirements so all commands work properly. */     requirements so all commands work properly. */
231  static bool  static bool
# Line 294  check_crypto_engine (void) Line 236  check_crypto_engine (void)
236    
237      rc = check_gnupg_engine (NEED_GPG_VERSION, &ma, &mi, &pa);      rc = check_gnupg_engine (NEED_GPG_VERSION, &ma, &mi, &pa);
238      if (rc == -1) {      if (rc == -1) {
239          msg_box (NULL, _("Could not read GnuPG version."),          msg_box (GetDesktopWindow (), _("Could not read GnuPG version."),
240                   _("WinPT Error"), MB_ERR);                   _("WinPT Error"), MB_ERR);
241          return false;          return false;
242      }      }
243      else if (rc) {      else if (rc) {
244          log_box (_("WinPT Error"), MB_ERR,          log_box (_("WinPT Error"), MB_ERR,
245                   _("Sorry, you need a newer GPG version.\n"                   _("A newer GPG version is needed.\n"
246                     "GPG version %d.%d.%d required GPG version "NEED_GPG_VERSION),                     "Current GPG version %d.%d.%d, required "NEED_GPG_VERSION),
247                     ma, mi, pa);                     ma, mi, pa);
248          return false;          return false;
249      }      }
250      /* Enable smart card support for GPG 2 or >= 1.4 */      
251        // TODO: smart card support needs to be revamped
252        // and adjusted according to newer OpenPGP cards.
253        /*
254      if ((ma > 1 || pa >= 4) && pcsc_available ())      if ((ma > 1 || pa >= 4) && pcsc_available ())
255          scard_support = 1;          scard_support = 1;
256        */
257        scard_support = 0;
258        
259      gpgver[0] = ma;      gpgver[0] = ma;
260      gpgver[1] = mi;      gpgver[1] = mi;
261      gpgver[2] = pa;      gpgver[2] = pa;
# Line 316  check_crypto_engine (void) Line 263  check_crypto_engine (void)
263  }  }
264    
265    
 /* Try to load the keyserver config file. If @quiet is 1  
    do not show any errors. */  
 static int  
 load_keyserver_conf (int quiet)  
 {      
     const char *t, *conf;  
     char *buf;  
     int rc;  
   
     #ifdef WINPT_MOBILE  
     /* In mobile mode we automatically assume the config file  
        in the current directory. */  
     return kserver_load_conf ("keyserver.conf");  
     #endif  
   
     /* Create $APPDATA\winpt if needed. */  
     buf = make_special_filename (CSIDL_APPDATA, "winpt", NULL);  
     if (buf && dir_exist_check (buf) && !CreateDirectory (buf, NULL)) {  
         MessageBox (NULL, _("Failed to create WinPT directory"),  
                     _("Keyserver"), MB_ERR);  
         free_if_alloc (buf);  
         return -1;  
     }  
     free_if_alloc (buf);  
   
     /* Check for $APPDATA\winpt\keyserver.conf */  
     buf = make_special_filename (CSIDL_APPDATA, "winpt\\keyserver.conf", NULL);  
   
     conf = get_prog_part ("keyserver.conf", 0);  
     if (!file_exist_check (conf))  
         t = conf;  
     else  
         t = "keyserver.conf";  
     if (file_exist_check (t) == 0 && file_exist_check (buf) != 0) {  
         if (!CopyFile (t, buf, FALSE)) {  
             MessageBox (NULL, _("Failed to copy the keyserver.conf"),  
                         _("Keyserver"), MB_ERR);  
             free_if_alloc (buf);  
             return -1;  
         }  
         t = buf;  
     }  
     else  
         t = buf;  
       
     rc = kserver_load_conf (t);  
     if (rc && !quiet)  
         msg_box (NULL, winpt_strerror (rc), _("Keyserver"), MB_ERR);  
     else {  
         free_if_alloc (reg_prefs.kserv_conf);  
         reg_prefs.kserv_conf = m_strdup (t);  
     }  
     free_if_alloc (buf);  
     return rc;  
 }  
   
266    
267  /* Check if both keyrings are empty. This indicates that  /* Check if both keyrings are empty. This indicates that
268     WinPT should offer to generate a key pair. */     WinPT should offer to generate a key pair. */
# Line 379  static bool Line 270  static bool
270  check_for_empty_keyrings (bool pub_only)  check_for_empty_keyrings (bool pub_only)
271  {  {
272      char *p;      char *p;
273      int n = 0;      int n;
274    
275        n=0;
276      p = get_gnupg_keyring (1, 0);      p = get_gnupg_keyring (1, 0);
277      if (file_exist_check (p) == 0 && get_file_size (p) == 0)      if (file_exist_check (p) == 0 && get_file_size (p) == 0)
278          n++;          n++;
# Line 395  check_for_empty_keyrings (bool pub_only) Line 287  check_for_empty_keyrings (bool pub_only)
287  }  }
288    
289    
 #ifdef WINPT_MOBILE  
 /* Enable the mobile mode if possible.  
    There are some constraints which must be fullfilled.  
    Return value: 0 on success. */  
 static int  
 enable_mobile_mode (void)  
 {  
     static const char *test_fname = "winpt_mobile_test.txt";  
     FILE *fp;  
     char *pubring;  
     ULARGE_INTEGER caller, total;  
     DWORD temp_size;  
   
     fp = fopen (test_fname, "wb");  
     if (fp == NULL) {  
         MessageBox (NULL, "Mobile mode cannot be used without write permission\n"  
                           "for the current directory", "WinPT Error", MB_ERR);  
               
         return -1;  
     }  
     fclose (fp);  
     DeleteFile (test_fname);  
     if (file_exist_check ("gpg.exe")) {  
         MessageBox (NULL, "The GnuPG program needs to be in the same directory\n"  
                           "as the WinPT program", "WinPT Error", MB_ERR);  
         return -1;  
     }  
       
     /* Because write operations to the keyring result in a temporary  
        file, we need at least 2 MB plus the size of the keyring for  
        free space. */  
     pubring = get_gnupg_keyring (1);  
     temp_size = get_file_size (pubring) + 2097152;  
     free_if_alloc (pubring);  
   
     if (!GetDiskFreeSpaceEx (NULL, &caller, &total, NULL) ||  
         caller.LowPart < temp_size) {  
         log_box ("WinPT Error", MB_ERR,  
                  "The mobile mode needs at least %lu KB for temporary files",  
                  temp_size/1024);  
         return -1;  
     }  
   
     /* XXX: shall we check for 'temp-directory' in the gpg.conf? */  
   
     return 0;  
 }  
 #endif  
   
   
 /* Set the default keyserver for this instance. */  
 void  
 set_default_keyserver (void)  
 {  
     char *host = get_reg_entry_keyserver ("Default");  
     char *str_port = get_reg_entry_keyserver ("Default_Port");  
     WORD port = HKP_PORT;  
   
     if (!host)  
         keyserver_set_default (NULL, 0);  
     else {  
         if (str_port && *str_port)  
             port = atoi (str_port);  
         keyserver_set_default (host, port);  
     }  
     free_if_alloc (host);  
     free_if_alloc (str_port);  
 }  
   
290    
291  /* Display info message that WinPT is now in debug mode. */  /* Display info message that WinPT is now in debug mode. */
292  void  void
293  winpt_debug_msg (void)  winpt_debug_msg (void)
294  {        {      
295      char output[512];      char output[512];
296      char temp[128];      char temp[MAX_PATH+1];
297                    
298      GetTempPath (DIM (temp) -1, temp);      GetTempPath (DIM (temp) -1, temp);
299      _snprintf (output, DIM (output)-1,      _snprintf (output, DIM (output)-1,
# Line 487  count_insecure_elgkeys (void) Line 310  count_insecure_elgkeys (void)
310  {  {
311      gpg_keycache_t pc;      gpg_keycache_t pc;
312      gpgme_key_t key;      gpgme_key_t key;
313      int n = 0;      int n;
314    
315        n=0;
316      pc = keycache_get_ctx (1);      pc = keycache_get_ctx (1);
317      while (!gpg_keycache_next_key (pc, 0, &key)) {      while (!gpg_keycache_next_key (pc, 0, &key)) {
318          if (key->subkeys->pubkey_algo == GPGME_PK_ELG)          if (key->subkeys->pubkey_algo == GPGME_PK_ELG)
# Line 499  count_insecure_elgkeys (void) Line 323  count_insecure_elgkeys (void)
323  }  }
324    
325    
326    /* Return 1 if the current OS version is at least Windows XP */
327    static int
328    check_os_version (void)
329    {
330        OSVERSIONINFOA osver;    
331        memset (&osver, 0, sizeof (osver));
332        osver.dwOSVersionInfoSize = sizeof (osver);
333        
334        if (!GetVersionEx (&osver)) {
335            MessageBox (NULL, _("Could not read the OS version."), _("WinPT Error"), MB_ERR);
336            return 0;
337        }
338    
339        if (osver.dwMajorVersion < 5 ||
340            (osver.dwMajorVersion == 5 && osver.dwMinorVersion == 0)) {
341            MessageBox (NULL, _("WinPT requires Windows XP or higher."), _("WinPT Error"), MB_ERR);
342            return 0;
343        }
344        
345        return 1;
346    }
347        
348  /* Main entry point. */  /* Main entry point. */
349  int WINAPI  int WINAPI
350  WinMain (HINSTANCE hinst, HINSTANCE hprev, LPSTR cmdline, int showcmd)  WinMain (HINSTANCE hinst, HINSTANCE hprev, LPSTR cmdline, int showcmd)
# Line 508  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 354  WinMain (HINSTANCE hinst, HINSTANCE hpre
354      MSG msg;      MSG msg;
355      HWND hwnd = NULL;      HWND hwnd = NULL;
356      WORD ver[3], ptdver[4];      WORD ver[3], ptdver[4];
357        
358      const char *s;      const char *s;
359      int rc, ec, created = 0;      int rc, ec, created = 0;
360      int first_start = 0, start_gpgprefs = 0;      int first_start = 0, start_gpgprefs = 0;
361      int winpt_inst_found = 0;      int winpt_inst_found = 0;
362      int start_manager = 0;          int start_manager = 0;    
363    
364  #ifdef WINPT_MOBILE      if (!check_os_version ())
     /* Do not continue in case of problems. */  
     if (enable_mobile_mode ())  
365          return 0;          return 0;
366  #endif      
   
367      glob_hinst = hinst;      glob_hinst = hinst;
368        
369        /* Allow to shutdown the process, for instance by an installer */
370      if (cmdline && stristr (cmdline, "--stop")) {      if (cmdline && stristr (cmdline, "--stop")) {
371          hwnd = FindWindow ("WinPT", "WinPT");          hwnd = FindWindow ("WinPT", "WinPT");
372          if (hwnd != NULL)          if (hwnd != NULL)
373              PostMessage (hwnd, WM_DESTROY, 0, 0);              PostMessage (hwnd, WM_DESTROY, 0, 0);
374          return 0;          return 0;
375      }      }    
376    
377      #ifdef _DEBUG      get_file_version ("winpt.exe", &ver[0], &ver[1], &ver[2], &ver[3]);
378      gpg_set_debug_mode (1);      ec = get_file_version ("PTD.dll", &ptdver[0], &ptdver[1], &ptdver[2], &ptdver[3]);
379      debug = 1;      if (!ec && (ptdver[0] != ver[0] || ptdver[1] != ver[1] || ptdver[2] != ver[2])) {
     #endif  
   
     get_file_version ("WinPT.exe", &ver[0], &ver[1], &ver[2], &ver[3]);  
     ec = get_file_version ("PTD.dll", &ptdver[0], &ptdver[1],    
                                  &ptdver[2], &ptdver[3]);  
       
     if (!ec && (ptdver[0] != ver[0] ||  
                 ptdver[1] != ver[1] ||  
                 ptdver[2] != ver[2])) {  
380          log_box (_("WinPT Error"), MB_ERR,          log_box (_("WinPT Error"), MB_ERR,
381                   _("The PTD.dll file has a different version than WinPT.exe\n"                   _("The PTD.dll file has a different version than WinPT.exe\n"
382                     "Please update the PTD.dll to version %d.%d.%d"),                     "Please update the PTD.dll to version %d.%d.%d"),
# Line 547  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 384  WinMain (HINSTANCE hinst, HINSTANCE hpre
384          return 0;          return 0;
385      }      }
386    
     if (gpg_md_selftest ()) {  
         msg_box (NULL, _("Cryptographic selftest failed."),  
                  _("WinPT Error"), MB_ERR);  
         return 0;  
     }  
   
387      s = gpgme_check_version (NEED_GPGME_VERSION);      s = gpgme_check_version (NEED_GPGME_VERSION);
388      if (!s || !*s) {      if (!s || !*s) {
389          msg_box (NULL, _("A newer GPGME version is needed; at least "NEED_GPGME_VERSION),          msg_box (GetDesktopWindow (),
390                     _("A newer GPGME version is needed; at least "NEED_GPGME_VERSION),
391                   _("WinPT Error"), MB_ERR);                   _("WinPT Error"), MB_ERR);
392          return 0;          return 0;
393      }      }
# Line 564  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 396  WinMain (HINSTANCE hinst, HINSTANCE hpre
396      if (GetLastError () == ERROR_ALREADY_EXISTS)      if (GetLastError () == ERROR_ALREADY_EXISTS)
397          winpt_inst_found = 1;          winpt_inst_found = 1;
398            
399      set_default_keyserver ();      gettext_set_user_domain ();
     load_gettext ();  
     admin_user = user_is_admin ();  
400    
401      regist_inst_gnupg (1);      regist_inst_gnupg (1);
402      regist_inst_winpt (1, &created);      regist_inst_winpt (1, &created);
# Line 574  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 404  WinMain (HINSTANCE hinst, HINSTANCE hpre
404      if (!created) {      if (!created) {
405          memset (&reg_prefs, 0, sizeof (reg_prefs));          memset (&reg_prefs, 0, sizeof (reg_prefs));
406          get_reg_winpt_prefs (&reg_prefs);          get_reg_winpt_prefs (&reg_prefs);
407          reg_prefs.fm.progress = 0; /* XXX: fix the bug and enable it again */          reg_prefs.fm.progress = 0; /* TODO: fix the bug and enable it again */
408          if (gnupg_load_config () == -2)          if (gnupg_load_config () == -2)
409              msg_box (NULL, _("The gpg.conf file contains the 'textmode' option\n"              msg_box (GetDesktopWindow (),
410                               "which leads to broken binary output during decryption.\n"                       _("The gpg.conf file contains the 'textmode' option\n"
411                               "If this is on purpose, just continue otherwise the option should be disabled."),                         "which leads to broken binary output during decryption.\n"
412                              _("WinPT Error"), MB_ERR);                         "If this is on purpose, just continue otherwise the option should be disabled."),
413                         _("WinPT Error"), MB_ERR);
414      }      }
415    
416      if (is_gpg4win_installed ())      if (is_gpg4win_installed ())
417          load_gpg_env (); /* XXX: check return code. */          load_gpg_env (); /* TODO: check return code. */
418    
419      rc = gnupg_check_homedir ();      rc = gnupg_check_homedir ();
420      if (rc) {      if (rc) {
# Line 604  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 435  WinMain (HINSTANCE hinst, HINSTANCE hpre
435              free_if_alloc (path);              free_if_alloc (path);
436          }          }
437          else {          else {
438              msg_box (NULL, _("GPG home directory could not be determined."),              msg_box (GetDesktopWindow (),
439                         _("GPG home directory could not be determined."),
440                       _("WinPT Error"), MB_ERR);                       _("WinPT Error"), MB_ERR);
441              goto start;              goto start;
442          }          }
# Line 612  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 444  WinMain (HINSTANCE hinst, HINSTANCE hpre
444    
445      rc = check_gnupg_prog ();      rc = check_gnupg_prog ();
446      if (rc) {      if (rc) {
447          if (msg_box (NULL, _("Could not find the GPG binary (gpg.exe).\n"          if (msg_box (GetDesktopWindow (),
448                               "Do you want to start the GPG preferences to "                       _("Could not find the GPG binary (gpg.exe).\n"
449                               "correct  this problem?"), _("WinPT Error"),                         "Do you want to start the GPG preferences to "
450                               MB_INFO|MB_YESNO) == IDYES)                         "correct  this problem?"), _("WinPT Error"),
451                         MB_INFO|MB_YESNO) == IDYES)
452              start_gpgprefs = 1;              start_gpgprefs = 1;
453          else {          else {
454              msg_box (NULL, winpt_strerror (rc), _("WinPT Error"), MB_ERR);              msg_box (GetDesktopWindow (),
455                         winpt_strerror (rc), _("WinPT Error"), MB_ERR);
456              return 0;              return 0;
457          }          }
458      }      }
# Line 626  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 460  WinMain (HINSTANCE hinst, HINSTANCE hpre
460      rc = gnupg_access_files ();      rc = gnupg_access_files ();
461      if (!start_gpgprefs && rc) {      if (!start_gpgprefs && rc) {
462          if (rc == WPTERR_GPG_KEYRINGS || rc == WPTERR_GPG_OPT_KEYRINGS) {          if (rc == WPTERR_GPG_KEYRINGS || rc == WPTERR_GPG_OPT_KEYRINGS) {
463              ec = msg_box (NULL,              ec = msg_box (GetDesktopWindow (),
464                  _("Could not access and/or find the public and secret keyring.\n"                  _("Could not access and/or find the public and secret keyring.\n"
465                    "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"
466                    "Continue if you want WinPT to offer you more choices.\n"),                    "Continue if you want WinPT to offer you more choices.\n"),
# Line 635  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 469  WinMain (HINSTANCE hinst, HINSTANCE hpre
469                  first_start = 1;                  first_start = 1;
470          }          }
471          if (!first_start) {          if (!first_start) {
472              msg_box (NULL, winpt_strerror (rc), _("WinPT Error"), MB_ERR);              msg_box (GetDesktopWindow (), winpt_strerror (rc), _("WinPT Error"), MB_ERR);
473              return 0;              return 0;
474          }          }
475      }      }
# Line 657  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 491  WinMain (HINSTANCE hinst, HINSTANCE hpre
491          return 0;          return 0;
492      }      }
493    
494      if (cmdline && stristr (cmdline, "--wipe-freespace")) {      rc = kserver_load_conf ();
495          dialog_box_param (glob_hinst, (LPCTSTR)IDD_WINPT_SPACE_SECDEL,      if (rc)
496                              GetDesktopWindow(), space_wipefrees_dlg_proc, 0,          msg_box (GetDesktopWindow (), winpt_strerror (rc),
497                              _("Wipe Free Space"), IDS_WINPT_SPACE_SECDEL);                   _("Keyserver"), MB_ERR);
         free_gnupg_table ();  
         return 0;  
     }  
   
     load_keyserver_conf (cmdline? 1 : 0);  
498    
499      if (cmdline && (stristr (cmdline, "--keymanager")      if (cmdline && (stristr (cmdline, "--keymanager")
500                  || stristr (cmdline, "--cardmanager"))) {                  || stristr (cmdline, "--cardmanager"))) {
# Line 691  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 520  WinMain (HINSTANCE hinst, HINSTANCE hpre
520          return 0;          return 0;
521      }      }
522    
     #ifndef WINPT_MOBILE  
523      if (cmdline && (stristr (cmdline, "--enable-debug") ||      if (cmdline && (stristr (cmdline, "--enable-debug") ||
524                      stristr (cmdline, "--debug"))) {                      stristr (cmdline, "--debug"))) {
525          gpg_set_debug_mode (1);          gpg_set_debug_mode (1);
526          winpt_debug_msg ();          winpt_debug_msg ();
527          debug = 1;          debug = 1;
528      }      }
     #endif  
529    
530      wc.hIcon = LoadIcon (glob_hinst, MAKEINTRESOURCE (IDI_WINPT));      wc.hIcon = LoadIcon (glob_hinst, MAKEINTRESOURCE (IDI_WINPT));
531      rc = RegisterClass (&wc);      rc = RegisterClass (&wc);
532      if (rc == FALSE) {      if (rc == FALSE) {
533          msg_box (NULL, _("Could not register window class"),          msg_box (GetDesktopWindow (), _("Could not register window class"),
534                   _("WinPT Error"), MB_ERR);                   _("WinPT Error"), MB_ERR);
535          free_gnupg_table ();          free_gnupg_table ();
536          return 0;          return 0;
# Line 717  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 544  WinMain (HINSTANCE hinst, HINSTANCE hpre
544                           hinst,                           hinst,
545                           NULL);                           NULL);
546      if (hwnd == NULL) {      if (hwnd == NULL) {
547          msg_box (NULL, _("Could not create window"), _("WinPT Error"), MB_ERR);          msg_box (GetDesktopWindow (),
548                     _("Could not create window"),
549                     _("WinPT Error"), MB_ERR);
550          free_gnupg_table ();          free_gnupg_table ();
551          return 0;          return 0;
552      }      }
# Line 769  start: Line 598  start:
598              }              }
599              break;              break;
600    
601            case SETUP_EXISTING:
602                rc = gnupg_import_keypair ();
603                if (rc) {
604                    msg_box (hwnd, winpt_strerror (rc), _("WinPT Error"), MB_ERR);
605                    goto start;
606                }
607                break;
608    
609          case SETUP_CARDGEN:          case SETUP_CARDGEN:
610              rc = DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_CARD_KEYGEN,              rc = DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_CARD_KEYGEN,
611                                   h, card_keygen_dlg_proc, 0);                                   h, card_keygen_dlg_proc, 0);
# Line 789  start: Line 626  start:
626              keycache_release (1);              keycache_release (1);
627              return 0;              return 0;
628          }          }
         if (!is_gpg4win_installed ()) {  
             select_language ();  
             load_gettext ();  
         }  
629      }      }
630      else {      else {
631          gpg_keycache_t c;          gpg_keycache_t c;
# Line 808  start: Line 641  start:
641              msg_box (hwnd, _("The keycache was not initialized or is empty.\n"              msg_box (hwnd, _("The keycache was not initialized or is empty.\n"
642                               "Please check your GPG config (keyrings, pathes...)"),                               "Please check your GPG config (keyrings, pathes...)"),
643                               _("WinPT Error"), MB_ERR);                               _("WinPT Error"), MB_ERR);
644              ec = msg_box (NULL, _("It seems that GPG is not configured properly.\n"              ec = msg_box (GetDesktopWindow (),
645                                    "Do you want to start the GPG preferences dialog?"),                            _("It seems that GPG is not configured properly.\n"
646                              "WinPT", MB_INFO|MB_YESNO);                              "Do you want to start the GPG preferences dialog?"),
647                              "WinPT", MB_INFO|MB_YESNO);
648              if (ec == IDYES) {              if (ec == IDYES) {
649                  DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, hwnd,                  DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, hwnd,
650                                  gpgprefs_dlg_proc, 0);                                  gpgprefs_dlg_proc, 0);
# Line 836  start: Line 670  start:
670              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_ELGWARN, glob_hwnd,              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_ELGWARN, glob_hwnd,
671                              elgamal_warn_dlg_proc, 0);                              elgamal_warn_dlg_proc, 0);
672      }      }
673      
674      if (start_manager)      if (start_manager)
675          PostMessage (hwnd, WM_COMMAND, start_manager, 0);          PostMessage (hwnd, WM_COMMAND, start_manager, 0);
676    
# Line 848  start: Line 682  start:
682              DispatchMessage (&msg);              DispatchMessage (&msg);
683          }          }
684      }      }
685                
686      return 0;      return 0;
687  }  }

Legend:
Removed from v.273  
changed lines
  Added in v.337

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26