/[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 218 by twoaday, Wed May 24 07:53:24 2006 UTC revision 270 by twoaday, Sat Oct 21 18:08:57 2006 UTC
# Line 44  Line 44 
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);  BOOL user_is_admin (void);
47    extern "C" int  pcsc_available (void);
48    
49  /* Global variables. */  /* Global variables. */
50  HINSTANCE glob_hinst;   /* global instance for the dialogs */  HINSTANCE glob_hinst;   /* global instance for the dialogs */
# Line 58  char gpgver[3]; Line 59  char gpgver[3];
59    
60    
61  /* Load the key cache and rebuild the signature cache. */  /* Load the key cache and rebuild the signature cache. */
62  void  int
63  update_keycache (HWND hwnd)  update_keycache (HWND hwnd)
64  {  {
65        int err;
66    
67      refresh_cache_s rcs = {0};      refresh_cache_s rcs = {0};
68      rcs.kr_reload = 0;      rcs.kr_reload = 0;
69      rcs.kr_update = 1;      rcs.kr_update = 1;
70      rcs.tr_update = 1;      rcs.tr_update = 1;
71      DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, hwnd,      err = DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, hwnd,
72                      keycache_dlg_proc, (LPARAM)&rcs);                      keycache_dlg_proc, (LPARAM)&rcs);
73      /* XXX: the dialog return 0 when an error occurs.      if (err) {
74              in this case figure out if the gpg env is OK          char *cfgf = get_gnupg_config ();
75              and supress dialogs to configure gpg. */          if (cfgf && check_gnupg_options (cfgf, 0) == WPTERR_FILE_EXIST)
76                msg_box (NULL, _("The gpg.conf contains at least one argument which points to a non-existing file."), "WinPT", MB_ERR);
77            free_if_alloc (cfgf);
78            return -1;
79        }
80        return 0;
81  }  }
82    
83    
# Line 95  gpg_set_debug_mode (int val) Line 103  gpg_set_debug_mode (int val)
103  static void  static void
104  load_gettext (void)  load_gettext (void)
105  {  {
106      char *nls = NULL;      char *nls;
107    
108      /* Return the name of the gettext language file. */      /* Return the name of the gettext language file. */
109      nls = get_reg_entry_mo ();      nls = get_reg_entry_mo ();
# Line 123  gpg_prefs_ok (void) Line 131  gpg_prefs_ok (void)
131          }          }
132      }      }
133      free_if_alloc (p);      free_if_alloc (p);
134      p = get_reg_entry_gpg4win (NULL);          p = get_reg_entry_gpg4win (NULL);
135      if (!p || dir_exist_check (p) != 0) {      if (!p || dir_exist_check (p) != 0) {
136          free_if_alloc (p);          free_if_alloc (p);
137          p = get_reg_entry_gpg ("HomeDir");          p = get_reg_entry_gpg ("HomeDir");
# Line 166  load_gpg_env (void) Line 174  load_gpg_env (void)
174      SECURITY_ATTRIBUTES sec_attr;      SECURITY_ATTRIBUTES sec_attr;
175      char *p;      char *p;
176      char *pkr;      char *pkr;
177        int err = 0;
178    
179      p = get_reg_entry_gpg4win ("gpg.exe");      p = get_reg_entry_gpg4win ("gpg.exe");
180      if (!p)      if (!p)
# Line 194  load_gpg_env (void) Line 203  load_gpg_env (void)
203      check_readonly_attr (p);      check_readonly_attr (p);
204      pkr = make_filename (p, "pubring", "gpg");      pkr = make_filename (p, "pubring", "gpg");
205      free_if_alloc (p);      free_if_alloc (p);
206      if (!pkr)      if (get_file_size (pkr) == 0)
207          return -1;          err = -1;
208      if (get_file_size (pkr) == 0) {      free_if_alloc (pkr);
209          free_if_alloc (pkr);      return err;
         return -1;  
     }  
     return 0;  
210  }  }
211    
212    
# Line 228  check_default_key (gpg_keycache_t kc) Line 234  check_default_key (gpg_keycache_t kc)
234  static const char*  static const char*
235  get_prog_part (const char * fname, int use_cwd)  get_prog_part (const char * fname, int use_cwd)
236  {  {
237      static char program[512];      static char program[2*MAX_PATH+1];
238      char currdir[256];      char currdir[MAX_PATH+1];
239      char *cmd = NULL;      char *cmd = NULL;
240      int j;      int j;
241                    
# Line 242  get_prog_part (const char * fname, int u Line 248  get_prog_part (const char * fname, int u
248      }      }
249      else {      else {
250          cmd = GetCommandLine ();          cmd = GetCommandLine ();
251          if (cmd == NULL)          if (!cmd)
252              return NULL;              return NULL;
253          strncpy (currdir, cmd, sizeof (currdir)-1);          strncpy (currdir, cmd, sizeof (currdir)-1);
254          j = strlen (currdir);          j = strlen (currdir);
# Line 278  check_crypto_engine (void) Line 284  check_crypto_engine (void)
284                     ma, mi, pa);                     ma, mi, pa);
285          return false;          return false;
286      }      }
287      /* We enable smartcard support for GPG: >= 2 or >= 1.4.3 */      /* Enable smart card support for GPG 2 or >= 1.4 */
288      if (ma > 1 || pa >= 3)      if ((ma > 1 || pa >= 4) && pcsc_available ())
289          scard_support = 1;          scard_support = 1;
290    
291      gpgver[0] = ma;      gpgver[0] = ma;
# Line 293  check_crypto_engine (void) Line 299  check_crypto_engine (void)
299     do not show any errors. */     do not show any errors. */
300  static int  static int
301  load_keyserver_conf (int quiet)  load_keyserver_conf (int quiet)
302  {  {    
     char *buf;  
303      const char *t, *conf;      const char *t, *conf;
304        char *buf;
305      int rc;      int rc;
306    
307      /* Create $APPDATA\winpt if needed. */      /* Create $APPDATA\winpt if needed. */
# Line 448  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 454  WinMain (HINSTANCE hinst, HINSTANCE hpre
454      HACCEL accel_tab;      HACCEL accel_tab;
455      MSG msg;      MSG msg;
456      HWND hwnd = NULL;      HWND hwnd = NULL;
457      /*WORD ver[3], ptdver[4];*/      WORD ver[3], ptdver[4];
458        const char *s;
459      int rc, ec, created = 0;      int rc, ec, created = 0;
460      int first_start = 0, start_gpgprefs = 0;      int first_start = 0, start_gpgprefs = 0;
461      int winpt_inst_found = 0;      int winpt_inst_found = 0;
462      int start_manager = 0;      int start_manager = 0;    
     const char *s;  
463    
464      glob_hinst = hinst;      glob_hinst = hinst;
465      if (cmdline && stristr (cmdline, "--stop")) {      if (cmdline && stristr (cmdline, "--stop")) {
# Line 468  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 474  WinMain (HINSTANCE hinst, HINSTANCE hpre
474      debug = 1;      debug = 1;
475      #endif      #endif
476    
     /* XXX  
477      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]);
478      get_file_version ("PTD.dll", &ptdver[0], &ptdver[1],      ec = get_file_version ("PTD.dll", &ptdver[0], &ptdver[1],
479                                   &ptdver[2], &ptdver[3]);                                   &ptdver[2], &ptdver[3]);
480            
481      if (ptdver[0] != ver[0] || ptdver[1] != ver[1]|| ptdver[2] != ver[2]) {      if (!ec && (ptdver[0] != ver[0] ||
482                    ptdver[1] != ver[1] ||
483                    ptdver[2] != ver[2])) {
484          log_box (_("WinPT Error"), MB_ERR,          log_box (_("WinPT Error"), MB_ERR,
485                   _("The PTD.dll file has a different version than WinPT.exe\n"                   _("The PTD.dll file has a different version than WinPT.exe\n"
486                     "Please update the PTD.dll to version %d.%d.%d"),                     "Please update the PTD.dll to version %d.%d.%d"),
487                     ver[0], ver[1], ver[2]);                     ver[0], ver[1], ver[2]);
488          return 0;          return 0;
489      }      }
     */  
490    
491      if (gpg_md_selftest ()) {      if (gpg_md_selftest ()) {
492          msg_box (NULL, _("Cryptographic selftest failed."),          msg_box (NULL, _("Cryptographic selftest failed."),
# Line 545  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 551  WinMain (HINSTANCE hinst, HINSTANCE hpre
551              if (!p)              if (!p)
552                  BUG (0);                  BUG (0);
553              n = p - s;              n = p - s;
554              if (n) {              if (n > 0) {
555                  char *file = new char[n+1];                  char *file = new char[n+1];
556                  if (!file)                  if (!file)
557                      BUG (NULL);                      BUG (NULL);
# Line 558  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 564  WinMain (HINSTANCE hinst, HINSTANCE hpre
564              }              }
565          }          }
566          else {          else {
567              msg_box (NULL, _("GPG home directory could not be determited."),              msg_box (NULL, _("GPG home directory could not be determined."),
568                       _("WinPT Error"), MB_ERR);                       _("WinPT Error"), MB_ERR);
569              goto start;              goto start;
570          }          }
# Line 583  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 589  WinMain (HINSTANCE hinst, HINSTANCE hpre
589              ec = msg_box (NULL,              ec = msg_box (NULL,
590                  _("Could not access and/or find the public and secret keyring.\n"                  _("Could not access and/or find the public and secret keyring.\n"
591                    "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"
592                    "Continue if you want that WinPT offers you more choices.\n"),                    "Continue if you want WinPT to offer you more choices.\n"),
593                    "WinPT", MB_INFO|MB_YESNO);                    "WinPT", MB_INFO|MB_YESNO);
594              if (ec == IDYES)              if (ec == IDYES)
595                  first_start = 1;                  first_start = 1;
# Line 624  WinMain (HINSTANCE hinst, HINSTANCE hpre Line 630  WinMain (HINSTANCE hinst, HINSTANCE hpre
630      if (cmdline && (stristr (cmdline, "--keymanager")      if (cmdline && (stristr (cmdline, "--keymanager")
631                  || stristr (cmdline, "--cardmanager"))) {                  || stristr (cmdline, "--cardmanager"))) {
632          /* If an instance of WinPT is running, just send the command          /* If an instance of WinPT is running, just send the command
633             to open the key manager. Otherwise start a new instance.             to open the key manager. Otherwise start a new instance. */
          */  
634          HWND tray = FindWindow ("WinPT", "WinPT");          HWND tray = FindWindow ("WinPT", "WinPT");
635          if (stristr (cmdline, "keymanager"))          if (stristr (cmdline, "keymanager"))
636              start_manager = ID_WINPT_KEY;              start_manager = ID_WINPT_KEY;
# Line 722  start: Line 727  start:
727              }              }
728              break;              break;
729    
730            case SETUP_CARDGEN:
731                rc = DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_CARD_KEYGEN,
732                                     h, card_keygen_dlg_proc, 0);
733                if (!rc)
734                    goto start;
735                break;
736    
737          case 0: /* Cancel/Abort. */          case 0: /* Cancel/Abort. */
738          default:          default:
739              DestroyWindow (hwnd);              DestroyWindow (hwnd);
# Line 732  start: Line 744  start:
744          if (!check_crypto_engine ()) {          if (!check_crypto_engine ()) {
745              DestroyWindow (hwnd);              DestroyWindow (hwnd);
746              free_gnupg_table ();              free_gnupg_table ();
747                keycache_release (1);
748              return 0;              return 0;
749          }          }
750          if (!is_gpg4win_installed ()) {          if (!is_gpg4win_installed ()) {
# Line 741  start: Line 754  start:
754      }      }
755      else {      else {
756          gpg_keycache_t c, sec_c;          gpg_keycache_t c, sec_c;
757          update_keycache (hwnd);          if (update_keycache (hwnd)) {
758                DestroyWindow (hwnd);
759                free_gnupg_table ();
760                keycache_release (1);
761                return 0;
762            }
763          c = keycache_get_ctx (1);          c = keycache_get_ctx (1);
764          if (!c || !gpg_keycache_get_size (c)) {          if (!gpg_keycache_get_size (c)) {
             gnupg_display_error ();  
765              msg_box (hwnd, _("The keycache was not initialized or is empty.\n"              msg_box (hwnd, _("The keycache was not initialized or is empty.\n"
766                               "Please check your GPG config (keyrings, pathes...)"),                               "Please check your GPG config (keyrings, pathes...)"),
767                               _("WinPT Error"), MB_ERR);                               _("WinPT Error"), MB_ERR);
768              ec = msg_box (NULL, _("It seems that GPG is not set properly.\n"              ec = msg_box (NULL, _("It seems that GPG is not configured properly.\n"
769                                    "Do you want to start the GPG preferences dialog?"),                                    "Do you want to start the GPG preferences dialog?"),
770                              "WinPT", MB_INFO|MB_YESNO);                              "WinPT", MB_INFO|MB_YESNO);
771              if (ec == IDYES) {              if (ec == IDYES) {
# Line 759  start: Line 776  start:
776              else {              else {
777                  DestroyWindow (hwnd);                  DestroyWindow (hwnd);
778                  free_gnupg_table ();                  free_gnupg_table ();
779                    keycache_release (1);
780                  return 0;                  return 0;
781              }              }
782          }          }

Legend:
Removed from v.218  
changed lines
  Added in v.270

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26