[Winpt-commits] r133 - in trunk: . Gnupg Include Po Src icons
scm-commit at wald.intevation.org
scm-commit at wald.intevation.org
Mon Jan 9 10:15:39 CET 2006
Author: twoaday
Date: 2006-01-09 10:15:29 +0100 (Mon, 09 Jan 2006)
New Revision: 133
Added:
trunk/Include/wptGPGME.h
trunk/Src/keypair.ico
trunk/Src/pubkey.ico
trunk/Src/wptGPGMEWrapper.cpp
Removed:
trunk/Ico/
Modified:
trunk/ChangeLog
trunk/Gnupg/ChangeLog
trunk/Gnupg/parse-packet.c
trunk/Include/ChangeLog
trunk/Include/Makefile.am
trunk/Include/wptCommonCtl.h
trunk/Include/wptErrors.h
trunk/Include/wptGPG.h
trunk/Include/wptKeyCache.h
trunk/Include/wptKeylist.h
trunk/Include/wptKeyserver.h
trunk/Makefile.am
trunk/NEWS
trunk/Po/de.po
trunk/Src/ChangeLog
trunk/Src/Makefile.am
trunk/Src/WinPT-en.rc
trunk/Src/WinPT.cpp
trunk/Src/resource.h
trunk/Src/wptCardDlg.cpp
trunk/Src/wptErrors.cpp
trunk/Src/wptFirstRunDlg.cpp
trunk/Src/wptGPG.cpp
trunk/Src/wptGPGMEData.cpp
trunk/Src/wptGPGUtil.cpp
trunk/Src/wptKeyCache.cpp
trunk/Src/wptKeyEditDlgs.cpp
trunk/Src/wptKeyManager.cpp
trunk/Src/wptKeyManagerDlg.cpp
trunk/Src/wptKeyPropsDlg.cpp
trunk/Src/wptKeylist.cpp
trunk/Src/wptKeyserver.cpp
trunk/Src/wptKeyserverDlg.cpp
trunk/Src/wptListView.cpp
trunk/Src/wptSigList.cpp
trunk/THANKS
trunk/TODO
trunk/configure.ac
trunk/icons/key_delete.ico
trunk/icons/key_export.ico
trunk/icons/key_import.ico
trunk/icons/key_props.ico
Log:
A lot of minor bug fixes.
New icons.
For a complete history, see the ChangeLog entries.
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/ChangeLog 2006-01-09 09:15:29 UTC (rev 133)
@@ -1,3 +1,7 @@
+2006-01-07 Timo Schulz <ts at g10code.com>
+
+ * Icons: Deleted unused folder.
+
2006-01-05 Werner Koch <wk at g10code.com>
* configure.ac: Hack to make sure that NLS support is included.
Modified: trunk/Gnupg/ChangeLog
===================================================================
--- trunk/Gnupg/ChangeLog 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Gnupg/ChangeLog 2006-01-09 09:15:29 UTC (rev 133)
@@ -1,3 +1,7 @@
+2006-01-07 Timo Schulz <ts at g10code.com>
+
+ * parse-packet.c (cp_subpacketarea): Remove unused function.
+
2005-11-22 Timo Schulz <ts at g10code.com>
Store MSVC related files outside the repository.
Modified: trunk/Gnupg/parse-packet.c
===================================================================
--- trunk/Gnupg/parse-packet.c 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Gnupg/parse-packet.c 2006-01-09 09:15:29 UTC (rev 133)
@@ -352,22 +352,9 @@
else if ( algo == 17 ) return 5;
else if ( is_RSA( algo ) )return 6;
return 0;
-} /* cdk_pk_get_nskey */
+}
-static subpktarea_t *
-cp_subpktarea (subpktarea_t *s )
-{
- subpktarea_t *d;
-
- if( !s )
- return NULL;
- d = malloc (sizeof (*d) + s->size - 1 );
- d->size = s->size;
- d->len = s->len;
- memcpy (d->data, s->data, s->len);
- return d;
-}
/*
* Return a copy of the preferences
Modified: trunk/Include/ChangeLog
===================================================================
--- trunk/Include/ChangeLog 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Include/ChangeLog 2006-01-09 09:15:29 UTC (rev 133)
@@ -1,3 +1,11 @@
+2006-01-07 Timo Schulz <ts at g10code.com>
+
+ * wptKeyserver.h (hkp_recv_key2): Removed.
+
+2006-01-04 Timo Schulz <ts at g10code.com>
+
+ * wptGPGME.h: New.
+
2005-12-27 Timo Schulz <ts at g10code.com>
* wptCommonCtl.h (listview_del_column): New.
Modified: trunk/Include/Makefile.am
===================================================================
--- trunk/Include/Makefile.am 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Include/Makefile.am 2006-01-09 09:15:29 UTC (rev 133)
@@ -41,5 +41,7 @@
wptVersion.h \
wptCrypto.h \
wptUtil.h \
- wptW32API.h
+ wptW32API.h \
+ wptGPGME.h
+
Modified: trunk/Include/wptCommonCtl.h
===================================================================
--- trunk/Include/wptCommonCtl.h 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Include/wptCommonCtl.h 2006-01-09 09:15:29 UTC (rev 133)
@@ -1,6 +1,6 @@
/* wptCommonCtl.h - Win32 Imagelist headerfile
* Copyright (C) 2003 Andreas Jobs
- * Copyright (C) 2004, 2005 Timo Schulz
+ * Copyright (C) 2004, 2005, 2006 Timo Schulz
*
* This file is part of WinPT.
*
@@ -56,6 +56,7 @@
HWND ctrl; /* the actual listview window. */
int cols; /* number of columns. */
int items; /* number of items. */
+ HIMAGELIST hil; /* Imagelist context. */
};
typedef struct listview_ctrl_s * listview_ctrl_t;
@@ -87,6 +88,8 @@
int listview_find (listview_ctrl_t ctx, const char * str);
void listview_scroll (listview_ctrl_t ctx, int oldpos, int newpos);
int listview_del_column (listview_ctrl_t ctx, int pos);
+int listview_add_item_image (listview_ctrl_t ctx, const char *text, int image);
+void listview_set_image_list (listview_ctrl_t ctx, HICON *ico, DWORD nicons);
/*-- Image List --*/
extern HIMAGELIST glob_imagelist;
Modified: trunk/Include/wptErrors.h
===================================================================
--- trunk/Include/wptErrors.h 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Include/wptErrors.h 2006-01-09 09:15:29 UTC (rev 133)
@@ -79,7 +79,8 @@
void debug_box (const char * msg, const char * file, int line);
void debug_f (const char * msg, const char * file, int line);
void log_debug (const char * format, ...);
-int log_box (const char * title, int style, const char * format, ...);
+int printf_box (const char * title, int style, const char * format, ...);
+#define log_box printf_box
/*-- wptW32API.cpp --*/
int msg_box (HWND hwnd, const char * text, const char * title, int mode);
Modified: trunk/Include/wptGPG.h
===================================================================
--- trunk/Include/wptGPG.h 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Include/wptGPG.h 2006-01-09 09:15:29 UTC (rev 133)
@@ -236,7 +236,9 @@
void gpg_set_debug_mode (int val);
gpgme_error_t gpg_export_seckey (const char *keyid, const char *outfile);
gpgme_error_t gpg_manage_ownertrust (char **data, int do_export);
-
+gpgme_error_t gpg_get_photoid_data (const char *keyid, char **r_status_data,
+ unsigned char **r_data,
+ unsigned long *ndata);
char* generate_revoke_input (int code, const char *cmt, const char *pass);
gpgme_error_t gpg_revoke_cert (const char *inp_data,
const char *keyid,
Added: trunk/Include/wptGPGME.h
===================================================================
--- trunk/Include/wptGPGME.h 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Include/wptGPGME.h 2006-01-09 09:15:29 UTC (rev 133)
@@ -0,0 +1,42 @@
+/* wptGPGME.h - Object oriented wrapper for GPGME
+ * Copyright (C) 2006 Timo Schulz
+ *
+ * This file is part of WinPT.
+ *
+ * WinPT is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * WinPT is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 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
+ */
+
+#ifndef WPT_GPGME_H
+#define WPT_GPGME_H
+
+class GPGME {
+private:
+ gpgme_ctx_t ctx;
+ bool chg_ver;
+
+public:
+ ~GPGME ();
+ GPGME ();
+
+ void setChangeVersion (bool val);
+ bool getArmor (void);
+ void setArmor (bool val);
+
+ gpgme_error_t exportToBuffer (const char *patt, char **outdata);
+ gpgme_error_t exportToFile (const char *patt, const char *outfile);
+ gpgme_error_t exportToClipboard (const char *patt);
+};
+
+#endif /*WPT_GPGME_H*/
Modified: trunk/Include/wptKeyCache.h
===================================================================
--- trunk/Include/wptKeyCache.h 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Include/wptKeyCache.h 2006-01-09 09:15:29 UTC (rev 133)
@@ -31,7 +31,7 @@
unsigned int has_desig_rev:1; /* has desig. revokers. */
} gloflags;
struct {
- unsigned int used:1;
+ unsigned int flags;
unsigned char *d; /* attribute (JPG) data. */
unsigned int len; /* attribute data length. */
gpgme_validity_t validity; /* attribute id validity. */
Modified: trunk/Include/wptKeylist.h
===================================================================
--- trunk/Include/wptKeylist.h 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Include/wptKeylist.h 2006-01-09 09:15:29 UTC (rev 133)
@@ -63,6 +63,12 @@
KM_COL_CREAT = 7
};
+/* Icon for the key types. */
+enum key_image_t {
+ KEY_IMG_PUB = 0,
+ KEY_IMG_PAIR= 1
+};
+
/* Signature verification context for a file. */
struct file_sig_ctx_s {
char *file; /* plaintext file name */
Modified: trunk/Include/wptKeyserver.h
===================================================================
--- trunk/Include/wptKeyserver.h 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Include/wptKeyserver.h 2006-01-09 09:15:29 UTC (rev 133)
@@ -132,8 +132,5 @@
const char *pattern);
int hkp_recv_key (HWND dlg, const char *kserver, unsigned short port,
const char *pattern, int proto, int flags);
-int hkp_recv_key2 (HWND dlg, const char *kserver, WORD port,
- const char *pattern, int proto, int flags,
- char **r_fpr);
#endif /* WPT_KEYSERVER_H */
Modified: trunk/Makefile.am
===================================================================
--- trunk/Makefile.am 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Makefile.am 2006-01-09 09:15:29 UTC (rev 133)
@@ -20,7 +20,7 @@
EXTRA_DIST = autogen.sh README.SVN keyserver.conf
-SUBDIRS = Po Gnupg PTD Src Include Ico icons m4
+SUBDIRS = Po Gnupg PTD Src Include icons m4
dist-hook:
echo "$(VERSION)" > $(distdir)/VERSION
Modified: trunk/NEWS
===================================================================
--- trunk/NEWS 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/NEWS 2006-01-09 09:15:29 UTC (rev 133)
@@ -698,3 +698,16 @@
was comitted.
* A lot of cosmetical changes for the dialogs.
* Add properly UTF8 handling for the dialogs.
+
+(0.11.5)
+* Fixed a seg fault which occurs when keys in the Key Manager
+ will be deleted without confirmation.
+* Images for the Key Manager key list.
+* LDAP keyserver code works again.
+* Do not allow to modify revoked keys (key edit).
+* Some GUI improvements for the Key Manager.
+* Show key server import status when a single key
+ was refreshed.
+* The use of the MAPI system to send a public key
+ does not work correctly.
+* New icons for the Key Manager toolbar.
Modified: trunk/Po/de.po
===================================================================
--- trunk/Po/de.po 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Po/de.po 2006-01-09 09:15:29 UTC (rev 133)
@@ -14,7 +14,7 @@
msgstr ""
"Project-Id-Version: WinPT 0.11.4\n"
"Report-Msgid-Bugs-To: winpt at freakmail.de\n"
-"POT-Creation-Date: 2006-01-05 20:24+0100\n"
+"POT-Creation-Date: 2006-01-07 21:24+0100\n"
"PO-Revision-Date: 2005-12-28 16:10+0100\n"
"Last-Translator: Timo Schulz <ts at g10code.de>\n"
"Language-Team: DE <twoaday at freakmail.de>\n"
@@ -30,12 +30,12 @@
"Konnte Dateisperrung nicht initialisieren.\n"
"Native Language Support"
-#: Src/WinPT.cpp:109 Src/WinPT.cpp:143 Src/WinPT.cpp:173 Src/WinPT.cpp:223
-#: Src/WinPT.cpp:227 Src/WinPT.cpp:337 Src/WinPT.cpp:344 Src/WinPT.cpp:386
-#: Src/WinPT.cpp:414 Src/WinPT.cpp:423 Src/WinPT.cpp:427 Src/WinPT.cpp:444
-#: Src/WinPT.cpp:512 Src/WinPT.cpp:525 Src/WinPT.cpp:574 Src/WinPT.cpp:595
-#: Src/WinPT.cpp:612 Src/wptErrors.cpp:140 Src/wptGPG.cpp:889
-#: Src/wptGPG.cpp:900 Src/wptGPG.cpp:909 Src/wptGPG.cpp:919
+#: Src/WinPT.cpp:109 Src/WinPT.cpp:143 Src/WinPT.cpp:174 Src/WinPT.cpp:224
+#: Src/WinPT.cpp:228 Src/WinPT.cpp:360 Src/WinPT.cpp:367 Src/WinPT.cpp:409
+#: Src/WinPT.cpp:437 Src/WinPT.cpp:446 Src/WinPT.cpp:450 Src/WinPT.cpp:467
+#: Src/WinPT.cpp:537 Src/WinPT.cpp:550 Src/WinPT.cpp:596 Src/WinPT.cpp:617
+#: Src/WinPT.cpp:634 Src/wptErrors.cpp:140 Src/wptGPG.cpp:912
+#: Src/wptGPG.cpp:923 Src/wptGPG.cpp:932 Src/wptGPG.cpp:942
#: Src/wptMainProc.cpp:343 Src/wptMainProc.cpp:527
msgid "WinPT Error"
msgstr "WinPT Fehler"
@@ -44,15 +44,15 @@
msgid "Could not create GPG home directory"
msgstr "Konnte GPG-Heimatverzeichnis nicht erstellen"
-#: Src/WinPT.cpp:172
+#: Src/WinPT.cpp:173
msgid "No useable secret key found."
-msgstr "Kein benutzbarer geheimer Schlüssel gefunden"
+msgstr "Kein benutzbarer geheimer Schlüssel gefunden."
-#: Src/WinPT.cpp:222
+#: Src/WinPT.cpp:223
msgid "Could not read GnuPG version."
msgstr "Konnte GnuPG-Version nicht auslesen."
-#: Src/WinPT.cpp:228
+#: Src/WinPT.cpp:229
#, c-format
msgid ""
"Sorry, you need a newer GPG version.\n"
@@ -61,27 +61,27 @@
"Sorry, Sie benötigen eine neuere GPG-Version.\n"
"Aktuelle GPG-Version %d.%d.%d benötigte benoetigte GPG version "
-#: Src/WinPT.cpp:260 Src/wptKeyManagerDlg.cpp:946 Src/wptKeyserverDlg.cpp:56
+#: Src/WinPT.cpp:261 Src/wptKeyManagerDlg.cpp:955 Src/wptKeyserverDlg.cpp:56
#: Src/wptKeyserverDlg.cpp:186 Src/wptKeyserverDlg.cpp:194
-#: Src/wptKeyserverDlg.cpp:210 Src/wptKeyserverDlg.cpp:356
-#: Src/wptKeyserverDlg.cpp:361 Src/wptKeyserverDlg.cpp:491
-#: Src/wptKeyserverDlg.cpp:498 Src/wptKeyserverDlg.cpp:504
-#: Src/wptKeyserverDlg.cpp:520 Src/wptKeyserverDlg.cpp:533
+#: Src/wptKeyserverDlg.cpp:210 Src/wptKeyserverDlg.cpp:357
+#: Src/wptKeyserverDlg.cpp:362 Src/wptKeyserverDlg.cpp:492
+#: Src/wptKeyserverDlg.cpp:499 Src/wptKeyserverDlg.cpp:505
+#: Src/wptKeyserverDlg.cpp:521 Src/wptKeyserverDlg.cpp:534
#: Src/wptKeyserverSearchDlg.cpp:127
msgid "Keyserver"
msgstr "Schlüsselserver"
# c:\oss\winpt-gpgme\src\WinPT.cpp:245
-#: Src/WinPT.cpp:336
+#: Src/WinPT.cpp:359
msgid "Cryptographic selftest failed."
msgstr "Kryptographischer Selbsttest ist fehlgeschlagen."
# c:\oss\winpt-gpgme\src\WinPT.cpp:252
-#: Src/WinPT.cpp:343
+#: Src/WinPT.cpp:366
msgid "A newer GPGME version is needed; at least "
msgstr "Eine neuere GPGME version wird benötigt"
-#: Src/WinPT.cpp:387
+#: Src/WinPT.cpp:410
#, c-format
msgid ""
"GPG home directory is not set correctly.\n"
@@ -92,21 +92,21 @@
"Bitte überprüfen Sie die GPG Registryseinträge:\n"
"%s"
-#: Src/WinPT.cpp:391
+#: Src/WinPT.cpp:414
msgid "Select GPG Public Keyring"
msgstr "Öffentlichen GPG-Schlüsselbund auswählen."
# c:\oss\winpt-gpgme\src\wptKeyCache.cpp:479
-#: Src/WinPT.cpp:392 Src/wptGPG.cpp:887 Src/wptGPG.cpp:907
+#: Src/WinPT.cpp:415 Src/wptGPG.cpp:910 Src/wptGPG.cpp:930
msgid "GPG Keyrings (*.gpg)"
msgstr "GPG Schlüsselbunde (*.gpg)"
# c:\oss\winpt-gpgme\src\WinPT.cpp:313
-#: Src/WinPT.cpp:413
+#: Src/WinPT.cpp:436
msgid "GPG home directory could not be determited."
msgstr "GPG-Home-Dir konnte nicht bestimmt werden."
-#: Src/WinPT.cpp:421
+#: Src/WinPT.cpp:444
msgid ""
"Could not find the GPG binary (gpg.exe).\n"
"Do you want to start the GPG preferences to correct this problem?"
@@ -115,7 +115,7 @@
"öffnen um das Problem zu beheben?"
# c:\oss\winpt-gpgme\src\WinPT.cpp:339
-#: Src/WinPT.cpp:436
+#: Src/WinPT.cpp:459
msgid ""
"Could not access and/or find the public and secret keyring.\n"
"If this is an accident, quit the program and fix it.\n"
@@ -130,20 +130,20 @@
# c:\oss\winpt-gpgme\src\WinPT.cpp:376
# c:\oss\winpt-gpgme\src\wptFileManagerDlg.cpp:426
# c:\oss\winpt-gpgme\src\wptFileManagerDlg.cpp:711
-#: Src/WinPT.cpp:467 Src/wptFileManagerDlg.cpp:479
+#: Src/WinPT.cpp:492 Src/wptFileManagerDlg.cpp:479
#: Src/wptFileManagerDlg.cpp:793
msgid "Wipe Free Space"
-msgstr "Freispeicher Löschen"
+msgstr "Freien Speicher Löschen"
-#: Src/WinPT.cpp:511
+#: Src/WinPT.cpp:536
msgid "Could not register window class"
msgstr "Konnte keine Fensterklasse registrieren"
-#: Src/WinPT.cpp:525
+#: Src/WinPT.cpp:550
msgid "Could not create window"
msgstr "Konnte Fenster nicht erstellen"
-#: Src/WinPT.cpp:593
+#: Src/WinPT.cpp:615
msgid ""
"The keycache was not initialized or is empty.\n"
"Please check your GPG config (keyrings, pathes...)"
@@ -151,7 +151,7 @@
"Der Schlüsselspeicher wurde nicht initialisiert oder ist leer.\n"
"Bitte checken Sie die GPG Konfiguration (Schlüsselbunde, Pfade)"
-#: Src/WinPT.cpp:596
+#: Src/WinPT.cpp:618
msgid ""
"It seems that GPG is not set properly.\n"
"Do you want to start the GPG preferences dialog?"
@@ -159,7 +159,7 @@
"GPG ist nicht richtig konfiguriert.\n"
"Den GPG-Einstellungsdialog starten?"
-#: Src/WinPT.cpp:613
+#: Src/WinPT.cpp:635
#, c-format
msgid ""
"Default key from the GPG options file could not be found.\n"
@@ -181,7 +181,7 @@
msgid "About GnuPG"
msgstr "Über GnuPG"
-#: Src/wptAboutDlgs.cpp:97 Src/wptKeyManagerDlg.cpp:1616
+#: Src/wptAboutDlgs.cpp:97 Src/wptKeyManagerDlg.cpp:1626
#: Src/wptMainProc.cpp:569
msgid "About WinPT"
msgstr "Über WinPT"
@@ -231,8 +231,8 @@
msgstr "Über &GPG"
# c:\oss\winpt-gpgme\src\wptKeyManagerDlg.cpp:700
-#: Src/wptAboutDlgs.cpp:116 Src/wptKeyEditDlgs.cpp:1805
-#: Src/wptKeyManagerDlg.cpp:952
+#: Src/wptAboutDlgs.cpp:116 Src/wptKeyEditDlgs.cpp:1808
+#: Src/wptKeyManagerDlg.cpp:961
msgid "&Help"
msgstr "&Hilfe"
@@ -254,12 +254,12 @@
#: Src/wptCardDlg.cpp:346 Src/wptCardDlg.cpp:360 Src/wptCardDlg.cpp:365
#: Src/wptCardDlg.cpp:371 Src/wptCardDlg.cpp:383 Src/wptCardDlg.cpp:397
-#: Src/wptCardDlg.cpp:526 Src/wptCardDlg.cpp:629 Src/wptCardDlg.cpp:634
-#: Src/wptCardDlg.cpp:640 Src/wptCardDlg.cpp:647 Src/wptCardDlg.cpp:652
-#: Src/wptCardDlg.cpp:660 Src/wptCardDlg.cpp:682 Src/wptCardDlg.cpp:709
-#: Src/wptCardDlg.cpp:714 Src/wptCardDlg.cpp:717 Src/wptCardDlg.cpp:742
-#: Src/wptCardDlg.cpp:744 Src/wptCardDlg.cpp:749 Src/wptCardDlg.cpp:754
-#: Src/wptCardDlg.cpp:816 Src/wptCardDlg.cpp:831 Src/wptCardDlg.cpp:834
+#: Src/wptCardDlg.cpp:526 Src/wptCardDlg.cpp:631 Src/wptCardDlg.cpp:636
+#: Src/wptCardDlg.cpp:642 Src/wptCardDlg.cpp:649 Src/wptCardDlg.cpp:654
+#: Src/wptCardDlg.cpp:662 Src/wptCardDlg.cpp:684 Src/wptCardDlg.cpp:711
+#: Src/wptCardDlg.cpp:716 Src/wptCardDlg.cpp:719 Src/wptCardDlg.cpp:744
+#: Src/wptCardDlg.cpp:746 Src/wptCardDlg.cpp:751 Src/wptCardDlg.cpp:756
+#: Src/wptCardDlg.cpp:820 Src/wptCardDlg.cpp:835 Src/wptCardDlg.cpp:838
#: Src/wptMainProc.cpp:296
msgid "Card Edit"
msgstr "Karten-Editor"
@@ -341,41 +341,49 @@
msgid "Email &address"
msgstr "Mail-&Adresse"
-#: Src/wptCardDlg.cpp:606 Src/wptKeyManagerDlg.cpp:1506
+#: Src/wptCardDlg.cpp:606
+msgid "Overwrite old keys on the card"
+msgstr "Vorhandene Schlüssel auf der Karte übeerschreiben?"
+
+#: Src/wptCardDlg.cpp:607
+msgid "Make off-card backup of encryption key"
+msgstr ""
+
+#: Src/wptCardDlg.cpp:608 Src/wptKeyManagerDlg.cpp:1516
msgid "Card Key Generation"
msgstr "Karten-Schlüsselerzeugung"
-#: Src/wptCardDlg.cpp:629
+#: Src/wptCardDlg.cpp:631
msgid "Please enter your name."
msgstr "Bitte Namen eingeben"
-#: Src/wptCardDlg.cpp:633
+#: Src/wptCardDlg.cpp:635
msgid "Name must be at least 5 characters long."
msgstr "Der Name muss mindestens 5 Zeichen lang sein."
-#: Src/wptCardDlg.cpp:639
+#: Src/wptCardDlg.cpp:641
msgid "Please enter your e-mail address."
msgstr "Bitte E-Mail-Adresse eingeben."
-#: Src/wptCardDlg.cpp:646
+#: Src/wptCardDlg.cpp:648
msgid "Please enter a valid e-mail address."
msgstr "Bitte gültige E-Mail-Adresse eingeben."
-#: Src/wptCardDlg.cpp:652
+#: Src/wptCardDlg.cpp:654
msgid "Please enter an off-card passphrase."
msgstr "Bitte ein Passwort eingeben für \"off-card\"."
# c:\oss\winpt-gpgme\src\wptCardDlg.cpp:649
-#: Src/wptCardDlg.cpp:659
+#: Src/wptCardDlg.cpp:661
msgid "Please use plain ASCII charset for the fields."
msgstr "Bitte nur den 7-bit ASCII Zeichensatz verwenden."
-#: Src/wptCardDlg.cpp:681 Src/wptKeyEditDlgs.cpp:1299
+#: Src/wptCardDlg.cpp:683 Src/wptKeyEditDlgs.cpp:1301
msgid "The date you have chosen lies in the past."
msgstr "Das gewählte Datum ist in der Vergangenheit."
# c:\oss\winpt-gpgme\src\wptCardDlg.cpp:696
-#: Src/wptCardDlg.cpp:707
+#: Src/wptCardDlg.cpp:709
msgid ""
"Operation was canceled. It seems that there are existing\n"
"keys on the cards. You need to mark the 'Overwrite' flag."
@@ -383,36 +391,36 @@
"Operation wurde abgebrochen. Es scheinen noch Schlüssel\n"
"auf der Karte zu existieren. Bitte 'Überschreiben' markieren."
-#: Src/wptCardDlg.cpp:716
+#: Src/wptCardDlg.cpp:718
msgid "Keys successfully created."
msgstr "Schlüssel erfolgreich erstellt."
-#: Src/wptCardDlg.cpp:742
+#: Src/wptCardDlg.cpp:744
msgid "Please enter the old card PIN."
msgstr "Bitte alte Karten-PIN eingeben."
-#: Src/wptCardDlg.cpp:744
+#: Src/wptCardDlg.cpp:746
msgid "Please enter the new card PIN."
msgstr "Bitte neue Karten-PIN eingeben."
-#: Src/wptCardDlg.cpp:749
+#: Src/wptCardDlg.cpp:751
msgid "Admin PIN must be minimal 8 characters."
msgstr "Die 'Admin PIN' muss mindestens 8 Zeichen lang sein."
-#: Src/wptCardDlg.cpp:754
+#: Src/wptCardDlg.cpp:756
msgid "PIN must be minimal 6 characters."
msgstr "Die 'Benutzer PIN' muss mindestens 6 Zeichen lang sein."
# c:\oss\winpt-gpgme\src\wptCardDlg.cpp:766
-#: Src/wptCardDlg.cpp:777
+#: Src/wptCardDlg.cpp:779
msgid "Change Card PIN"
msgstr "Karten PIN Ändern"
-#: Src/wptCardDlg.cpp:815 Src/wptPassphraseDlg.cpp:167
+#: Src/wptCardDlg.cpp:819 Src/wptPassphraseDlg.cpp:167
msgid "Passphrases do not match. Please try again."
msgstr "Passwörter nicht identisch. Versuchen Sie es nochmal."
-#: Src/wptCardDlg.cpp:833
+#: Src/wptCardDlg.cpp:837
msgid "PIN successfully changed."
msgstr "PIN erfolgreich geändert."
@@ -458,7 +466,7 @@
#: Src/wptClipDecryptDlg.cpp:138
#, c-format
msgid "Unsupported algorithm: %s"
-msgstr ""
+msgstr "Unbekannter Algorithmus: %s"
# c:\oss\winpt-gpgme\src\wptClipDecryptDlg.cpp:137
#: Src/wptClipDecryptDlg.cpp:145
@@ -468,8 +476,8 @@
#: Src/wptClipDecryptDlg.cpp:164 Src/wptClipEncryptDlg.cpp:206
#: Src/wptClipSignDlg.cpp:119 Src/wptClipSignDlg.cpp:229
-#: Src/wptClipSignEncDlg.cpp:197 Src/wptKeyManager.cpp:328
-#: Src/wptKeyManager.cpp:705 Src/wptKeyManager.cpp:896 Src/wptSymEnc.cpp:90
+#: Src/wptClipSignEncDlg.cpp:197 Src/wptKeyManager.cpp:329
+#: Src/wptKeyManager.cpp:693 Src/wptKeyManager.cpp:888 Src/wptSymEnc.cpp:90
msgid "GnuPG Status: Finished"
msgstr "GnuPG-Status: Abgeschlossen"
@@ -573,8 +581,8 @@
msgid "Add quotes"
msgstr "'>' hinzufügen"
-#: Src/wptClipEditDlg.cpp:202 Src/wptKeyEditDlgs.cpp:1804
-#: Src/wptKeyserverDlg.cpp:448 Src/wptMDSumDlg.cpp:104
+#: Src/wptClipEditDlg.cpp:202 Src/wptKeyEditDlgs.cpp:1807
+#: Src/wptKeyserverDlg.cpp:449 Src/wptMDSumDlg.cpp:104
#: Src/wptOwnertrustDlg.cpp:103
msgid "&Close"
msgstr "&Schliessen"
@@ -598,7 +606,7 @@
#: Src/wptClipEncryptDlg.cpp:142 Src/wptClipSignEncDlg.cpp:112
#: Src/wptCommonDlg.cpp:66 Src/wptFileManagerDlg.cpp:84
#: Src/wptFileManagerDlg.cpp:215 Src/wptFileManagerDlg.cpp:277
-#: Src/wptFileSaveDlg.cpp:58 Src/wptFirstRunDlg.cpp:50
+#: Src/wptFileSaveDlg.cpp:58 Src/wptFirstRunDlg.cpp:51
#: Src/wptKeyEditDlgs.cpp:288 Src/wptKeyEditDlgs.cpp:388
#: Src/wptKeyEditDlgs.cpp:463 Src/wptKeyEditDlgs.cpp:599
#: Src/wptKeyEditOwnertrustDlg.cpp:67 Src/wptKeygenDlg.cpp:383
@@ -624,7 +632,7 @@
msgstr "Schlüsselimport-Statistiken"
#: Src/wptClipImportDlg.cpp:88 Src/wptFileManagerDlg.cpp:201
-#: Src/wptFileManagerDlg.cpp:214 Src/wptKeyManager.cpp:480
+#: Src/wptFileManagerDlg.cpp:214 Src/wptKeyManager.cpp:468
msgid "Key Import"
msgstr "Schlüsselimport"
@@ -649,7 +657,7 @@
#: Src/wptFileManager.cpp:1664 Src/wptImportList.cpp:414
#: Src/wptImportList.cpp:421 Src/wptImportList.cpp:430
#: Src/wptImportList.cpp:438 Src/wptImportList.cpp:447
-#: Src/wptKeyManager.cpp:587 Src/wptKeyserverDlg.cpp:219
+#: Src/wptKeyManager.cpp:575 Src/wptKeyserverDlg.cpp:219
msgid "Import"
msgstr "Importieren"
@@ -704,7 +712,7 @@
msgid "Signing key:"
msgstr "Signierer Schlüssel:"
-#: Src/wptClipSignEncDlg.cpp:166 Src/wptKeylist.cpp:1170
+#: Src/wptClipSignEncDlg.cpp:166 Src/wptKeylist.cpp:1159
msgid "No key was selected."
msgstr "Kein Schlüssel ausgewählt."
@@ -771,26 +779,26 @@
#: Src/wptKeyEditDlgs.cpp:779 Src/wptKeyEditDlgs.cpp:815
#: Src/wptKeyEditDlgs.cpp:827 Src/wptKeyEditDlgs.cpp:896
#: Src/wptKeyEditDlgs.cpp:903 Src/wptKeyEditDlgs.cpp:921
-#: Src/wptKeyEditDlgs.cpp:968 Src/wptKeyEditDlgs.cpp:973
-#: Src/wptKeyEditDlgs.cpp:1064 Src/wptKeyEditDlgs.cpp:1070
-#: Src/wptKeyEditDlgs.cpp:1222 Src/wptKeyEditDlgs.cpp:1226
-#: Src/wptKeyEditDlgs.cpp:1230 Src/wptKeyEditDlgs.cpp:1235
-#: Src/wptKeyEditDlgs.cpp:1271 Src/wptKeyEditDlgs.cpp:1275
-#: Src/wptKeyEditDlgs.cpp:1285 Src/wptKeyEditDlgs.cpp:1300
-#: Src/wptKeyEditDlgs.cpp:1304 Src/wptKeyEditDlgs.cpp:1344
-#: Src/wptKeyEditDlgs.cpp:1349 Src/wptKeyEditDlgs.cpp:1356
-#: Src/wptKeyEditDlgs.cpp:1362 Src/wptKeyEditDlgs.cpp:1367
-#: Src/wptKeyEditDlgs.cpp:1408 Src/wptKeyEditDlgs.cpp:1413
-#: Src/wptKeyEditDlgs.cpp:1419 Src/wptKeyEditDlgs.cpp:1426
-#: Src/wptKeyEditDlgs.cpp:1429 Src/wptKeyEditDlgs.cpp:1466
-#: Src/wptKeyEditDlgs.cpp:1474 Src/wptKeyEditDlgs.cpp:1508
-#: Src/wptKeyEditDlgs.cpp:1516 Src/wptKeyEditDlgs.cpp:1614
-#: Src/wptKeyEditDlgs.cpp:1647 Src/wptKeyEditDlgs.cpp:1672
-#: Src/wptKeyEditDlgs.cpp:1676 Src/wptKeyEditDlgs.cpp:1685
-#: Src/wptKeyEditDlgs.cpp:1785 Src/wptKeyEditDlgs.cpp:1795
-#: Src/wptKeyEditDlgs.cpp:1806 Src/wptKeyEditDlgs.cpp:1835
-#: Src/wptKeyEditDlgs.cpp:1841 Src/wptKeyManagerDlg.cpp:980
-#: Src/wptKeyManagerDlg.cpp:1650
+#: Src/wptKeyEditDlgs.cpp:968 Src/wptKeyEditDlgs.cpp:975
+#: Src/wptKeyEditDlgs.cpp:1066 Src/wptKeyEditDlgs.cpp:1072
+#: Src/wptKeyEditDlgs.cpp:1224 Src/wptKeyEditDlgs.cpp:1228
+#: Src/wptKeyEditDlgs.cpp:1232 Src/wptKeyEditDlgs.cpp:1237
+#: Src/wptKeyEditDlgs.cpp:1273 Src/wptKeyEditDlgs.cpp:1277
+#: Src/wptKeyEditDlgs.cpp:1287 Src/wptKeyEditDlgs.cpp:1302
+#: Src/wptKeyEditDlgs.cpp:1306 Src/wptKeyEditDlgs.cpp:1346
+#: Src/wptKeyEditDlgs.cpp:1351 Src/wptKeyEditDlgs.cpp:1358
+#: Src/wptKeyEditDlgs.cpp:1364 Src/wptKeyEditDlgs.cpp:1369
+#: Src/wptKeyEditDlgs.cpp:1410 Src/wptKeyEditDlgs.cpp:1415
+#: Src/wptKeyEditDlgs.cpp:1421 Src/wptKeyEditDlgs.cpp:1428
+#: Src/wptKeyEditDlgs.cpp:1431 Src/wptKeyEditDlgs.cpp:1468
+#: Src/wptKeyEditDlgs.cpp:1476 Src/wptKeyEditDlgs.cpp:1510
+#: Src/wptKeyEditDlgs.cpp:1518 Src/wptKeyEditDlgs.cpp:1616
+#: Src/wptKeyEditDlgs.cpp:1649 Src/wptKeyEditDlgs.cpp:1674
+#: Src/wptKeyEditDlgs.cpp:1678 Src/wptKeyEditDlgs.cpp:1687
+#: Src/wptKeyEditDlgs.cpp:1788 Src/wptKeyEditDlgs.cpp:1798
+#: Src/wptKeyEditDlgs.cpp:1809 Src/wptKeyEditDlgs.cpp:1838
+#: Src/wptKeyEditDlgs.cpp:1844 Src/wptKeyManagerDlg.cpp:989
+#: Src/wptKeyManagerDlg.cpp:1660
msgid "Key Edit"
msgstr "Schlüssel bearbeiten"
@@ -1109,7 +1117,7 @@
msgid "Status"
msgstr "Status"
-#: Src/wptFileManager.cpp:384 Src/wptKeyEditDlgs.cpp:1056
+#: Src/wptFileManager.cpp:384 Src/wptKeyEditDlgs.cpp:1058
#: Src/wptKeyRevokersDlg.cpp:57 Src/wptMDSumDlg.cpp:73
#: Src/wptVerifyList.cpp:97
msgid "Name"
@@ -1237,7 +1245,7 @@
msgid "Invalid file name. Exit"
msgstr "Ungültiger Dateiname. Abbruch"
-#: Src/wptFileManager.cpp:1661 Src/wptKeyManager.cpp:584
+#: Src/wptFileManager.cpp:1661 Src/wptKeyManager.cpp:572
msgid ""
"Key without a self signature was dectected!\n"
"(This key is NOT usable for encryption, etc)\n"
@@ -1249,8 +1257,8 @@
"\n"
"Kann diese(n) Schlüssel nicht importieren!"
-#: Src/wptFileManager.cpp:1687 Src/wptKeyManager.cpp:311
-#: Src/wptKeyManager.cpp:347 Src/wptKeyManager.cpp:383
+#: Src/wptFileManager.cpp:1687 Src/wptKeyManager.cpp:312
+#: Src/wptKeyManager.cpp:348 Src/wptKeyManager.cpp:383
msgid "No key was selected for export."
msgstr "Kein Schlüssel zum Exportieren ausgewählt."
@@ -1259,13 +1267,13 @@
msgid "Export"
msgstr "Exportieren"
-#: Src/wptFileManager.cpp:1695 Src/wptKeyManagerDlg.cpp:1574
-#: Src/wptKeyManagerDlg.cpp:1608
+#: Src/wptFileManager.cpp:1695 Src/wptKeyManagerDlg.cpp:1584
+#: Src/wptKeyManagerDlg.cpp:1618
msgid "Choose Name for Key File"
msgstr "Den Namen der Schlüsseldatei wählen"
#: Src/wptFileManager.cpp:1714 Src/wptKeyEditDlgs.cpp:936
-#: Src/wptKeyEditDlgs.cpp:1252 Src/wptKeyEditDlgs.cpp:1323
+#: Src/wptKeyEditDlgs.cpp:1254 Src/wptKeyEditDlgs.cpp:1325
#: Src/wptKeyserverDlg.cpp:96
msgid "GnuPG status"
msgstr "GnuPG Status"
@@ -1329,7 +1337,7 @@
msgstr "Bitte wählen Sie wenigstens einen Empfänger"
#: Src/wptFileManagerDlg.cpp:201 Src/wptFileStatDlg.cpp:266
-#: Src/wptKeyManager.cpp:458
+#: Src/wptKeyManager.cpp:446
msgid "No valid OpenPGP data found."
msgstr "Keine gültigen OpenPGP-Daten gefunden."
@@ -1358,17 +1366,17 @@
msgid "Signature mode"
msgstr "Signaturmodus"
-#: Src/wptFileManagerDlg.cpp:276 Src/wptKeyManagerDlg.cpp:944
+#: Src/wptFileManagerDlg.cpp:276 Src/wptKeyManagerDlg.cpp:953
msgid "Options"
msgstr "Optionen"
-#: Src/wptFileManagerDlg.cpp:322 Src/wptKeyEditDlgs.cpp:1226
-#: Src/wptKeyEditDlgs.cpp:1275 Src/wptKeyEditDlgs.cpp:1349
-#: Src/wptKeyManager.cpp:624 Src/wptKeyManager.cpp:724
-#: Src/wptKeyManager.cpp:761 Src/wptKeyManagerDlg.cpp:1342
-#: Src/wptKeyManagerDlg.cpp:1361 Src/wptKeyManagerDlg.cpp:1395
-#: Src/wptKeyManagerDlg.cpp:1414 Src/wptKeyManagerDlg.cpp:1431
-#: Src/wptKeyManagerDlg.cpp:1564 Src/wptKeyManagerDlg.cpp:1583
+#: Src/wptFileManagerDlg.cpp:322 Src/wptKeyEditDlgs.cpp:1228
+#: Src/wptKeyEditDlgs.cpp:1277 Src/wptKeyEditDlgs.cpp:1351
+#: Src/wptKeyManager.cpp:611 Src/wptKeyManager.cpp:712
+#: Src/wptKeyManager.cpp:749 Src/wptKeyManagerDlg.cpp:1352
+#: Src/wptKeyManagerDlg.cpp:1371 Src/wptKeyManagerDlg.cpp:1405
+#: Src/wptKeyManagerDlg.cpp:1424 Src/wptKeyManagerDlg.cpp:1441
+#: Src/wptKeyManagerDlg.cpp:1574 Src/wptKeyManagerDlg.cpp:1593
#: Src/wptKeyserverSearchDlg.cpp:127
msgid "Please select a key."
msgstr "Bitte Schlüssel wählen."
@@ -1386,17 +1394,17 @@
msgid "File Manager (use drag & drop to add files)"
msgstr "Dateimanager (Drag & Drop möglich)"
-#: Src/wptFileManagerDlg.cpp:458 Src/wptKeyManagerDlg.cpp:917
+#: Src/wptFileManagerDlg.cpp:458 Src/wptKeyManagerDlg.cpp:926
#: Src/wptOwnertrustDlg.cpp:98
msgid "File"
msgstr "Datei"
-#: Src/wptFileManagerDlg.cpp:459 Src/wptKeyManagerDlg.cpp:918
-#: Src/wptKeyManagerDlg.cpp:923 Src/wptKeyManagerDlg.cpp:934
+#: Src/wptFileManagerDlg.cpp:459 Src/wptKeyManagerDlg.cpp:927
+#: Src/wptKeyManagerDlg.cpp:932 Src/wptKeyManagerDlg.cpp:943
msgid "Edit"
msgstr "Bearbeiten"
-#: Src/wptFileManagerDlg.cpp:460 Src/wptKeyManagerDlg.cpp:919
+#: Src/wptFileManagerDlg.cpp:460 Src/wptKeyManagerDlg.cpp:928
msgid "View"
msgstr "Ansicht"
@@ -1416,8 +1424,8 @@
msgid "&Decrypt"
msgstr "&Entschlüsseln"
-#: Src/wptFileManagerDlg.cpp:465 Src/wptKeyManagerDlg.cpp:935
-#: Src/wptKeyManagerDlg.cpp:983
+#: Src/wptFileManagerDlg.cpp:465 Src/wptKeyManagerDlg.cpp:944
+#: Src/wptKeyManagerDlg.cpp:992
msgid "&Sign"
msgstr "&Signieren"
@@ -1561,21 +1569,21 @@
msgstr "Wollen sie den Schlüssel herunterladen?"
# c:\oss\winpt-gpgme\src\wptFirstRunDlg.cpp:42
-#: Src/wptFirstRunDlg.cpp:47
+#: Src/wptFirstRunDlg.cpp:48
msgid "&Generate a GnuPG key pair"
msgstr "GnuPG Schlüsselpaar &erzeugen"
# c:\oss\winpt-gpgme\src\wptFirstRunDlg.cpp:43
-#: Src/wptFirstRunDlg.cpp:48
+#: Src/wptFirstRunDlg.cpp:50
msgid "&Copy GnuPG keyrings from another location"
msgstr "GPG Keyring aus anderem Verzeichnis &kopieren"
-#: Src/wptFirstRunDlg.cpp:49
-msgid "&Specify a new GnuPG home directory"
-msgstr "Bitte neues GnuPG-HOME-Verzeichnis &eingeben."
+#: Src/wptFirstRunDlg.cpp:52
+msgid "WinPT First Start"
+msgstr ""
# c:\oss\winpt-gpgme\src\wptGPG.cpp:728
-#: Src/wptGPG.cpp:808
+#: Src/wptGPG.cpp:831
msgid ""
"The selected keyring has the read-only file\n"
"attribute. In this state you do not have write\n"
@@ -1585,19 +1593,19 @@
"In diesem Zustand kann nichts gespeichert werden\n"
"Wollen Sie das Attribut zurücksetzen?"
-#: Src/wptGPG.cpp:811
+#: Src/wptGPG.cpp:834
msgid "GPG Information"
msgstr "GPG Information"
-#: Src/wptGPG.cpp:815
+#: Src/wptGPG.cpp:838
msgid "Could not reset read-only state."
msgstr "Konnte den Read-Only Zustand nicht zurücksetzen."
-#: Src/wptGPG.cpp:816 Src/wptGPG.cpp:1096 Src/wptGPG.cpp:1105
+#: Src/wptGPG.cpp:839 Src/wptGPG.cpp:1119 Src/wptGPG.cpp:1128
msgid "GPG Error"
msgstr "GPG Fehler"
-#: Src/wptGPG.cpp:828
+#: Src/wptGPG.cpp:851
msgid ""
"You do not have file access to modify the contents of\n"
"one or both of the selected keyrings.\n"
@@ -1611,15 +1619,15 @@
"Die Schlüsselbunde sind im Nur-Lesen-Modus, was meistens der Fall ist, \n"
"wenn ein anderes Programm auf die Schlüsselbunde zugreift.\n"
-#: Src/wptGPG.cpp:833
+#: Src/wptGPG.cpp:856
msgid "GPG Warning"
msgstr "GPG Warnung"
-#: Src/wptGPG.cpp:857 Src/wptGPGPrefsDlg.cpp:177 Src/wptGPGPrefsDlg.cpp:183
+#: Src/wptGPG.cpp:880 Src/wptGPGPrefsDlg.cpp:177 Src/wptGPGPrefsDlg.cpp:183
#: Src/wptGPGPrefsDlg.cpp:189 Src/wptGPGPrefsDlg.cpp:195
#: Src/wptGPGPrefsDlg.cpp:200 Src/wptGPGPrefsDlg.cpp:205
#: Src/wptGPGPrefsDlg.cpp:210 Src/wptGPGPrefsDlg.cpp:224
-#: Src/wptKeyEditDlgs.cpp:1621 Src/wptKeyManagerDlg.cpp:945
+#: Src/wptKeyEditDlgs.cpp:1623 Src/wptKeyManagerDlg.cpp:954
#: Src/wptMainProc.cpp:430 Src/wptPreferencesDlg.cpp:209
#: Src/wptPreferencesDlg.cpp:260 Src/wptPreferencesDlg.cpp:271
#: Src/wptPreferencesDlg.cpp:283 Src/wptPreferencesDlg.cpp:296
@@ -1627,7 +1635,7 @@
msgid "Preferences"
msgstr "Einstellungen"
-#: Src/wptGPG.cpp:858
+#: Src/wptGPG.cpp:881
#, c-format
msgid ""
"%s does not exit.\n"
@@ -1636,41 +1644,41 @@
"%s existiert nicht.\n"
"Möchten Sie dieses Verzeichnis erstellen?"
-#: Src/wptGPG.cpp:886
+#: Src/wptGPG.cpp:909
msgid "Please choose your public keyring"
msgstr "Bitte wählen Sie Ihren öffentlichen Schlüsselbund."
-#: Src/wptGPG.cpp:889 Src/wptGPG.cpp:909
+#: Src/wptGPG.cpp:912 Src/wptGPG.cpp:932
msgid "No keyring was chosen. Exit."
msgstr "Kein Schlüsselbund ausgewählt. Abbruch."
-#: Src/wptGPG.cpp:895
+#: Src/wptGPG.cpp:918
msgid "Overwrite old public keyring?"
msgstr "Alten öffentlichen Schlüsselbund überschreiben"
-#: Src/wptGPG.cpp:900 Src/wptGPG.cpp:919
+#: Src/wptGPG.cpp:923 Src/wptGPG.cpp:942
msgid "Could not copy file."
msgstr "Datei konnte nicht kopiert werden"
-#: Src/wptGPG.cpp:906
+#: Src/wptGPG.cpp:929
msgid "Please choose your secret keyring"
msgstr "Bitte wählen Sie Ihren geheimen Schlüsselbund."
-#: Src/wptGPG.cpp:914
+#: Src/wptGPG.cpp:937
msgid "Overwrite old secret keyring?"
msgstr "Alten geheimen Schlüsselbund überschreiben?"
-#: Src/wptGPG.cpp:964 Src/wptGPG.cpp:1054 Src/wptGPG.cpp:1067
+#: Src/wptGPG.cpp:987 Src/wptGPG.cpp:1077 Src/wptGPG.cpp:1090
msgid "Backup"
msgstr "Sicherung"
-#: Src/wptGPG.cpp:964
+#: Src/wptGPG.cpp:987
#, c-format
msgid "Backup keyring \"%s\" failed"
msgstr "Schlüsselbundsicherung \"%s\" fehlgeschlagen"
# c:\oss\winpt-gpgme\src\wptGPG.cpp:1021
-#: Src/wptGPG.cpp:1055
+#: Src/wptGPG.cpp:1078
#, c-format
msgid ""
"The backup drive '%s' does not seems to accessable.\n"
@@ -1679,12 +1687,12 @@
"Kann auf das Backup-Laufwerk '%s' nicht zugreifen.\n"
"Bitte aktivieren/überprüfen sie das Laufwerk um Fortzufahren."
-#: Src/wptGPG.cpp:1067
+#: Src/wptGPG.cpp:1090
#, c-format
msgid "Invalid backup mode %d"
msgstr "Ungültiger Sicherungsmethode %d"
-#: Src/wptGPG.cpp:1095
+#: Src/wptGPG.cpp:1118
msgid "No GPG error description available."
msgstr "Keine GPG-Fehlerbeschreibung verfügbar"
@@ -1758,7 +1766,7 @@
"Aktuelle Daten gehen verloren\n"
"Sind Sie sicher?"
-#: Src/wptGPGPrefsDlg.cpp:127 Src/wptKeyManagerDlg.cpp:1538
+#: Src/wptGPGPrefsDlg.cpp:127 Src/wptKeyManagerDlg.cpp:1548
#: Src/wptMainProc.cpp:581
msgid "GnuPG Preferences"
msgstr "GnuPG-Einstellungen"
@@ -1879,52 +1887,51 @@
msgid "Unknown Hotkey"
msgstr "Unbekanntes Tastenkürzel"
-#: Src/wptImagelist.cpp:50 Src/wptKeyManager.cpp:177 Src/wptKeyManager.cpp:182
-#: Src/wptKeyManager.cpp:233 Src/wptKeyManager.cpp:312
-#: Src/wptKeyManager.cpp:319 Src/wptKeyManager.cpp:348
-#: Src/wptKeyManager.cpp:353 Src/wptKeyManager.cpp:360
-#: Src/wptKeyManager.cpp:362 Src/wptKeyManager.cpp:384
-#: Src/wptKeyManager.cpp:401 Src/wptKeyManager.cpp:405
-#: Src/wptKeyManager.cpp:411 Src/wptKeyManager.cpp:429
-#: Src/wptKeyManager.cpp:451 Src/wptKeyManager.cpp:456
-#: Src/wptKeyManager.cpp:459 Src/wptKeyManager.cpp:464
-#: Src/wptKeyManager.cpp:470 Src/wptKeyManager.cpp:475
-#: Src/wptKeyManager.cpp:561 Src/wptKeyManager.cpp:569
-#: Src/wptKeyManager.cpp:624 Src/wptKeyManager.cpp:651
-#: Src/wptKeyManager.cpp:661 Src/wptKeyManager.cpp:672
-#: Src/wptKeyManager.cpp:699 Src/wptKeyManager.cpp:724
-#: Src/wptKeyManager.cpp:731 Src/wptKeyManager.cpp:756
-#: Src/wptKeyManager.cpp:761 Src/wptKeyManager.cpp:788
-#: Src/wptKeyManager.cpp:826 Src/wptKeyManager.cpp:832
-#: Src/wptKeyManager.cpp:894 Src/wptKeyManager.cpp:924
-#: Src/wptKeyManagerDlg.cpp:1039 Src/wptKeyManagerDlg.cpp:1060
-#: Src/wptKeyManagerDlg.cpp:1315 Src/wptKeyManagerDlg.cpp:1343
-#: Src/wptKeyManagerDlg.cpp:1361 Src/wptKeyManagerDlg.cpp:1369
-#: Src/wptKeyManagerDlg.cpp:1379 Src/wptKeyManagerDlg.cpp:1395
-#: Src/wptKeyManagerDlg.cpp:1401 Src/wptKeyManagerDlg.cpp:1414
-#: Src/wptKeyManagerDlg.cpp:1431 Src/wptKeyManagerDlg.cpp:1463
-#: Src/wptKeyManagerDlg.cpp:1502 Src/wptKeyManagerDlg.cpp:1565
-#: Src/wptKeyManagerDlg.cpp:1583 Src/wptKeyManagerDlg.cpp:1588
-#: Src/wptKeyManagerDlg.cpp:1593 Src/wptKeyManagerDlg.cpp:1679
-#: Src/wptKeyManagerDlg.cpp:1855 Src/wptKeysigDlg.cpp:88
-#: Src/wptKeysigDlg.cpp:99 Src/wptKeysigDlg.cpp:321 Src/wptKeysigDlg.cpp:327
-#: Src/wptKeysigDlg.cpp:371 Src/wptKeysigDlg.cpp:433 Src/wptMainProc.cpp:398
-#: Src/wptMainProc.cpp:552
+#: Src/wptImagelist.cpp:50 Src/wptKeyManager.cpp:178 Src/wptKeyManager.cpp:183
+#: Src/wptKeyManager.cpp:234 Src/wptKeyManager.cpp:313
+#: Src/wptKeyManager.cpp:320 Src/wptKeyManager.cpp:349
+#: Src/wptKeyManager.cpp:354 Src/wptKeyManager.cpp:361
+#: Src/wptKeyManager.cpp:363 Src/wptKeyManager.cpp:384
+#: Src/wptKeyManager.cpp:393 Src/wptKeyManager.cpp:397
+#: Src/wptKeyManager.cpp:417 Src/wptKeyManager.cpp:439
+#: Src/wptKeyManager.cpp:444 Src/wptKeyManager.cpp:447
+#: Src/wptKeyManager.cpp:452 Src/wptKeyManager.cpp:458
+#: Src/wptKeyManager.cpp:463 Src/wptKeyManager.cpp:549
+#: Src/wptKeyManager.cpp:557 Src/wptKeyManager.cpp:611
+#: Src/wptKeyManager.cpp:640 Src/wptKeyManager.cpp:650
+#: Src/wptKeyManager.cpp:661 Src/wptKeyManager.cpp:687
+#: Src/wptKeyManager.cpp:712 Src/wptKeyManager.cpp:719
+#: Src/wptKeyManager.cpp:744 Src/wptKeyManager.cpp:749
+#: Src/wptKeyManager.cpp:777 Src/wptKeyManager.cpp:819
+#: Src/wptKeyManager.cpp:826 Src/wptKeyManager.cpp:886
+#: Src/wptKeyManager.cpp:916 Src/wptKeyManagerDlg.cpp:1048
+#: Src/wptKeyManagerDlg.cpp:1069 Src/wptKeyManagerDlg.cpp:1325
+#: Src/wptKeyManagerDlg.cpp:1353 Src/wptKeyManagerDlg.cpp:1371
+#: Src/wptKeyManagerDlg.cpp:1379 Src/wptKeyManagerDlg.cpp:1389
+#: Src/wptKeyManagerDlg.cpp:1405 Src/wptKeyManagerDlg.cpp:1411
+#: Src/wptKeyManagerDlg.cpp:1424 Src/wptKeyManagerDlg.cpp:1441
+#: Src/wptKeyManagerDlg.cpp:1473 Src/wptKeyManagerDlg.cpp:1512
+#: Src/wptKeyManagerDlg.cpp:1575 Src/wptKeyManagerDlg.cpp:1593
+#: Src/wptKeyManagerDlg.cpp:1598 Src/wptKeyManagerDlg.cpp:1603
+#: Src/wptKeyManagerDlg.cpp:1689 Src/wptKeyManagerDlg.cpp:1865
+#: Src/wptKeysigDlg.cpp:88 Src/wptKeysigDlg.cpp:99 Src/wptKeysigDlg.cpp:321
+#: Src/wptKeysigDlg.cpp:327 Src/wptKeysigDlg.cpp:371 Src/wptKeysigDlg.cpp:433
+#: Src/wptMainProc.cpp:398 Src/wptMainProc.cpp:552
msgid "Key Manager"
msgstr "Schlüsselverwaltung"
#: Src/wptImportList.cpp:264 Src/wptKeyEditDlgs.cpp:205
-#: Src/wptKeyEditDlgs.cpp:1028 Src/wptKeyEditDlgs.cpp:1089
-#: Src/wptKeyEditDlgs.cpp:1361 Src/wptKeyEditDlgs.cpp:1381
-#: Src/wptKeyEditDlgs.cpp:1418 Src/wptKeyEditDlgs.cpp:1447
-#: Src/wptKeylist.cpp:379 Src/wptKeyPropsDlg.cpp:157 Src/wptKeysigDlg.cpp:136
+#: Src/wptKeyEditDlgs.cpp:1030 Src/wptKeyEditDlgs.cpp:1091
+#: Src/wptKeyEditDlgs.cpp:1363 Src/wptKeyEditDlgs.cpp:1383
+#: Src/wptKeyEditDlgs.cpp:1420 Src/wptKeyEditDlgs.cpp:1449
+#: Src/wptKeylist.cpp:392 Src/wptKeyPropsDlg.cpp:157 Src/wptKeysigDlg.cpp:136
#: Src/wptKeysigDlg.cpp:201
msgid "Revoked"
msgstr "Widerrufen"
#: Src/wptImportList.cpp:266 Src/wptKeyEditDlgs.cpp:206
-#: Src/wptKeyEditDlgs.cpp:1026 Src/wptKeyEditDlgs.cpp:1282
-#: Src/wptKeylist.cpp:381 Src/wptKeyPropsDlg.cpp:154 Src/wptKeysigDlg.cpp:135
+#: Src/wptKeyEditDlgs.cpp:1028 Src/wptKeyEditDlgs.cpp:1284
+#: Src/wptKeylist.cpp:394 Src/wptKeyPropsDlg.cpp:154 Src/wptKeysigDlg.cpp:135
#: Src/wptKeysigDlg.cpp:202
msgid "Expired"
msgstr "Abgelaufen"
@@ -1937,39 +1944,39 @@
msgid "public key"
msgstr "öffentlicher Schlüssel"
-#: Src/wptImportList.cpp:303 Src/wptKeyEditDlgs.cpp:1106
+#: Src/wptImportList.cpp:303 Src/wptKeyEditDlgs.cpp:1108
msgid "Invalid user ID"
msgstr "Ungültige Benutzerkennung"
-#: Src/wptImportList.cpp:352 Src/wptKeylist.cpp:541 Src/wptKeylist.cpp:550
-#: Src/wptKeyManagerDlg.cpp:863 Src/wptKeyManagerDlg.cpp:931
+#: Src/wptImportList.cpp:352 Src/wptKeylist.cpp:537 Src/wptKeylist.cpp:545
+#: Src/wptKeyManagerDlg.cpp:872 Src/wptKeyManagerDlg.cpp:940
#: Src/wptKeyserverSearchDlg.cpp:48 Src/wptSigList.cpp:51
#: Src/wptVerifyList.cpp:101 Src/wptVerifyList.cpp:110
msgid "User ID"
msgstr "Benutzerkennung"
-#: Src/wptImportList.cpp:353 Src/wptKeylist.cpp:543 Src/wptKeylist.cpp:553
-#: Src/wptKeyManagerDlg.cpp:866 Src/wptKeyserverSearchDlg.cpp:45
+#: Src/wptImportList.cpp:353 Src/wptKeylist.cpp:539 Src/wptKeylist.cpp:548
+#: Src/wptKeyManagerDlg.cpp:875 Src/wptKeyserverSearchDlg.cpp:45
msgid "Size"
msgstr "Größe"
-#: Src/wptImportList.cpp:354 Src/wptKeyEditDlgs.cpp:952 Src/wptKeylist.cpp:542
-#: Src/wptKeylist.cpp:551 Src/wptKeyManagerDlg.cpp:864
-#: Src/wptKeyManagerDlg.cpp:954 Src/wptKeyRevokersDlg.cpp:58
+#: Src/wptImportList.cpp:354 Src/wptKeyEditDlgs.cpp:952 Src/wptKeylist.cpp:538
+#: Src/wptKeylist.cpp:546 Src/wptKeyManagerDlg.cpp:873
+#: Src/wptKeyManagerDlg.cpp:963 Src/wptKeyRevokersDlg.cpp:58
#: Src/wptKeyserverSearchDlg.cpp:46 Src/wptSigList.cpp:55
#: Src/wptVerifyList.cpp:109
msgid "Key ID"
msgstr "Schlüssel-ID"
#: Src/wptImportList.cpp:355 Src/wptKeyEditDlgs.cpp:953
-#: Src/wptKeyEditDlgs.cpp:1058 Src/wptKeylist.cpp:557
-#: Src/wptKeyManagerDlg.cpp:870 Src/wptKeyManagerDlg.cpp:957
+#: Src/wptKeyEditDlgs.cpp:1060 Src/wptKeylist.cpp:552
+#: Src/wptKeyManagerDlg.cpp:879 Src/wptKeyManagerDlg.cpp:966
#: Src/wptKeyserverSearchDlg.cpp:47 Src/wptSigList.cpp:54
msgid "Creation"
msgstr "Erstellung"
-#: Src/wptImportList.cpp:356 Src/wptKeylist.cpp:552
-#: Src/wptKeyManagerDlg.cpp:865 Src/wptKeyManagerDlg.cpp:956
+#: Src/wptImportList.cpp:356 Src/wptKeylist.cpp:547
+#: Src/wptKeyManagerDlg.cpp:874 Src/wptKeyManagerDlg.cpp:965
msgid "Type"
msgstr "Typ"
@@ -1983,7 +1990,7 @@
"und deshalb ein CRC Fehler auftrat."
# c:\oss\winpt-gpgme\src\wptKeyCache.cpp:479
-#: Src/wptKeyCache.cpp:488
+#: Src/wptKeyCache.cpp:613
msgid "Load GPG Keyrings..."
msgstr "Lade GPG Keyrings"
@@ -2003,12 +2010,12 @@
msgid "Ultimate"
msgstr "Absolut"
-#: Src/wptKeyEditDlgs.cpp:194 Src/wptKeyEditDlgs.cpp:1023
-#: Src/wptKeylist.cpp:227 Src/wptKeylist.cpp:341 Src/wptKeylist.cpp:943
+#: Src/wptKeyEditDlgs.cpp:194 Src/wptKeyEditDlgs.cpp:1025
+#: Src/wptKeylist.cpp:235 Src/wptKeylist.cpp:354
msgid "Never"
msgstr "Niemals"
-#: Src/wptKeyEditDlgs.cpp:207 Src/wptKeyEditDlgs.cpp:1030
+#: Src/wptKeyEditDlgs.cpp:207 Src/wptKeyEditDlgs.cpp:1032
msgid "OK"
msgstr "OK"
@@ -2095,8 +2102,8 @@
#: Src/wptKeyEditDlgs.cpp:349 Src/wptKeyEditDlgs.cpp:428
#: Src/wptKeyEditDlgs.cpp:510 Src/wptKeyEditDlgs.cpp:675
-#: Src/wptKeyEditDlgs.cpp:1383 Src/wptKeyEditDlgs.cpp:1449
-#: Src/wptKeyEditDlgs.cpp:1529 Src/wptKeyEditDlgs.cpp:1703
+#: Src/wptKeyEditDlgs.cpp:1385 Src/wptKeyEditDlgs.cpp:1451
+#: Src/wptKeyEditDlgs.cpp:1531 Src/wptKeyEditDlgs.cpp:1705
#: Src/wptKeygenDlg.cpp:496 Src/wptKeygenDlg.cpp:610
#: Src/wptKeyPropsDlg.cpp:349 Src/wptOwnertrustDlg.cpp:124
#: Src/wptOwnertrustDlg.cpp:136
@@ -2120,9 +2127,9 @@
msgid "Add Revoker"
msgstr "\"Revoker\" hinzufügen"
-#: Src/wptKeyEditDlgs.cpp:405 Src/wptKeyEditDlgs.cpp:1413
-#: Src/wptKeyEditDlgs.cpp:1466 Src/wptKeyEditDlgs.cpp:1508
-#: Src/wptKeyEditDlgs.cpp:1647 Src/wptKeyEditDlgs.cpp:1676
+#: Src/wptKeyEditDlgs.cpp:405 Src/wptKeyEditDlgs.cpp:1415
+#: Src/wptKeyEditDlgs.cpp:1468 Src/wptKeyEditDlgs.cpp:1510
+#: Src/wptKeyEditDlgs.cpp:1649 Src/wptKeyEditDlgs.cpp:1678
msgid "Please select a user ID."
msgstr "Bitte eine Benutzerkennung wählen."
@@ -2210,9 +2217,9 @@
#: Src/wptKeyEditDlgs.cpp:703 Src/wptKeyEditDlgs.cpp:775
#: Src/wptKeyEditDlgs.cpp:842 Src/wptKeyEditDlgs.cpp:855
-#: Src/wptKeyEditDlgs.cpp:896 Src/wptKeyEditDlgs.cpp:1271
-#: Src/wptKeyEditDlgs.cpp:1344 Src/wptKeyEditDlgs.cpp:1403
-#: Src/wptKeyManagerDlg.cpp:1368
+#: Src/wptKeyEditDlgs.cpp:896 Src/wptKeyEditDlgs.cpp:1273
+#: Src/wptKeyEditDlgs.cpp:1346 Src/wptKeyEditDlgs.cpp:1405
+#: Src/wptKeyManagerDlg.cpp:1378
msgid "There is no secret key available!"
msgstr "Kein geheimer Schlüssel vorhanden!"
@@ -2264,28 +2271,28 @@
msgid "Expires"
msgstr "Verfällt"
-#: Src/wptKeyEditDlgs.cpp:968 Src/wptKeyEditDlgs.cpp:1064
+#: Src/wptKeyEditDlgs.cpp:968 Src/wptKeyEditDlgs.cpp:1066
msgid "Could not find key."
msgstr "Konnte Schlüssel nicht finden"
-#: Src/wptKeyEditDlgs.cpp:973
+#: Src/wptKeyEditDlgs.cpp:975
msgid "No subkey(s) found."
msgstr "Kein(e) Unterschlüssel gefunden."
-#: Src/wptKeyEditDlgs.cpp:1055 Src/wptKeylist.cpp:545 Src/wptKeylist.cpp:555
-#: Src/wptKeyManagerDlg.cpp:868
+#: Src/wptKeyEditDlgs.cpp:1057 Src/wptKeylist.cpp:541 Src/wptKeylist.cpp:550
+#: Src/wptKeyManagerDlg.cpp:877
msgid "Validity"
msgstr "Gültigkeit"
-#: Src/wptKeyEditDlgs.cpp:1057
+#: Src/wptKeyEditDlgs.cpp:1059
msgid "Email"
msgstr "Email"
-#: Src/wptKeyEditDlgs.cpp:1070
+#: Src/wptKeyEditDlgs.cpp:1072
msgid "No user ID(s) found."
msgstr "Keine Benutzerkennung(en) gefunden."
-#: Src/wptKeyEditDlgs.cpp:1185
+#: Src/wptKeyEditDlgs.cpp:1187
msgid ""
"ADDUID \t\tadd a user ID\r\n"
"ADDPHOTO \t\tadd a photo ID\r\n"
@@ -2320,19 +2327,19 @@
"ENABLE \t\tSchlüssel aktivieren\r\n"
"SHOWPHOTO \t\tFoto ID anzeigen\r\n"
-#: Src/wptKeyEditDlgs.cpp:1206
+#: Src/wptKeyEditDlgs.cpp:1208
msgid "Key Edit Help"
msgstr "Hilfe zum Schlüssel bearbeiten"
-#: Src/wptKeyEditDlgs.cpp:1222
+#: Src/wptKeyEditDlgs.cpp:1224
msgid "Primary key can not be deleted!"
msgstr "Primärer Schlüssel kann nicht gelöscht werden!"
-#: Src/wptKeyEditDlgs.cpp:1230
+#: Src/wptKeyEditDlgs.cpp:1232
msgid "Primary subkey can not be deleted!"
msgstr "Primärer Unterschlüssel kann nicht gelöscht werden!"
-#: Src/wptKeyEditDlgs.cpp:1236
+#: Src/wptKeyEditDlgs.cpp:1238
#, c-format
msgid ""
"\"Subkey %s.\"\n"
@@ -2349,34 +2356,34 @@
"\n"
"Möchten Sie diesen Unterschlüssel wirklich löschen?"
-#: Src/wptKeyEditDlgs.cpp:1248
+#: Src/wptKeyEditDlgs.cpp:1250
msgid "Delete Subkey"
msgstr "Unterschlüssel löschen"
-#: Src/wptKeyEditDlgs.cpp:1252
+#: Src/wptKeyEditDlgs.cpp:1254
msgid "Subkey successfully deleted."
msgstr "Unterschlüssel erfolgreich gelöscht."
-#: Src/wptKeyEditDlgs.cpp:1283
+#: Src/wptKeyEditDlgs.cpp:1285
msgid ""
"Key already expired.\n"
"\n"
"Do you want to change the expiration date?"
msgstr ""
-#: Src/wptKeyEditDlgs.cpp:1292 Src/wptKeyEditDlgs.cpp:1295
+#: Src/wptKeyEditDlgs.cpp:1294 Src/wptKeyEditDlgs.cpp:1297
msgid "Key Expiration Date"
msgstr "Ablaufdatum"
-#: Src/wptKeyEditDlgs.cpp:1316
+#: Src/wptKeyEditDlgs.cpp:1318
msgid "Expire Subkey"
msgstr "Untschlüssel Ablauf"
-#: Src/wptKeyEditDlgs.cpp:1322
+#: Src/wptKeyEditDlgs.cpp:1324
msgid "Subkey expire date successfully set."
msgstr "Unterschlüsselablaufdatum erfolgreich hinzugefügt."
-#: Src/wptKeyEditDlgs.cpp:1353
+#: Src/wptKeyEditDlgs.cpp:1355
msgid ""
"No subkeys were found, if you want to revoke the\n"
"whole key, please use the Key Manager command directly.\n"
@@ -2388,31 +2395,31 @@
"\n"
"Diese Funktion ist nur für das Widerrufen einzelner Unterschlüssel gedacht."
-#: Src/wptKeyEditDlgs.cpp:1362
+#: Src/wptKeyEditDlgs.cpp:1364
msgid "Key already revoked."
msgstr "Der Schlüssel ist bereits widerrufen worden!"
-#: Src/wptKeyEditDlgs.cpp:1379
+#: Src/wptKeyEditDlgs.cpp:1381
msgid "Revoke Subkey"
msgstr "Unterschlüssel widerrufen"
-#: Src/wptKeyEditDlgs.cpp:1383
+#: Src/wptKeyEditDlgs.cpp:1385
msgid "Subkey successfully revoked."
msgstr "Unterschlüssel erfolgreich widerrufen."
-#: Src/wptKeyEditDlgs.cpp:1403
+#: Src/wptKeyEditDlgs.cpp:1405
msgid "Revoke user ID"
msgstr "Benutzerkennung widerrufen"
-#: Src/wptKeyEditDlgs.cpp:1408
+#: Src/wptKeyEditDlgs.cpp:1410
msgid "Key has only one user ID."
msgstr "Schlüssel hat nur eine Benutzerkennung."
-#: Src/wptKeyEditDlgs.cpp:1419
+#: Src/wptKeyEditDlgs.cpp:1421
msgid "This user ID has been already revoked."
msgstr "Diese Benutzerkennung wurde bereits widerrufen."
-#: Src/wptKeyEditDlgs.cpp:1424
+#: Src/wptKeyEditDlgs.cpp:1426
#, c-format
msgid ""
"user ID \"%s\".\n"
@@ -2422,39 +2429,39 @@
"Benutzerkennung %s.\r\n"
"Diese Benutzerkennung wirklich löschen?"
-#: Src/wptKeyEditDlgs.cpp:1445
+#: Src/wptKeyEditDlgs.cpp:1447
msgid "Revoke Signature"
msgstr "Signatur widerrufen"
-#: Src/wptKeyEditDlgs.cpp:1449
+#: Src/wptKeyEditDlgs.cpp:1451
msgid "User ID successfully revoked"
msgstr "Benutzerkennung erfolgreich widerrufen"
-#: Src/wptKeyEditDlgs.cpp:1526
+#: Src/wptKeyEditDlgs.cpp:1528
msgid "Primary"
msgstr "Primär"
-#: Src/wptKeyEditDlgs.cpp:1529
+#: Src/wptKeyEditDlgs.cpp:1531
msgid "User ID successfully flagged"
msgstr "Benutzerkennung erfolgreich gekennzeichnet"
-#: Src/wptKeyEditDlgs.cpp:1614
+#: Src/wptKeyEditDlgs.cpp:1616
msgid "No preferences available."
msgstr "Keine Präferenzen verfübar."
-#: Src/wptKeyEditDlgs.cpp:1620
+#: Src/wptKeyEditDlgs.cpp:1622
msgid "MDC feature"
msgstr "Unterstützt MDC"
-#: Src/wptKeyEditDlgs.cpp:1622 Src/wptKeyeditSetPrefDlg.cpp:116
+#: Src/wptKeyEditDlgs.cpp:1624 Src/wptKeyeditSetPrefDlg.cpp:116
msgid "Key Preferences"
msgstr "Schlüsseleinstellungen"
-#: Src/wptKeyEditDlgs.cpp:1672
+#: Src/wptKeyEditDlgs.cpp:1674
msgid "Primary user ID can not be deleted!"
msgstr "Primäre Benutzerkennung kann nicht gelöscht werden!"
-#: Src/wptKeyEditDlgs.cpp:1682
+#: Src/wptKeyEditDlgs.cpp:1684
#, c-format
msgid ""
"user ID \"%s\".\n"
@@ -2464,32 +2471,32 @@
"Benutzerkennung %s.\r\n"
"Diese Benutzerkennung wirklich löschen?"
-#: Src/wptKeyEditDlgs.cpp:1699
+#: Src/wptKeyEditDlgs.cpp:1701
msgid "Delete user ID"
msgstr "Benutzerkennung löschen"
-#: Src/wptKeyEditDlgs.cpp:1703
+#: Src/wptKeyEditDlgs.cpp:1705
msgid "User ID successfully deleted"
msgstr "Benutzerkennung erfolgreich gelöscht"
-#: Src/wptKeyEditDlgs.cpp:1785
+#: Src/wptKeyEditDlgs.cpp:1788
msgid "Could not set subkey window procedure."
msgstr "Konnte \"subkey window procedure\" nicht setzen."
-#: Src/wptKeyEditDlgs.cpp:1795
+#: Src/wptKeyEditDlgs.cpp:1798
msgid "Could not set user ID window procedure."
msgstr "Konnte \"userID window procedure\" nicht setzen."
# c:\oss\winpt-gpgme\src\wptKeyEditDlgs.cpp:1739
-#: Src/wptKeyEditDlgs.cpp:1803
+#: Src/wptKeyEditDlgs.cpp:1806
msgid "Command>"
msgstr "Kommando>"
-#: Src/wptKeyEditDlgs.cpp:1835
+#: Src/wptKeyEditDlgs.cpp:1838
msgid "Please select a command."
msgstr "Bitte einen Befehl auswählen."
-#: Src/wptKeyEditDlgs.cpp:1840
+#: Src/wptKeyEditDlgs.cpp:1843
msgid "This command cannot be used with PGP 2 (v3) keys.\n"
msgstr "Dieser Befehl kann mit PGP2 (v3) Schlüsseln nicht verwendet werden.\n"
@@ -2532,8 +2539,8 @@
msgstr "Bitte wählen Sie einen Eintrag."
#: Src/wptKeyEditOwnertrustDlg.cpp:88 Src/wptKeyEditOwnertrustDlg.cpp:95
-#: Src/wptKeyEditOwnertrustDlg.cpp:104 Src/wptKeyManagerDlg.cpp:925
-#: Src/wptKeyManagerDlg.cpp:1632 Src/wptKeyPropsDlg.cpp:286
+#: Src/wptKeyEditOwnertrustDlg.cpp:104 Src/wptKeyManagerDlg.cpp:934
+#: Src/wptKeyManagerDlg.cpp:1642 Src/wptKeyPropsDlg.cpp:286
#: Src/wptOwnertrustDlg.cpp:97 Src/wptOwnertrustDlg.cpp:121
#: Src/wptOwnertrustDlg.cpp:133
msgid "Ownertrust"
@@ -2556,7 +2563,7 @@
#: Src/wptKeygenDlg.cpp:421 Src/wptKeygenDlg.cpp:426 Src/wptKeygenDlg.cpp:432
#: Src/wptKeygenDlg.cpp:439 Src/wptKeygenDlg.cpp:451 Src/wptKeygenDlg.cpp:458
#: Src/wptKeygenDlg.cpp:493 Src/wptKeygenDlg.cpp:584
-#: Src/wptKeyManagerDlg.cpp:1491 Src/wptPassphraseDlg.cpp:94
+#: Src/wptKeyManagerDlg.cpp:1501 Src/wptPassphraseDlg.cpp:94
msgid "Key Generation"
msgstr "Schlüsselerzeugung"
@@ -2710,7 +2717,7 @@
#: Src/wptKeygenDlg.cpp:543 Src/wptKeygenDlg.cpp:565 Src/wptKeygenDlg.cpp:570
#: Src/wptKeygenDlg.cpp:576 Src/wptKeygenDlg.cpp:581 Src/wptKeygenDlg.cpp:605
-#: Src/wptKeyManagerDlg.cpp:1517
+#: Src/wptKeyManagerDlg.cpp:1527
msgid "Key Generation Wizard"
msgstr "Schlüsselerzeugungs-Assistent"
@@ -2770,59 +2777,50 @@
msgid "No keys updated."
msgstr "Kein(e) Schlüssel aktualisiert."
-#: Src/wptKeylist.cpp:241
+#: Src/wptKeylist.cpp:252
msgid "Key Pair"
msgstr "Schlüsselpaar"
-#: Src/wptKeylist.cpp:243
+#: Src/wptKeylist.cpp:254
msgid "Key Pair (Card)"
msgstr "Schlüsselpaar (Karte)"
-#: Src/wptKeylist.cpp:244
+#: Src/wptKeylist.cpp:255
msgid "Public Key"
msgstr "Öffentlicher Schlüssel"
-#: Src/wptKeylist.cpp:339 Src/wptKeylist.cpp:944
+#: Src/wptKeylist.cpp:352
msgid "None"
msgstr "Keine"
-#: Src/wptKeylist.cpp:343
+#: Src/wptKeylist.cpp:356
msgid "Marginal"
msgstr "Marginal"
# c:\oss\winpt-gpgme\src\wptKeylist.cpp:492
-#: Src/wptKeylist.cpp:346 Src/wptKeylist.cpp:505
+#: Src/wptKeylist.cpp:359 Src/wptKeylist.cpp:519
msgid "Full"
msgstr "Voll"
-#: Src/wptKeylist.cpp:383 Src/wptKeyPropsDlg.cpp:160
+#: Src/wptKeylist.cpp:396 Src/wptKeyPropsDlg.cpp:160
msgid "Disabled"
msgstr "Inaktiv"
-#: Src/wptKeylist.cpp:544 Src/wptKeylist.cpp:554 Src/wptKeyManagerDlg.cpp:867
-#: Src/wptKeyManagerDlg.cpp:955
+#: Src/wptKeylist.cpp:540 Src/wptKeylist.cpp:549 Src/wptKeyManagerDlg.cpp:876
+#: Src/wptKeyManagerDlg.cpp:964
msgid "Cipher"
msgstr "Cipher"
-#: Src/wptKeylist.cpp:556 Src/wptKeyManagerDlg.cpp:869
+#: Src/wptKeylist.cpp:551 Src/wptKeyManagerDlg.cpp:878
#: Src/wptVerifyList.cpp:100 Src/wptVerifyList.cpp:108
msgid "Trust"
msgstr "Vertrauen"
-#: Src/wptKeylist.cpp:722 Src/wptPassphraseCB.cpp:110
+#: Src/wptKeylist.cpp:720 Src/wptPassphraseCB.cpp:110
#: Src/wptVerifyList.cpp:191
msgid "Invalid User ID"
msgstr "Ungültige Benutzerkennung"
-#: Src/wptKeylist.cpp:941 Src/wptKeyPropsDlg.cpp:66 Src/wptVerifyList.cpp:169
-#: Src/wptVerifyList.cpp:245
-msgid "Unknown"
-msgstr "Unbekannt"
-
-#: Src/wptKeylist.cpp:942
-msgid "Undefined"
-msgstr ""
-
#: Src/wptKeylist.cpp:985
#, c-format
msgid ""
@@ -2838,11 +2836,11 @@
"\n"
"\"%s\" benutzen?"
-#: Src/wptKeylist.cpp:993 Src/wptKeylist.cpp:1069
+#: Src/wptKeylist.cpp:993 Src/wptKeylist.cpp:1056
msgid "Recipients"
msgstr "Empfänger"
-#: Src/wptKeylist.cpp:1068
+#: Src/wptKeylist.cpp:1057
#, c-format
msgid ""
"KeyID %s.\n"
@@ -2851,11 +2849,11 @@
"Schlüssel ID %s.\n"
"Wollen Sie wirklich einen widerrufenen Schlüssel exportieren?"
-#: Src/wptKeylist.cpp:1170
+#: Src/wptKeylist.cpp:1159
msgid "Secret Key List"
msgstr "Liste der geheimen Schlüssel"
-#: Src/wptKeyManager.cpp:176
+#: Src/wptKeyManager.cpp:177
msgid ""
"This key has expired!\n"
"Key check failed."
@@ -2863,7 +2861,7 @@
"Dieser Schlüssel ist abgelaufen!\n"
"Schlüsselüberprüfung fehlgeschlagen."
-#: Src/wptKeyManager.cpp:181
+#: Src/wptKeyManager.cpp:182
msgid ""
"This key has been revoked by its owner!\n"
"Key check failed."
@@ -2871,34 +2869,29 @@
"Dieser Schlüssel wurde vom Besitzer widerrufen!Schlüsselüberprüfung "
"fehlgeschlagen."
-#: Src/wptKeyManager.cpp:231
+#: Src/wptKeyManager.cpp:232
msgid "Key status changed."
msgstr "Schlüsselstatus geändert"
-#: Src/wptKeyManager.cpp:352
+#: Src/wptKeyManager.cpp:353
msgid "Only one secret key can be exported."
msgstr "Nur der geheime Schlüssel kann exportiert werden."
-#: Src/wptKeyManager.cpp:363
+#: Src/wptKeyManager.cpp:364
#, c-format
msgid "Secret key successfully saved in '%s'."
msgstr "Geheimer Schlüssel gespeichert in '%s'."
-#: Src/wptKeyManager.cpp:406
+#: Src/wptKeyManager.cpp:398
#, c-format
msgid "Key(s) successfully saved in '%s'."
msgstr "Schlüssel erfolgreich in '%s' gespeichert."
-#: Src/wptKeyManager.cpp:412
-#, c-format
-msgid "Could not save data to '%s'."
-msgstr "Konnte Daten nicht in '%s' speichern."
-
-#: Src/wptKeyManager.cpp:463
+#: Src/wptKeyManager.cpp:451
msgid "No valid OpenPGP keys found."
msgstr "Keine gültigen OpenPGP-Schlüssel gefunden."
-#: Src/wptKeyManager.cpp:468
+#: Src/wptKeyManager.cpp:456
msgid ""
"The key you want to import is dash escacped.\n"
"Do you want to extract the key?"
@@ -2906,38 +2899,38 @@
"Der Import-Schlüssel ist beschädigt.\n"
"Möchten Sie den Schlüssel extrahieren?"
-#: Src/wptKeyManager.cpp:474
+#: Src/wptKeyManager.cpp:462
msgid "Cannot import dash escaped OpenPGP keys."
msgstr "Kann keine beschädigten OpenPGP-Schlüssel importieren."
-#: Src/wptKeyManager.cpp:498 Src/wptKeyManager.cpp:509
-#: Src/wptKeyManager.cpp:523
+#: Src/wptKeyManager.cpp:486 Src/wptKeyManager.cpp:497
+#: Src/wptKeyManager.cpp:511
msgid "Key Import HTTP"
msgstr "Schlüssel Import HTTP"
# c:\oss\winpt-gpgme\src\wptKeyManager.cpp:448
-#: Src/wptKeyManager.cpp:498
+#: Src/wptKeyManager.cpp:486
#, c-format
msgid "Invalid HTTP URL: %s"
msgstr "Ungültige HTTP URL: %s"
-#: Src/wptKeyManager.cpp:549
+#: Src/wptKeyManager.cpp:537
msgid "File Import"
msgstr "Dateiimport"
-#: Src/wptKeyManager.cpp:560
+#: Src/wptKeyManager.cpp:548
msgid "Could not read key-data from file."
msgstr "Konnte Schlüsseldaten nicht aus Datei lesen."
-#: Src/wptKeyManager.cpp:629
+#: Src/wptKeyManager.cpp:616
msgid "Do you really want to confirm each key?"
msgstr "Wollen Sie wirklich jeden Schlüssel bestätigen?"
-#: Src/wptKeyManager.cpp:630
+#: Src/wptKeyManager.cpp:617
msgid "Delete Confirmation"
msgstr "Löschen Bestätigen"
-#: Src/wptKeyManager.cpp:652
+#: Src/wptKeyManager.cpp:641
#, c-format
msgid ""
"Do you really want to delete this key?\n"
@@ -2949,7 +2942,7 @@
"%s"
# c:\oss\winpt-gpgme\src\wptKeyManager.cpp:605
-#: Src/wptKeyManager.cpp:662
+#: Src/wptKeyManager.cpp:651
#, c-format
msgid ""
"Do you really want to delete this KEY PAIR?\n"
@@ -2966,7 +2959,7 @@
"\n"
"%s"
-#: Src/wptKeyManager.cpp:669
+#: Src/wptKeyManager.cpp:658
msgid ""
"The actual secret key is stored on a smartcard.\n"
"Only the public key and the secret key \n"
@@ -2976,39 +2969,39 @@
"Nur der öffentliche Schlüssel und der Zeiger auf den geheimen\n"
"Schlüssel werden gelöscht.\n"
-#: Src/wptKeyManager.cpp:732
+#: Src/wptKeyManager.cpp:720
#, c-format
msgid "Do you really want to send '%s' to keyserver %s?"
msgstr "Wollen Sie '%s' wirklich zum Schlüsselserver %s senden?"
-#: Src/wptKeyManager.cpp:755
+#: Src/wptKeyManager.cpp:743
msgid "Please only select one key."
msgstr "Bitte nur einen Schlüssel auswählen."
-#: Src/wptKeyManager.cpp:825
+#: Src/wptKeyManager.cpp:818
msgid "Could not connect to keyserver, abort procedure."
msgstr ""
"Verbindung zum Keyserver fehlgeschlagen; Die Prozedur wird abgebrochen."
-#: Src/wptKeyManager.cpp:831
+#: Src/wptKeyManager.cpp:825
msgid "Do you really want to refresh all keys in the keyring?"
msgstr "Wirklich alle Schlüssel im Schlüsselbund neu laden?"
-#: Src/wptKeyManager.cpp:908
+#: Src/wptKeyManager.cpp:900
msgid "Search"
msgstr "Suchen"
-#: Src/wptKeyManager.cpp:908
+#: Src/wptKeyManager.cpp:900
msgid "Search for:"
msgstr "Suche nach:"
# c:\oss\winpt-gpgme\src\wptKeyManager.cpp:896
-#: Src/wptKeyManager.cpp:919
+#: Src/wptKeyManager.cpp:911
#, c-format
msgid "String pattern \"%s\" not found."
msgstr "Zeichenkette \"%s\" nicht gefunden."
-#: Src/wptKeyManagerDlg.cpp:429 Src/wptKeyManagerDlg.cpp:975
+#: Src/wptKeyManagerDlg.cpp:429 Src/wptKeyManagerDlg.cpp:984
msgid "Paste Key from Clipboard"
msgstr "Schlüssel aus Ablage einfügen"
@@ -3033,257 +3026,257 @@
msgid "%d keys"
msgstr "%d Schlüssel"
-#: Src/wptKeyManagerDlg.cpp:920
+#: Src/wptKeyManagerDlg.cpp:929
msgid "Key"
msgstr "Schlüssel"
-#: Src/wptKeyManagerDlg.cpp:921 Src/wptKeyManagerDlg.cpp:1073
+#: Src/wptKeyManagerDlg.cpp:930 Src/wptKeyManagerDlg.cpp:1082
msgid "Groups"
msgstr "Gruppen"
# c:\oss\winpt-gpgme\src\wptFileManagerDlg.cpp:478
-#: Src/wptKeyManagerDlg.cpp:924
+#: Src/wptKeyManagerDlg.cpp:933
msgid "Send Mail..."
msgstr "eMail versenden..."
# c:\oss\winpt-gpgme\src\wptKeyManagerDlg.cpp:685
-#: Src/wptKeyManagerDlg.cpp:926
+#: Src/wptKeyManagerDlg.cpp:935
msgid "&Copy\tCtrl+C"
msgstr "&Kopieren\tCtrl+C"
# c:\oss\winpt-gpgme\src\wptKeyManagerDlg.cpp:686
-#: Src/wptKeyManagerDlg.cpp:927
+#: Src/wptKeyManagerDlg.cpp:936
msgid "&Paste\tCtrl+V"
msgstr "&Einfügen\tCtrl+V"
# c:\oss\winpt-gpgme\src\wptKeyManagerDlg.cpp:687
-#: Src/wptKeyManagerDlg.cpp:928
+#: Src/wptKeyManagerDlg.cpp:937
msgid "Search...\tCtrl+F"
msgstr "Suchen...\tCtrl+F"
# c:\oss\winpt-gpgme\src\wptKeyManagerDlg.cpp:688
-#: Src/wptKeyManagerDlg.cpp:929
+#: Src/wptKeyManagerDlg.cpp:938
msgid "Select All\tCtrl+A"
msgstr "Alles markieren\tCtrl+A"
-#: Src/wptKeyManagerDlg.cpp:930
+#: Src/wptKeyManagerDlg.cpp:939
msgid "&Quit"
msgstr "&Beenden"
-#: Src/wptKeyManagerDlg.cpp:932
+#: Src/wptKeyManagerDlg.cpp:941
msgid "&Expert"
msgstr "&Experte"
-#: Src/wptKeyManagerDlg.cpp:933
+#: Src/wptKeyManagerDlg.cpp:942
msgid "&Normal"
msgstr "&Normal"
-#: Src/wptKeyManagerDlg.cpp:936 Src/wptKeyManagerDlg.cpp:937
-#: Src/wptKeyManagerDlg.cpp:981
+#: Src/wptKeyManagerDlg.cpp:945 Src/wptKeyManagerDlg.cpp:946
+#: Src/wptKeyManagerDlg.cpp:990
msgid "&Delete"
msgstr "&Löschen"
-#: Src/wptKeyManagerDlg.cpp:938 Src/wptKeyManagerDlg.cpp:982
+#: Src/wptKeyManagerDlg.cpp:947 Src/wptKeyManagerDlg.cpp:991
msgid "&Revoke Cert"
msgstr "Widerruf Zertifikat"
-#: Src/wptKeyManagerDlg.cpp:939 Src/wptKeyManagerDlg.cpp:978
+#: Src/wptKeyManagerDlg.cpp:948 Src/wptKeyManagerDlg.cpp:987
msgid "&List Signatures"
msgstr "Signaturen anzeigen"
-#: Src/wptKeyManagerDlg.cpp:940 Src/wptKeyManagerDlg.cpp:1409
+#: Src/wptKeyManagerDlg.cpp:949 Src/wptKeyManagerDlg.cpp:1419
#: Src/wptKeyTrustPathDlg.cpp:130
msgid "List Trust Path"
msgstr "Zeige Vertrauenspfad"
-#: Src/wptKeyManagerDlg.cpp:941
+#: Src/wptKeyManagerDlg.cpp:950
msgid "&Export..."
msgstr "&Exportieren..."
-#: Src/wptKeyManagerDlg.cpp:942
+#: Src/wptKeyManagerDlg.cpp:951
msgid "&Import..."
msgstr "&Importieren..."
-#: Src/wptKeyManagerDlg.cpp:943 Src/wptKeyManagerDlg.cpp:979
+#: Src/wptKeyManagerDlg.cpp:952 Src/wptKeyManagerDlg.cpp:988
#: Src/wptKeysigDlg.cpp:356
msgid "&Properties"
msgstr "&Eigenschaften"
-#: Src/wptKeyManagerDlg.cpp:947
+#: Src/wptKeyManagerDlg.cpp:956
msgid "E&xport Secret Key"
msgstr "E&xportiere geheimen Schlüssel"
-#: Src/wptKeyManagerDlg.cpp:948
+#: Src/wptKeyManagerDlg.cpp:957
msgid "Re&load Key Cache"
msgstr "Erneuere Sch&lüsselcache"
-#: Src/wptKeyManagerDlg.cpp:949
+#: Src/wptKeyManagerDlg.cpp:958
msgid "R&everify Signatures"
msgstr "Signaturen erneut prüfen"
-#: Src/wptKeyManagerDlg.cpp:950
+#: Src/wptKeyManagerDlg.cpp:959
msgid "Refresh &Keys (Keyserver)"
msgstr "Vom Schlüsselserver aktualisieren"
-#: Src/wptKeyManagerDlg.cpp:951 Src/wptTextInputDlg.cpp:49
+#: Src/wptKeyManagerDlg.cpp:960 Src/wptTextInputDlg.cpp:49
msgid "Info"
msgstr "Über"
-#: Src/wptKeyManagerDlg.cpp:970
+#: Src/wptKeyManagerDlg.cpp:979
msgid "Copy User ID to Clipboard"
msgstr "Kopiere Benutzerkennung in Ablage"
# c:\oss\winpt-gpgme\src\wptKeyManagerDlg.cpp:886
-#: Src/wptKeyManagerDlg.cpp:971
+#: Src/wptKeyManagerDlg.cpp:980
msgid "Copy Key ID to Clipboard"
msgstr "Kopiere Schlüssel ID in Ablage"
# c:\oss\winpt-gpgme\src\wptKeyManagerDlg.cpp:887
-#: Src/wptKeyManagerDlg.cpp:972
+#: Src/wptKeyManagerDlg.cpp:981
msgid "Copy Fingerprint to Clipboard"
msgstr "Kopiere Fingerprint in Ablage"
# c:\oss\winpt-gpgme\src\wptKeyManagerDlg.cpp:888
-#: Src/wptKeyManagerDlg.cpp:973
+#: Src/wptKeyManagerDlg.cpp:982
msgid "Copy Key Info to Clipboard"
msgstr "Kopiere Schlüssel Info in Ablage"
-#: Src/wptKeyManagerDlg.cpp:974
+#: Src/wptKeyManagerDlg.cpp:983
msgid "Copy Key to Clipboard"
msgstr "Kopiere Schlüssel in Ablage"
-#: Src/wptKeyManagerDlg.cpp:976
+#: Src/wptKeyManagerDlg.cpp:985
msgid "Refresh from Keyserver"
msgstr "Vom Schlüsselserver aktualisieren"
# c:\oss\winpt-gpgme\src\wptKeyManagerDlg.cpp:884
-#: Src/wptKeyManagerDlg.cpp:977
+#: Src/wptKeyManagerDlg.cpp:986
msgid "Set Implicit &Trust"
msgstr "Setze impliziertes Vertrauen"
-#: Src/wptKeyManagerDlg.cpp:984
+#: Src/wptKeyManagerDlg.cpp:993
msgid "&Enable"
msgstr "&Aktivieren"
# c:\oss\winpt-gpgme\src\wptKeyManagerDlg.cpp:892
-#: Src/wptKeyManagerDlg.cpp:985
+#: Src/wptKeyManagerDlg.cpp:994
msgid "&Disable"
msgstr "&Deaktivieren"
-#: Src/wptKeyManagerDlg.cpp:986
+#: Src/wptKeyManagerDlg.cpp:995
msgid "Re&fresh from Keyserver"
msgstr "Vom Schlüsselserver aktualisieren"
-#: Src/wptKeyManagerDlg.cpp:987
+#: Src/wptKeyManagerDlg.cpp:996
msgid "Set preferred Keyserver URL"
msgstr "Setze bevorzugte Keyserver URL"
# c:\oss\winpt-gpgme\src\wptKeyManagerDlg.cpp:900
-#: Src/wptKeyManagerDlg.cpp:988
+#: Src/wptKeyManagerDlg.cpp:997
msgid "Send Key to Mail Recipient"
msgstr "Sende Schlüssel an Mailempfänger"
# c:\oss\winpt-gpgme\src\wptKeyManagerDlg.cpp:904
-#: Src/wptKeyManagerDlg.cpp:989
+#: Src/wptKeyManagerDlg.cpp:998
msgid "Set as Default Key"
msgstr "Setze als Default Key"
-#: Src/wptKeyManagerDlg.cpp:991
+#: Src/wptKeyManagerDlg.cpp:1000
msgid "Key..."
msgstr "Schlüssel..."
-#: Src/wptKeyManagerDlg.cpp:992
+#: Src/wptKeyManagerDlg.cpp:1001
msgid "User ID..."
msgstr "Benutzerkennung..."
-#: Src/wptKeyManagerDlg.cpp:993
+#: Src/wptKeyManagerDlg.cpp:1002
msgid "Photo ID..."
msgstr "Photo ID..."
-#: Src/wptKeyManagerDlg.cpp:994
+#: Src/wptKeyManagerDlg.cpp:1003
msgid "Revoker..."
msgstr "Revoker..."
# c:\oss\winpt-gpgme\src\wptKeyManagerDlg.cpp:706
-#: Src/wptKeyManagerDlg.cpp:997
+#: Src/wptKeyManagerDlg.cpp:1006
msgid "Key Attributes"
msgstr "Schlüsselattribute"
# c:\oss\winpt-gpgme\src\wptKeyManagerDlg.cpp:707
-#: Src/wptKeyManagerDlg.cpp:998
+#: Src/wptKeyManagerDlg.cpp:1007
msgid "Add"
msgstr "Hinzufügen"
-#: Src/wptKeyManagerDlg.cpp:999
+#: Src/wptKeyManagerDlg.cpp:1008
msgid "Send to Keyserver"
msgstr "Sende an Keyserver"
-#: Src/wptKeyManagerDlg.cpp:1059 Src/wptKeysigDlg.cpp:370
+#: Src/wptKeyManagerDlg.cpp:1068 Src/wptKeysigDlg.cpp:370
msgid "Could not set keylist window procedure."
msgstr "Konnte \"keylist window procedure\" nicht setzen."
# c:\oss\winpt-gpgme\src\wptKeyManagerDlg.cpp:842
-#: Src/wptKeyManagerDlg.cpp:1172
+#: Src/wptKeyManagerDlg.cpp:1181
msgid "Delete key from keyring"
msgstr "Schlüssel aus Keyring löschen"
-#: Src/wptKeyManagerDlg.cpp:1176
+#: Src/wptKeyManagerDlg.cpp:1185
msgid "Show key properties"
msgstr "Schlüsseleigenschaften anzeigen"
-#: Src/wptKeyManagerDlg.cpp:1180
+#: Src/wptKeyManagerDlg.cpp:1189
msgid "Sign key"
msgstr "Signiere Schlüssel"
# c:\oss\winpt-gpgme\src\wptKeyManagerDlg.cpp:854
-#: Src/wptKeyManagerDlg.cpp:1184
+#: Src/wptKeyManagerDlg.cpp:1193
msgid "Import key to keyring"
msgstr "In Schlüsselbund importieren"
# c:\oss\winpt-gpgme\src\wptKeyManagerDlg.cpp:858
-#: Src/wptKeyManagerDlg.cpp:1188
+#: Src/wptKeyManagerDlg.cpp:1197
msgid "Export key to a file"
msgstr "Schlüssel in Datei exportieren"
# c:\oss\winpt-gpgme\src\wptKeyManagerDlg.cpp:499
-#: Src/wptKeyManagerDlg.cpp:1307
+#: Src/wptKeyManagerDlg.cpp:1317
msgid "New"
msgstr "Neu"
-#: Src/wptKeyManagerDlg.cpp:1314
+#: Src/wptKeyManagerDlg.cpp:1324
msgid "Could not access public keyring"
msgstr "Konnte nicht auf öffentlichen Schlüsselbund zugreifen"
-#: Src/wptKeyManagerDlg.cpp:1354 Src/wptKeysignDlg.cpp:230
+#: Src/wptKeyManagerDlg.cpp:1364 Src/wptKeysignDlg.cpp:230
#: Src/wptKeysignDlg.cpp:249 Src/wptKeysignDlg.cpp:326
#: Src/wptKeysignDlg.cpp:343 Src/wptKeysignDlg.cpp:348
msgid "Key Signing"
msgstr "Schlüsselsignierung"
-#: Src/wptKeyManagerDlg.cpp:1378
+#: Src/wptKeyManagerDlg.cpp:1388
msgid "Key already revoked!"
msgstr "Schlüssel ist bereits widerrufen!"
-#: Src/wptKeyManagerDlg.cpp:1390 Src/wptKeyRevokeDlg.cpp:72
+#: Src/wptKeyManagerDlg.cpp:1400 Src/wptKeyRevokeDlg.cpp:72
#: Src/wptKeyRevokeDlg.cpp:100 Src/wptKeyRevokeDlg.cpp:138
#: Src/wptKeyRevokeDlg.cpp:143 Src/wptKeyRevokeDlg.cpp:151
#: Src/wptKeyRevokeDlg.cpp:167 Src/wptKeyRevokeDlg.cpp:173
msgid "Key Revocation Cert"
msgstr "Schlüsselwiderruf Zertifikat"
-#: Src/wptKeyManagerDlg.cpp:1400
+#: Src/wptKeyManagerDlg.cpp:1410
msgid "It does not make any sense with a key pair!"
msgstr "Diese Aktion macht keinen Sinn mit einem Schlüsselpaar!"
-#: Src/wptKeyManagerDlg.cpp:1426
+#: Src/wptKeyManagerDlg.cpp:1436
msgid "Key Signature List"
msgstr "Schlüssel-Signatur-Liste"
-#: Src/wptKeyManagerDlg.cpp:1445 Src/wptKeyPropsDlg.cpp:282
+#: Src/wptKeyManagerDlg.cpp:1455 Src/wptKeyPropsDlg.cpp:282
msgid "Key Properties"
msgstr "Schlüsseleigenschaften"
-#: Src/wptKeyManagerDlg.cpp:1460
+#: Src/wptKeyManagerDlg.cpp:1470
msgid ""
"This is only useful when the keyring has been modified (sign a key...).\n"
"Do you really want to reload the keycache?"
@@ -3292,31 +3285,31 @@
"Signierung etc.)\n"
"Möchten Sie den Zwischenspeicher reinitialisieren?"
-#: Src/wptKeyManagerDlg.cpp:1501
+#: Src/wptKeyManagerDlg.cpp:1511
msgid "Smart Card support is not available."
msgstr "SmartCard-Unterstützung ist nicht verfügbar."
-#: Src/wptKeyManagerDlg.cpp:1528 Src/wptKeyserverDlg.cpp:439
+#: Src/wptKeyManagerDlg.cpp:1538 Src/wptKeyserverDlg.cpp:440
msgid "Keyserver Access"
msgstr "Schlüsselserver-Zugriff"
-#: Src/wptKeyManagerDlg.cpp:1544
+#: Src/wptKeyManagerDlg.cpp:1554
msgid "GnuPG Options"
msgstr "GnuPG Optionen"
-#: Src/wptKeyManagerDlg.cpp:1549
+#: Src/wptKeyManagerDlg.cpp:1559
msgid "Choose Name of the Key File"
msgstr "Den Namen der Schlüsseldatei wählen"
-#: Src/wptKeyManagerDlg.cpp:1587
+#: Src/wptKeyManagerDlg.cpp:1597
msgid "There is no corresponding secret key for this key."
msgstr "Für diesen Schlüssel ist kein geheimer Schlüssel vorhanden."
-#: Src/wptKeyManagerDlg.cpp:1592
+#: Src/wptKeyManagerDlg.cpp:1602
msgid "You can only export one secret key."
msgstr "Sie können nur einen geheimen Schlüssel exportieren."
-#: Src/wptKeyManagerDlg.cpp:1597
+#: Src/wptKeyManagerDlg.cpp:1607
msgid ""
"This operation will export your *SECRET* key!\n"
"\n"
@@ -3334,14 +3327,19 @@
"\n"
"Wirklich den Schlüssel exportieren?"
-#: Src/wptKeyManagerDlg.cpp:1602
+#: Src/wptKeyManagerDlg.cpp:1612
msgid "WARNING"
msgstr "WARNUNG"
-#: Src/wptKeyManagerDlg.cpp:1678
+#: Src/wptKeyManagerDlg.cpp:1688
msgid "No key was selected, select all by default."
msgstr "Kein Schlüssel ausgewählt, es wurden alle ausgewählt."
+#: Src/wptKeyPropsDlg.cpp:66 Src/wptVerifyList.cpp:169
+#: Src/wptVerifyList.cpp:245
+msgid "Unknown"
+msgstr "Unbekannt"
+
#: Src/wptKeyPropsDlg.cpp:207
#, c-format
msgid "Card-Type: %s\r\n"
@@ -3589,94 +3587,94 @@
msgid "This is not a valid OpenPGP key."
msgstr "Dies ist kein gültiger OpenPGP Schlüssel."
-#: Src/wptKeyserverDlg.cpp:356
+#: Src/wptKeyserverDlg.cpp:357
msgid "Please select one of the servers."
msgstr "Bitte einen der Server auswählen."
-#: Src/wptKeyserverDlg.cpp:361
+#: Src/wptKeyserverDlg.cpp:362
msgid "Only HTTP keyserver can be used."
msgstr "Nur HTTP-Schlüsselserver können benutzt werden."
-#: Src/wptKeyserverDlg.cpp:381
+#: Src/wptKeyserverDlg.cpp:382
msgid "DNS Name"
msgstr "DNS Name"
-#: Src/wptKeyserverDlg.cpp:382
+#: Src/wptKeyserverDlg.cpp:383
msgid "Protocol"
msgstr "Protokoll"
-#: Src/wptKeyserverDlg.cpp:383
+#: Src/wptKeyserverDlg.cpp:384
msgid "Default"
msgstr "Standard"
-#: Src/wptKeyserverDlg.cpp:384
+#: Src/wptKeyserverDlg.cpp:385
msgid "Port"
msgstr "Port"
-#: Src/wptKeyserverDlg.cpp:440 Src/wptKeyserverSearchDlg.cpp:62
+#: Src/wptKeyserverDlg.cpp:441 Src/wptKeyserverSearchDlg.cpp:62
msgid "&Receive"
msgstr "&Empfangen"
-#: Src/wptKeyserverDlg.cpp:442
+#: Src/wptKeyserverDlg.cpp:443
msgid "Send key (default is receiving)"
msgstr "Schlüssel senden (sonst empfangen)"
-#: Src/wptKeyserverDlg.cpp:444
+#: Src/wptKeyserverDlg.cpp:445
msgid "Please enter the key ID or email address you search for"
msgstr "Bitte die key ID oder Email Adresse angeben die gesucht wird"
-#: Src/wptKeyserverDlg.cpp:445
+#: Src/wptKeyserverDlg.cpp:446
msgid "&Search"
msgstr "&Suchen"
-#: Src/wptKeyserverDlg.cpp:446
+#: Src/wptKeyserverDlg.cpp:447
msgid "C&hange"
msgstr "Ä&ndern"
-#: Src/wptKeyserverDlg.cpp:447
+#: Src/wptKeyserverDlg.cpp:448
msgid "Set &default"
msgstr "Als &Standard"
-#: Src/wptKeyserverDlg.cpp:482 Src/wptProxySettingsDlg.cpp:66
+#: Src/wptKeyserverDlg.cpp:483 Src/wptProxySettingsDlg.cpp:66
#: Src/wptProxySettingsDlg.cpp:75 Src/wptProxySettingsDlg.cpp:82
#: Src/wptProxySettingsDlg.cpp:87 Src/wptProxySettingsDlg.cpp:92
#: Src/wptProxySettingsDlg.cpp:138 Src/wptProxySettingsDlg.cpp:169
msgid "Proxy Settings"
msgstr "Proxy Einstellungen"
-#: Src/wptKeyserverDlg.cpp:490 Src/wptKeyserverDlg.cpp:519
+#: Src/wptKeyserverDlg.cpp:491 Src/wptKeyserverDlg.cpp:520
msgid "Please select one of the keyservers."
msgstr "Bitte einen Keyserver auswählen."
-#: Src/wptKeyserverDlg.cpp:497
+#: Src/wptKeyserverDlg.cpp:498
msgid "This is not implemented yet!"
msgstr "Das ist (leider) noch nicht implementiert!"
-#: Src/wptKeyserverDlg.cpp:503 Src/wptKeyserverDlg.cpp:532
+#: Src/wptKeyserverDlg.cpp:504 Src/wptKeyserverDlg.cpp:533
msgid "Please enter the search pattern."
msgstr "Bitte Suchmuster eingeben."
-#: Src/wptKeyserverDlg.cpp:537
+#: Src/wptKeyserverDlg.cpp:538
msgid "Only keyids are allowed."
msgstr "Nur Schlüssel-IDs zulässig"
-#: Src/wptKeyserverDlg.cpp:537
+#: Src/wptKeyserverDlg.cpp:538
msgid "LDAP Keyserver"
msgstr "LDAP-Schlüsselserver"
-#: Src/wptKeyserverDlg.cpp:542
+#: Src/wptKeyserverDlg.cpp:543
msgid "Only enter the name of the user."
msgstr "Nur den Namen des Benutzers eingeben."
-#: Src/wptKeyserverDlg.cpp:543
+#: Src/wptKeyserverDlg.cpp:544
msgid "FINGER Keyserver"
msgstr "FINGER Schlüsselserver"
-#: Src/wptKeyserverDlg.cpp:548
+#: Src/wptKeyserverDlg.cpp:549
msgid "Only email addresses or keyids are allowed."
msgstr "Es sind nur E-Mail-Adressen oder Schlüssel-IDs zulässig"
-#: Src/wptKeyserverDlg.cpp:549
+#: Src/wptKeyserverDlg.cpp:550
msgid "HKP Keyserver"
msgstr "HKP Schlüsselserver"
@@ -4025,9 +4023,9 @@
msgstr "Datei auswählen zum Speichern der Prüfsummen"
#: Src/wptMDSumDlg.cpp:149
-#, fuzzy, c-format
+#, c-format
msgid "Checksums successfully saved in '%s'"
-msgstr "Schlüssel erfolgreich in '%s' gespeichert."
+msgstr "Checksummen erfolgreich in '%s' gespeichert."
#: Src/wptOwnertrustDlg.cpp:100
msgid ""
@@ -4375,7 +4373,7 @@
msgid "Expiration"
msgstr "Ablauf"
-#: Src/wptSigList.cpp:137
+#: Src/wptSigList.cpp:139
msgid " user ID not found"
msgstr " Benutzerkennung nicht gefunden"
@@ -4399,6 +4397,12 @@
msgid "Signed"
msgstr "Signiert"
+#~ msgid "&Specify a new GnuPG home directory"
+#~ msgstr "Bitte neues GnuPG-HOME-Verzeichnis &eingeben."
+
+#~ msgid "Could not save data to '%s'."
+#~ msgstr "Konnte Daten nicht in '%s' speichern."
+
#~ msgid "&Repeat passphrase"
#~ msgstr "Passwort (&nochmal)"
Modified: trunk/Src/ChangeLog
===================================================================
--- trunk/Src/ChangeLog 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/ChangeLog 2006-01-09 09:15:29 UTC (rev 133)
@@ -1,3 +1,57 @@
+2006-01-07 Timo Schulz <ts at g10code.com>
+
+ * wptKeyManager.cpp (km_refresh_from_keyserver): Summarize
+ import status if just one key was selected.
+
+2006-01-04 Timo Schulz <ts at g10code.com>
+
+ * wptGPGMEWrapper.c (setChangeVersion): New.
+ (exportToBuffer, exportToFile, exportToClipboard): New.
+ (setArmor, getArmor): New.
+ * wptKeylist.cpp (get_key_expire_date): Return locale specific
+ date.
+ (keylist_get_recipients): Do not fetch the key again.
+ (keylist_enum_recipients): Likewise.
+ * wptGPG.cpp (create_empty_keyring): New.
+ (get_gnupg_keyring): Fixed 'strict' logic.
+ * wptKeyManagerDlg.cpp (update_ui_items): Disable some buttons
+ when no secret keys are available.
+ * wptKeyManager.cpp (km_send_to_mail_recipient): Release key data
+ before the MAPI call is made.
+ * WinPT.cpp (check_for_empty_keyrings): New.
+
+2006-01-03 Timo Schulz <ts at g10code.com>
+
+ * pubkey.ico, keypair.ico: New.
+ * wptListview.cpp (listview_add_item_image): New.
+ (listview_set_image_list): New.
+ * wptSigList.cpp (siglist_add_key): Correct order of the sigs.
+ * wptKeyProps.cpp (keyprops_load_photo): Adjusted for new
+ JPEG data.
+ * wptKeyManagerDlg.cpp (keymanager_dlg_proc): Do not allow to
+ add items to revoked keys.
+ * wptKeyManager.cpp (km_delete_keys): Do not use uninitialized
+ keyid buffer. This fixes a segv.
+ * wptKeyserver.cpp (spawn_application): New.
+ (ldap_recv_key): Support recent protocols and several cleanups.
+ * wptKeylist.cpp (do_addkey): Set image which depends on the
+ key type.
+ (keylist_enum_recipients): Cleanups.
+ (keylist_get_keyflags): Rewritten.
+ * wptKeyCache.cpp (free_attr_list): New.
+ (parse_attr_list): New.
+ (parse_attr_data): New.
+ (keycache_update_photo): New.
+ (keycache_update_photos): New.
+ (gpg_keycache_update_key): Automatically reload photos if needed.
+ * wptGPGUtil.cpp (create_process): New param @err. Change all
+ callers.
+ (map_tmpfile): New param @nread. Change all callers.
+ (gpg_get_photoid_data): New.
+ * wptKeyEditDlgs.cpp (keyedit_main_dlg_proc): Do not allow to
+ add items to revoked keys.
+ (subkey_init_list): Store gpgme key object.
+
2005-12-29 Timo Schulz <ts at g10code.com>
* wptKeygenDlg.cpp (keygen_dlg_proc): Request passphrase dynamically.
Modified: trunk/Src/Makefile.am
===================================================================
--- trunk/Src/Makefile.am 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/Makefile.am 2006-01-09 09:15:29 UTC (rev 133)
@@ -27,7 +27,9 @@
Sign.ico \
WinPT-en.rc \
winpt2.ico \
- winpt_km.bmp
+ winpt_km.bmp \
+ pubkey.ico \
+ keypair.ico
dialog_files = \
wptAboutDlgs.cpp \
@@ -115,7 +117,8 @@
wptUtil.cpp \
wptClipboard.cpp \
wptGPGMEData.cpp \
- wptGroupManager.cpp
+ wptGroupManager.cpp \
+ wptGPGMEWrapper.cpp
WinPT_SOURCES = $(resource_files) $(dialog_files) $(code_files)
Modified: trunk/Src/WinPT-en.rc
===================================================================
--- trunk/Src/WinPT-en.rc 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/WinPT-en.rc 2006-01-09 09:15:29 UTC (rev 133)
@@ -272,6 +272,8 @@
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_WINPT ICON DISCARDABLE "winpt2.ico"
+IDI_PUBKEY ICON DISCARDABLE "pubkey.ico"
+IDI_KEYPAIR ICON DISCARDABLE "keypair.ico"
/////////////////////////////////////////////////////////////////////////////
//
@@ -290,7 +292,7 @@
LTEXT "Windows Privacy Tray",IDC_STATIC,45,11,72,8
LTEXT "Version 0.1.1 (2001-01-29)",IDC_WINPT_VERSION,45,22,129,
8
- LTEXT "Copyright (C) 2005 Timo Schulz <twoaday at freakmail.de>",
+ LTEXT "Copyright (C) 2006 Timo Schulz <twoaday at freakmail.de>",
IDC_STATIC,8,42,182,8
LTEXT "WinPT is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either Version 2 of the License, or (at your option) any later version.",
IDC_ABOUT_GPL1,10,141,223,36
@@ -488,22 +490,22 @@
CAPTION "Key Signing"
FONT 8, "MS Sans Serif"
BEGIN
- LTEXT "Infos",IDC_KEYSIGN_INFOS,5,7,268,70
+ LTEXT "Infos",IDC_KEYSIGN_INFOS,5,7,268,66
CONTROL "Sign &local only (non exportable signature)",
IDC_KEYSIGN_LOCAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
- 5,82,170,10
+ 5,83,170,10
CONTROL "Signature &expires on",IDC_KEYSIGN_EXPSIG,"Button",
- BS_AUTOCHECKBOX | WS_TABSTOP,5,95,83,10
+ BS_AUTOCHECKBOX | WS_TABSTOP,5,96,83,10
CONTROL "DateTimePicker1",IDC_KEYSIGN_EXPIRES,"SysDateTimePick32",
DTS_RIGHTALIGN | WS_TABSTOP,89,94,69,14
CONTROL "&Ask for certification level",IDC_KEYSIGN_ASKLEVEL,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,108,112,10
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,109,112,10
CONTROL "Sign &non-revocably",IDC_KEYSIGN_NREV,"Button",
- BS_AUTOCHECKBOX | WS_TABSTOP,5,121,100,10
- COMBOBOX IDC_KEYSIGN_KEYLIST,5,135,192,49,CBS_DROPDOWNLIST |
+ BS_AUTOCHECKBOX | WS_TABSTOP,5,122,100,10
+ COMBOBOX IDC_KEYSIGN_KEYLIST,5,137,192,49,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
- LTEXT "Passphrase",IDC_KEYSIGN_PWDINF,5,153,44,8
- EDITTEXT IDC_KEYSIGN_PASSPHRASE,53,151,144,13,ES_PASSWORD |
+ LTEXT "Passphrase",IDC_KEYSIGN_PWDINF,5,155,44,8
+ EDITTEXT IDC_KEYSIGN_PASSPHRASE,53,153,144,13,ES_PASSWORD |
ES_AUTOHSCROLL
PUSHBUTTON "&Show photo",IDC_KEYSIGN_SHOWIMG,2,175,67,14,
WS_DISABLED
@@ -986,9 +988,9 @@
GROUPBOX "",IDC_STATIC,8,81,138,38
END
-IDD_WINPT_FIRST DIALOG DISCARDABLE 0, 0, 195, 63
+IDD_WINPT_FIRST DIALOG DISCARDABLE 0, 0, 195, 77
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
-CAPTION "WinPT - First start"
+CAPTION "WinPT First Start"
FONT 8, "MS Sans Serif"
BEGIN
GROUPBOX "",IDC_STATIC,6,2,185,34
@@ -996,8 +998,8 @@
BS_AUTORADIOBUTTON,8,9,149,10
CONTROL "&Copy GnuPG keyrings from another location",
IDC_FIRST_IMPORT,"Button",BS_AUTORADIOBUTTON,8,22,176,10
- DEFPUSHBUTTON "&OK",IDOK,90,43,50,14
- PUSHBUTTON "&Cancel",IDCANCEL,142,43,50,14
+ DEFPUSHBUTTON "&OK",IDOK,90,57,50,14
+ PUSHBUTTON "&Cancel",IDCANCEL,142,57,50,14
END
IDD_WINPT_SIGCLASS DIALOG DISCARDABLE 0, 0, 238, 98
@@ -1270,7 +1272,7 @@
EDITTEXT IDC_CKEYGEN_EMAIL,73,50,110,13,ES_AUTOHSCROLL
LTEXT "&Expire date",IDC_CKEYGEN_EXPDATEINF,7,69,47,8
CONTROL "&Never",IDC_CKEYGEN_NEVER,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,73,68,35,10
+ WS_TABSTOP,73,68,45,10
CONTROL "DateTimePicker1",IDC_CKEYGEN_VALID,"SysDateTimePick32",
DTS_RIGHTALIGN | WS_TABSTOP,119,67,63,12
LTEXT "Off-card passphrase",IDC_CKEYGEN_PWDINF,7,83,64,8
@@ -1278,10 +1280,10 @@
ES_AUTOHSCROLL
GROUPBOX "",IDC_STATIC,5,98,178,32
CONTROL "Overwrite old keys on the card",IDC_CKEYGEN_REPLACE,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,106,112,10
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,106,160,10
CONTROL "Make off-card backup of encryption key",
IDC_CKEYGEN_BACKUP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
- 9,118,142,10
+ 9,118,165,10
DEFPUSHBUTTON "&Start",IDOK,78,141,50,14
PUSHBUTTON "&Cancel",IDCANCEL,131,141,50,14
END
@@ -1732,7 +1734,7 @@
LEFTMARGIN, 2
RIGHTMARGIN, 192
TOPMARGIN, 2
- BOTTOMMARGIN, 58
+ BOTTOMMARGIN, 72
END
IDD_WINPT_SIGCLASS, DIALOG
@@ -1929,8 +1931,8 @@
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 0,11,4,0
- PRODUCTVERSION 0,11,4,0
+ FILEVERSION 0,11,5,0
+ PRODUCTVERSION 0,11,5,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -1948,14 +1950,14 @@
VALUE "Comments", "This is free software under the terms of the GNU GPL v2\0"
VALUE "CompanyName", "\0"
VALUE "FileDescription", "Windows Privacy Tray (WinPT)\0"
- VALUE "FileVersion", "0.11.4\0"
+ VALUE "FileVersion", "0.11.5\0"
VALUE "InternalName", "WinPT\0"
VALUE "LegalCopyright", " Copyright (C) 2005 Timo Schulz\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "WinPT.exe\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "Windows Privacy Tray\0"
- VALUE "ProductVersion", "0.11.4\0"
+ VALUE "ProductVersion", "0.11.5\0"
VALUE "SpecialBuild", "\0"
END
END
Modified: trunk/Src/WinPT.cpp
===================================================================
--- trunk/Src/WinPT.cpp 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/WinPT.cpp 2006-01-09 09:15:29 UTC (rev 133)
@@ -1,5 +1,5 @@
/* WinPT.cpp - Windows Privacy Tray (WinPT)
- * Copyright (C) 2000-2005 Timo Schulz
+ * Copyright (C) 2000-2006 Timo Schulz
*
* This file is part of WinPT.
*
@@ -156,6 +156,7 @@
return 0;
}
+
/* check if the default key from the gpg.conf file is available in the
keyring. if not, bail out because encryption won't work properly then. */
static int
@@ -262,6 +263,28 @@
}
+/* Check if both keyrings are empty. This indicates that
+ WinPT should offer to generate a key pair. */
+static bool
+check_for_empty_keyrings (bool pub_only)
+{
+ char *p;
+ int n = 0;
+
+ p = get_gnupg_keyring (1, 0);
+ if (file_exist_check (p) == 0 && get_file_size (p) == 0)
+ n++;
+ free_if_alloc (p);
+ if (pub_only)
+ return n == 1? true : false;
+ p = get_gnupg_keyring (0, 0);
+ if (file_exist_check (p) == 0 && get_file_size (p) == 0)
+ n++;
+ free_if_alloc (p);
+ return n==2? true : false;
+}
+
+
/* Enable the mobility mode. */
static void
enable_mobile_mode (void)
@@ -445,6 +468,8 @@
return 0;
}
}
+ if (check_for_empty_keyrings (false))
+ first_start = 1;
if (!first_start) {
rc = gpg_check_permissions (1);
@@ -539,13 +564,10 @@
}
if (start_gpgprefs) {
- char *ring;
DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, hwnd,
gpgprefs_dlg_proc, 0);
- ring = get_gnupg_keyring (0, !NO_STRICT);
- if (gnupg_access_keyring (0) == -1 && get_file_size (ring) == 0)
- first_start = 1; /* The keyring is empty! */
- free_if_alloc (ring);
+ if (check_for_empty_keyrings (true))
+ first_start = 1; /* The public keyring is empty! */
}
if (first_start) {
@@ -576,7 +598,7 @@
}
break;
- case -1:
+ case -1: /* Cancel/Abort. */
DestroyWindow (hwnd);
free_gnupg_table ();
return 0;
Added: trunk/Src/keypair.ico
===================================================================
(Binary files differ)
Property changes on: trunk/Src/keypair.ico
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/Src/pubkey.ico
===================================================================
(Binary files differ)
Property changes on: trunk/Src/pubkey.ico
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/Src/resource.h
===================================================================
--- trunk/Src/resource.h 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/resource.h 2006-01-09 09:15:29 UTC (rev 133)
@@ -151,6 +151,8 @@
#define IDR_WINPT_CLIPEDIT 226
#define IDD_FILE_PREFS 227
#define IDD_WINPT_KEYEDIT_SHOWPREF 228
+#define IDI_PUBKEY 230
+#define IDI_KEYPAIR 231
#define IDC_CLIPEDIT_SEND 1000
#define IDC_CLIPEDIT_CLEAR 1001
#define IDC_CLIPEDIT_CLIPTEXT 1002
@@ -786,7 +788,7 @@
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 230
+#define _APS_NEXT_RESOURCE_VALUE 232
#define _APS_NEXT_COMMAND_VALUE 40182
#define _APS_NEXT_CONTROL_VALUE 1502
#define _APS_NEXT_SYMED_VALUE 101
Modified: trunk/Src/wptCardDlg.cpp
===================================================================
--- trunk/Src/wptCardDlg.cpp 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/wptCardDlg.cpp 2006-01-09 09:15:29 UTC (rev 133)
@@ -440,7 +440,7 @@
else
s = _("Please enter the PIN");
cb->which = which;
- free_if_alloc (cb->info_text);
+ free_if_alloc( cb->info_text );
if( card ) {
fmt = _("%s\nName: %s %s\nSerial-No: %s\n");
n1 = card->givenname;
@@ -583,7 +583,7 @@
char pass[128];
int card_flags = GPG_CARDFLAG_NONE;
int expires=0, valid=0;
- size_t n;
+ DWORD n;
switch (msg) {
case WM_INITDIALOG:
@@ -603,6 +603,8 @@
SetDlgItemText (dlg, IDC_CKEYGEN_PWDINF, _("Off-card passphrase"));
SetDlgItemText (dlg, IDC_CKEYGEN_NEVER, _("&Never"));
SetDlgItemText (dlg, IDC_CKEYGEN_MAILINF, _("Email &address"));
+ SetDlgItemText (dlg, IDC_CKEYGEN_REPLACE, _("Overwrite old keys on the card"));
+ SetDlgItemText (dlg, IDC_CKEYGEN_BACKUP, _("Make off-card backup of encryption key"));
SetWindowText (dlg, _("Card Key Generation"));
return FALSE;
@@ -765,8 +767,8 @@
gpgme_error_t err;
GpgCardEdit *ce;
char pold[128], pnew[128], pnew2[128];
- int which=0;
- size_t n;
+ int which = 0;
+ DWORD n;
switch( msg ) {
case WM_INITDIALOG:
@@ -792,7 +794,7 @@
SendMessage (hwnd, EM_SETPASSWORDCHAR, hide? '*' : 0, 0);
SetFocus (hwnd);
}
- switch( LOWORD( wparam ) ) {
+ switch (LOWORD (wparam)) {
case IDOK:
if (IsDlgButtonChecked (dlg, IDC_CHPIN_ISADMIN))
which = CARD_ADMIN_PIN;
@@ -812,6 +814,8 @@
GetDlgItemText (dlg, IDC_CHPIN_NEWPIN, pnew, sizeof (pnew)-1);
GetDlgItemText (dlg, IDC_CHPIN_NEWPIN2, pnew2, sizeof (pnew2)-1);
if (strcmp (pnew, pnew2)) {
+ wipememory (pnew2, sizeof (pnew2));
+ wipememory (pnew, sizeof (pnew));
msg_box (dlg, _("Passphrases do not match. Please try again."),
_("Card Edit"), MB_ERR);
return TRUE;
Modified: trunk/Src/wptErrors.cpp
===================================================================
--- trunk/Src/wptErrors.cpp 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/wptErrors.cpp 2006-01-09 09:15:29 UTC (rev 133)
@@ -234,7 +234,7 @@
int
-log_box (const char *title, int style, const char *format, ...)
+printf_box (const char *title, int style, const char *format, ...)
{
va_list arg_ptr;
char log[8192];
Modified: trunk/Src/wptFirstRunDlg.cpp
===================================================================
--- trunk/Src/wptFirstRunDlg.cpp 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/wptFirstRunDlg.cpp 2006-01-09 09:15:29 UTC (rev 133)
@@ -1,5 +1,5 @@
/* wptFirstRunDlg.cpp - Welcome dialog
- * Copyright (C) 2002-2005 Timo Schulz
+ * Copyright (C) 2002-2006 Timo Schulz
*
* This file is part of WinPT.
*
@@ -44,10 +44,12 @@
if (!ctx)
BUG (0);
CheckDlgButton( dlg, IDC_FIRST_KEYGEN, BST_CHECKED );
- SetDlgItemText (dlg, IDC_FIRST_KEYGEN, _("&Generate a GnuPG key pair"));
- SetDlgItemText (dlg, IDC_FIRST_IMPORT, _("&Copy GnuPG keyrings from another location"));
- SetDlgItemText (dlg, IDC_FIRST_SETUP, _("&Specify a new GnuPG home directory"));
+ SetDlgItemText (dlg, IDC_FIRST_KEYGEN,
+ _("&Generate a GnuPG key pair"));
+ SetDlgItemText (dlg, IDC_FIRST_IMPORT,
+ _("&Copy GnuPG keyrings from another location"));
SetDlgItemText (dlg, IDCANCEL, _("&Cancel"));
+ SetWindowText (dlg, _("WinPT First Start"));
SetForegroundWindow (dlg);
center_window (dlg, NULL);
return TRUE;
@@ -74,4 +76,3 @@
return FALSE;
}
-
Modified: trunk/Src/wptGPG.cpp
===================================================================
--- trunk/Src/wptGPG.cpp 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/wptGPG.cpp 2006-01-09 09:15:29 UTC (rev 133)
@@ -156,10 +156,14 @@
if (!path)
return NULL;
keyring = make_filename (path, pub? "pubring" : "secring", "gpg");
- if (!strict && !file_exist_check (keyring)) {
+ if (strict && !file_exist_check (keyring)) {
free_if_alloc (path);
return keyring;
}
+ else if (!strict) {
+ free_if_alloc (path);
+ return keyring;
+ }
if (file_exist_check (keyring) || pub && get_file_size (keyring) == 0) {
free_if_alloc (keyring);
optfile = make_filename (path, GPG_CONF, NULL);
@@ -419,9 +423,26 @@
} /* check_gnupg_cfgfile */
-/*
- * Check if both keyrings are located in the gnupg home directory.
- */
+/* Usually GPG creates the pubring.gpg, secring.gpg on
+ the first start, but to make sure they always exist
+ create them empty if needed. */
+static void
+create_empty_keyring (int _pub)
+{
+ char *name;
+ FILE *f;
+
+ name = get_gnupg_keyring (_pub, 0);
+ if (file_exist_check (name) != 0) {
+ f = fopen (name, "ab");
+ if (f != NULL)
+ fclose (f);
+ }
+ free_if_alloc (name);
+}
+
+
+/* Check if both keyrings are located in the gnupg home directory. */
int
gnupg_access_files (void)
{
@@ -430,11 +451,13 @@
int secrings = 0, pubrings = 0;
char *optfile;
+ create_empty_keyring (1);
if (gnupg_access_keyring (1))
rc = WPTERR_GPG_KEYRINGS;
else
pubring_ok = 1;
+ create_empty_keyring (0);
if (gnupg_access_keyring (0))
rc = WPTERR_GPG_KEYRINGS;
else
@@ -463,7 +486,7 @@
rc = WPTERR_GPG_KEYRINGS;
}
return rc;
-} /* gnupg_access_files */
+}
static int
@@ -476,17 +499,17 @@
if( s == NULL )
return WPTERR_FILE_CREAT;
optfile = make_filename (s, GPG_CONF, NULL);
- fp = fopen( optfile, "wb" );
- if( fp == NULL ) {
+ fp = fopen (optfile, "wb");
+ if (fp == NULL) {
return WPTERR_FILE_CREAT;
goto fail;
}
- fwrite( options_skel, 1, strlen( options_skel ), fp );
- fclose( fp );
+ fwrite (options_skel, 1, strlen (options_skel), fp);
+ fclose (fp);
fail:
- free_if_alloc( s );
- free_if_alloc( optfile );
+ free_if_alloc (s);
+ free_if_alloc (optfile);
return 0;
} /* create_gpg_options */
Modified: trunk/Src/wptGPGMEData.cpp
===================================================================
--- trunk/Src/wptGPGMEData.cpp 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/wptGPGMEData.cpp 2006-01-09 09:15:29 UTC (rev 133)
@@ -1,3 +1,26 @@
+/* wptGPGMEData.cpp - WinPT specifc data extensions
+ * Copyright (C) 2001-2005 Timo Schulz
+ *
+ * This file is part of WinPT.
+ *
+ * WinPT is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * WinPT is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 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
+ */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <windows.h>
#include <malloc.h>
#include <string.h>
Added: trunk/Src/wptGPGMEWrapper.cpp
===================================================================
--- trunk/Src/wptGPGMEWrapper.cpp 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/wptGPGMEWrapper.cpp 2006-01-09 09:15:29 UTC (rev 133)
@@ -0,0 +1,134 @@
+/* wptGPGMEWrapper.cpp - Object oriented wrapper for GPGME
+ * Copyright (C) 2006 Timo Schulz
+ *
+ * This file is part of WinPT.
+ *
+ * WinPT is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * WinPT is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <windows.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "gpgme.h"
+#include "wptGPG.h"
+#include "wptGPGME.h"
+
+
+/* Constructor to build gpgme context. */
+GPGME::GPGME ()
+{
+ gpgme_new (&ctx);
+}
+
+/* Destructor to release gpgme context. */
+GPGME::~GPGME ()
+{
+ if (ctx != NULL)
+ gpgme_release (ctx);
+}
+
+void
+GPGME::setChangeVersion (bool val)
+{
+ chg_ver = val;
+}
+
+/* Enable or disable armor. */
+void
+GPGME::setArmor (bool val)
+{
+ gpgme_set_armor (ctx, val? 1 : 0);
+}
+
+bool
+GPGME::getArmor (void)
+{
+ return gpgme_get_armor (ctx)? true: false;
+}
+
+/* Export key pattern @patt to file @outfile.
+ Return value: 0 on success. */
+gpgme_error_t
+GPGME::exportToFile (const char *patt, const char *outfile)
+{
+ gpgme_data_t dat;
+ gpgme_error_t err;
+
+ err = gpgme_data_new (&dat);
+ if (err)
+ return err;
+ err = gpgme_op_export (ctx, patt, 0, dat);
+ if (err) {
+ gpgme_data_release (dat);
+ return err;
+ }
+ err = gpg_data_release_and_set_file (dat, outfile);
+ return err;
+}
+
+
+/* Export key pattern @patt to the clipboard.
+ Return value: 0 on success. */
+gpgme_error_t
+GPGME::exportToClipboard (const char *patt)
+{
+ gpgme_data_t dat;
+ gpgme_error_t err;
+
+ err = gpgme_data_new (&dat);
+ if (err)
+ return err;
+ err = gpgme_op_export (ctx, patt, 0, dat);
+ if (err) {
+ gpgme_data_release (dat);
+ return err;
+ }
+ gpg_data_release_and_set_clipboard (dat, chg_ver? 1 : 0);
+ return err;
+}
+
+
+/* Export key pattern @patt to the buffer @outdata.
+ Return value: 0 on success. */
+gpgme_error_t
+GPGME::exportToBuffer (const char *patt, char **outdata)
+{
+ gpgme_error_t err;
+ gpgme_data_t dat;
+ size_t n;
+ char *p;
+
+ err = gpgme_data_new (&dat);
+ if (err)
+ return err;
+ err = gpgme_op_export (ctx, patt, 0, dat);
+ if (err) {
+ gpgme_data_release (dat);
+ return err;
+ }
+ p = gpgme_data_release_and_get_mem (dat, &n);
+
+ *outdata = new char[n+1];
+ memcpy (*outdata, p, n);
+ (*outdata)[n] = 0;
+ gpgme_free (p);
+
+ return err;
+}
Modified: trunk/Src/wptGPGUtil.cpp
===================================================================
--- trunk/Src/wptGPGUtil.cpp 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/wptGPGUtil.cpp 2006-01-09 09:15:29 UTC (rev 133)
@@ -1,6 +1,6 @@
/* wptGPGUtil.cpp - GPG util functions
+ * Copyright (C) 2005, 2006 Timo Schulz
* Copyright (C) 2005 g10 Code GmbH
- * Copyright (C) 2005 Timo Schulz
*
* This file is part of WinPT.
*
@@ -199,7 +199,14 @@
return result;
}
+static char*
+read_gpg_program (void)
+{
+ return read_w32_registry (HKEY_CURRENT_USER,
+ "Software\\GNU\\GnuPG", "gpgProgram");
+}
+
/* Create a temp file based on the name of @name.
Return value: handle to the file in case of success. */
static HANDLE
@@ -256,7 +263,7 @@
/* Map the contents of the file handle @out to
a buffer and return it. */
static char*
-map_tmpfile (HANDLE out)
+map_tmpfile (HANDLE out, DWORD *nread)
{
DWORD n;
char *p;
@@ -269,6 +276,8 @@
BUG (NULL);
ReadFile (out, p, n, &n, NULL);
p[n] = 0;
+ if (nread)
+ *nread = n;
return p;
}
@@ -279,19 +288,21 @@
will be read from @in.
Return value: 0 on success. */
static int
-create_process (const char *cmd, HANDLE in, HANDLE out)
+create_process (const char *cmd, HANDLE in, HANDLE out, HANDLE err)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
memset (&si, 0, sizeof (si));
si.cb = sizeof si;
- if (in || out)
+ if (in || out || err)
si.dwFlags = STARTF_USESTDHANDLES;
if (out)
si.hStdOutput = out;
if (in)
si.hStdInput = in;
+ if (err)
+ si.hStdError = err;
si.dwFlags |= STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
if (!CreateProcess (NULL, (char*)cmd, NULL, NULL, TRUE, 0,
@@ -316,8 +327,7 @@
char *p;
char *cmd;
- p = read_w32_registry (HKEY_CURRENT_USER,
- "Software\\GNU\\GnuPG", "gpgProgram");
+ p = read_gpg_program ();
if (!p)
return gpg_error (GPG_ERR_INV_ARG);
cmd = (char*)calloc (1, strlen (p) + strlen (keyid)
@@ -326,7 +336,7 @@
BUG (NULL);
sprintf (cmd, "%s --yes --output \"%s\" --export-secret-key %s",
p, outfile, keyid);
- if (create_process (cmd, NULL, NULL))
+ if (create_process (cmd, NULL, NULL, NULL))
err = gpg_error (GPG_ERR_INTERNAL);
if (stat (outfile, &st) == -1 || st.st_size == 0)
@@ -349,8 +359,7 @@
char *p;
char *cmd;
- p = read_w32_registry (HKEY_CURRENT_USER,
- "Software\\GNU\\GnuPG", "gpgProgram");
+ p = read_gpg_program ();
if (!p)
return gpg_error (GPG_ERR_INV_ARG);
@@ -369,7 +378,7 @@
FlushFileBuffers (in);
/* XXX: need a rewind? */
}
- if (create_process (cmd, in, out))
+ if (create_process (cmd, in, out, NULL))
err = gpg_error (GPG_ERR_INTERNAL);
free (p);
@@ -378,7 +387,7 @@
if (in)
CloseHandle (in);
if (out) {
- *data = map_tmpfile (out);
+ *data = map_tmpfile (out, NULL);
CloseHandle (out);
}
@@ -395,8 +404,7 @@
char *p;
char *cmd;
- p = read_w32_registry (HKEY_CURRENT_USER,
- "Software\\GNU\\GnuPG", "gpgProgram");
+ p = read_gpg_program ();
if (!p)
return gpg_error (GPG_ERR_INV_ARG);
cmd = (char*)calloc (1, strlen (p) + 64);
@@ -407,11 +415,11 @@
if (r_inf)
out = create_tmpfile ("gpg_rebuild_cache");
- if (create_process (cmd, NULL, out))
+ if (create_process (cmd, NULL, out, NULL))
err = gpg_error (GPG_ERR_INTERNAL);
if (r_inf)
- *r_inf = map_tmpfile (out);
+ *r_inf = map_tmpfile (out, NULL);
if (out)
CloseHandle (out);
free (p);
@@ -428,8 +436,7 @@
HANDLE out;
char *p, *cmd;
- p =read_w32_registry (HKEY_CURRENT_USER,
- "Software\\GNU\\GnuPG", "gpgProgram");
+ p = read_gpg_program ();
if (!p)
return gpg_error (GPG_ERR_INV_ARG);
cmd = (char*)calloc (1, strlen (p) + 32);
@@ -438,13 +445,13 @@
sprintf (cmd, "%s --version", p);
out = create_tmpfile ("gpg_out");
- if (create_process (cmd, NULL, out))
+ if (create_process (cmd, NULL, out, NULL))
err = gpg_error (GPG_ERR_INTERNAL);
free (p);
free (cmd);
- *r_inf = map_tmpfile (out);
+ *r_inf = map_tmpfile (out, NULL);
CloseHandle (out);
return err;
}
@@ -459,8 +466,7 @@
char *cmd, *p;
HANDLE out;
- p = read_w32_registry (HKEY_CURRENT_USER,
- "Software\\GNU\\GnuPG", "gpgProgram");
+ p = read_gpg_program ();
if (!p)
return gpg_error (GPG_ERR_INV_ARG);
@@ -470,13 +476,13 @@
sprintf (cmd, "%s --fixed-list-mode --with-colons \"%s\"", p, fname);
out = create_tmpfile ("gpg_keys");
- if (create_process (cmd, NULL, out))
+ if (create_process (cmd, NULL, out, NULL))
err = gpg_error (GPG_ERR_INTERNAL);
free (p);
free (cmd);
- *r_out = map_tmpfile (out);
+ *r_out = map_tmpfile (out, NULL);
CloseHandle (out);
return err;
}
@@ -521,8 +527,7 @@
char *cmd, *p;
HANDLE in, out;
- p = read_w32_registry (HKEY_CURRENT_USER,
- "Software\\GNU\\GnuPG", "gpgProgram");
+ p = read_gpg_program ();
if (!p)
return gpg_error (GPG_ERR_INV_ARG);
@@ -534,12 +539,12 @@
in = create_in_pipe (inp_data);
out = create_tmpfile ("gpg_revcert");
- if (create_process (cmd, in, out)) {
+ if (create_process (cmd, in, out, NULL)) {
*r_revcert = NULL;
err = gpg_error (GPG_ERR_INTERNAL);
}
else {
- rcrt = map_tmpfile (out);
+ rcrt = map_tmpfile (out, NULL);
*r_revcert = rcrt;
if (rcrt && strlen (rcrt) == 0)
err = gpg_error (GPG_ERR_BAD_PASSPHRASE);
@@ -554,6 +559,49 @@
}
+/* Return the raw photo-id data combined with the status-fd
+ entry in @r_data. If @keyid is set, only the data for this
+ key will be returned.
+ Return value: 0 on success. */
+gpgme_error_t
+gpg_get_photoid_data (const char *keyid, char **r_status_data,
+ unsigned char **r_data, unsigned long *ndata)
+{
+ gpgme_error_t err = gpg_error (GPG_ERR_NO_ERROR);
+ HANDLE herr, hdat;
+ char *p, *cmd;
+ DWORD n;
+
+ p = read_gpg_program ();
+ if (!p)
+ return gpg_error (GPG_ERR_INV_ARG);
+ n = strlen (p) + 128;
+ if (keyid)
+ n += strlen (keyid) + 1;
+ cmd = (char*)calloc (1, n+1);
+ if (!cmd)
+ BUG (NULL);
+ hdat = create_tmpfile ("gpg_uat_data");
+ herr = create_tmpfile ("gpg_uat_status");
+ /* XXX: add --list-options show-unsuable-uid to display
+ revoked attribute IDs */
+ sprintf (cmd, "%s --attribute-fd=%d --status-fd=2 --list-keys %s",
+ p, (int)hdat, keyid? keyid : "");
+ if (create_process (cmd, NULL, NULL, herr))
+ err = gpg_error (GPG_ERR_INTERNAL);
+
+ free (p);
+ free (cmd);
+
+ *r_data = (BYTE*)map_tmpfile (hdat, ndata);
+ *r_status_data = map_tmpfile (herr, NULL);
+ CloseHandle (hdat);
+ CloseHandle (herr);
+
+ return err;
+}
+
+
/* Return the validity of the user attribute, informerly known
as photo-ID. If no uat was found, return 0 for unknown. */
gpgme_error_t
@@ -565,8 +613,7 @@
char *uat;
*r_valid = GPGME_VALIDITY_UNKNOWN;
- p = read_w32_registry (HKEY_CURRENT_USER,
- "Software\\GNU\\GnuPG", "gpgProgram");
+ p = read_gpg_program ();
if (!p)
return gpg_error (GPG_ERR_INV_ARG);
@@ -577,13 +624,13 @@
p, keyid);
out = create_tmpfile ("gpg_keys");
- if (create_process (cmd, NULL, out))
+ if (create_process (cmd, NULL, out, NULL))
err = gpg_error (GPG_ERR_INTERNAL);
free (p);
free (cmd);
- p = map_tmpfile (out);
+ p = map_tmpfile (out, NULL);
if ((uat = strstr (p, "uat:"))) {
switch (*(uat+4)) {
case 'm': *r_valid = GPGME_VALIDITY_MARGINAL; break;
Modified: trunk/Src/wptKeyCache.cpp
===================================================================
--- trunk/Src/wptKeyCache.cpp 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/wptKeyCache.cpp 2006-01-09 09:15:29 UTC (rev 133)
@@ -1,5 +1,5 @@
/* wptKeyCache.cpp- Caching for the pub- and the secring
- * Copyright (C) 2001-2005 Timo Schulz
+ * Copyright (C) 2001-2006 Timo Schulz
*
* This file is part of MyGPGME.
*
@@ -35,24 +35,121 @@
#include "wptNLS.h"
#include "wptErrors.h"
#include "wptW32API.h"
+#include "wptGPG.h"
-#if 0
-/* convert a binary buffer into its hex representation. */
-static void
-buffer_to_string (char *dst, size_t dlen, const byte *buf, size_t nbytes)
+/* Attribute list which holds the image data. */
+struct attr_list_s {
+ struct attr_list_s *next;
+ char *fpr; /* fingerprint of the key */
+ unsigned char *d; /* actual JPEG data. */
+ unsigned long octets; /* length of the data. */
+ unsigned int flags; /* status of the attribute. */
+};
+typedef struct attr_list_s *attr_list_t;
+
+
+void
+free_attr_list (attr_list_t ctx)
{
- char dig[3];
- size_t i;
+ attr_list_t n;
+ while (ctx) {
+ n = ctx->next;
+ free (ctx->fpr);
+ free (ctx->d);
+ ctx = n;
+ }
+}
+
+/* Parse the attribute list in @fp and store it into @ctx.
+ Return value: number of parsed items. */
+int
+parse_attr_list (FILE *fp, const BYTE *data, DWORD datlen, attr_list_t *ctx)
+{
+ attr_list_t c, t;
+ char buf[512], *p, *buffer;
+ int pos, n=0;
+
+ *ctx = NULL;
+ while (fgets (buf, 511, fp)) {
+ if (strstr (buf, "\r\n"))
+ buf[strlen (buf)-2]=0;
+ if (strstr (buf, "\n"))
+ buf[strlen (buf)-1]=0;
+ if (strlen (buf) < 2 || !strstr (buf, "ATTRIBUTE"))
+ continue;
+ buffer = buf+9+10;
+ pos = 0;
+ c = (attr_list_t)calloc (1, sizeof *c);
+ p = strtok (buffer, " ");
+ while (p != NULL) {
+ switch (pos) {
+ case 0:
+ c->fpr = strdup (p);
+ break;
+
+ case 1:
+ c->octets = strtoul (p, NULL, 10);
+ break;
+
+ case 7:
+ c->flags = strtoul (p, NULL, 10);
+ break;
+
+ default:
+ break;
+ }
+ pos++;
+ p = strtok (NULL, " ");
+ }
+ /*printf ("id=%s octets=%d flags=%d\n", c->fpr, c->octets, c->flags);*/
+ if (!*ctx)
+ *ctx = c;
+ else {
+ for (t = *ctx; t->next; t=t->next)
+ ;
+ t->next = c;
+ }
+ c->d = (unsigned char*)malloc (c->octets);
+ memcpy (c->d, data, c->octets);
+ data += c->octets;
+ datlen -= c->octets;
+ n++;
+ }
+ /*assert (datlen == 0); */
+ return n;
+}
- memset (dst, 0, dlen);
- for (i = 0; i < nbytes && dlen > 0; i++) {
- sprintf (dig, "%02X", buf[i]);
- strcat (dst, dig);
- dlen -= 2;
+
+static int
+parse_attr_data (const char *keyid, attr_list_t *list)
+{
+ gpgme_error_t err;
+ FILE *tmp;
+ char *status;
+ BYTE *data;
+ DWORD ndata;
+
+ err = gpg_get_photoid_data (keyid, &status, &data, &ndata);
+ if (err)
+ return err;
+
+ if (ndata > 0) {
+ tmp = tmpfile ();
+ fwrite (status, 1, strlen (status), tmp);
+ fflush (tmp);
+ rewind (tmp);
+
+ ndata = parse_attr_list (tmp, data, ndata, list);
+ fclose (tmp);
}
+ else
+ *list = NULL;
+
+ safe_free (status);
+ safe_free (data);
+ return ndata;
}
-#endif
/* Parse the secret keyring and retrieve some additional information
@@ -60,7 +157,7 @@
static void
parse_secring (gpg_keycache_t cache, const char *kid, const char *secring)
{
- PACKET *pkt = (PACKET*)calloc (1, sizeof *pkt);
+ PACKET *pkt;
PKT_secret_key *sk;
gpg_iobuf_t inp;
gpgme_error_t err;
@@ -69,11 +166,11 @@
char keyid[16+1];
inp = gpg_iobuf_open (secring);
- if (!inp) {
- safe_free (pkt);
+ if (!inp)
return;
- }
+
gpg_iobuf_ioctl (inp, 3, 1, NULL);
+ pkt = (PACKET*)calloc (1, sizeof *pkt);
gpg_init_packet (pkt);
while (gpg_parse_packet (inp, pkt) != -1) {
if (pkt->pkttype == PKT_SECRET_KEY) {
@@ -102,6 +199,46 @@
}
+/* Update the photo image of a single key with the fingerprint
+ @fpr. The @dat struct contains the new item data. */
+static gpgme_error_t
+keycache_update_photo (gpg_keycache_t ctx, const char *fpr, attr_list_t dat)
+{
+ struct keycache_s *fnd = NULL;
+ gpgme_key_t key;
+
+ gpg_keycache_find_key2 (ctx, fpr, 0, &key, &fnd);
+ if (!fnd)
+ return gpg_error (GPG_ERR_NOT_FOUND);
+ safe_free (fnd->attrib.d);
+ fnd->attrib.flags = dat->flags;
+ fnd->attrib.len = dat->octets;
+ fnd->attrib.d = (unsigned char*)malloc (dat->octets);
+ memcpy (fnd->attrib.d, dat->d, dat->octets);
+ return 0;
+}
+
+
+/* Update all photo images in the cache. */
+static gpgme_error_t
+keycache_update_photos (gpg_keycache_t ctx)
+{
+ attr_list_t list=NULL, n;
+ DWORD ndata;
+
+ ndata = parse_attr_data (NULL, &list);
+ if (ndata < 1) {
+ free_attr_list (list);
+ return 0;
+ }
+
+ for (n=list; n; n=n->next)
+ keycache_update_photo (ctx, n->fpr, n);
+ free_attr_list (list);
+ return 0;
+}
+
+
/* Merge the information from the keyrings into the key cache structure. */
gpgme_error_t
keycache_prepare2 (gpg_keycache_t ctx, const char *kid,
@@ -110,27 +247,24 @@
gpgme_error_t err = gpg_error (GPG_ERR_NO_ERROR);
gpgme_key_t key = NULL;
gpg_iobuf_t inp;
- PACKET *pkt = (PACKET*)calloc (1, sizeof * pkt);
+ PACKET *pkt;
struct keycache_s *c;
const byte *sym_prefs;
- char keyid[16+1], *id = NULL;
+ char keyid[16+1];
int key_seen = 0;
size_t nsym =0;
if (secring) {
parse_secring (ctx, kid, secring);
- if (!pubring) {
- safe_free (pkt);
+ if (!pubring)
return 0;
- }
}
inp = gpg_iobuf_open (pubring);
- if (!inp) {
- safe_free (pkt);
+ if (!inp)
return gpg_error (GPG_ERR_KEYRING_OPEN);
- }
gpg_iobuf_ioctl (inp, 3, 1, NULL); /* disable cache */
+ pkt = (PACKET*)calloc (1, sizeof * pkt);
gpg_init_packet (pkt);
while (gpg_parse_packet (inp, pkt) != -1) {
if (pkt->pkttype == PKT_PUBLIC_KEY) {
@@ -138,10 +272,12 @@
key_seen = 1;
}
- if (pkt->pkttype == PKT_SIGNATURE && pkt->pkt.signature->sig_class == 0x1F) {
+ if (pkt->pkttype == PKT_SIGNATURE &&
+ pkt->pkt.signature->sig_class == 0x1F) {
if (pkt->pkt.signature->numrevkeys == 0)
goto next;
- _snprintf (keyid, sizeof keyid -1, "%08X", pkt->pkt.signature->keyid[1]);
+ _snprintf (keyid, sizeof (keyid) -1, "%08X",
+ pkt->pkt.signature->keyid[1]);
if (kid && strcmp (kid, keyid) != 0)
goto next;
err = gpg_keycache_find_key2 (ctx, keyid, 0, &key, &c);
@@ -150,11 +286,12 @@
c->gloflags.has_desig_rev = 1;
}
if (pkt->pkttype == PKT_SIGNATURE && key_seen == 1 ) {
- sym_prefs=gpg_parse_sig_subpkt (pkt->pkt.signature->hashed,
- SIGSUBPKT_PREF_SYM, &nsym);
- if (sym_prefs == NULL)
+ sym_prefs = gpg_parse_sig_subpkt (pkt->pkt.signature->hashed,
+ SIGSUBPKT_PREF_SYM, &nsym);
+ if (!sym_prefs)
goto next;
- _snprintf (keyid, sizeof keyid - 1, "%08X", pkt->pkt.signature->keyid[1]);
+ _snprintf (keyid, sizeof (keyid) - 1, "%08X",
+ pkt->pkt.signature->keyid[1]);
if (kid && strcmp (kid, keyid) != 0)
goto next;
err = gpg_keycache_find_key2 (ctx, keyid, 0, &key, &c);
@@ -167,36 +304,11 @@
memcpy (c->sym_prefs, sym_prefs, nsym);
}
}
- if (pkt->pkttype == PKT_USER_ID) {
- if (id)
- free (id);
- id = strdup (pkt->pkt.user_id->name);
- if (!id) {
- err = gpg_error (GPG_ERR_ENOMEM);
- goto fail;
- }
- }
- if ((pkt->pkttype == PKT_USER_ID || pkt->pkttype == PKT_ATTRIBUTE)
- && pkt->pkt.user_id->attrib_data && key) {
- PKT_user_id *uid = pkt->pkt.user_id;
- c->attrib.used = 1;
- c->attrib.len = uid->attrib_len;
- c->attrib.d = (unsigned char*)calloc (1, uid->attrib_len + 1);
- if (!c->attrib.d) {
- err = gpg_error (GPG_ERR_ENOMEM);
- goto fail;
- }
- memcpy (c->attrib.d, uid->attrib_data, uid->attrib_len);
- key = NULL;
- c = NULL;
- }
next:
gpg_free_packet (pkt);
gpg_init_packet(pkt);
}
-fail:
- safe_free (id);
safe_free (pkt);
gpg_iobuf_close (inp);
return err;
@@ -251,18 +363,12 @@
c2 = c->next;
gpgme_key_release (c->key);
c->key = NULL;
- if (c->sym_prefs)
- free (c->sym_prefs);
- c->sym_prefs = NULL;
- if (c->attrib.d)
- free (c->attrib.d);
- c->attrib.d = NULL;
- if (c->card_type)
- free (c->card_type);
+ safe_free (c->sym_prefs);
+ safe_free (c->attrib.d);
+ safe_free (c->card_type);
free (c);
}
- if (ctx)
- free (ctx);
+ safe_free (ctx);
}
@@ -367,7 +473,7 @@
}
*r_key = NULL;
return gpg_error (GPG_ERR_INTERNAL);
-} /* keycache_find_key */
+}
gpgme_error_t
@@ -378,6 +484,23 @@
}
+/* Reload a photo image of a single key with the keyid @keyid.
+ Return value: 0 on success. */
+static gpgme_error_t
+keycache_reload_photo (gpg_keycache_t ctx, const char *keyid)
+{
+ attr_list_t list;
+
+ if (parse_attr_data (keyid, &list) < 1) {
+ free_attr_list (list);
+ return 0;
+ }
+ keycache_update_photo (ctx, list->fpr, list);
+ free_attr_list (list);
+ return 0;
+}
+
+
gpgme_error_t
gpg_keycache_update_key (gpg_keycache_t ctx, int is_sec,
void *opaque, const char *keyid)
@@ -406,6 +529,8 @@
log_debug ("keycache update: set public part %p\r\n", fndkey);
c->pubpart->key = fndkey;
}
+ /* XXX: this is also called for keys without a photo-id. */
+ keycache_reload_photo (ctx, keyid);
}
else {
log_debug ("keycache add: sync public part\r\n");
@@ -490,6 +615,7 @@
}
if (gpgme_err_code (err) == GPG_ERR_EOF)
err = gpg_error (GPG_ERR_NO_ERROR);
+ keycache_update_photos (ctx);
/* XXX: make sure the progress dialog is closed. */
gpgme_op_keylist_end (c);
gpgme_release (c);
Modified: trunk/Src/wptKeyEditDlgs.cpp
===================================================================
--- trunk/Src/wptKeyEditDlgs.cpp 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/wptKeyEditDlgs.cpp 2006-01-09 09:15:29 UTC (rev 133)
@@ -1,5 +1,5 @@
/* wptKeyEditDlgs.cpp - GPG key edit dialogs
- * Copyright (C) 2002-2005 Timo Schulz
+ * Copyright (C) 2002-2006 Timo Schulz
*
* This file is part of WinPT.
*
@@ -968,6 +968,8 @@
msg_box( dlg, _("Could not find key."), _("Key Edit"), MB_ERR );
return NULL;
}
+ if (!k->ctx)
+ k->ctx = key;
nkeys = count_subkeys (key);
if( !nkeys ) {
msg_box( dlg, _("No subkey(s) found."), _("Key Edit"), MB_ERR );
@@ -1756,6 +1758,7 @@
} /* uid_subclass_proc */
+/* Dialog box procedure for the edit key dialog. */
BOOL CALLBACK
keyedit_main_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
{
@@ -1796,7 +1799,7 @@
BUG( NULL );
}
}
- if (!k->key_pair) {
+ if (!k->key_pair || k->ctx->revoked) {
EnableWindow (GetDlgItem (dlg, IDC_KEYEDIT_CMD), FALSE);
EnableWindow (GetDlgItem (dlg, IDOK), FALSE);
}
@@ -1871,4 +1874,5 @@
break;
}
return FALSE;
-} /* keyedit_main_dlg_proc */
+}
+
Modified: trunk/Src/wptKeyManager.cpp
===================================================================
--- trunk/Src/wptKeyManager.cpp 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/wptKeyManager.cpp 2006-01-09 09:15:29 UTC (rev 133)
@@ -1,5 +1,5 @@
/* wptKeyManager.cpp - Handy functions for the Key Manager dialog
- * Copyright (C) 2001-2005 Timo Schulz
+ * Copyright (C) 2001-2006 Timo Schulz
* Copyright (C) 2005 g10 Code GmbH
*
* This file is part of WinPT.
@@ -48,6 +48,7 @@
#include "wptImport.h"
#include "wptCrypto.h"
#include "wptUTF8.h"
+#include "wptGPGME.h"
/* Macros to change the cursor */
@@ -371,10 +372,9 @@
int
km_file_export (HWND dlg, listview_ctrl_t lv, const char *fname)
{
+ GPGME *ctx;
gpgme_key_t *rset;
- gpgme_data_t keydata;
gpgme_error_t err;
- gpgme_ctx_t ctx;
char *patt;
int n;
@@ -384,34 +384,22 @@
_("Key Manager"), MB_ERR);
return WPTERR_GENERAL;
}
-
- err = gpgme_data_new (&keydata);
- if (err)
- BUG (NULL);
- err = gpgme_new (&ctx);
- if (err)
- BUG (NULL);
- gpgme_set_armor (ctx, 1);
-
- /*gpgme_set_comment (ctx, "Generated by WinPT "PGM_VERSION);*/
patt = gpg_keylist_to_pattern (rset, n);
-
- err = gpgme_op_export (ctx, patt, 0, keydata);
- if( err ) {
+
+ ctx = new GPGME ();
+ ctx->setArmor (true);
+ err = ctx->exportToFile (patt, fname);
+ if (err) {
msg_box (dlg, gpgme_strerror (err), _("Key Manager"), MB_ERR);
goto leave;
}
-
- log_box (_("Key Manager"), MB_OK,
- _("Key(s) successfully saved in '%s'."), fname);
+ else
+ log_box (_("Key Manager"), MB_OK,
+ _("Key(s) successfully saved in '%s'."), fname);
leave:
- err = gpg_data_release_and_set_file (keydata, fname);
- if (err)
- log_box (_("Key Manager"), MB_OK,
- _("Could not save data to '%s'."), fname);
- gpgme_release (ctx);
- free (patt);
+ delete ctx;
+ safe_free (patt);
return (int)err;
}
@@ -615,7 +603,6 @@
gpgme_ctx_t ctx;
gpgme_key_t *rset;
gpgme_key_t key;
- char keyid[32];
char *p;
int with_seckey=0, seckey_type=0, confirm=0;
int i, rc, n, k_pos=0;
@@ -636,8 +623,10 @@
else
confirm = 1;
+ /* n = total amount of keys, i is the selected amount. */
n = listview_count_items (lv, 0);
- rset = (gpgme_key_t *)calloc (n+1, sizeof (gpgme_key_t));
+ i = listview_count_items (lv, 1);
+ rset = (gpgme_key_t *)calloc (i+1, sizeof (gpgme_key_t));
if (!rset)
BUG (NULL);
for (i = 0; i < n; i++) {
@@ -648,7 +637,7 @@
seckey_type = km_check_for_seckey (lv, i, NULL);
if (confirm && !seckey_type) {
p = key_get_info (key, 0);
- rc = log_box( _("Key Manager"), MB_YESNO|MB_ICONWARNING,
+ rc = log_box (_("Key Manager"), MB_YESNO|MB_ICONWARNING,
_("Do you really want to delete this key?\n\n"
"%s"), p);
if (rc == IDYES)
@@ -664,7 +653,7 @@
"messages you stored with this key any longer.\n"
"\n"
"%s"), p);
- if( rc == IDYES ) {
+ if (rc == IDYES) {
if (seckey_type == 2)
msg_box (dlg, _("The actual secret key is stored on a smartcard.\n"
"Only the public key and the secret key \n"
@@ -677,7 +666,6 @@
}
else {
with_seckey = 1;
- get_pubkey (keyid, &key);
rset[k_pos++] = key;
}
}
@@ -784,12 +772,15 @@
gpgme_set_armor (ctx, 1);
rc = gpgme_op_export (ctx, key->subkeys->keyid, 0, out);
- if (rc)
+ if (rc) {
+ gpgme_data_release (out);
msg_box (dlg, gpgme_strerror (rc), _("Key Manager"), MB_ERR);
- else
+ }
+ else {
+ gpg_data_release_and_set_file (out, fname);
mapi_send_pubkey (key->subkeys->keyid+8, fname);
+ }
- gpg_data_release_and_set_file (out, fname);
gpgme_release (ctx);
safe_free (name);
free_if_alloc (fname);
@@ -798,7 +789,7 @@
static void
-km_refresh_one_key (listview_ctrl_t lv, HWND dlg, int pos)
+km_refresh_one_key (listview_ctrl_t lv, HWND dlg, int pos, int flags)
{
gpgme_key_t key;
int idx;
@@ -809,38 +800,39 @@
idx = listview_get_curr_pos (lv);
if (idx != -1) {
key = (gpgme_key_t)listview_get_item2 (lv, idx);
+ if (!key)
+ BUG (0);
hkp_recv_key (dlg, default_keyserver, default_keyserver_port,
- key->subkeys->keyid+8, 0, KM_KS_REFRESH);
+ key->subkeys->keyid+8, 0, flags);
}
}
-/* Refresh all keys from the default keyserver. */
+/* Refresh the selected keys from the default keyserver. */
void
km_refresh_from_keyserver (listview_ctrl_t lv, HWND dlg)
{
- int idx, id, i;
+ int cnt, id, i;
if (kserver_check_inet_connection ()) {
msg_box (dlg, _("Could not connect to keyserver, abort procedure."),
_("Key Manager"), MB_ERR);
return;
}
- idx = listview_count_items (lv, 0);
- if (listview_count_items (lv, 1) == idx) {
- id = msg_box (dlg, _("Do you really want to refresh all keys in the keyring?"),
+
+ cnt = listview_count_items (lv, 0);
+ if (listview_count_items (lv, 1) == cnt) {
+ id = msg_box (dlg, _("Do you really want to refresh all keys in the keyring?"),
_("Key Manager"), MB_YESNO);
if (id == IDNO)
return;
- for (i = 0; i < idx; i++)
- km_refresh_one_key (lv, dlg, i);
}
- else if (idx == 1)
- km_refresh_one_key (lv, dlg, 0);
+ if (listview_count_items (lv, 1) == 1)
+ km_refresh_one_key (lv, dlg, listview_get_curr_pos (lv), 0);
else {
- for (i=0; i < listview_count_items (lv, 0); i++) {
+ for (i=0; i < cnt; i++) {
if (listview_get_item_state (lv, i))
- km_refresh_one_key (lv, dlg, i);
+ km_refresh_one_key (lv, dlg, i, KM_KS_REFRESH);
}
}
}
Modified: trunk/Src/wptKeyManagerDlg.cpp
===================================================================
--- trunk/Src/wptKeyManagerDlg.cpp 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/wptKeyManagerDlg.cpp 2006-01-09 09:15:29 UTC (rev 133)
@@ -626,8 +626,8 @@
}
-#define enable_button(hwnd, cid) \
- SendMessage ((hwnd), TB_ENABLEBUTTON, (cid), MAKELONG (key_selected, 0))
+#define enable_button(hwnd, cid, item_selected) \
+ SendMessage ((hwnd), TB_ENABLEBUTTON, (cid), MAKELONG ((item_selected), 0))
/* Interactive modification of the dialog item which depend if an item
@@ -636,15 +636,15 @@
void
update_ui_items (HWND hwnd, listview_ctrl_t lv)
{
- HWND hwnd_child;
+ HWND tb_hwnd;
HMENU hmenu;
+ int mult_resids[] = {ID_KEYMISC_PROPS, ID_KEYMISC_SIGN, ID_KEYMISC_EDITKEY,
+ ID_KEYMISC_CHECKSIGS, ID_KEYMISC_REVCERT, 0};
int key_selected = 0;
int key_has_sec = 0;
int key_inv = 0;
- int mult_resids[] = {ID_KEYMISC_PROPS, ID_KEYMISC_SIGN, ID_KEYMISC_EDITKEY,
- ID_KEYMISC_CHECKSIGS, ID_KEYMISC_REVCERT, 0};
int i, state=0;
-
+
/* Get some states */
key_selected = SendMessage (GetDlgItem (hwnd, IDC_KEYMISC_KEYLIST),
LVM_GETSELECTEDCOUNT, 0, 0)
@@ -658,11 +658,11 @@
}
/* Enable / disable toolbar buttons */
- hwnd_child = GetDlgItem (hwnd, IDR_WINPT_KMTB);
- enable_button (hwnd_child, ID_KEYMISC_DELETE);
- enable_button (hwnd_child, ID_KEYMISC_PROPS);
- enable_button (hwnd_child, ID_KEYMISC_SIGN);
- enable_button (hwnd_child, ID_KEYMISC_EXPORT);
+ tb_hwnd = GetDlgItem (hwnd, IDR_WINPT_KMTB);
+ enable_button (tb_hwnd, ID_KEYMISC_DELETE, key_selected);
+ enable_button (tb_hwnd, ID_KEYMISC_PROPS, key_selected);
+ enable_button (tb_hwnd, ID_KEYMISC_SIGN, key_selected && !key_inv);
+ enable_button (tb_hwnd, ID_KEYMISC_EXPORT, key_selected);
/* Enable / disable menu items */
state = key_selected? MF_ENABLED : MF_DISABLED|MF_GRAYED;
@@ -684,6 +684,15 @@
for (i=0; mult_resids[i] != 0; i++)
set_menu_state (hmenu, mult_resids[i], MF_GRAYED);
}
+
+ /* Disable all secret-key functions when no secret key is available. */
+ {
+ gpg_keycache_t sec = keycache_get_ctx (0);
+ if (gpg_keycache_get_size (sec) == 0) {
+ enable_button (tb_hwnd, ID_KEYMISC_SIGN, FALSE);
+ set_menu_state (hmenu, ID_KEYMISC_SIGN, MF_GRAYED);
+ }
+ }
}
@@ -1213,7 +1222,8 @@
set_menu_state (popup, ID_KEYCTX_SETDEFKEY, MF_ENABLED);
if (i == 0)
set_menu_state (popup, ID_KEYCTX_MAXTRUST, MF_ENABLED);
- if (!km_check_for_seckey (kmi->lv, l_idx, NULL)) {
+ if (!km_check_for_seckey (kmi->lv, l_idx, NULL) ||
+ (km_get_key_status (kmi->lv, l_idx) & KM_FLAG_REVOKED)) {
set_menu_state (popup, ID_KEYCTX_REV, MF_DISABLED|MF_GRAYED);
set_menu_state (popup, ID_KEYCTX_ADDKEY, MF_DISABLED|MF_GRAYED);
set_menu_state (popup, ID_KEYCTX_ADDUID, MF_DISABLED|MF_GRAYED);
Modified: trunk/Src/wptKeyPropsDlg.cpp
===================================================================
--- trunk/Src/wptKeyPropsDlg.cpp 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/wptKeyPropsDlg.cpp 2006-01-09 09:15:29 UTC (rev 133)
@@ -112,13 +112,13 @@
draw_nophoto_img (dlg);
return -1;
}
+
f = fopen (get_photo_tmpname (dlg), "wb");
if (f) {
- for (pos = 0; img[pos] != 0x10; pos++)
- ;
+ //for (pos = 0; img[pos] != 0x10; pos++)
+ // ;
pos += 16;
fwrite (img + pos, 1, imglen - pos, f);
- fwrite (img, 1, imglen, f);
fclose (f);
}
return 0;
Modified: trunk/Src/wptKeylist.cpp
===================================================================
--- trunk/Src/wptKeylist.cpp 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/wptKeylist.cpp 2006-01-09 09:15:29 UTC (rev 133)
@@ -1,5 +1,5 @@
/* wptKeylist.cpp - Keylist element
- * Copyright (C) 2001-2005 Timo Schulz
+ * Copyright (C) 2001-2006 Timo Schulz
* Copyright (C) 2004 Andreas Jobs
*
* This file is part of WinPT.
@@ -38,8 +38,9 @@
#include "wptUTF8.h"
#include "wptRegistry.h"
#include "wptContext.h"
+#include "wptVersion.h"
+#include "resource.h"
-
#define key_is_useable(key) (!(key)->revoked && !(key)->expired && !(key)->disabled)
struct key_array_s {
@@ -51,42 +52,42 @@
static key_array_s*
-key_array_new( size_t items )
+key_array_new (int items)
{
key_array_s *ka;
- size_t j;
+ int j;
- if( items == 0 )
+ if (items == 0)
return NULL;
ka = new key_array_s[items + 1];
- if( ka == NULL )
- return NULL;
- for ( j = 0; j < items; j++ )
+ if (!ka)
+ BUG (NULL);
+ for (j = 0; j < items; j++)
ka[j].checked = 0;
return ka;
-} /* key_array_new */
+}
static void
-key_array_release( key_array_s *ka )
+key_array_release (key_array_s *ka)
{
- free_if_alloc( ka );
-} /* key_array_release */
+ free_if_alloc (ka);
+}
+/* Check if the keyid @keyid is in the key array @ka.
+ Return value: 1 if it exists, 0 otherwise. */
static int
-key_array_search( key_array_s *ka, size_t items, const char *keyid )
+key_array_search (key_array_s *ka, int items, const char *keyid)
{
- size_t j;
+ int j;
- /* fixme: we need a faster search method */
- for( j = 0; j < items; j++ ) {
- if( !strcmp( keyid, ka[j].keyid ) )
+ for (j = 0; j < items; j++) {
+ if (!strcmp (keyid, ka[j].keyid ))
return 1;
}
-
return 0;
-} /* key_array_search */
+}
gpgme_user_id_t
@@ -151,14 +152,20 @@
}
+/* Return the self signature of the key @keyid.
+ If first is set, the first self sig will be returned. */
gpgme_key_sig_t
get_selfsig (gpgme_user_id_t uid, const char *keyid, int first)
{
gpgme_key_sig_t s, self_sig=NULL;
long timestamp=0;
+ int off = 0;
+ if (strlen (keyid) == 8)
+ off = 8;
+
for (s = uid->signatures; s; s = s->next) {
- if (!strcmp (s->keyid+8, keyid) && s->timestamp > timestamp) {
+ if (!strcmp (s->keyid+off, keyid) && s->timestamp > timestamp) {
self_sig = s;
timestamp = s->timestamp;
if (first)
@@ -182,7 +189,7 @@
if (keyidx > 0) {
k = get_nth_key (key, keyidx-1);
subalg = get_key_pubalgo (k->pubkey_algo);
- _snprintf( algo_id, DIM (algo_id)-1, "%s", subalg);
+ _snprintf (algo_id, DIM (algo_id)-1, "%s", subalg);
return algo_id;
}
strcpy (alg, get_key_pubalgo (key->subkeys->pubkey_algo));
@@ -194,17 +201,17 @@
return algo_id;
}
return get_key_pubalgo (key->subkeys->pubkey_algo);
-} /* get_key_algo */
+}
const char*
get_key_created (long timestamp)
{
static char timebuf[128];
- const char *dat;
struct tm *warp;
+ const char *dat;
- if (timestamp == 0 || timestamp == -1)
+ if (timestamp < 1)
return "????" "-??" "-??";
dat = get_locale_date (timestamp, timebuf, sizeof (timebuf)-1);
if (dat)
@@ -222,10 +229,14 @@
{
static char timebuf[64];
struct tm *warp;
+ const char *dat;
- if( !timestamp )
+ if (timestamp == 0)
return _("Never");
- warp = localtime( ×tamp );
+ dat = get_locale_date (timestamp, timebuf, sizeof (timebuf)-1);
+ if (dat)
+ return dat;
+ warp = localtime (×tamp);
_snprintf (timebuf, sizeof timebuf -1, "%04d-%02d-%02d",
warp->tm_year + 1900, warp->tm_mon + 1, warp->tm_mday);
return timebuf;
@@ -263,7 +274,8 @@
if (n > 1) {
k = get_nth_key (key, n-1);
size_sub = k->length;
- _snprintf( size_id, sizeof (size_id) - 1, "%d/%d", size_main, size_sub );
+ _snprintf (size_id, sizeof (size_id) - 1, "%d/%d",
+ size_main, size_sub);
return size_id;
}
_snprintf( size_id, sizeof (size_id) - 1, "%d", size_main );
@@ -283,6 +295,7 @@
return "?";
}
+
const char*
get_key_pubalgo (gpgme_pubkey_algo_t alg)
{
@@ -296,7 +309,7 @@
return "???";
}
-const char *
+const char*
get_key_fpr (gpgme_key_t key)
{
static char fpr_md[64];
@@ -328,7 +341,7 @@
}
-const char *
+const char*
get_key_trust2 (gpgme_key_t key, int val, int uididx, int listmode)
{
if (key)
@@ -384,7 +397,7 @@
else
s = "";
/* if the key has a special status, we don't continue to figure out
- what any user-id validities. */
+ the user-id validities. */
if (*s)
return m_strdup (s);
}
@@ -483,6 +496,7 @@
}
+#if 0
/* Return the validity of the group @grp. */
static const char*
calc_validity (gpg_group_t grp)
@@ -504,32 +518,14 @@
}
return _("Full");
}
+#endif
int
-keylist_add_groups( listview_ctrl_t lv )
+keylist_add_groups (listview_ctrl_t lv)
{
-#if 0
- gpg_optfile_t gh;
- gpg_group_t grp;
- const char *valid;
-
- gh = km_groupdb_open( );
- if( !gh )
- return WPTERR_FILE_OPEN;
-
- for( grp = gh->grp; grp; grp = grp->next ) {
- valid = calc_validity( grp );
- listview_add_item( lv, " " );
- listview_add_sub_item( lv, 0, 0, grp->name );
- listview_add_sub_item( lv, 0, 1, "gpg_group_t" );
- listview_add_sub_item( lv, 0, 2, "" );
- listview_add_sub_item( lv, 0, 3, "Unknown" );
- listview_add_sub_item( lv, 0, 4, valid?valid : "Unknown" );
- }
-#endif
return 0;
-} /* keylist_add_groups */
+}
/* Create a listview for listing keys. Use the mode given in @mode
@@ -545,7 +541,6 @@
{5, 70, (char *)_("Validity")},
{0, 0, NULL}
};
-
struct listview_column_s klist[] = {
{0, 240, (char *)_("User ID")},
{1, 78, (char *)_("Key ID")},
@@ -557,7 +552,7 @@
{7, 72, (char *)_("Creation")},
{0, 0, NULL}
};
-
+ HICON ico[2];
listview_ctrl_t lv;
listview_column_t col;
int j, n = 0;
@@ -581,11 +576,14 @@
n = (DIM(klist) - 1);
}
- for( j = 0; j < n; j++ )
- listview_add_column( lv, &col[j] );
- listview_set_ext_style( lv );
+ for (j = 0; j < n; j++)
+ listview_add_column (lv, &col[j]);
+ listview_set_ext_style (lv);
+ ico[0] = LoadIcon (glob_hinst, (LPCTSTR)IDI_PUBKEY);
+ ico[1] = LoadIcon (glob_hinst, (LPCTSTR)IDI_KEYPAIR);
+ listview_set_image_list (lv, ico, 2);
+
*r_lv = lv;
-
return 0;
}
@@ -694,15 +692,15 @@
key->uids->name, key->subkeys->keyid);
return 0;
}
-
if (listview_add_item2 (lv, " ", (void *)key))
return WPTERR_GENERAL;
attr = key->uids->uid;
memset (&lvi, 0, sizeof lvi);
- lvi.mask = LVIF_TEXT | LVIF_PARAM;
+ lvi.mask = LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE;
lvi.pszText = (char *)attr;
+ lvi.iImage = find_secret_key (key)? 1 : 0;
lvi.lParam = (LPARAM )key;
if (ListView_SetItem (lv->ctrl, &lvi) == FALSE)
return WPTERR_GENERAL;
@@ -714,11 +712,11 @@
else {
u = get_nth_userid (key, uididx);
if (!u || u->revoked || uididx < 0)
- uididx = 0; /* fixme: this happen sometimes but it's illegal! (<0) */
+ uididx = 0;
u = get_nth_userid (key, uididx);
attr = u->uid;
}
- if (attr == NULL || strlen (attr) < 5) { /* normal userids are >= 5 chars */
+ if (attr == NULL || strlen (attr) < 5) { /* normal userids are > 5 chars */
attr = _("Invalid User ID");
listview_add_sub_item (lv, 0, idx++, attr);
}
@@ -814,6 +812,7 @@
}
}
+
/* Update the listview item at position @pos with the data from
the key @key. */
void
@@ -924,7 +923,7 @@
}
return rc;
-} /* keylist_add_key */
+}
int
@@ -936,14 +935,16 @@
/* Check that the validity @validity is at least >= marginal. */
static int
-key_check_validity (const char *validity)
-{
- if (strstr (validity, _("Unknown")) ||
- strstr (validity, _("Undefined")) ||
- strstr (validity, _("Never")) ||
- strstr (validity, _("None")))
- return 0;
- return 1;
+key_check_validity (gpgme_key_t key)
+{
+ gpgme_user_id_t u;
+
+ for (u=key->uids; u; u =u->next) {
+ if (u->validity >= GPGME_VALIDITY_MARGINAL)
+ return -1;
+ }
+
+ return 0;
}
@@ -954,16 +955,15 @@
gpgme_key_t*
keylist_get_recipients (listview_ctrl_t lv, int *r_force_trust, int *r_count)
{
+ key_array_s *ka = NULL;
+ gpgme_key_t *keybuf, key;
int count = 0, force_trust = 0;
int n, j, ka_pos = 0, rc = 0;
int k_pos=0;
- char keyid[32], valid[32], id[100];
- key_array_s *ka = NULL;
- gpgme_key_t *keybuf;
- n = listview_count_items( lv, 0 );
+ n = listview_count_items (lv, 0);
- ka = key_array_new( n );
+ ka = key_array_new (n);
if (!ka)
BUG (NULL);
@@ -971,14 +971,14 @@
if (!keybuf)
BUG (NULL);
- for( j = 0; j < n; j++ ) {
- if( listview_get_item_state (lv, j) || n == 1) {
- listview_get_item_text (lv, j, 0, id, sizeof id-1);
- listview_get_item_text (lv, j, 1, keyid, sizeof keyid - 1);
- listview_get_item_text (lv, j, 4, valid, sizeof valid -1);
- if( !key_check_validity (valid)
- && !key_array_search( ka, ka_pos, keyid )) {
- char *warn = new char[512+strlen (id) + 1];
+ for (j = 0; j < n; j++) {
+ if (listview_get_item_state (lv, j) || n == 1) {
+ key = (gpgme_key_t)listview_get_item2 (lv, j);
+ if (!key)
+ BUG (0);
+ if (!key_check_validity (key) &&
+ !key_array_search (ka, ka_pos, key->subkeys->keyid)) {
+ char *warn = new char[512+strlen (key->uids->uid) + 1];
if (!warn)
BUG (0);
sprintf (warn,
@@ -986,27 +986,22 @@
"named in the user ID. If you *really* know what you are\n"
"doing, you may answer the next question with yes\n"
"\n"
- "Use \"%s\" anyway?"), id);
+ "Use \"%s\" anyway?"), key->uids->uid);
if (reg_prefs.always_trust)
rc = IDYES;
else
rc = msg_box (NULL, warn, _("Recipients"), MB_ERR_ASK);
if (rc == IDYES) {
- gpgme_key_t k;
- get_pubkey (keyid, &k);
- keybuf[k_pos++] = k;
+ keybuf[k_pos++] = key;
force_trust++;
ka[ka_pos].checked = 1;
- strcpy (ka[ka_pos++].keyid, keyid);
+ strcpy (ka[ka_pos++].keyid, key->subkeys->keyid);
count++;
}
free_if_alloc (warn);
}
else {
- gpgme_key_t k;
- listview_get_item_text( lv, j, 1, keyid, sizeof keyid -1 );
- get_pubkey (keyid, &k);
- keybuf[k_pos++] = k;
+ keybuf[k_pos++] = key;
count++;
}
}
@@ -1021,34 +1016,27 @@
static int
-keylist_get_keyflags (const char *buf, size_t buflen)
+keylist_get_keyflags (gpgme_key_t key)
{
- int c = 0, flags = 0;
+ int flags = KEYFLAG_NONE;
- if( *buf != '[' )
- return KEYFLAG_NONE;
- while (buf && c != ']')
- {
- c = *buf++;
- if (c == 'R')
- flags |= KEYFLAG_REVOKED;
- if (c == 'E')
- flags |= KEYFLAG_EXPIRED;
- if (c == 'D')
- flags |= KEYFLAG_DISABLED;
- }
+ if (key->revoked)
+ flags |= KEYFLAG_REVOKED;
+ if (key->expired)
+ flags |= KEYFLAG_EXPIRED;
+ if (key->disabled)
+ flags |= KEYFLAG_DISABLED;
return flags;
-} /* keylist_get_keyflags */
+}
gpgme_key_t*
keylist_enum_recipients (listview_ctrl_t lv, int listype, int *r_count)
{
- gpgme_key_t* rset;
- gpgme_key_t k;
+ gpgme_key_t *rset;
+ gpgme_key_t key;
int i, n, id, k_pos=0;
- char keyid[32], t[128], t2[128];
n = listview_count_items (lv, 0);
if (!n)
@@ -1056,33 +1044,33 @@
rset = (gpgme_key_t*)calloc (n, sizeof (gpgme_key_t));
if (!rset)
BUG (NULL);
- for( i = 0; i < n; i++ ) {
- if( !listview_get_item_state( lv, i ) )
+ for (i = 0; i < n; i++) {
+ if (!listview_get_item_state (lv, i))
continue;
- listview_get_item_text( lv, i, 1, keyid, sizeof keyid - 1 );
- switch( listype ) {
+ key = (gpgme_key_t)listview_get_item2 (lv, i);
+ if (!key)
+ BUG (0);
+ switch (listype) {
case KEYLIST_LIST:
- listview_get_item_text( lv, i, 5, t, sizeof t - 1 );
- if( keylist_get_keyflags( t, strlen( t ) ) & KEYFLAG_REVOKED ) {
- _snprintf( t2, sizeof t2 -1,
- _("KeyID %s.\nDo you really want to export a revoked key?"), keyid );
- id = msg_box( lv->ctrl, t2, _("Recipients"), MB_INFO|MB_YESNO );
- if( id == IDNO )
- continue;
+ if (keylist_get_keyflags (key) & KEYFLAG_REVOKED) {
+ id = printf_box (_("Recipients"), MB_INFO|MB_YESNO,
+ _("KeyID %s.\nDo you really want to export a revoked key?"),
+ key->uids->uid);
+ if (id == IDNO)
+ continue;
}
break;
}
- get_pubkey (keyid, &k);
- rset[k_pos++] = k;
+ rset[k_pos++] = key;
}
if (r_count)
*r_count = k_pos;
return rset;
-} /* keylist_enum_recipients */
+}
void
-seclist_destroy (keylist_t * list)
+seclist_destroy (keylist_t *list)
{
keylist_t l2;
while (*list) {
@@ -1091,7 +1079,7 @@
*list = l2;
}
list = NULL;
-} /* seclist_destroy */
+}
void
@@ -1129,11 +1117,11 @@
continue;
uid = utf8_to_wincp (id, strlen (id));
- size = strlen( uid ) + strlen( keyid ) + 32;
+ size = strlen (uid) + strlen (keyid) + 32;
inf = new char[size+1];
- if( !inf )
- BUG( NULL );
- _snprintf (inf, size, "%s (%s/0x%s)", uid,
+ if (!inf)
+ BUG (NULL);
+ _snprintf (inf, size, "%s (%s/0x%s)", uid,
get_key_pubalgo (key->subkeys->pubkey_algo), keyid + 8);
combox_add_string (kb, inf);
free_if_alloc (inf);
@@ -1150,9 +1138,10 @@
l2->next = l;
}
}
- for( pos = 0, l2=list; pos < SendMessage( kb, CB_GETCOUNT, 0, 0 ); pos++, l2=l2->next )
- SendMessage( kb, CB_SETITEMDATA, pos, (LPARAM)(DWORD)l2->key );
- SendMessage( kb, CB_SETCURSEL, 0, 0 );
+ for (pos = 0, l2=list; pos < SendMessage (kb, CB_GETCOUNT, 0, 0);
+ pos++, l2=l2->next)
+ SendMessage (kb, CB_SETITEMDATA, pos, (LPARAM)(DWORD)l2->key);
+ SendMessage (kb, CB_SETCURSEL, 0, 0);
*ret_list = list;
}
Modified: trunk/Src/wptKeyserver.cpp
===================================================================
--- trunk/Src/wptKeyserver.cpp 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/wptKeyserver.cpp 2006-01-09 09:15:29 UTC (rev 133)
@@ -1122,69 +1122,93 @@
}
+/* Spawn a process given by @cmdl. */
+static int
+spawn_application (char *cmdl)
+{
+ STARTUPINFO si;
+ PROCESS_INFORMATION pi;
+ int rc = 0;
+
+ memset (&si, 0, sizeof (si));
+ si.cb = sizeof (si);
+ si.dwFlags = STARTF_USESHOWWINDOW;
+ si.wShowWindow = SW_HIDE;
+ memset (&pi, 0, sizeof (pi));
+
+ if (!CreateProcess (NULL, cmdl, NULL, NULL, FALSE, 0,
+ NULL, NULL, &si, &pi)) {
+ log_box ("Keyserver Plugin", MB_ERR, "Could not spawn helper process");
+ rc = -1;
+ }
+
+ CloseHandle (pi.hThread);
+ WaitForSingleObject (pi.hProcess, INFINITE);
+ CloseHandle (pi.hProcess);
+ return rc;
+}
+
+
/* Receive an key via LDAP from host @host with the keyid @keyid.
@key contains the key on success. */
int
ldap_recvkey (const char *host, const char *keyid, char *key, int maxkeylen)
-{
+{
+ FILE *inp;
+ DWORD n;
const char *s;
- char *ksprg = NULL, *p = NULL;
+ char *ksprg = NULL, *p = NULL, *sep;
char temp[512], outf[512];
- FILE * inp;
- int rc, start_key = 0;
- STARTUPINFO si;
- PROCESS_INFORMATION pi;
+ int start_key = 0, failed = 0;
+ int rc = 0;
- p = get_gnupg_path ();
- ksprg = new char[strlen (p) + 1 + 128];
+ p = get_gnupg_prog ();
+ n = strlen (p) + 1 + 128;
+ ksprg = new char[n+1];
if (!ksprg)
BUG (0);
- strcpy (ksprg, p);
- strcat (ksprg, "\\");
- strcat (ksprg, "gpgkeys_ldap.exe");
+ sep = strrchr (p, '\\');
+ if (sep != NULL)
+ p[(sep-p)] = 0;
+
+ _snprintf (ksprg, n, "%s\\gpgkeys_ldap.exe", p);
free_if_alloc (p);
if (file_exist_check (ksprg)) {
- log_box ( "LDAP Keyserver Plugin", MB_ERR, "Could not find LDAP keyserver module!");
- rc = -1;
+ log_box ("LDAP Keyserver Plugin", MB_ERR,
+ "%s: could not find LDAP keyserver module!", ksprg);
+ rc = -1;
goto leave;
- }
+ }
GetTempPath (sizeof (temp)-1, temp);
- strcpy (outf, temp);
- strcat (outf, keyid);
- strcat (outf, ".out");
+ _snprintf (outf, sizeof (outf)-1, "%s%s.out", temp, keyid);
strcat (temp, keyid);
inp = fopen (temp, "w+b");
- if( !inp ) {
+ if (!inp) {
log_box ("LDAP Keyserver Plugin", MB_ERR, "%s: %s", temp,
winpt_strerror (WPTERR_FILE_OPEN));
rc = -1;
goto leave;
}
fprintf (inp,
- "VERSION 0\n"
+ "VERSION 1\n"
+ "PROGRAM 1.4.3-cvs\n"
+ "SCHEME ldap\n"
"HOST %s\n"
- "OPTION verbose\n"
"COMMAND GET\n"
"\n"
- "%s\n", host? skip_type_prefix (host): "64.94.85.200", keyid);
+ "%s\n",
+ host? skip_type_prefix (host): "64.94.85.200", keyid);
fclose (inp);
- memset (&si, 0, sizeof (si));
- si.cb = sizeof (si);
- si.dwFlags = STARTF_USESHOWWINDOW;
- si.wShowWindow = SW_HIDE;
- memset (&pi, 0, sizeof (pi));
p = new char[strlen (ksprg) + strlen (temp) + strlen (outf) + 32];
+ if (!p)
+ BUG (NULL);
sprintf (p, "%s -o %s %s", ksprg, outf, temp);
- rc = CreateProcess (NULL, p, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
- if (!rc) {
- log_box ("LDAP Keyserver Plugin", MB_ERR, "Could not spawn process");
+ if (spawn_application (p)) {
rc = -1;
goto leave;
}
- CloseHandle (pi.hThread);
- WaitForSingleObject (pi.hProcess, INFINITE);
- CloseHandle (pi.hProcess);
+ DeleteFile (temp);
inp = fopen (outf, "rb");
if (!inp) {
@@ -1194,28 +1218,33 @@
goto leave;
}
memset (key, 0, maxkeylen);
- while( !feof( inp ) ) {
- s = fgets( temp, sizeof (temp)-1, inp );
- if( !s )
+ while (!feof (inp)) {
+ s = fgets (temp, sizeof (temp)-1, inp);
+ if (!s)
break;
- if( !start_key && strstr( s, "KEY" ) && strstr( s, "BEGIN" ) ) {
+ if (strstr (s, "KEY") && strstr (s, "FAILED")) {
+ failed = 1;
+ break;
+ }
+ if (!start_key && strstr (s, "KEY") && strstr (s, "BEGIN")) {
start_key = 1;
continue;
}
- if( !start_key )
+ if (!start_key)
continue;
- strcat( key, temp );
- maxkeylen -= strlen( temp );
- if( maxkeylen < 0 || (strstr( s, "KEY" ) && strstr( s, "END" )) )
+ strcat (key, temp);
+ maxkeylen -= strlen (temp);
+ if (maxkeylen < 0 || (strstr (s, "KEY") && strstr (s, "END")))
break;
}
- fclose( inp );
+ fclose (inp);
leave:
- if( !strlen( key ) )
+ if (failed || !strlen (key))
rc = WPTERR_WINSOCK_RECVKEY;
- free_if_alloc( p );
- free_if_alloc( ksprg );
+ DeleteFile (outf);
+ free_if_alloc (p);
+ free_if_alloc (ksprg);
return rc;
}
Modified: trunk/Src/wptKeyserverDlg.cpp
===================================================================
--- trunk/Src/wptKeyserverDlg.cpp 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/wptKeyserverDlg.cpp 2006-01-09 09:15:29 UTC (rev 133)
@@ -160,10 +160,10 @@
/* Receive a key from the keyserver @kserver (port @port)
with the pattern @pattern.
Return value: 0 on success. */
-int
-hkp_recv_key2 (HWND dlg, const char *kserver, WORD port,
- const char *pattern, int proto, int flags,
- char **r_fpr)
+static int
+keyserver_recv_key (HWND dlg, const char *kserver, WORD port,
+ const char *pattern, int proto, int flags,
+ char **r_fpr)
{
gpgme_ctx_t ctx;
gpgme_data_t keydata;
@@ -243,13 +243,14 @@
}
-/* Alias for hkp_recv_key2 but without the ability to return
+/* Alias for keyserver_recv_key but without the ability to return
the fingerprint of the key. */
int
hkp_recv_key (HWND dlg, const char *kserver, WORD port,
const char *pattern, int proto, int flags)
{
- return hkp_recv_key2 (dlg, kserver, port, pattern, proto, flags, NULL);
+ return keyserver_recv_key (dlg, kserver, port, pattern,
+ proto, flags, NULL);
}
@@ -549,8 +550,9 @@
_("HKP Keyserver"), MB_INFO);
return FALSE;
}
- rc = hkp_recv_key2 (dlg, kserver, kserver_get_port (lv),
- pattern, proto_nr, 0, key? &key->fpr : NULL);
+ rc = keyserver_recv_key (dlg, kserver, kserver_get_port (lv),
+ pattern, proto_nr, 0,
+ key? &key->fpr : NULL);
if (!rc && key->fpr != NULL) {
keycache_update (0, key->fpr);
get_pubkey (key->fpr, &key->newkey);
Modified: trunk/Src/wptListView.cpp
===================================================================
--- trunk/Src/wptListView.cpp 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/wptListView.cpp 2006-01-09 09:15:29 UTC (rev 133)
@@ -1,5 +1,5 @@
/* wptListView.cpp - Dynamic list view control
- * Copyright (C) 2000-2005 Timo Schulz
+ * Copyright (C) 2000-2006 Timo Schulz
* Copyright (C) 2004 Andreas Jobs
*
* This file is part of WinPT.
@@ -38,31 +38,34 @@
int
-listview_new( listview_ctrl_t *ctx )
+listview_new (listview_ctrl_t *ctx)
{
struct listview_ctrl_s *c;
c = new struct listview_ctrl_s;
- if( !c )
- BUG( NULL );
+ if (!c)
+ BUG (NULL);
c->cols = 0;
c->items = 0;
- c->ctrl = NULL;
+ c->ctrl = NULL;
+ c->hil = NULL;
*ctx = c;
return 0;
} /* listview_new */
void
-listview_release( listview_ctrl_t ctx )
+listview_release (listview_ctrl_t ctx)
{
- if( ctx ) {
- ctx->cols = 0;
- ctx->ctrl = NULL;
- ctx->items = 0;
- delete ctx;
- ctx = NULL;
- }
+ if (!ctx)
+ return;
+
+ ctx->cols = 0;
+ ctx->ctrl = NULL;
+ ctx->items = 0;
+ if (ctx->hil)
+ ImageList_Destroy (ctx->hil);
+ delete ctx;
} /* listview_release */
@@ -93,9 +96,8 @@
memset (&lvi, 0, sizeof lvi);
lvi.iItem = pos;
- rc = ListView_InsertItem (ctx->ctrl, &lvi);
- if (rc == -1)
- rc = 1;
+ if (ListView_InsertItem (ctx->ctrl, &lvi) != pos)
+ rc = -1;
ctx->items++;
return rc;
}
@@ -119,6 +121,24 @@
int
+listview_add_item_image (listview_ctrl_t ctx, const char *text, int image)
+{
+ int rc = 0;
+ LV_ITEM lvi;
+
+ memset( &lvi, 0, sizeof lvi );
+ lvi.mask = LVIF_TEXT | LVIF_IMAGE;
+ lvi.pszText = (char *)text;
+ lvi.iImage = image;
+ rc = ListView_InsertItem (ctx->ctrl, &lvi);
+ if (rc == -1)
+ rc = 1;
+ ctx->items++;
+ return rc;
+}
+
+
+int
listview_add_item2 (listview_ctrl_t ctx, const char *text, void *magic)
{
int rc = 0;
@@ -368,3 +388,17 @@
if ((style & LVS_TYPEMASK) != view)
SetWindowLong (ctx->ctrl, GWL_STYLE, (style & ~LVS_TYPEMASK) | view);
}
+
+
+void
+listview_set_image_list (listview_ctrl_t ctx, HICON *ico, DWORD nicons)
+{
+ HIMAGELIST hil;
+ DWORD i;
+
+ hil = ImageList_Create (16, 16, ILC_COLOR16, nicons, 1);
+ for (i=0; i < nicons; i++)
+ ImageList_AddIcon (hil, ico[i]);
+ ListView_SetImageList (ctx->ctrl, hil, LVSIL_SMALL);
+}
+
Modified: trunk/Src/wptSigList.cpp
===================================================================
--- trunk/Src/wptSigList.cpp 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/Src/wptSigList.cpp 2006-01-09 09:15:29 UTC (rev 133)
@@ -1,6 +1,6 @@
/* wptSigList.cpp - Listview for key signatures
- * Copyright (C) 2001-2005 Timo Schulz
- * Copyright (C) 2005 g10 Code GmbH
+ * Copyright (C) 2001-2006 Timo Schulz
+ * Copyright (C) 2005, 2006 g10 Code GmbH
*
* This file is part of WinPT.
*
@@ -63,9 +63,9 @@
if (rc)
return rc;
c->ctrl = ctrl;
- for ( j=0; implist[j].fieldname != NULL; j++ )
- listview_add_column( c, &implist[j] );
- listview_set_ext_style( c );
+ for (j=0; implist[j].fieldname != NULL; j++)
+ listview_add_column (c, &implist[j]);
+ listview_set_ext_style (c);
*lv = c;
return 0;
}
@@ -103,18 +103,20 @@
control @lv.
Return value: 0 on success. */
static int
-siglist_add_key (listview_ctrl_t lv, gpgme_user_id_t uid, gpgme_key_sig_t ks)
+siglist_add_key (listview_ctrl_t lv, gpgme_user_id_t uid,
+ gpgme_key_sig_t ks, int pos)
{
gpgme_key_t key=NULL;
char t[128];
const char *attr;
const char *s;
- int rc = 0, key_attr;
+ int key_attr;
+ int rc = 0;
if (ks && !IS_UID_CERT (ks->sig_class))
return 0;
-
- rc = listview_add_item (lv, " ");
+
+ rc = listview_add_item_pos (lv, pos);
if (rc)
return rc;
@@ -129,12 +131,12 @@
if (attr && strlen (attr)) {
char *uid_utf8 = utf8_to_wincp (attr, strlen (attr));
char *p = uid? m_strdup (uid_utf8) : indent_string (uid_utf8, 2);
- listview_add_sub_item (lv, 0, 0, p);
+ listview_add_sub_item (lv, pos, 0, p);
free (uid_utf8);
free_if_alloc (p);
}
else
- listview_add_sub_item (lv, 0, 0, _(" user ID not found"));
+ listview_add_sub_item (lv, pos, 0, _(" user ID not found"));
if (uid)
return 0;
@@ -145,7 +147,7 @@
case GPG_ERR_BAD_SIGNATURE:s = "NO"; break;
default: s = "ERROR"; break;
}
- listview_add_sub_item( lv, 0, 1, s );
+ listview_add_sub_item (lv, pos, 1, s);
switch (ks->sig_class) {
case 0x10: strcpy (t, " "); break;
@@ -159,30 +161,30 @@
strcat (t, "L");
/*if (key_attr & GPGME_SIGF_NREV)
strcat (t, "R");*/
- listview_add_sub_item (lv, 0, 2, t);
+ listview_add_sub_item (lv, pos, 2, t);
key_attr = ks->timestamp;
if( key_attr ) {
- s = get_key_created( key_attr );
- listview_add_sub_item( lv, 0, 3, s );
+ s = get_key_created (key_attr);
+ listview_add_sub_item (lv, pos, 3, s);
}
attr = ks->keyid;
- if( attr && strlen( attr ) == 16 ) {
- _snprintf (t, sizeof t -1, "0x%s", attr + 8);
- listview_add_sub_item( lv, 0, 4, t );
+ if (attr && strlen (attr) == 16) {
+ _snprintf (t, sizeof (t) -1, "0x%s", attr + 8);
+ listview_add_sub_item (lv, pos, 4, t);
}
key_attr = ks->expires;
if (key_attr) {
s = get_key_created (key_attr);
- listview_add_sub_item (lv, 0, 5, s);
+ listview_add_sub_item (lv, pos, 5, s);
}
attr = get_key_pubalgo (ks->pubkey_algo);
- if( attr )
- listview_add_sub_item( lv, 0, 6, (char *)attr );
-
+ if (attr)
+ listview_add_sub_item (lv, pos, 6, (char *)attr);
+
return 0;
}
@@ -197,6 +199,7 @@
gpgme_user_id_t u;
gpgme_key_sig_t s;
listview_ctrl_t lv;
+ int pos = 0;
int rc;
if (siglist_build (&lv, ctrl))
@@ -205,11 +208,12 @@
if (rc)
BUG (NULL);
- /* XXX: the root item is at the end but should come first. */
for (u=key->uids; u; u = u->next) {
- siglist_add_key (lv, u, NULL);
+ siglist_add_key (lv, u, NULL, pos++);
for (s = u->signatures; s; s = s->next) {
- rc = siglist_add_key (lv, NULL, s);
+ if (!IS_UID_CERT (s->sig_class))
+ continue;
+ rc = siglist_add_key (lv, NULL, s, pos++);
if (rc)
break;
}
Modified: trunk/THANKS
===================================================================
--- trunk/THANKS 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/THANKS 2006-01-09 09:15:29 UTC (rev 133)
@@ -66,4 +66,4 @@
Ulf Jaenicke-Rößler ujr at arcor.de
Werner Koch wk at gnupg.org
Vasyl Kondrashov vasyl at male.ru
- vedaal at lok.com
+Vedaal Nistar vedaal at hush.com
Modified: trunk/TODO
===================================================================
--- trunk/TODO 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/TODO 2006-01-09 09:15:29 UTC (rev 133)
@@ -1,6 +1,9 @@
Feel free if you think there is missing something to mail me.
-0.11.x-
+ * Keyserver searching does not work (might segv) when the
+ key has no (valid) email address.
+
* winpt --keymanager aborts when the keyring is empty on the
first start.
@@ -14,9 +17,6 @@
it possible to convert old groupdb.gpg files into native GPG format.
(I work on it)
- * Find a way to make the import preview dialog much faster.
- --output does not work and thus we need another solution.
-
* check the file register code
WinPT will not associate the files correctly. This is due to the lack
of quotes surrounding the executable path. (I know, Timo must be mad
@@ -31,7 +31,6 @@
- sign/decrypt
- factor out some common code into wptCardManager.cpp
* Implement --armor in the FM for --symmetric.
- * Implement --interactive for --import.
* Winpt should take care for a multi user environment.
* Move the both managers (key/file) to separate applications
and use ActiveX control elemens for the treelist element.
@@ -43,7 +42,5 @@
* Sometimes the sign & encrypt dialog causes a crash when the wrong
passphrase was entered (not reproducable on my machine!)
* Implement the non-swapable memory for passphrase handling.
- * Encrypt only environment (No secret key support).
- * DDE. This feature has a very low priority.
And much more...
Modified: trunk/configure.ac
===================================================================
--- trunk/configure.ac 2006-01-06 19:45:59 UTC (rev 132)
+++ trunk/configure.ac 2006-01-09 09:15:29 UTC (rev 133)
@@ -16,7 +16,6 @@
# Version number: Remember to change it immediately *after* a release.
# Add a "-cvs" prefix for non-released code.
AC_INIT(WinPT, 0.11.5-cvs, http://www.winpt.org)
-
NEED_GPGME_API=1
NEED_GPGME_VERSION=1.1.1
NEED_GPG_ERROR_VERSION=1.2
@@ -249,7 +248,6 @@
Src/Makefile
Src/versioninfo.rc
Include/Makefile
-Ico/Makefile
icons/Makefile
m4/Makefile
Gnupg/Makefile
Modified: trunk/icons/key_delete.ico
===================================================================
(Binary files differ)
Modified: trunk/icons/key_export.ico
===================================================================
(Binary files differ)
Modified: trunk/icons/key_import.ico
===================================================================
(Binary files differ)
Modified: trunk/icons/key_props.ico
===================================================================
(Binary files differ)
More information about the Winpt-commits
mailing list