/[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 295 by twoaday, Tue Mar 13 18:53:40 2007 UTC revision 328 by twoaday, Fri Sep 25 16:07:38 2009 UTC
# Line 1  Line 1 
1  /* WinPT.cpp - Windows Privacy Tray (WinPT)  /* WinPT.cpp - Windows Privacy Tray (WinPT)
2   *      Copyright (C) 2000-2007 Timo Schulz   *      Copyright (C) 2000-2009 Timo Schulz
3   *   *
4   * This file is part of WinPT.   * This file is part of WinPT.
5   *   *
# Line 39  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 48  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;
49  int admin_user = 0;  int emulate_utf8_bug = 0;
50  char gpgver[3];  char gpgver[3];
51  /* End */  /* End */
52    
# Line 68  update_keycache (HWND hwnd) Line 66  update_keycache (HWND hwnd)
66      if (err) {      if (err) {
67          char *cfgf = get_gnupg_config ();          char *cfgf = get_gnupg_config ();
68          if (cfgf && check_gnupg_options (cfgf, 0) == WPTERR_FILE_EXIST)          if (cfgf && check_gnupg_options (cfgf, 0) == WPTERR_FILE_EXIST)
69              msg_box (NULL, _("The gpg.conf contains at least one argument which points to a non-existing file."), "WinPT", MB_ERR);              msg_box (GetDesktopWindow (),
70                         _("The gpg.conf contains at least one argument which points to a non-existing file."), "WinPT", MB_ERR);
71          free_if_alloc (cfgf);          free_if_alloc (cfgf);
72          return -1;          return -1;
73      }      }
# Line 80  update_keycache (HWND hwnd) Line 79  update_keycache (HWND hwnd)
79  void  void
80  gpg_set_debug_mode (int val)  gpg_set_debug_mode (int val)
81  {  {
82      static char buf[256];      static char buf[MAX_PATH+1];
83      char tmp[128];      char tmp[128];
84            
85      /* XXX: no gpgme.dbg is created. */      /* XXX: no gpgme.dbg is created. */
# Line 94  gpg_set_debug_mode (int val) Line 93  gpg_set_debug_mode (int val)
93  }  }
94    
95    
 /* 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) {  
         gettext_set_file ("winpt", nls);  
         free_if_alloc (nls);  
     }  
 }  
   
   
96  /* Return true if the GPG environment is useable. */  /* Return true if the GPG environment is useable. */
97  static bool  static bool
98  gpg_prefs_ok (void)  gpg_prefs_ok (void)
99  {  {
100      char *p;      char *p = get_reg_entry_gpg4win ("gpg.exe");
   
     p = get_reg_entry_gpg4win ("gpg.exe");  
101      if (!p || file_exist_check (p) != 0) {      if (!p || file_exist_check (p) != 0) {
102          free_if_alloc (p);          free_if_alloc (p);
103          p = get_reg_entry_gpg ("gpgProgram");          p = get_reg_entry_gpg ("gpgProgram");
# Line 147  static void Line 129  static void
129  check_readonly_attr (const char *homedir)  check_readonly_attr (const char *homedir)
130  {  {
131      const char *files[] = {"pubring.gpg", "secring.gpg", "trustdb.gpg", NULL};      const char *files[] = {"pubring.gpg", "secring.gpg", "trustdb.gpg", NULL};
     char *file;  
     int i;  
132    
133      for (i=0; files[i] != NULL; i++) {      for (int i=0; files[i] != NULL; i++) {
134          file = make_filename (homedir, files[i], NULL);          char *file = make_filename (homedir, files[i], NULL);
135          remove_crit_file_attrs (file, 0);          remove_crit_file_attrs (file, 0);
136          free_if_alloc (file);          free_if_alloc (file);
137      }      }
# Line 189  load_gpg_env (void) Line 169  load_gpg_env (void)
169          memset (&sec_attr, 0, sizeof (sec_attr));          memset (&sec_attr, 0, sizeof (sec_attr));
170          sec_attr.nLength = sizeof (sec_attr);          sec_attr.nLength = sizeof (sec_attr);
171          if (!CreateDirectory (p, &sec_attr)) {          if (!CreateDirectory (p, &sec_attr)) {
172              msg_box (NULL, _("Could not create GPG home directory"),              msg_box (GetDesktopWindow (),
173                         _("Could not create GPG home directory"),
174                       _("WinPT Error"), MB_ERR);                       _("WinPT Error"), MB_ERR);
175              free_if_alloc (p);              free_if_alloc (p);
176              return (2);              return (2);
# Line 217  check_default_key (void) Line 198  check_default_key (void)
198    
199      kc = keycache_get_ctx (0);      kc = keycache_get_ctx (0);
200      defkey = get_gnupg_default_key ();      defkey = get_gnupg_default_key ();
201      if (defkey) {      if (defkey != NULL) {
202          err = gpg_keycache_find_key (kc, defkey, 0, &key);          err = gpg_keycache_find_key (kc, defkey, 0, &key);
203          if (err) {          if (err) {
204              free_if_alloc (defkey);              free_if_alloc (defkey);
# Line 226  check_default_key (void) Line 207  check_default_key (void)
207      }      }
208      else {      else {
209          /* Actually this is just a warning but we still continue. */          /* Actually this is just a warning but we still continue. */
210          msg_box (NULL, _("No useable secret key found."),          msg_box (GetDesktopWindow (), _("No useable secret key found."),
211                   _("WinPT Warning"), MB_WARN);                   _("WinPT Warning"), MB_WARN);
         free_if_alloc (defkey);  
212          return 0;          return 0;
213      }      }
214    
# Line 237  check_default_key (void) Line 217  check_default_key (void)
217      kc = keycache_get_ctx (1);      kc = keycache_get_ctx (1);
218      if (!gpg_keycache_find_key (kc, defkey, 0, &key) &&      if (!gpg_keycache_find_key (kc, defkey, 0, &key) &&
219          (key->revoked || key->expired)) {          (key->revoked || key->expired)) {
220          msg_box (NULL, _("Default secret key is unuseable"),          msg_box (GetDesktopWindow (), _("Default secret key is unuseable"),
221                   _("WinPT Warning"), MB_ERR);                   _("WinPT Warning"), MB_ERR);
222          free_if_alloc (defkey);          free_if_alloc (defkey);
223          return -1;          return -1;
# Line 247  check_default_key (void) Line 227  check_default_key (void)
227  }  }
228    
229    
 /* 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;  
     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;  
 }  
   
   
230  /* Check that the underlying crypto engine fullfills the minimal  /* Check that the underlying crypto engine fullfills the minimal
231     requirements so all commands work properly. */     requirements so all commands work properly. */
232  static bool  static bool
# Line 290  check_crypto_engine (void) Line 237  check_crypto_engine (void)
237    
238      rc = check_gnupg_engine (NEED_GPG_VERSION, &ma, &mi, &pa);      rc = check_gnupg_engine (NEED_GPG_VERSION, &ma, &mi, &pa);
239      if (rc == -1) {      if (rc == -1) {
240          msg_box (NULL, _("Could not read GnuPG version."),          msg_box (GetDesktopWindow (), _("Could not read GnuPG version."),
241                   _("WinPT Error"), MB_ERR);                   _("WinPT Error"), MB_ERR);
242          return false;          return false;
243      }      }
# Line 301  check_crypto_engine (void) Line 248  check_crypto_engine (void)
248                     ma, mi, pa);                     ma, mi, pa);
249          return false;          return false;
250      }      }
251      /* Enable smart card support for GPG 2 or >= 1.4 */      
252        // TODO: smart card support needs to be revamped
253        // and adjusted according to newer OpenPGP cards.
254        /*
255      if ((ma > 1 || pa >= 4) && pcsc_available ())      if ((ma > 1 || pa >= 4) && pcsc_available ())
256          scard_support = 1;          scard_support = 1;
257        */
258        scard_support = 0;
259        
260      gpgver[0] = ma;      gpgver[0] = ma;
261      gpgver[1] = mi;      gpgver[1] = mi;
262      gpgver[2] = pa;      gpgver[2] = pa;
# Line 312  check_crypto_engine (void) Line 264  check_crypto_engine (void)
264  }  }
265    
266    
 /* 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;  
 }  
   
267    
268  /* Check if both keyrings are empty. This indicates that  /* Check if both keyrings are empty. This indicates that
269     WinPT should offer to generate a key pair. */     WinPT should offer to generate a key pair. */
# Line 375  static bool Line 271  static bool
271  check_for_empty_keyrings (bool pub_only)  check_for_empty_keyrings (bool pub_only)
272  {  {
273      char *p;      char *p;
274      int n = 0;      int n;
275    
276        n=0;
277      p = get_gnupg_keyring (1, 0);      p = get_gnupg_keyring (1, 0);
278      if (file_exist_check (p) == 0 && get_file_size (p) == 0)      if (file_exist_check (p) == 0 && get_file_size (p) == 0)
279          n++;          n++;
# Line 391  check_for_empty_keyrings (bool pub_only) Line 288  check_for_empty_keyrings (bool pub_only)
288  }  }
289    
290    
 #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);  
 }  
   
291    
292  /* Display info message that WinPT is now in debug mode. */  /* Display info message that WinPT is now in debug mode. */
293  void  void
294  winpt_debug_msg (void)  winpt_debug_msg (void)
295  {        {      
296      char output[512];      char output[512];
297      char temp[128];      char temp[MAX_PATH+1];
298                    
299      GetTempPath (DIM (temp) -1, temp);      GetTempPath (DIM (temp) -1, temp);
300      _snprintf (output, DIM (output)-1,      _snprintf (output, DIM (output)-1,
# Line 483  count_insecure_elgkeys (void) Line 311  count_insecure_elgkeys (void)
311  {  {
312      gpg_keycache_t pc;      gpg_keycache_t pc;
313      gpgme_key_t key;      gpgme_key_t key;
314      int n = 0;      int n;
315    
316        n=0;
317      pc = keycache_get_ctx (1);      pc = keycache_get_ctx (1);
318      while (!gpg_keycache_next_key (pc, 0, &key)) {      while (!gpg_keycache_next_key (pc, 0, &key)) {
319          if (key->subkeys->pubkey_algo == GPGME_PK_ELG)          if (key->subkeys->pubkey_algo == GPGME_PK_ELG)
# Line 504  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 333  WinMain (HINSTANCE hinst, HINSTANCE hpre
333      MSG msg;      MSG msg;
334      HWND hwnd = NULL;      HWND hwnd = NULL;
335      WORD ver[3], ptdver[4];      WORD ver[3], ptdver[4];
336        OSVERSIONINFOA osver;
337      const char *s;      const char *s;
338      int rc, ec, created = 0;      int rc, ec, created = 0;
339      int first_start = 0, start_gpgprefs = 0;      int first_start = 0, start_gpgprefs = 0;
340      int winpt_inst_found = 0;      int winpt_inst_found = 0;
341      int start_manager = 0;          int start_manager = 0;    
342    
343  #ifdef WINPT_MOBILE      memset (&osver, 0, sizeof (osver));
344      /* Do not continue in case of problems. */      osver.dwOSVersionInfoSize = sizeof (osver);
345      if (enable_mobile_mode ())      if (!GetVersionEx (&osver)) {
346            MessageBox (NULL, _("Could not read the OS version."),
347                        _("WinPT Error"), MB_ERR);
348          return 0;          return 0;
349  #endif      }
350        /*
351        if (osver.dwMajorVersion < 5) {
352            MessageBox (NULL, _("WinPT requires Windows XP or higher."),
353                        _("WinPT Warning"), MB_INFO);
354            return 0;
355        }*/
356            
357      glob_hinst = hinst;      glob_hinst = hinst;
358      if (cmdline && stristr (cmdline, "--stop")) {      if (cmdline && stristr (cmdline, "--stop")) {
359          hwnd = FindWindow ("WinPT", "WinPT");          hwnd = FindWindow ("WinPT", "WinPT");
360          if (hwnd != NULL)          if (hwnd != NULL)
361              PostMessage (hwnd, WM_DESTROY, 0, 0);              PostMessage (hwnd, WM_DESTROY, 0, 0);
362          return 0;          return 0;
363      }      }    
   
 #ifdef _DEBUG  
     gpg_set_debug_mode (1);  
     debug = 1;  
 #endif  
364    
365      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]);
366      ec = get_file_version ("PTD.dll", &ptdver[0], &ptdver[1],        ec = get_file_version ("PTD.dll", &ptdver[0], &ptdver[1],  
367                                   &ptdver[2], &ptdver[3]);                                   &ptdver[2], &ptdver[3]);
368            
# Line 544  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 377  WinMain (HINSTANCE hinst, HINSTANCE hpre
377      }      }
378    
379      if (gpg_md_selftest ()) {      if (gpg_md_selftest ()) {
380          msg_box (NULL, _("Cryptographic selftest failed."),          msg_box (GetDesktopWindow (), _("Cryptographic selftest failed."),
381                   _("WinPT Error"), MB_ERR);                   _("WinPT Error"), MB_ERR);
382          return 0;          return 0;
383      }      }
384    
385      s = gpgme_check_version (NEED_GPGME_VERSION);      s = gpgme_check_version (NEED_GPGME_VERSION);
386      if (!s || !*s) {      if (!s || !*s) {
387          msg_box (NULL, _("A newer GPGME version is needed; at least "NEED_GPGME_VERSION),          msg_box (GetDesktopWindow (),
388                     _("A newer GPGME version is needed; at least "NEED_GPGME_VERSION),
389                   _("WinPT Error"), MB_ERR);                   _("WinPT Error"), MB_ERR);
390          return 0;          return 0;
391      }      }
# Line 560  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 394  WinMain (HINSTANCE hinst, HINSTANCE hpre
394      if (GetLastError () == ERROR_ALREADY_EXISTS)      if (GetLastError () == ERROR_ALREADY_EXISTS)
395          winpt_inst_found = 1;          winpt_inst_found = 1;
396            
397      set_default_keyserver ();      gettext_set_user_domain ();
     load_gettext ();  
     admin_user = user_is_admin ();  
398    
399      regist_inst_gnupg (1);      regist_inst_gnupg (1);
400      regist_inst_winpt (1, &created);      regist_inst_winpt (1, &created);
# Line 570  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 402  WinMain (HINSTANCE hinst, HINSTANCE hpre
402      if (!created) {      if (!created) {
403          memset (&reg_prefs, 0, sizeof (reg_prefs));          memset (&reg_prefs, 0, sizeof (reg_prefs));
404          get_reg_winpt_prefs (&reg_prefs);          get_reg_winpt_prefs (&reg_prefs);
405          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 */
406          if (gnupg_load_config () == -2)          if (gnupg_load_config () == -2)
407              msg_box (NULL, _("The gpg.conf file contains the 'textmode' option\n"              msg_box (GetDesktopWindow (),
408                               "which leads to broken binary output during decryption.\n"                       _("The gpg.conf file contains the 'textmode' option\n"
409                               "If this is on purpose, just continue otherwise the option should be disabled."),                         "which leads to broken binary output during decryption.\n"
410                              _("WinPT Error"), MB_ERR);                         "If this is on purpose, just continue otherwise the option should be disabled."),
411                         _("WinPT Error"), MB_ERR);
412      }      }
413    
414      if (is_gpg4win_installed ())      if (is_gpg4win_installed ())
415          load_gpg_env (); /* XXX: check return code. */          load_gpg_env (); /* TODO: check return code. */
416    
417      rc = gnupg_check_homedir ();      rc = gnupg_check_homedir ();
418      if (rc) {      if (rc) {
# Line 600  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 433  WinMain (HINSTANCE hinst, HINSTANCE hpre
433              free_if_alloc (path);              free_if_alloc (path);
434          }          }
435          else {          else {
436              msg_box (NULL, _("GPG home directory could not be determined."),              msg_box (GetDesktopWindow (),
437                         _("GPG home directory could not be determined."),
438                       _("WinPT Error"), MB_ERR);                       _("WinPT Error"), MB_ERR);
439              goto start;              goto start;
440          }          }
# Line 608  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 442  WinMain (HINSTANCE hinst, HINSTANCE hpre
442    
443      rc = check_gnupg_prog ();      rc = check_gnupg_prog ();
444      if (rc) {      if (rc) {
445          if (msg_box (NULL, _("Could not find the GPG binary (gpg.exe).\n"          if (msg_box (GetDesktopWindow (),
446                               "Do you want to start the GPG preferences to "                       _("Could not find the GPG binary (gpg.exe).\n"
447                               "correct  this problem?"), _("WinPT Error"),                         "Do you want to start the GPG preferences to "
448                               MB_INFO|MB_YESNO) == IDYES)                         "correct  this problem?"), _("WinPT Error"),
449                         MB_INFO|MB_YESNO) == IDYES)
450              start_gpgprefs = 1;              start_gpgprefs = 1;
451          else {          else {
452              msg_box (NULL, winpt_strerror (rc), _("WinPT Error"), MB_ERR);              msg_box (GetDesktopWindow (),
453                         winpt_strerror (rc), _("WinPT Error"), MB_ERR);
454              return 0;              return 0;
455          }          }
456      }      }
# Line 622  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 458  WinMain (HINSTANCE hinst, HINSTANCE hpre
458      rc = gnupg_access_files ();      rc = gnupg_access_files ();
459      if (!start_gpgprefs && rc) {      if (!start_gpgprefs && rc) {
460          if (rc == WPTERR_GPG_KEYRINGS || rc == WPTERR_GPG_OPT_KEYRINGS) {          if (rc == WPTERR_GPG_KEYRINGS || rc == WPTERR_GPG_OPT_KEYRINGS) {
461              ec = msg_box (NULL,              ec = msg_box (GetDesktopWindow (),
462                  _("Could not access and/or find the public and secret keyring.\n"                  _("Could not access and/or find the public and secret keyring.\n"
463                    "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"
464                    "Continue if you want WinPT to offer you more choices.\n"),                    "Continue if you want WinPT to offer you more choices.\n"),
# Line 631  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 467  WinMain (HINSTANCE hinst, HINSTANCE hpre
467                  first_start = 1;                  first_start = 1;
468          }          }
469          if (!first_start) {          if (!first_start) {
470              msg_box (NULL, winpt_strerror (rc), _("WinPT Error"), MB_ERR);              msg_box (GetDesktopWindow (), winpt_strerror (rc), _("WinPT Error"), MB_ERR);
471              return 0;              return 0;
472          }          }
473      }      }
# Line 653  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 489  WinMain (HINSTANCE hinst, HINSTANCE hpre
489          return 0;          return 0;
490      }      }
491    
492      if (cmdline && stristr (cmdline, "--wipe-freespace")) {      rc = kserver_load_conf ();
493          dialog_box_param (glob_hinst, (LPCTSTR)IDD_WINPT_SPACE_SECDEL,      if (rc)
494                              GetDesktopWindow(), space_wipefrees_dlg_proc, 0,          msg_box (GetDesktopWindow (), winpt_strerror (rc),
495                              _("Wipe Free Space"), IDS_WINPT_SPACE_SECDEL);                   _("Keyserver"), MB_ERR);
         free_gnupg_table ();  
         return 0;  
     }  
   
     load_keyserver_conf (cmdline? 1 : 0);  
496    
497      if (cmdline && (stristr (cmdline, "--keymanager")      if (cmdline && (stristr (cmdline, "--keymanager")
498                  || stristr (cmdline, "--cardmanager"))) {                  || stristr (cmdline, "--cardmanager"))) {
# Line 687  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 518  WinMain (HINSTANCE hinst, HINSTANCE hpre
518          return 0;          return 0;
519      }      }
520    
 #ifndef WINPT_MOBILE  
521      if (cmdline && (stristr (cmdline, "--enable-debug") ||      if (cmdline && (stristr (cmdline, "--enable-debug") ||
522                      stristr (cmdline, "--debug"))) {                      stristr (cmdline, "--debug"))) {
523          gpg_set_debug_mode (1);          gpg_set_debug_mode (1);
524          winpt_debug_msg ();          winpt_debug_msg ();
525          debug = 1;          debug = 1;
526      }      }
 #endif  
527    
528      wc.hIcon = LoadIcon (glob_hinst, MAKEINTRESOURCE (IDI_WINPT));      wc.hIcon = LoadIcon (glob_hinst, MAKEINTRESOURCE (IDI_WINPT));
529      rc = RegisterClass (&wc);      rc = RegisterClass (&wc);
530      if (rc == FALSE) {      if (rc == FALSE) {
531          msg_box (NULL, _("Could not register window class"),          msg_box (GetDesktopWindow (),
532                     _("Could not register window class"),
533                   _("WinPT Error"), MB_ERR);                   _("WinPT Error"), MB_ERR);
534          free_gnupg_table ();          free_gnupg_table ();
535          return 0;          return 0;
# Line 713  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 543  WinMain (HINSTANCE hinst, HINSTANCE hpre
543                           hinst,                           hinst,
544                           NULL);                           NULL);
545      if (hwnd == NULL) {      if (hwnd == NULL) {
546          msg_box (NULL, _("Could not create window"), _("WinPT Error"), MB_ERR);          msg_box (GetDesktopWindow (),
547                     _("Could not create window"),
548                     _("WinPT Error"), MB_ERR);
549          free_gnupg_table ();          free_gnupg_table ();
550          return 0;          return 0;
551      }      }
# Line 785  start: Line 617  start:
617              keycache_release (1);              keycache_release (1);
618              return 0;              return 0;
619          }          }
         if (!is_gpg4win_installed ()) {  
             select_language ();  
             load_gettext ();  
         }  
620      }      }
621      else {      else {
622          gpg_keycache_t c;          gpg_keycache_t c;
# Line 804  start: Line 632  start:
632              msg_box (hwnd, _("The keycache was not initialized or is empty.\n"              msg_box (hwnd, _("The keycache was not initialized or is empty.\n"
633                               "Please check your GPG config (keyrings, pathes...)"),                               "Please check your GPG config (keyrings, pathes...)"),
634                               _("WinPT Error"), MB_ERR);                               _("WinPT Error"), MB_ERR);
635              ec = msg_box (NULL, _("It seems that GPG is not configured properly.\n"              ec = msg_box (GetDesktopWindow (),
636                                    "Do you want to start the GPG preferences dialog?"),                            _("It seems that GPG is not configured properly.\n"
637                              "WinPT", MB_INFO|MB_YESNO);                              "Do you want to start the GPG preferences dialog?"),
638                              "WinPT", MB_INFO|MB_YESNO);
639              if (ec == IDYES) {              if (ec == IDYES) {
640                  DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, hwnd,                  DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, hwnd,
641                                  gpgprefs_dlg_proc, 0);                                  gpgprefs_dlg_proc, 0);
# Line 832  start: Line 661  start:
661              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_ELGWARN, glob_hwnd,              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_ELGWARN, glob_hwnd,
662                              elgamal_warn_dlg_proc, 0);                              elgamal_warn_dlg_proc, 0);
663      }      }
664      
665        if (strstr (cmdline, "--emulate-utf8-bug")) {
666            MessageBox (NULL, "Please use this mode only for resetting your passphrase to a non-utf8 form.",
667                        "WinPT Warning", MB_WARN);
668            emulate_utf8_bug = 1;
669        }
670      if (start_manager)      if (start_manager)
671          PostMessage (hwnd, WM_COMMAND, start_manager, 0);          PostMessage (hwnd, WM_COMMAND, start_manager, 0);
672    
# Line 844  start: Line 678  start:
678              DispatchMessage (&msg);              DispatchMessage (&msg);
679          }          }
680      }      }
681                
682      return 0;      return 0;
683  }  }

Legend:
Removed from v.295  
changed lines
  Added in v.328

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26