diff -Nru keepass2-2.33+dfsg/debian/changelog keepass2-2.34+dfsg/debian/changelog --- keepass2-2.33+dfsg/debian/changelog 2016-05-28 12:37:19.000000000 +0000 +++ keepass2-2.34+dfsg/debian/changelog 2016-06-28 00:01:32.000000000 +0000 @@ -1,8 +1,17 @@ -keepass2 (2.33+dfsg-1~ubuntu15.10~ppa1) wily; urgency=medium +keepass2 (2.34+dfsg-1~ubuntu15.10~ppa1) wily; urgency=medium * upload to ppa - -- Julian Taylor Sat, 28 May 2016 14:26:57 +0200 + -- Julian Taylor Tue, 28 Jun 2016 01:40:36 +0200 + +keepass2 (2.34+dfsg-1) unstable; urgency=medium + + * New upstream release (Closes: #827676) + * add new upstream gpg key + * add https debian VCS links + * create new /usr/lib/keepass2/Plugins folder on installation + + -- Julian Taylor Mon, 27 Jun 2016 19:57:04 +0200 keepass2 (2.33+dfsg-1) unstable; urgency=medium diff -Nru keepass2-2.33+dfsg/debian/control keepass2-2.34+dfsg/debian/control --- keepass2-2.33+dfsg/debian/control 2016-05-28 12:37:19.000000000 +0000 +++ keepass2-2.34+dfsg/debian/control 2016-06-28 00:01:32.000000000 +0000 @@ -13,8 +13,8 @@ python Standards-Version: 3.9.7 Homepage: http://keepass.info/ -Vcs-Git: git://anonscm.debian.org/pkg-cli-apps/packages/keepass2.git -Vcs-Browser: http://anonscm.debian.org/gitweb/?p=pkg-cli-apps/packages/keepass2.git +Vcs-Git: https://anonscm.debian.org/git/pkg-cli-apps/packages/keepass2.git +Vcs-Browser: https://anonscm.debian.org/cgit/pkg-cli-apps/packages/keepass2.git Package: keepass2 Architecture: all diff -Nru keepass2-2.33+dfsg/debian/patches/use-installed-ico-files.patch keepass2-2.34+dfsg/debian/patches/use-installed-ico-files.patch --- keepass2-2.33+dfsg/debian/patches/use-installed-ico-files.patch 2016-05-28 12:37:19.000000000 +0000 +++ keepass2-2.34+dfsg/debian/patches/use-installed-ico-files.patch 2016-06-28 00:01:32.000000000 +0000 @@ -483,7 +483,7 @@ =================================================================== --- keepass2.orig/KeePass/Forms/MainForm.cs +++ keepass2/KeePass/Forms/MainForm.cs -@@ -140,7 +140,7 @@ namespace KeePass.Forms +@@ -141,7 +141,7 @@ namespace KeePass.Forms m_strNeverExpiresText = KPRes.NeverExpires; this.Text = PwDefs.ShortProductName; @@ -551,7 +551,7 @@ return; } -@@ -3836,7 +3836,7 @@ namespace KeePass.Forms +@@ -3844,7 +3844,7 @@ namespace KeePass.Forms // wasn't fully constructed at that time yet) // if(IsFileLocked(null)) // TaskbarList.SetOverlayIcon(this, diff -Nru keepass2-2.33+dfsg/debian/README.Debian keepass2-2.34+dfsg/debian/README.Debian --- keepass2-2.33+dfsg/debian/README.Debian 2016-05-28 12:37:19.000000000 +0000 +++ keepass2-2.34+dfsg/debian/README.Debian 2016-06-28 00:01:32.000000000 +0000 @@ -15,7 +15,7 @@ ----------------- The KeePass plugins are untested and may not work correctly. In order for them to work the mono-mcs must be installed. -They currently have to be placed in into /usr/lib/keepass2/ +They currently have to be placed in into /usr/lib/keepass2/Plugins but files in that location may get overwritten by package upgrades in future. To execute KeePass plugin like KPScript one must currently set the MONO_PATH diff -Nru keepass2-2.33+dfsg/debian/rules keepass2-2.34+dfsg/debian/rules --- keepass2-2.33+dfsg/debian/rules 2016-05-28 12:37:19.000000000 +0000 +++ keepass2-2.34+dfsg/debian/rules 2016-06-28 00:01:32.000000000 +0000 @@ -50,6 +50,8 @@ rm -f keepass2*.png dh_install mv $(CURDIR)/debian/keepass2/usr/bin/keepass2.sh $(CURDIR)/debian/keepass2/usr/bin/keepass2 + # create plugin location + mkdir $(CURDIR)/debian/keepass2/usr/lib/keepass2/Plugins override_dh_installchangelogs: dh_installchangelogs Docs/History.txt diff -Nru keepass2-2.33+dfsg/debian/upstream/signing-key.asc keepass2-2.34+dfsg/debian/upstream/signing-key.asc --- keepass2-2.33+dfsg/debian/upstream/signing-key.asc 2016-05-28 12:37:19.000000000 +0000 +++ keepass2-2.34+dfsg/debian/upstream/signing-key.asc 2016-06-28 00:01:32.000000000 +0000 @@ -1,40 +1,52 @@ -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1 -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 -=KcOE +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 +h8u3juNr +=p8DB -----END PGP PUBLIC KEY BLOCK----- diff -Nru keepass2-2.33+dfsg/Docs/Chm/default.css keepass2-2.34+dfsg/Docs/Chm/default.css --- keepass2-2.33+dfsg/Docs/Chm/default.css 2016-05-07 08:29:46.000000000 +0000 +++ keepass2-2.34+dfsg/Docs/Chm/default.css 2016-06-11 07:55:08.000000000 +0000 @@ -2,9 +2,9 @@ Design Copyright (c) 2003-2016 Dominik Reichl */ -body, p, div, h1, h2, h3, h4, h5, h6, ol, ul, li, td, th, dd, dt, a { +body, p, div, h1, h2, h3, h4, h5, h6, ol, ul, li, td, th, dd, dt, a, kbd kbd { font-family: Verdana, Arial, sans-serif; - font-size: 13px; + font-size: 9.75pt; font-weight: normal; color: #000000; } @@ -28,32 +28,32 @@ } h1 { - font-size: 20px; + font-size: 15.00pt; font-weight: bold; } h2 { - font-size: 18px; + font-size: 13.50pt; font-weight: bold; } h3 { - font-size: 15px; + font-size: 11.25pt; font-weight: bold; } h4 { - font-size: 13px; + font-size: 9.75pt; font-weight: bold; } h5 { - font-size: 12px; + font-size: 9.00pt; font-weight: bold; } h6 { - font-size: 10px; + font-size: 7.50pt; font-weight: normal; } @@ -68,11 +68,26 @@ pre { font-family: monospace; background-color: #E6E6E6; - font-size: 11px; + font-size: 8.25pt; overflow: auto; display: block; } +kbd kbd { + padding: 0px 4px 1px 4px; + border: 1px solid #808080; + border-collapse: collapse; + -moz-border-radius: 2px; + border-radius: 2px; + box-shadow: 0.1em 0.15em 0.2em #C5C5C5; + color: #000000; + background-color: #EEEEEE; + background-image: -webkit-linear-gradient(top, #EEEEEE, #FAFAFA, #EEEEEE); + background-image: -moz-linear-gradient(top, #EEEEEE, #FAFAFA, #EEEEEE); + background-image: -ms-linear-gradient(top, #EEEEEE, #FAFAFA, #EEEEEE); + background-image: linear-gradient(to bottom, #EEEEEE, #FAFAFA, #EEEEEE); +} + /* --------------------------------------------------------------------- */ a:visited { @@ -110,7 +125,7 @@ background: url(./images/grad_h_gw.gif) repeat-y; display: block; font-weight: bold; - font-size: 10px; + font-size: 7.50pt; padding: 1px 1px 1px 6px; vertical-align: middle; color: #005101; @@ -122,7 +137,7 @@ background: url(./images/grad_h_gw_186.gif) repeat-y; display: block; font-weight: bold; - font-size: 10px; + font-size: 7.50pt; padding: 1px 1px 1px 6px; vertical-align: middle; color: #005101; @@ -134,7 +149,7 @@ padding: 1px 1px 1px 1px; border-collapse: collapse; text-decoration: none; - font-size: 11px; + font-size: 8.25pt; color: #000000; vertical-align: middle; } @@ -157,7 +172,7 @@ /* --------------------------------------------------------------------- */ table.tablebox, table.tablebox75 { - background-color: #AFB5CF; + background-color: #EEEEEE; margin: 0px 0px 0px 0px; padding: 0px 0px 0px 0px; border-left: 1px solid #AFB5CF; @@ -229,7 +244,7 @@ input.sansedit { font-family: Verdana, Arial, sans-serif; - font-size: 13px; + font-size: 9.75pt; } textarea.fixededit { @@ -265,7 +280,7 @@ } div.specificbox div.specifictitle { - font-size: 10px; + font-size: 7.50pt; font-weight: bold; border-left: 0px none; border-right: 0px none; @@ -291,7 +306,7 @@ table.sectionsummary tr td { border: 0px; vertical-align: middle; - font-size: 10px; + font-size: 7.50pt; font-weight: normal; margin: 0px 0px 0px 0px; padding: 0px 0px 0px 0px; @@ -300,7 +315,7 @@ table.sectionsummary tr td h1 { display: inline; - font-size: 20px; + font-size: 15.00pt; font-weight: normal; } @@ -308,13 +323,13 @@ h2.sectiontitle { display: block; - font-size: 13px; + font-size: 9.75pt; font-weight: bold; color: #000000; background: url(./images/grad_v_dlb_tall_light.png) repeat-x top; border: 1px solid #AFB5CF; color: #005101; - min-height: 19px; + min-height: 14.25pt; vertical-align: middle; margin: 0px 0px 0px 0px; padding: 2px 0px 0px 6px; @@ -351,7 +366,7 @@ /* --------------------------------------------------------------------- */ .il-m { - background: transparent url('./images/il_main_v01.png') no-repeat; + background: transparent url('./images/il_main_v02.png') no-repeat; margin: 0px 0px 0px 0px; padding: 0px 0px 0px 0px; border: 0px none; @@ -369,13 +384,13 @@ .spr-m-lang-mh { background-position: -111px -47px; width: 31px; height: 21px; } .spr-m-ext-mh { background-position: -144px -1px; width: 31px; height: 21px; } .spr-m-write-mh { background-position: -144px -24px; width: 31px; height: 21px; } -.spr-m-help-ml { background-position: -177px -1px; width: 31px; height: 16px; } -.spr-m-info-ml { background-position: -177px -19px; width: 31px; height: 16px; } -.spr-m-sec-ml { background-position: -177px -37px; width: 31px; height: 16px; } -.spr-m-award-ml { background-position: -210px -1px; width: 31px; height: 16px; } -.spr-m-links-ml { background-position: -210px -19px; width: 31px; height: 16px; } -.spr-m-xmag-ml { background-position: -210px -37px; width: 31px; height: 16px; } -.spr-m-donate-ml { background-position: -1px -78px; width: 31px; height: 16px; } +.spr-m-help-ml { background-position: -177px -1px; width: 31px; height: 18px; } +.spr-m-info-ml { background-position: -177px -21px; width: 31px; height: 18px; } +.spr-m-sec-ml { background-position: -177px -41px; width: 31px; height: 18px; } +.spr-m-donate-ml { background-position: -177px -61px; width: 31px; height: 18px; } +.spr-m-award-ml { background-position: -210px -1px; width: 31px; height: 18px; } +.spr-m-links-ml { background-position: -210px -21px; width: 31px; height: 18px; } +.spr-m-xmag-ml { background-position: -210px -41px; width: 31px; height: 18px; } .spr-m-osi-h { background-position: -1px -96px; width: 72px; height: 60px; } .spr-m-award-s { background-position: -1px -158px; width: 16px; height: 16px; } .spr-m-feed-s { background-position: -19px -158px; width: 16px; height: 16px; } diff -Nru keepass2-2.33+dfsg/Docs/Chm/help/base/autotype.html keepass2-2.34+dfsg/Docs/Chm/help/base/autotype.html --- keepass2-2.33+dfsg/Docs/Chm/help/base/autotype.html 2016-05-07 08:29:46.000000000 +0000 +++ keepass2-2.34+dfsg/Docs/Chm/help/base/autotype.html 2016-06-11 07:55:08.000000000 +0000 @@ -71,11 +71,11 @@ login dialogs, ...).

By default, the sent keystroke sequence is {USERNAME}{TAB}{PASSWORD}{ENTER}, -i.e. it first types the user name of the selected entry, then presses the Tab key, -then types the password of the entry and finally presses the Enter key.

+i.e. it first types the user name of the selected entry, then presses the Tab key, +then types the password of the entry and finally presses the Enter key.

For TAN entries, the default sequence is {PASSWORD}, -i.e. it just types the TAN into the target window, without pressing Enter.

+i.e. it just types the TAN into the target window, without pressing Enter.

@@ -106,8 +106,8 @@
  • Invoke auto-type for an entry by using the context menu command Perform Auto-Type while the entry is selected.
  • -
  • Select the entry and press Ctrl+V (that's -the menu shortcut for the context menu command above).
  • +
  • Select the entry and press Ctrl+V +(that's the menu shortcut for the context menu command above).
  • Using the system-wide auto-type hot key. KeePass will search all entries in the currently opened database for matching sequences.
@@ -133,7 +133,8 @@ in KeePass which you want to auto-type.

The method is simple: right-click on an entry of your currently opened database -and click 'Perform Auto-Type' (or alternatively press the Ctrl+V +and click 'Perform Auto-Type' (or alternatively press the +Ctrl+V shortcut for this command). The window that previously got the focus (i.e. the one in which you worked before switching to KeePass) will be brought to the foreground and KeePass auto-types into this window.

@@ -158,8 +159,8 @@
  1. Create an entry in KeePass titled Notepad with values for user name and password.
  2. Start Notepad - under 'Programs' -> 'Accessories'.
  3. -
  4. Press Ctrl+Alt+A within Notepad. The user name and -password will be typed into Notepad.
  5. +
  6. Press Ctrl+Alt+A within Notepad. +The user name and password will be typed into Notepad.

The KeePass entry title Notepad is matched with the window title of @@ -172,9 +173,12 @@ select the entry. You simply press the hot key while having the target window open (i.e. the window which will receive the simulated keypresses).

-

By default, the global hot key is Ctrl+Alt+A (i.e. hold the Ctrl and -Alt keys, press 'A' and release all keys). You can change this hot key -in the options dialog (main menu - 'Tools' - 'Options', tab +

By default, the global hot key is +Ctrl+Alt+A +(i.e. hold the Ctrl and Alt keys, +press A and release all keys). +You can change this hot key in the options dialog +(main menu - 'Tools' - 'Options', tab @@ -348,12 +352,12 @@ - +
Keys and special keys (not placeholders or commands) can be repeated by appending a number within the code. For example, {TAB 5} -presses the Tab key 5 times. +presses the Tab key 5 times.

For details on how to send special keys for which no explicit special @@ -364,17 +368,20 @@

Finally, some examples:

{TITLE}{TAB}{USERNAME}{TAB}{PASSWORD}{ENTER}
-Types the entry's title, a Tab, the user name, a Tab, the password of the -currently selected entry, and presses Enter.

+Types the entry's title, a Tab, the user name, +a Tab, the password of the +currently selected entry, and presses Enter.

{TAB}{PASSWORD}{ENTER}
-Presses the Tab key, enters the entry's password and presses Enter.

+Presses the Tab key, enters the entry's password and +presses Enter.

{USERNAME}{TAB}^v{ENTER}
-Types the user name, presses Tab, presses Ctrl+v (which pastes data from -the Windows clipboard in most applications), and presses Enter.

- -
+Types the user name, presses Tab, presses +Ctrl+V (which pastes data from the Windows +clipboard in most applications), and presses Enter. +

+

Toggling Checkboxes:
Sometimes you find checkboxes on websites ("Stay logged in on this computer" for example). @@ -465,9 +472,7 @@
- - -
+

Test Form and a user name and password of your choice.

-

Let's assume the global auto-type hot key is set to Ctrl+Alt+A (the default). +

Let's assume the global auto-type hot key is set to +Ctrl+Alt+A (the default). KeePass is running in the background, you have opened your database and the workspace is unlocked.

When you now navigate to the test page and are being prompted for your user name and password, -just click into the user name field and press Ctrl+Alt+A. KeePass enters the -user name and password for you!

+just click into the user name field and press +Ctrl+Alt+A. +KeePass enters the user name and password for you!

Why did this work? The window title of your browser window was "Test Form - KeePass - Internet Explorer" or diff -Nru keepass2-2.33+dfsg/Docs/Chm/help/base/faq.html keepass2-2.34+dfsg/Docs/Chm/help/base/faq.html --- keepass2-2.33+dfsg/Docs/Chm/help/base/faq.html 2016-05-07 08:29:46.000000000 +0000 +++ keepass2-2.34+dfsg/Docs/Chm/help/base/faq.html 2016-06-11 07:55:08.000000000 +0000 @@ -105,9 +105,7 @@ Customization (2.x). - - -
+

diff -Nru keepass2-2.33+dfsg/Docs/Chm/help/base/faq_tech.html keepass2-2.34+dfsg/Docs/Chm/help/base/faq_tech.html --- keepass2-2.33+dfsg/Docs/Chm/help/base/faq_tech.html 2016-05-07 08:29:46.000000000 +0000 +++ keepass2-2.34+dfsg/Docs/Chm/help/base/faq_tech.html 2016-06-11 07:55:08.000000000 +0000 @@ -318,8 +318,9 @@ Info  Why doesn't Auto-Type work correctly on Polish systems?

-

On Polish systems, the default auto-type hot key Ctrl+Alt+A conflicts -with a system command and is frequently used in typing. +

On Polish systems, the default auto-type hot key +Ctrl+Alt+A +conflicts with a system command and is frequently used in typing. Therefore, auto-type is often executed accidentally.

The global auto-type hot key can be changed to a different key combination @@ -512,8 +513,7 @@ creates a temporary file. Will it be erased securely?

KeePass creates a temporary HTML file when printing password lists and showing -print previews. This file is securely erased (i.e. overwritten multiple times -before being removed from the file system tree) when closing the database.

+print previews. This file is securely deleted when closing the database.

You must wait for the file being printed completely before closing KeePass (and close the print preview before closing KeePass), otherwise it could happen diff -Nru keepass2-2.33+dfsg/Docs/Chm/help/base/fieldrefs.html keepass2-2.34+dfsg/Docs/Chm/help/base/fieldrefs.html --- keepass2-2.33+dfsg/Docs/Chm/help/base/fieldrefs.html 2016-05-07 08:29:46.000000000 +0000 +++ keepass2-2.34+dfsg/Docs/Chm/help/base/fieldrefs.html 2016-06-11 07:55:08.000000000 +0000 @@ -121,7 +121,7 @@ code can't be used as WantedField). - +

diff -Nru keepass2-2.33+dfsg/Docs/Chm/help/base/integration.html keepass2-2.34+dfsg/Docs/Chm/help/base/integration.html --- keepass2-2.33+dfsg/Docs/Chm/help/base/integration.html 2016-05-07 08:29:46.000000000 +0000 +++ keepass2-2.34+dfsg/Docs/Chm/help/base/integration.html 2016-06-11 07:55:08.000000000 +0000 @@ -57,7 +57,7 @@

If you have multiple instances of KeePass running, pressing the global hot key will restore the first instance that has been started.

-

The global hot key is Ctrl+Alt+K.

+

The global hot key is Ctrl+Alt+K.

diff -Nru keepass2-2.33+dfsg/Docs/Chm/help/base/keys.html keepass2-2.34+dfsg/Docs/Chm/help/base/keys.html --- keepass2-2.33+dfsg/Docs/Chm/help/base/keys.html 2016-05-07 08:29:46.000000000 +0000 +++ keepass2-2.34+dfsg/Docs/Chm/help/base/keys.html 2016-06-11 07:55:08.000000000 +0000 @@ -179,7 +179,8 @@ You can change the password of the Windows user account freely; this does not affect the KeePass database. Note that changing the password (e.g. a user using the Control Panel -or pressing Ctrl+Alt+Del and selecting 'Change Password') and +or pressing Ctrl+Alt+Del +and selecting 'Change Password') and resetting it to a new one (e.g. an administrator using a NET USER <User> <NewPassword> command) are two different things. diff -Nru keepass2-2.33+dfsg/Docs/Chm/help/v2/autotype_obfuscation.html keepass2-2.34+dfsg/Docs/Chm/help/v2/autotype_obfuscation.html --- keepass2-2.33+dfsg/Docs/Chm/help/v2/autotype_obfuscation.html 2016-05-07 08:29:46.000000000 +0000 +++ keepass2-2.34+dfsg/Docs/Chm/help/v2/autotype_obfuscation.html 2016-06-11 07:55:08.000000000 +0000 @@ -82,8 +82,8 @@

TCATO makes standard keyloggers useless. It uses the Windows clipboard to transfer parts of the auto-typed text into the -target application. Keyloggers can see the Ctrl-V presses, but do not -log the actual contents pasted from the clipboard.

+target application. Keyloggers can see the Ctrl+V +presses, but do not log the actual contents pasted from the clipboard.

Clipboard spies don't work either, because only parts of the sensitive information is transferred on this way.

diff -Nru keepass2-2.33+dfsg/Docs/Chm/help/v2/plugins.html keepass2-2.34+dfsg/Docs/Chm/help/v2/plugins.html --- keepass2-2.33+dfsg/Docs/Chm/help/v2/plugins.html 2016-05-07 08:29:46.000000000 +0000 +++ keepass2-2.34+dfsg/Docs/Chm/help/v2/plugins.html 2016-06-11 07:55:08.000000000 +0000 @@ -68,14 +68,16 @@ follow these steps:

    -
  1. Download the plugin from the page above and unpack the ZIP file to a directory of your choice.
  2. -
  3. Copy the unpacked plugin files into the KeePass directory (where the -KeePass.exe is) or a subdirectory of it.
  4. +
  5. Download the plugin from the page above and unpack the ZIP file to a +directory of your choice.
  6. +
  7. In the KeePass application directory (where the KeePass.exe file is), +there is a folder called 'Plugins'. +Move the unpacked plugin files into this folder (or any subdirectory of it).
  8. Restart KeePass in order to load the new plugin.
-

In other words, to "install" a plugin you simply need to copy it somewhere -into the KeePass directory.

+

In short, to "install" a plugin you simply need to unpack it +somewhere into the 'Plugins' folder.

To "uninstall" a plugin, delete the plugin files.

@@ -123,6 +125,11 @@ So, if you're for example using KeePass on a portable device and don't want the cache to be on the system, you could set the path to {APPDIR}\PluginCache.

- +

Warning +Do not relocate the plugin cache into the 'Plugins' folder of the +KeePass application directory, because this can result in a severe +performance degradation.

+ diff -Nru keepass2-2.33+dfsg/Docs/Chm/help/v2/setup.html keepass2-2.34+dfsg/Docs/Chm/help/v2/setup.html --- keepass2-2.33+dfsg/Docs/Chm/help/v2/setup.html 2016-05-07 08:29:46.000000000 +0000 +++ keepass2-2.34+dfsg/Docs/Chm/help/v2/setup.html 2016-06-11 07:55:08.000000000 +0000 @@ -300,7 +300,7 @@ mono /YourPathToKeePass/KeePass.exe --auto-type
as command, then click [Apply]. Click on Disabled of the newly created item (such that the text 'New shortcut...' appears), -press Ctrl+Alt+A, and close the dialog. +press Ctrl+Alt+A, and close the dialog.
  • Ubuntu Linux ≤ 10.10 (GNOME). @@ -314,8 +314,8 @@
  • Double-click the appropriate run_command_i item (for example, when you've used command_5 in the previous steps, double-click run_command_5 now) and specify the hot key of your -choice. For example, to use Ctrl+Alt+A as hot key, you'd enter -<Control><Alt>a.
  • +choice. For example, to use Ctrl+Alt+A +as hot key, you'd enter <Control><Alt>a. diff -Nru keepass2-2.33+dfsg/Docs/Chm/help/v2/xml_replace.html keepass2-2.34+dfsg/Docs/Chm/help/v2/xml_replace.html --- keepass2-2.33+dfsg/Docs/Chm/help/v2/xml_replace.html 2016-05-07 08:29:46.000000000 +0000 +++ keepass2-2.34+dfsg/Docs/Chm/help/v2/xml_replace.html 2016-06-11 07:55:08.000000000 +0000 @@ -61,7 +61,9 @@
  • Reset default sequences that contain {DELAY=
  • Add an auto-type association to all entries
  • +
  • Copy entry URLs into title fields
  • Copy entry titles into empty user name fields
  • +
  • Ensure first line is not empty
  • @@ -347,6 +349,24 @@
    + + + + + + + + + + + + + +
    Copy entry URLs into title fields
    Select nodes://Entry
    Action:Replace data
    Data:Inner XML
    Find what:(?s)(<Key>Title</Key>\s*)(<Value>.*?</Value>|<Value\s*/>)(.*?<Key>URL</Key>\s*)(<Value>.*?</Value>|<Value\s*/>)
    Replace with:$1$4$3$4
    Case-sensitive:Activated
    Regular expressions:Activated
    Copies the entry URL into the title field of the +entry (overwriting any existing data in the title field).
    + +
    + @@ -363,5 +383,34 @@ entry, if this field is empty.
    +
    + + + + + + + + + + + + + +
    Ensure first line is not empty
    Select nodes://Entry/String/Value
    Action:Replace data
    Data:Inner text
    Find what:(?s)^(\r?\n)
    Replace with:--$1
    Regular expressions:Activated
    For all multi-line fields, +this inserts '--' into the first line of the field value, +if this line is empty and the value has at least two lines. +For example,
    +
    +

    +
    +Sample data
    +
    +is replaced by
    +
    +
    --
    +
    +Sample data
    + diff -Nru keepass2-2.33+dfsg/Docs/Chm/help/v2_dev/plg_index.html keepass2-2.34+dfsg/Docs/Chm/help/v2_dev/plg_index.html --- keepass2-2.33+dfsg/Docs/Chm/help/v2_dev/plg_index.html 2016-05-07 08:29:46.000000000 +0000 +++ keepass2-2.34+dfsg/Docs/Chm/help/v2_dev/plg_index.html 2016-06-11 07:55:08.000000000 +0000 @@ -309,8 +309,8 @@ override the UpdateUrl string property of your plugin class (the one derived from Plugin) to return the full, absolute URL of your version information file. -This should be an http:// URL, but an ftp:// URL -is also acceptable. +This should be an http:// or https:// URL, +but an ftp:// URL is also acceptable.

    Plugin developers have to update their version information file each time @@ -361,6 +361,39 @@ This reduces network traffic and is faster than downloading a version information file for every plugin separately.

    +

    Signing. Since KeePass 2.34, +you can optionally digitally sign your version information file using RSA / SHA-512.

    +
      +
    • An RSA key pair can for instance be generated like the following:
      +using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(4096))
      +{
      +    rsa.PersistKeyInCsp = false;
      +    Console.WriteLine("Private key: " + rsa.ToXmlString(true));
      +    Console.WriteLine("Public key: " + rsa.ToXmlString(false));
      +}

      +All key lengths supported by RSACryptoServiceProvider +are supported by KeePass (up to .NET 4.5 that is 384 to 16384 bits in 8 bit steps). +We recommend at least 2048 bits; the main version information file +(containing the KeePass version) uses 4096 bits.
    • +
    • In order to tell KeePass to accept a specific version information file +only when it's verifiable with a specific public key, your plugin must call the +UpdateCheckEx.SetFileSigKey +method to associate the specified URL with the specified public key. +The public key must be an XML string in the format as returned by the +RSACryptoServiceProvider.ToXmlString method. +Do not store the private key in your plugin, only the public key.
    • +
    • To sign an unsigned version information file, hash all trimmed non-empty lines +between the header and the footer line +using SHA-512, UTF-8 encoding, each line terminated by '\n' +(not "\r\n"). +Sign the hash using the private key +(if you're using RSACryptoServiceProvider: +load the private key using its FromXmlString method, +then compute the signature using the SignData method). +Encode the hash using Base64 and append it to the first line of the +version information file.
    • +
    +
    diff -Nru keepass2-2.33+dfsg/Docs/History.txt keepass2-2.34+dfsg/Docs/History.txt --- keepass2-2.33+dfsg/Docs/History.txt 2016-05-06 09:00:12.000000000 +0000 +++ keepass2-2.34+dfsg/Docs/History.txt 2016-06-10 20:48:26.000000000 +0000 @@ -1,3 +1,33 @@ +2016-06-11: 2.34 +- The version information file (which the optional update check + downloads to see if there exists a newer version) is now + digitally signed (using RSA-4096 / SHA-512); furthermore, it + is downloaded over HTTPS +- Added option 'Lock workspace when minimizing main window to + tray' +- Added option 'Esc minimizes to tray instead of locking the + workspace' +- Added Ctrl+Q shortcut for closing KeePass (as alternative to + Alt+F4) +- Added UIFlags bit for disabling the 'Check for Updates' menu + item +- The installers (regular and MSI) now create an empty + 'Plugins' folder in the application directory, and the + portable package now also contains such a folder +- Plugins: added support for digitally signed version + information files + +- Plugins are now loaded only directly from the application + directory and from any subdirectory of the 'Plugins' folder + in the application directory +- Improved startup performance (by filtering plugin candidates) +- When closing a database, KeePass now searches and deletes any + temporary files that may have been created and forgotten by + MSHTML when printing failed +- CHM help file: improved high DPI support +- Various code optimizations +- Minor other improvements + 2016-05-07: 2.33 - Added commands in the group context menu (under 'Rearrange'): 'Expand Recursively' and 'Collapse Recursively' diff -Nru keepass2-2.33+dfsg/Ext/KeePass.exe.config keepass2-2.34+dfsg/Ext/KeePass.exe.config --- keepass2-2.33+dfsg/Ext/KeePass.exe.config 2016-05-07 08:30:04.000000000 +0000 +++ keepass2-2.34+dfsg/Ext/KeePass.exe.config 2016-06-11 07:55:26.000000000 +0000 @@ -10,8 +10,8 @@ - + diff -Nru keepass2-2.33+dfsg/Ext/KeePass.iss keepass2-2.34+dfsg/Ext/KeePass.iss --- keepass2-2.33+dfsg/Ext/KeePass.iss 2016-05-07 08:30:34.000000000 +0000 +++ keepass2-2.34+dfsg/Ext/KeePass.iss 2016-06-11 07:55:56.000000000 +0000 @@ -8,11 +8,11 @@ #define MyAppNameEx "KeePass Password Safe 2" #define MyAppPublisher "Dominik Reichl" -#define KeeVersionStr "2.33" -#define KeeVersionStrWithMinor "2.33" -#define KeeVersionStrWithMinorPath "2.33" -#define KeeVersionWin "2.33.0.0" -#define KeeVersionWinShort "2.33" +#define KeeVersionStr "2.34" +#define KeeVersionStrWithMinor "2.34" +#define KeeVersionStrWithMinorPath "2.34" +#define KeeVersionWin "2.34.0.0" +#define KeeVersionWinShort "2.34" #define MyAppURL "http://keepass.info/" #define MyAppExeName "KeePass.exe" @@ -90,6 +90,9 @@ Name: PreLoad; Description: Optimize KeePass On-Demand Start-Up Performance; Types: full custom; ExtraDiskSpaceRequired: 2048 ; Name: FileAssoc; Description: {cm:AssocFileExtension,{#MyAppNameShort},.kdbx}; Types: full custom +[Dirs] +Name: "{app}\Plugins"; Flags: uninsalwaysuninstall + [Files] Source: ..\Build\KeePass_Distrib\KeePass.exe; DestDir: {app}; Flags: ignoreversion; Components: Core Source: ..\Build\KeePass_Distrib\KeePass.XmlSerializers.dll; DestDir: {app}; Flags: ignoreversion; Components: Core diff -Nru keepass2-2.33+dfsg/Ext/KeePassMsi/KeePassMsi.vdproj keepass2-2.34+dfsg/Ext/KeePassMsi/KeePassMsi.vdproj --- keepass2-2.33+dfsg/Ext/KeePassMsi/KeePassMsi.vdproj 2016-05-07 08:31:10.000000000 +0000 +++ keepass2-2.34+dfsg/Ext/KeePassMsi/KeePassMsi.vdproj 2016-06-11 07:56:32.000000000 +0000 @@ -33,6 +33,12 @@ } "Entry" { + "MsmKey" = "8:_2C4BB99BDFFD6AD5EE75AB32CB4E08F4" + "OwnerKey" = "8:_8C05ADB649434D7892E36709EBDED4CC" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_3CC719213A464E2A86E5E00FB7ABF68E" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -57,12 +63,6 @@ } "Entry" { - "MsmKey" = "8:_838987B3C51D42C3C7B9BDA1339A5500" - "OwnerKey" = "8:_8C05ADB649434D7892E36709EBDED4CC" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { "MsmKey" = "8:_8C05ADB649434D7892E36709EBDED4CC" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -118,7 +118,7 @@ "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_838987B3C51D42C3C7B9BDA1339A5500" + "OwnerKey" = "8:_8C05ADB649434D7892E36709EBDED4CC" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -130,7 +130,7 @@ "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_8C05ADB649434D7892E36709EBDED4CC" + "OwnerKey" = "8:_2C4BB99BDFFD6AD5EE75AB32CB4E08F4" "MsmSig" = "8:_UNDEFINED" } } @@ -298,6 +298,37 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_2C4BB99BDFFD6AD5EE75AB32CB4E08F4" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:KeePass, Version=2.34.0.15991, Culture=neutral, PublicKeyToken=fed2ed7716aecf5c, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_2C4BB99BDFFD6AD5EE75AB32CB4E08F4" + { + "Name" = "8:KeePass.EXE" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:KeePass.EXE" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_02F929C52C1D41D29CB593270C6D1DC6" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3CC719213A464E2A86E5E00FB7ABF68E" { "SourcePath" = "8:..\\..\\Build\\KeePass_Distrib\\XSL\\TableHeader.gif" @@ -378,42 +409,11 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_838987B3C51D42C3C7B9BDA1339A5500" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:KeePass, Version=2.33.0.17030, Culture=neutral, PublicKeyToken=fed2ed7716aecf5c, processorArchitecture=MSIL" - "ScatterAssemblies" - { - "_838987B3C51D42C3C7B9BDA1339A5500" - { - "Name" = "8:KeePass.EXE" - "Attributes" = "3:512" - } - } - "SourcePath" = "8:KeePass.EXE" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_02F929C52C1D41D29CB593270C6D1DC6" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:TRUE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_8C05ADB649434D7892E36709EBDED4CC" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:KeePass.XmlSerializers, Version=2.33.0.17030, Culture=neutral, PublicKeyToken=fed2ed7716aecf5c, processorArchitecture=MSIL" + "AssemblyAsmDisplayName" = "8:KeePass.XmlSerializers, Version=2.34.0.15991, Culture=neutral, PublicKeyToken=fed2ed7716aecf5c, processorArchitecture=MSIL" "ScatterAssemblies" { "_8C05ADB649434D7892E36709EBDED4CC" @@ -564,7 +564,7 @@ { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:KeePass, Version=2.33.0.17030, Culture=neutral, PublicKeyToken=fed2ed7716aecf5c, processorArchitecture=MSIL" + "AssemblyAsmDisplayName" = "8:KeePass, Version=2.34.0.15991, Culture=neutral, PublicKeyToken=fed2ed7716aecf5c, processorArchitecture=MSIL" "ScatterAssemblies" { "_C4F8814F844C43EE8C9F5B662182B11A" @@ -661,6 +661,17 @@ { } } + "{9EF0B969-E518-4E46-987F-47570745A589}:_F7FA774F4B0E4A3FB0F1FA4743CF06C8" + { + "Name" = "8:Plugins" + "AlwaysCreate" = "11:TRUE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_83A2FA647E5D4F68A9F210FC7878D245" + "Folders" + { + } + } } } "{1525181F-901A-416C-8A58-119130FE478E}:_8285FAA6D5774714AB190FF7FA5604FB" @@ -711,15 +722,15 @@ "Product" { "Name" = "8:Microsoft Visual Studio" - "ProductName" = "8:KeePass 2.33" - "ProductCode" = "8:{E0493447-D92D-46B5-B3F9-18A642588915}" - "PackageCode" = "8:{05264D3D-1E04-4DEA-8B20-261905A044F7}" + "ProductName" = "8:KeePass 2.34" + "ProductCode" = "8:{36F0005F-4042-4768-8736-8F95CC3B742C}" + "PackageCode" = "8:{83DF0CF5-A5D5-40BE-9FDE-1761A38C6E00}" "UpgradeCode" = "8:{F2F19898-4F86-4940-9BFA-426574CE03E1}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:TRUE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:TRUE" - "ProductVersion" = "8:2.33.0" + "ProductVersion" = "8:2.34.0" "Manufacturer" = "8:Dominik Reichl" "ARPHELPTELEPHONE" = "8:" "ARPHELPLINK" = "8:http://keepass.info/" diff -Nru keepass2-2.33+dfsg/KeePass/App/AppDefs.cs keepass2-2.34+dfsg/KeePass/App/AppDefs.cs --- keepass2-2.33+dfsg/KeePass/App/AppDefs.cs 2016-03-01 14:00:10.000000000 +0000 +++ keepass2-2.34+dfsg/KeePass/App/AppDefs.cs 2016-06-07 17:54:16.000000000 +0000 @@ -41,10 +41,20 @@ public const string XslFileHtmlFull = "KDBX_DetailsFull.xsl"; public const string XslFileHtmlTabular = "KDBX_Tabular.xsl"; - public const string ShInstUtil = "ShInstUtil.exe"; - + public const string PluginsDir = "Plugins"; public const string PluginProductName = "KeePass Plugin"; + public static class FileNames + { + public const string Program = "KeePass.exe"; + public const string XmlSerializers = "KeePass.XmlSerializers.dll"; + + public const string NativeLib32 = "KeePassLibC32.dll"; + public const string NativeLib64 = "KeePassLibC64.dll"; + + public const string ShInstUtil = "ShInstUtil.exe"; + } + // public const string MruNameValueSplitter = @"/::/"; /// @@ -259,5 +269,19 @@ return pe.Strings.ReadSafe(strFieldId); } + + internal const string Rsa4096PublicKeyXml = + @"9Oa8Bb9if4rSYBxczLVQ3Yyae95dWQrNJ1FlqS7DoF" + + @"RF80tD2hq84vxDE8slVeSHs68KMFnJhPsXFD6nM9oTRBaUlU/alnRTUU+X/cUXbr" + + @"mhYN9DkJhM0OcWk5Vsl9Qxl613sA+hqIwmPc+el/fCM/1vP6JkHo/JTJ2OxQvDKN" + + @"4cC55pHYMZt+HX6AhemsPe7ejTG7l9nN5tHGmD+GrlwuxBTddzFBARmoknFzDPWd" + + @"QHddjuK1mXDs6lWeu73ODlSLSHMc5n0R2xMwGHN4eaiIMGzEbt0lv1aMWz+Iy1H3" + + @"XgFgWGDHX9kx8yefmfcgFIK4Y/xHU5EyGAV68ZHPatv6i4pT4ZuecIb5GSoFzVXq" + + @"8BZjbe+zDI+Wr1u8jLcBH0mySTWkF2gooQLvE1vgZXP1blsA7UFZSVFzYjBt36HQ" + + @"SJLpQ9AjjB5MKpMSlvdb5SnvjzREiFVLoBsY7KH2TMz+IG1Rh3OZTGwjQKXkgRVj" + + @"5XrEMTFRmT1zo2BHWhx8vrY6agVzqsCVqxYRbjeAhgOi6hLDMHSNAVuNg6ZHOKS8" + + @"6x6kmBcBhGJriwY017H3Oxuhfz33ehRFX/C05egCvmR2TAXbqm+CUgrq1bZ96T/y" + + @"s+O5uvKpe7H+EZuWb655Y9WuQSby+q0Vqqny7T6Z2NbEnI8nYHg5ZZP+TijSxeH0" + + @"8=AQAB"; } } diff -Nru keepass2-2.33+dfsg/KeePass/App/Configuration/AceMainWindow.cs keepass2-2.34+dfsg/KeePass/App/Configuration/AceMainWindow.cs --- keepass2-2.33+dfsg/KeePass/App/Configuration/AceMainWindow.cs 2016-03-10 13:58:02.000000000 +0000 +++ keepass2-2.34+dfsg/KeePass/App/Configuration/AceMainWindow.cs 2016-05-19 11:44:28.000000000 +0000 @@ -131,6 +131,14 @@ set { m_bCloseMin = value; } } + private bool m_bEscMin = false; + [DefaultValue(false)] + public bool EscMinimizesToTray + { + get { return m_bEscMin; } + set { m_bEscMin = value; } + } + private bool m_bMinToTray = false; [DefaultValue(false)] public bool MinimizeToTray diff -Nru keepass2-2.33+dfsg/KeePass/App/Configuration/AceSecurity.cs keepass2-2.34+dfsg/KeePass/App/Configuration/AceSecurity.cs --- keepass2-2.33+dfsg/KeePass/App/Configuration/AceSecurity.cs 2016-04-27 11:50:08.000000000 +0000 +++ keepass2-2.34+dfsg/KeePass/App/Configuration/AceSecurity.cs 2016-06-07 12:42:18.000000000 +0000 @@ -137,6 +137,14 @@ set { m_bOnMinimize = value; } } + private bool m_bOnMinimizeToTray = false; + [DefaultValue(false)] + public bool LockOnWindowMinimizeToTray + { + get { return m_bOnMinimizeToTray; } + set { m_bOnMinimizeToTray = value; } + } + private bool m_bOnSessionSwitch = false; [DefaultValue(false)] public bool LockOnSessionSwitch diff -Nru keepass2-2.33+dfsg/KeePass/App/Configuration/AceUI.cs keepass2-2.34+dfsg/KeePass/App/Configuration/AceUI.cs --- keepass2-2.33+dfsg/KeePass/App/Configuration/AceUI.cs 2016-01-01 12:28:28.000000000 +0000 +++ keepass2-2.34+dfsg/KeePass/App/Configuration/AceUI.cs 2016-05-25 08:15:04.000000000 +0000 @@ -60,6 +60,7 @@ DisableTriggers = 0x4, DisableKeyChangeDays = 0x8, HidePwQuality = 0x10, + DisableUpdateCheck = 0x20, HideBuiltInPwGenPrfInEntryDlg = 0x10000, ShowLastAccessTime = 0x20000 diff -Nru keepass2-2.33+dfsg/KeePass/DataExchange/Formats/KeePassKdb1x.cs keepass2-2.34+dfsg/KeePass/DataExchange/Formats/KeePassKdb1x.cs --- keepass2-2.33+dfsg/KeePass/DataExchange/Formats/KeePassKdb1x.cs 2016-01-01 12:28:30.000000000 +0000 +++ keepass2-2.34+dfsg/KeePass/DataExchange/Formats/KeePassKdb1x.cs 2016-05-16 11:33:56.000000000 +0000 @@ -72,7 +72,7 @@ public override bool TryBeginExport() { - return this.TryBeginImport(); + return TryBeginImport(); } public override void Import(PwDatabase pwStorage, Stream sInput, diff -Nru keepass2-2.33+dfsg/KeePass/DataExchange/Formats/StickyPwXml50.cs keepass2-2.34+dfsg/KeePass/DataExchange/Formats/StickyPwXml50.cs --- keepass2-2.33+dfsg/KeePass/DataExchange/Formats/StickyPwXml50.cs 2016-01-01 12:28:30.000000000 +0000 +++ keepass2-2.34+dfsg/KeePass/DataExchange/Formats/StickyPwXml50.cs 2016-06-09 13:41:06.000000000 +0000 @@ -39,7 +39,7 @@ { // KasperskyPwMgrXml50 derives from this - // 5.0.4.232 + // 5.0.4.232-8.0.7.78+ internal class StickyPwXml50 : FileFormatProvider { public override bool SupportsImport { get { return true; } } diff -Nru keepass2-2.33+dfsg/KeePass/Forms/MainForm.cs keepass2-2.34+dfsg/KeePass/Forms/MainForm.cs --- keepass2-2.33+dfsg/KeePass/Forms/MainForm.cs 2016-04-30 17:40:46.000000000 +0000 +++ keepass2-2.34+dfsg/KeePass/Forms/MainForm.cs 2016-06-08 21:39:32.000000000 +0000 @@ -20,14 +20,15 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.Diagnostics; using System.Drawing; +using System.Globalization; +using System.IO; +using System.Media; +using System.Security; using System.Text; using System.Threading; using System.Windows.Forms; -using System.Globalization; -using System.Diagnostics; -using System.Security; -using System.Media; using KeePass.App; using KeePass.App.Configuration; @@ -385,8 +386,43 @@ m_pluginManager.UnloadAllPlugins(); if(AppPolicy.Current.Plugins) - m_pluginManager.LoadAllPlugins(UrlUtil.GetFileDirectory( - WinUtil.GetExecutable(), false, true)); + { + string[] vExclNames = new string[] { + AppDefs.FileNames.Program, AppDefs.FileNames.XmlSerializers, + AppDefs.FileNames.NativeLib32, AppDefs.FileNames.NativeLib64, + AppDefs.FileNames.ShInstUtil + }; + + string strPlgRoot = UrlUtil.GetFileDirectory( + WinUtil.GetExecutable(), false, true); + m_pluginManager.LoadAllPlugins(strPlgRoot, SearchOption.TopDirectoryOnly, + vExclNames); + + if(!NativeLib.IsUnix()) + { + string strPlgSub = UrlUtil.EnsureTerminatingSeparator(strPlgRoot, + false) + AppDefs.PluginsDir; + m_pluginManager.LoadAllPlugins(strPlgSub, SearchOption.AllDirectories, + vExclNames); + } + else // Unix + { + try + { + DirectoryInfo diPlgRoot = new DirectoryInfo(strPlgRoot); + foreach(DirectoryInfo diSub in diPlgRoot.GetDirectories()) + { + if(diSub == null) { Debug.Assert(false); continue; } + + if(string.Equals(diSub.Name, AppDefs.PluginsDir, + StrUtil.CaseIgnoreCmp)) + m_pluginManager.LoadAllPlugins(diSub.FullName, + SearchOption.AllDirectories, vExclNames); + } + } + catch(Exception) { Debug.Assert(false); } + } + } // Delete old files *after* loading plugins (when timestamps // of loaded plugins have been updated already) diff -Nru keepass2-2.33+dfsg/KeePass/Forms/MainForm_Functions.cs keepass2-2.34+dfsg/KeePass/Forms/MainForm_Functions.cs --- keepass2-2.33+dfsg/KeePass/Forms/MainForm_Functions.cs 2016-04-27 11:48:46.000000000 +0000 +++ keepass2-2.34+dfsg/KeePass/Forms/MainForm_Functions.cs 2016-06-07 17:54:14.000000000 +0000 @@ -2960,6 +2960,7 @@ UIUtil.AssignShortcut(m_menuFileSyncFile, Keys.Control | Keys.R); UIUtil.AssignShortcut(m_menuFileSyncUrl, Keys.Control | Keys.Shift | Keys.R); UIUtil.AssignShortcut(m_menuFileLock, Keys.Control | Keys.L); + UIUtil.AssignShortcut(m_menuFileExit, Keys.Control | Keys.Q); UIUtil.AssignShortcut(m_menuEditFind, Keys.Control | Keys.F); @@ -3505,6 +3506,7 @@ UpdateUI(true, null, true, null, true, null, false); // NativeMethods.ClearIconicBitmaps(this.Handle); + Program.TempFilesPool.Clear(TempClearFlags.ContentTaggedFiles); if(this.FileClosed != null) { @@ -3797,7 +3799,13 @@ // if(MonoWorkarounds.IsRequired(649266)) this.ShowInTaskbar = true; } - if(!bMinimize) // Restore + if(bMinimize) + { + if(Program.Config.Security.WorkspaceLocking.LockOnWindowMinimizeToTray && + !IsFileLocked(null) && IsCommandTypeInvokable(null, AppCommandType.Lock)) + OnFileLock(null, EventArgs.Empty); + } + else // Restore { // EnsureVisibleForegroundWindow(false, false); // Don't! @@ -4050,7 +4058,16 @@ bool? obKeyDown = NativeMethods.IsKeyDownMessage(ref msg); if(obKeyDown.HasValue) { - if(obKeyDown.Value) LockAllDocuments(); + if(obKeyDown.Value) + { + if(Program.Config.MainWindow.EscMinimizesToTray) + { + if(IsCommandTypeInvokable(null, AppCommandType.Window)) + MinimizeToTray(true); + } + else LockAllDocuments(); + } + return true; } } @@ -5174,6 +5191,8 @@ m_menuToolsPlugins.Enabled = false; if((u & (ulong)AceUIFlags.DisableTriggers) != 0) m_menuToolsTriggers.Enabled = false; + if((u & (ulong)AceUIFlags.DisableUpdateCheck) != 0) + m_menuHelpCheckForUpdates.Enabled = false; } private static void OnFormLoadParallelAsync(object stateInfo) @@ -5183,7 +5202,7 @@ PopularPasswords.Add(Properties.Resources.MostPopularPasswords, true); string strShInstUtil = UrlUtil.GetFileDirectory( - WinUtil.GetExecutable(), true, false) + AppDefs.ShInstUtil; + WinUtil.GetExecutable(), true, false) + AppDefs.FileNames.ShInstUtil; // Unblock the application such that the user isn't // prompted next time anymore diff -Nru keepass2-2.33+dfsg/KeePass/Forms/OptionsForm.cs keepass2-2.34+dfsg/KeePass/Forms/OptionsForm.cs --- keepass2-2.33+dfsg/KeePass/Forms/OptionsForm.cs 2016-03-27 17:46:10.000000000 +0000 +++ keepass2-2.34+dfsg/KeePass/Forms/OptionsForm.cs 2016-06-07 12:42:08.000000000 +0000 @@ -301,7 +301,9 @@ } m_cdxSecurityOptions.CreateItem(aceWL, "LockOnWindowMinimize", - lvg, KPRes.LockOnMinimize); + lvg, KPRes.LockOnMinimizeTaskbar); + m_cdxSecurityOptions.CreateItem(aceWL, "LockOnWindowMinimizeToTray", + lvg, KPRes.LockOnMinimizeTray); m_cdxSecurityOptions.CreateItem(aceWL, "LockOnSessionSwitch", lvg, KPRes.LockOnSessionSwitch + strSEvSuffix, obNoSEv); m_cdxSecurityOptions.CreateItem(aceWL, "LockOnSuspend", @@ -386,14 +388,10 @@ m_cdxGuiOptions = new CheckedLVItemDXList(m_lvGuiOptions, true); - m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "CloseButtonMinimizesWindow", - lvg, KPRes.CloseButtonMinimizes); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "MinimizeToTray", lvg, KPRes.MinimizeToTray); m_cdxGuiOptions.CreateItem(Program.Config.UI.TrayIcon, "ShowOnlyIfTrayed", lvg, KPRes.ShowTrayOnlyIfTrayed); - m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "ShowFullPathInTitle", - lvg, KPRes.ShowFullPathInTitleBar); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "DropToBackAfterClipboardCopy", lvg, KPRes.DropToBackOnCopy); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "MinimizeAfterClipboardCopy", @@ -402,6 +400,12 @@ lvg, KPRes.MinimizeAfterLocking); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "MinimizeAfterOpeningDatabase", lvg, KPRes.MinimizeAfterOpeningDatabase, obNoMin); + m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "CloseButtonMinimizesWindow", + lvg, KPRes.CloseButtonMinimizes); + m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "EscMinimizesToTray", + lvg, KPRes.EscMinimizesToTray); + m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "ShowFullPathInTitle", + lvg, KPRes.ShowFullPathInTitleBar); m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "DisableSaveIfNotModified", lvg, KPRes.DisableSaveIfNotModified); diff -Nru keepass2-2.33+dfsg/KeePass/Forms/PrintForm.cs keepass2-2.34+dfsg/KeePass/Forms/PrintForm.cs --- keepass2-2.33+dfsg/KeePass/Forms/PrintForm.cs 2016-04-23 13:07:06.000000000 +0000 +++ keepass2-2.34+dfsg/KeePass/Forms/PrintForm.cs 2016-05-16 12:40:00.000000000 +0000 @@ -154,6 +154,14 @@ m_lblPreviewHint.Visible = false; } + if(!NativeLib.IsUnix()) + { + // MSHTML may create and forget temporary files under + // C:\\Users\\USER\\AppData\\Local\\Temp\\*.htm + // (e.g. when printing fails); we delete these later + Program.TempFilesPool.AddContent("*.htm", false); + } + UpdateHtmlDocument(); UpdateUIState(); } @@ -303,8 +311,12 @@ sb.AppendLine("\tword-wrap: break-word;"); sb.AppendLine("}"); - sb.AppendLine("-->"); + // Add the temporary content identifier + sb.AppendLine("." + Program.TempFilesPool.TempContentTag + " {"); + sb.AppendLine("\tfont-size: 10pt;"); + sb.AppendLine("}"); + sb.AppendLine("-->"); sb.AppendLine(""); sb.AppendLine("

    " + StrUtil.StringToHtml(pgDataSource.Name) + "

    "); diff -Nru keepass2-2.33+dfsg/KeePass/Plugins/PluginManager.cs keepass2-2.34+dfsg/KeePass/Plugins/PluginManager.cs --- keepass2-2.33+dfsg/KeePass/Plugins/PluginManager.cs 2016-01-01 12:28:34.000000000 +0000 +++ keepass2-2.34+dfsg/KeePass/Plugins/PluginManager.cs 2016-06-07 18:02:28.000000000 +0000 @@ -59,37 +59,34 @@ return m_vPlugins.GetEnumerator(); } - public void LoadAllPlugins(string strDirectory) + public void LoadAllPlugins(string strDirectory, SearchOption so, + string[] vExclNames) { Debug.Assert(m_host != null); try { string strPath = strDirectory; - if(Directory.Exists(strPath) == false) - { - Debug.Assert(false); - return; - } + if(!Directory.Exists(strPath)) return; // No assert DirectoryInfo di = new DirectoryInfo(strPath); - FileInfo[] vFiles = UrlUtil.GetFileInfos(di, "*.dll", - SearchOption.AllDirectories).ToArray(); - LoadPlugins(vFiles, null, null, true); - - vFiles = UrlUtil.GetFileInfos(di, "*.exe", - SearchOption.AllDirectories).ToArray(); - LoadPlugins(vFiles, null, null, true); - - vFiles = UrlUtil.GetFileInfos(di, "*." + PlgxPlugin.PlgxExtension, - SearchOption.AllDirectories).ToArray(); - if(vFiles.Length > 0) + List lFiles = UrlUtil.GetFileInfos(di, "*.dll", so); + FilterList(lFiles, vExclNames); + LoadPlugins(lFiles, null, null, true); + + lFiles = UrlUtil.GetFileInfos(di, "*.exe", so); + FilterList(lFiles, vExclNames); + LoadPlugins(lFiles, null, null, true); + + lFiles = UrlUtil.GetFileInfos(di, "*." + PlgxPlugin.PlgxExtension, so); + FilterList(lFiles, vExclNames); + if(lFiles.Count > 0) { OnDemandStatusDialog dlgStatus = new OnDemandStatusDialog(true, null); dlgStatus.StartLogging(PwDefs.ShortProductName, false); - foreach(FileInfo fi in vFiles) + foreach(FileInfo fi in lFiles) PlgxPlugin.Load(fi.FullName, dlgStatus); dlgStatus.EndLogging(); @@ -103,16 +100,18 @@ { if(strFilePath == null) throw new ArgumentNullException("strFilePath"); - LoadPlugins(new FileInfo[] { new FileInfo(strFilePath) }, strTypeName, - strDisplayFilePath, bSkipCacheFile); + List l = new List(); + l.Add(new FileInfo(strFilePath)); + + LoadPlugins(l, strTypeName, strDisplayFilePath, bSkipCacheFile); } - private void LoadPlugins(FileInfo[] vFiles, string strTypeName, + private void LoadPlugins(List lFiles, string strTypeName, string strDisplayFilePath, bool bSkipCacheFiles) { string strCacheRoot = PlgxCache.GetCacheRoot(); - foreach(FileInfo fi in vFiles) + foreach(FileInfo fi in lFiles) { if(bSkipCacheFiles && fi.FullName.StartsWith(strCacheRoot, StrUtil.CaseIgnoreCmp)) @@ -244,5 +243,26 @@ return false; } + + private static void FilterList(List l, string[] vExclNames) + { + if((l == null) || (vExclNames == null)) { Debug.Assert(false); return; } + + for(int i = l.Count - 1; i >= 0; --i) + { + string strName = UrlUtil.GetFileName(l[i].FullName); + + foreach(string strExcl in vExclNames) + { + if(string.IsNullOrEmpty(strExcl)) { Debug.Assert(false); continue; } + + if(string.Equals(strName, strExcl, StrUtil.CaseIgnoreCmp)) + { + l.RemoveAt(i); + break; + } + } + } + } } } diff -Nru keepass2-2.33+dfsg/KeePass/Program.cs keepass2-2.34+dfsg/KeePass/Program.cs --- keepass2-2.33+dfsg/KeePass/Program.cs 2016-03-18 10:45:14.000000000 +0000 +++ keepass2-2.34+dfsg/KeePass/Program.cs 2016-05-16 11:23:40.000000000 +0000 @@ -587,6 +587,12 @@ AppLogEx.Close(); + if(m_tempFilesPool != null) + { + m_tempFilesPool.Clear(TempClearFlags.All); + m_tempFilesPool.WaitForThreads(); + } + EnableThemingInScope.StaticDispose(); } @@ -594,8 +600,6 @@ { IpcBroadcast.StopServer(); - if(m_tempFilesPool != null) m_tempFilesPool.Clear(); - EntryMenu.Destroy(); GlobalMutexPool.ReleaseAll(); diff -Nru keepass2-2.33+dfsg/KeePass/Properties/AssemblyInfo.cs keepass2-2.34+dfsg/KeePass/Properties/AssemblyInfo.cs --- keepass2-2.33+dfsg/KeePass/Properties/AssemblyInfo.cs 2016-05-07 08:26:20.000000000 +0000 +++ keepass2-2.34+dfsg/KeePass/Properties/AssemblyInfo.cs 2016-06-11 07:51:44.000000000 +0000 @@ -38,5 +38,5 @@ [assembly: Guid("02020c52-c0da-47c0-9f3f-a6fe76cee400")] // Assembly version information -[assembly: AssemblyVersion("2.33.0.*")] -[assembly: AssemblyFileVersion("2.33.0.0")] +[assembly: AssemblyVersion("2.34.0.*")] +[assembly: AssemblyFileVersion("2.34.0.0")] diff -Nru keepass2-2.33+dfsg/KeePass/Resources/KPRes.Generated.cs keepass2-2.34+dfsg/KeePass/Resources/KPRes.Generated.cs --- keepass2-2.33+dfsg/KeePass/Resources/KPRes.Generated.cs 2016-04-12 08:20:36.000000000 +0000 +++ keepass2-2.34+dfsg/KeePass/Resources/KPRes.Generated.cs 2016-06-07 14:24:58.000000000 +0000 @@ -254,6 +254,7 @@ m_strError = TryGetEx(dictNew, "Error", m_strError); m_strErrorCode = TryGetEx(dictNew, "ErrorCode", m_strErrorCode); m_strErrors = TryGetEx(dictNew, "Errors", m_strErrors); + m_strEscMinimizesToTray = TryGetEx(dictNew, "EscMinimizesToTray", m_strEscMinimizesToTray); m_strEvent = TryGetEx(dictNew, "Event", m_strEvent); m_strExecuteCmdLineUrl = TryGetEx(dictNew, "ExecuteCmdLineUrl", m_strExecuteCmdLineUrl); m_strExitInsteadOfLockingAfterTime = TryGetEx(dictNew, "ExitInsteadOfLockingAfterTime", m_strExitInsteadOfLockingAfterTime); @@ -425,7 +426,8 @@ m_strLocked = TryGetEx(dictNew, "Locked", m_strLocked); m_strLockMenuLock = TryGetEx(dictNew, "LockMenuLock", m_strLockMenuLock); m_strLockMenuUnlock = TryGetEx(dictNew, "LockMenuUnlock", m_strLockMenuUnlock); - m_strLockOnMinimize = TryGetEx(dictNew, "LockOnMinimize", m_strLockOnMinimize); + m_strLockOnMinimizeTaskbar = TryGetEx(dictNew, "LockOnMinimizeTaskbar", m_strLockOnMinimizeTaskbar); + m_strLockOnMinimizeTray = TryGetEx(dictNew, "LockOnMinimizeTray", m_strLockOnMinimizeTray); m_strLockOnRemoteControlChange = TryGetEx(dictNew, "LockOnRemoteControlChange", m_strLockOnRemoteControlChange); m_strLockOnSessionSwitch = TryGetEx(dictNew, "LockOnSessionSwitch", m_strLockOnSessionSwitch); m_strLockOnSuspend = TryGetEx(dictNew, "LockOnSuspend", m_strLockOnSuspend); @@ -987,6 +989,7 @@ "Error", "ErrorCode", "Errors", + "EscMinimizesToTray", "Event", "ExecuteCmdLineUrl", "ExitInsteadOfLockingAfterTime", @@ -1158,7 +1161,8 @@ "Locked", "LockMenuLock", "LockMenuUnlock", - "LockOnMinimize", + "LockOnMinimizeTaskbar", + "LockOnMinimizeTray", "LockOnRemoteControlChange", "LockOnSessionSwitch", "LockOnSuspend", @@ -4004,6 +4008,17 @@ get { return m_strErrors; } } + private static string m_strEscMinimizesToTray = + @"Esc minimizes to tray instead of locking the workspace"; + /// + /// Look up a localized string similar to + /// 'Esc minimizes to tray instead of locking the workspace'. + /// + public static string EscMinimizesToTray + { + get { return m_strEscMinimizesToTray; } + } + private static string m_strEvent = @"Event"; /// @@ -5885,15 +5900,26 @@ get { return m_strLockMenuUnlock; } } - private static string m_strLockOnMinimize = - @"Lock workspace when minimizing main window"; + private static string m_strLockOnMinimizeTaskbar = + @"Lock workspace when minimizing main window to taskbar"; + /// + /// Look up a localized string similar to + /// 'Lock workspace when minimizing main window to taskbar'. + /// + public static string LockOnMinimizeTaskbar + { + get { return m_strLockOnMinimizeTaskbar; } + } + + private static string m_strLockOnMinimizeTray = + @"Lock workspace when minimizing main window to tray"; /// /// Look up a localized string similar to - /// 'Lock workspace when minimizing main window'. + /// 'Lock workspace when minimizing main window to tray'. /// - public static string LockOnMinimize + public static string LockOnMinimizeTray { - get { return m_strLockOnMinimize; } + get { return m_strLockOnMinimizeTray; } } private static string m_strLockOnRemoteControlChange = diff -Nru keepass2-2.33+dfsg/KeePass/Util/TempFilesPool.cs keepass2-2.34+dfsg/KeePass/Util/TempFilesPool.cs --- keepass2-2.33+dfsg/KeePass/Util/TempFilesPool.cs 2016-01-01 12:28:38.000000000 +0000 +++ keepass2-2.34+dfsg/KeePass/Util/TempFilesPool.cs 2016-05-16 14:20:48.000000000 +0000 @@ -19,43 +19,124 @@ using System; using System.Collections.Generic; -using System.Text; -using System.IO; using System.Diagnostics; +using System.IO; +using System.Text; +using System.Threading; + +using KeePassLib.Utility; namespace KeePass.Util { + [Flags] + internal enum TempClearFlags + { + None = 0, + + RegisteredFiles = 1, + RegisteredDirectories = 2, + + ContentTaggedFiles = 4, + + All = 0x7FFF + } + public sealed class TempFilesPool { private List m_vFiles = new List(); private List> m_vDirs = new List>(); + private Dictionary m_dContentLoc = new Dictionary(); + + private long m_nThreads = 0; + + private string m_strContentTag = null; + public string TempContentTag + { + get + { + if(m_strContentTag == null) + { + // The tag should consist only of lower case letters + // and digits (for maximum compatibility); it can + // for instance be used as CSS class name + string strL = "cfbm4v27xyk0dk5lyeq5"; + string strR = "qxi7bxozyph6qyexr9kw"; // Together ~207 bit + + // Avoid that the content tag is directly visible in + // the source code and binaries, in case the development + // environment creates temporary files containing the + // tag that might then be deleted unintentionally + StringBuilder sb = new StringBuilder(); + sb.Append(strL); + for(int i = strR.Length - 1; i >= 0; --i) + sb.Append(strR[i]); // Reverse + + m_strContentTag = sb.ToString(); + } + + return m_strContentTag; + } + } + public TempFilesPool() { } - public void Clear() +#if DEBUG + ~TempFilesPool() { - for(int i = m_vFiles.Count - 1; i >= 0; --i) + Debug.Assert(Interlocked.Read(ref m_nThreads) == 0); + } +#endif + + internal void Clear(TempClearFlags f) + { + if((f & TempClearFlags.RegisteredFiles) != TempClearFlags.None) { - try + for(int i = m_vFiles.Count - 1; i >= 0; --i) { - File.Delete(m_vFiles[i]); - m_vFiles.RemoveAt(i); + try + { + if(File.Exists(m_vFiles[i])) + File.Delete(m_vFiles[i]); + + m_vFiles.RemoveAt(i); + } + catch(Exception) { Debug.Assert(false); } } - catch(Exception) { Debug.Assert(false); } } - for(int j = m_vDirs.Count - 1; j >= 0; --j) + if((f & TempClearFlags.RegisteredDirectories) != TempClearFlags.None) { - try + for(int i = m_vDirs.Count - 1; i >= 0; --i) { - Directory.Delete(m_vDirs[j].Key, m_vDirs[j].Value); - m_vDirs.RemoveAt(j); + try + { + if(Directory.Exists(m_vDirs[i].Key)) + Directory.Delete(m_vDirs[i].Key, m_vDirs[i].Value); + + m_vDirs.RemoveAt(i); + } + catch(Exception) { Debug.Assert(false); } + } + } + + if((f & TempClearFlags.ContentTaggedFiles) != TempClearFlags.None) + ClearContentAsync(); + } + + internal void WaitForThreads() + { + try + { + while(Interlocked.Read(ref m_nThreads) > 0) + { + Thread.Sleep(1); } - catch(Exception) { Debug.Assert(false); } } + catch(Exception) { Debug.Assert(false); } } public void Add(string strTempFile) @@ -66,12 +147,25 @@ m_vFiles.Add(strTempFile); } - public void AddDirectory(string strTempDir, bool bDeleteRecursive) + public void AddDirectory(string strTempDir, bool bRecursive) { Debug.Assert(strTempDir != null); if(string.IsNullOrEmpty(strTempDir)) return; - m_vDirs.Add(new KeyValuePair(strTempDir, bDeleteRecursive)); + m_vDirs.Add(new KeyValuePair(strTempDir, bRecursive)); + } + + public void AddContent(string strFilePattern, bool bRecursive) + { + if(string.IsNullOrEmpty(strFilePattern)) { Debug.Assert(false); return; } + + lock(m_dContentLoc) + { + if(m_dContentLoc.ContainsKey(strFilePattern) && !bRecursive) + return; // Do not overwrite recursive with non-recursive + + m_dContentLoc[strFilePattern] = bRecursive; + } } public string GetTempFileName() @@ -84,7 +178,7 @@ string strFile = Path.GetTempFileName(); m_vFiles.Add(strFile); - if(bCreateEmptyFile == false) + if(!bCreateEmptyFile) { try { File.Delete(strFile); } catch(Exception) { Debug.Assert(false); } @@ -96,8 +190,7 @@ public bool Delete(string strTempFile) { Debug.Assert(strTempFile != null); - if(strTempFile == null) return false; - if(strTempFile.Length == 0) return false; + if(string.IsNullOrEmpty(strTempFile)) return false; int nFile = m_vFiles.IndexOf(strTempFile); if(nFile < 0) { Debug.Assert(false); return false; } @@ -114,5 +207,95 @@ return bResult; } + + private void ClearContentAsync() + { + lock(m_dContentLoc) + { + if(m_dContentLoc.Count == 0) return; + } + + Interlocked.Increment(ref m_nThreads); // Here, not in thread + try { ThreadPool.QueueUserWorkItem(this.ClearContentTh); } + catch(Exception) + { + Debug.Assert(false); + Interlocked.Decrement(ref m_nThreads); + } + } + + private void ClearContentTh(object state) + { + try + { + Debug.Assert(Interlocked.Read(ref m_nThreads) > 0); + + string strTag = m_strContentTag; + if(string.IsNullOrEmpty(strTag)) { Debug.Assert(false); return; } + + UnicodeEncoding ue = new UnicodeEncoding(false, false, false); + byte[] pbTagA = StrUtil.Utf8.GetBytes(strTag); + byte[] pbTagW = ue.GetBytes(strTag); + + string strTempPath = UrlUtil.GetTempPath(); + + Dictionary dToDo; + lock(m_dContentLoc) + { + dToDo = new Dictionary(m_dContentLoc); + m_dContentLoc.Clear(); + } + + foreach(KeyValuePair kvp in dToDo) + { + bool bSuccess = false; + try + { + bSuccess = ClearContentPriv(strTempPath, kvp.Key, kvp.Value, + pbTagA, pbTagW); + } + catch(Exception) { Debug.Assert(false); } + + if(!bSuccess) + { + lock(m_dContentLoc) + { + m_dContentLoc[kvp.Key] = kvp.Value; // Try again next time + } + } + } + } + catch(Exception) { Debug.Assert(false); } + finally { Interlocked.Decrement(ref m_nThreads); } + } + + private bool ClearContentPriv(string strTempPath, string strFilePattern, + bool bRecursive, byte[] pbTagA, byte[] pbTagW) + { + string[] vFiles = Directory.GetFiles(strTempPath, strFilePattern, + (bRecursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly)); + bool bSuccess = true; + + foreach(string strFile in vFiles) + { + if(string.IsNullOrEmpty(strFile)) continue; + if((strFile == ".") || (strFile == "..")) continue; + + try + { + byte[] pb = File.ReadAllBytes(strFile); + if(pb == null) { Debug.Assert(false); continue; } + + if((MemUtil.IndexOf(pb, pbTagA) >= 0) || + (MemUtil.IndexOf(pb, pbTagW) >= 0)) + { + File.Delete(strFile); + } + } + catch(Exception) { Debug.Assert(false); bSuccess = false; } + } + + return bSuccess; + } } } diff -Nru keepass2-2.33+dfsg/KeePass/Util/UpdateCheckEx.cs keepass2-2.34+dfsg/KeePass/Util/UpdateCheckEx.cs --- keepass2-2.33+dfsg/KeePass/Util/UpdateCheckEx.cs 2016-01-01 12:28:38.000000000 +0000 +++ keepass2-2.34+dfsg/KeePass/Util/UpdateCheckEx.cs 2016-06-07 15:37:20.000000000 +0000 @@ -19,12 +19,14 @@ using System; using System.Collections.Generic; -using System.Text; +using System.Diagnostics; using System.IO; +using System.Security.Cryptography; +using System.Text; using System.Threading; using System.Windows.Forms; -using System.Diagnostics; +using KeePass.App; using KeePass.Forms; using KeePass.Plugins; using KeePass.Resources; @@ -102,6 +104,9 @@ public static class UpdateCheckEx { + private static Dictionary g_dFileSigKeys = + new Dictionary(); + private sealed class UpdateCheckParams { public readonly bool ForceUI; @@ -369,6 +374,11 @@ strData = StrUtil.NormalizeNewLines(strData, false); string[] vLines = strData.Split('\n'); + string strSigKey; + g_dFileSigKeys.TryGetValue(iocSource.Path.ToLowerInvariant(), out strSigKey); + string strLdSig = null; + StringBuilder sbToVerify = ((strSigKey != null) ? new StringBuilder() : null); + List l = new List(); bool bHeader = true, bFooterFound = false; char chSep = ':'; // Modified by header @@ -381,6 +391,9 @@ { chSep = str[0]; bHeader = false; + + string[] vHdr = str.Split(chSep); + if(vHdr.Length >= 2) strLdSig = vHdr[1]; } else if(str[0] == chSep) { @@ -389,7 +402,13 @@ } else // Component info { - string[] vInfo = str.Split(new char[] { chSep }); + if(sbToVerify != null) + { + sbToVerify.Append(str); + sbToVerify.Append('\n'); + } + + string[] vInfo = str.Split(chSep); if(vInfo.Length >= 2) { UpdateComponentInfo c = new UpdateComponentInfo( @@ -400,8 +419,15 @@ } } } + if(!bFooterFound) { Debug.Assert(false); return null; } + + if(sbToVerify != null) + { + if(!VerifySignature(sbToVerify.ToString(), strLdSig, strSigKey)) + return null; + } - return (bFooterFound ? l : null); + return l; } private static void AddComponent(List l, @@ -497,8 +523,53 @@ return false; } + private static bool VerifySignature(string strContent, string strSig, + string strKey) + { + if(string.IsNullOrEmpty(strSig)) { Debug.Assert(false); return false; } + + try + { + byte[] pbMsg = StrUtil.Utf8.GetBytes(strContent); + byte[] pbSig = Convert.FromBase64String(strSig); + + using(SHA512Managed sha = new SHA512Managed()) + { + using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) + { + // Watching this code in the debugger may result in a + // CryptographicException when disposing the object + rsa.PersistKeyInCsp = false; // Default key + rsa.FromXmlString(strKey); + rsa.PersistKeyInCsp = false; // Loaded key + + if(!rsa.VerifyData(pbMsg, sha, pbSig)) + { + Debug.Assert(false); + return false; + } + + rsa.PersistKeyInCsp = false; + } + } + } + catch(Exception) { Debug.Assert(false); return false; } + + return true; + } + + public static void SetFileSigKey(string strUrl, string strKey) + { + if(string.IsNullOrEmpty(strUrl)) { Debug.Assert(false); return; } + if(string.IsNullOrEmpty(strKey)) { Debug.Assert(false); return; } + + g_dFileSigKeys[strUrl.ToLowerInvariant()] = strKey; + } + public static void EnsureConfigured(Form fParent) { + SetFileSigKey(PwDefs.VersionUrl, AppDefs.Rsa4096PublicKeyXml); + if(Program.Config.Application.Start.CheckForUpdateConfigured) return; // If the user has manually enabled the automatic update check diff -Nru keepass2-2.33+dfsg/KeePass/Util/XmlSerialization/XmlSerializerEx.Gen.cs keepass2-2.34+dfsg/KeePass/Util/XmlSerialization/XmlSerializerEx.Gen.cs --- keepass2-2.33+dfsg/KeePass/Util/XmlSerialization/XmlSerializerEx.Gen.cs 2016-05-06 09:17:26.000000000 +0000 +++ keepass2-2.34+dfsg/KeePass/Util/XmlSerialization/XmlSerializerEx.Gen.cs 2016-06-11 07:32:22.000000000 +0000 @@ -329,6 +329,9 @@ case "CloseButtonMinimizesWindow": o.CloseButtonMinimizesWindow = ReadBoolean(xr); break; + case "EscMinimizesToTray": + o.EscMinimizesToTray = ReadBoolean(xr); + break; case "MinimizeToTray": o.MinimizeToTray = ReadBoolean(xr); break; @@ -1673,6 +1676,9 @@ case "LockOnWindowMinimize": o.LockOnWindowMinimize = ReadBoolean(xr); break; + case "LockOnWindowMinimizeToTray": + o.LockOnWindowMinimizeToTray = ReadBoolean(xr); + break; case "LockOnSessionSwitch": o.LockOnSessionSwitch = ReadBoolean(xr); break; diff -Nru keepass2-2.33+dfsg/KeePassLib/Properties/AssemblyInfo.cs keepass2-2.34+dfsg/KeePassLib/Properties/AssemblyInfo.cs --- keepass2-2.33+dfsg/KeePassLib/Properties/AssemblyInfo.cs 2016-05-07 08:26:22.000000000 +0000 +++ keepass2-2.34+dfsg/KeePassLib/Properties/AssemblyInfo.cs 2016-06-11 07:51:46.000000000 +0000 @@ -38,5 +38,5 @@ [assembly: Guid("395f6eec-a1e0-4438-aa82-b75099348134")] // Assembly version information -[assembly: AssemblyVersion("2.33.0.*")] -[assembly: AssemblyFileVersion("2.33.0.0")] +[assembly: AssemblyVersion("2.34.0.*")] +[assembly: AssemblyFileVersion("2.34.0.0")] diff -Nru keepass2-2.33+dfsg/KeePassLib/PwDefs.cs keepass2-2.34+dfsg/KeePassLib/PwDefs.cs --- keepass2-2.33+dfsg/KeePassLib/PwDefs.cs 2016-05-07 08:26:18.000000000 +0000 +++ keepass2-2.34+dfsg/KeePassLib/PwDefs.cs 2016-06-11 07:51:42.000000000 +0000 @@ -55,18 +55,18 @@ /// e.g. 2.19 = 0x02130000. /// It is highly recommended to use FileVersion64 instead. /// - public const uint Version32 = 0x02210000; + public const uint Version32 = 0x02220000; /// /// Version, encoded as 64-bit unsigned integer /// (component-wise, 16 bits per component). /// - public const ulong FileVersion64 = 0x0002002100000000UL; + public const ulong FileVersion64 = 0x0002002200000000UL; /// /// Version, encoded as string. /// - public const string VersionString = "2.33"; + public const string VersionString = "2.34"; public const string Copyright = @"Copyright © 2003-2016 Dominik Reichl"; @@ -94,7 +94,8 @@ /// URL to a TXT file (eventually compressed) that contains information /// about the latest KeePass version available on the website. ///
    - public const string VersionUrl = "http://keepass.info/update/version2x.txt.gz"; + public const string VersionUrl = "https://sslsites.de/keepass.info/update/version2x.txt.gz"; + // public const string VersionUrl = "http://keepass.info/update/version2x.txt.gz"; /// /// URL to the root path of the online KeePass help. Terminated by diff -Nru keepass2-2.33+dfsg/KeePassLib/Utility/AppLogEx.cs keepass2-2.34+dfsg/KeePassLib/Utility/AppLogEx.cs --- keepass2-2.33+dfsg/KeePassLib/Utility/AppLogEx.cs 2016-01-17 15:03:54.000000000 +0000 +++ keepass2-2.34+dfsg/KeePassLib/Utility/AppLogEx.cs 2016-05-16 12:59:44.000000000 +0000 @@ -38,8 +38,7 @@ public static void Open(string strPrefix) { - return; // Logging is not enabled in normal builds of KeePass! - + // Logging is not enabled in normal builds of KeePass! /* AppLogEx.Close(); diff -Nru keepass2-2.33+dfsg/ShInstUtil/ShInstUtil.rc keepass2-2.34+dfsg/ShInstUtil/ShInstUtil.rc --- keepass2-2.33+dfsg/ShInstUtil/ShInstUtil.rc 2016-05-07 08:28:36.000000000 +0000 +++ keepass2-2.34+dfsg/ShInstUtil/ShInstUtil.rc 2016-06-11 07:53:58.000000000 +0000 @@ -65,8 +65,8 @@ // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,33,0,0 - PRODUCTVERSION 2,33,0,0 + FILEVERSION 2,34,0,0 + PRODUCTVERSION 2,34,0,0 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -83,12 +83,12 @@ BEGIN VALUE "CompanyName", "Dominik Reichl" VALUE "FileDescription", "ShInstUtil - KeePass Helper Utility" - VALUE "FileVersion", "2.33.0.0" + VALUE "FileVersion", "2.34.0.0" VALUE "InternalName", "ShInstUtil" VALUE "LegalCopyright", "Copyright (c) 2007-2016 Dominik Reichl" VALUE "OriginalFilename", "ShInstUtil.exe" VALUE "ProductName", "ShInstUtil - KeePass Helper Utility" - VALUE "ProductVersion", "2.33.0.0" + VALUE "ProductVersion", "2.34.0.0" END END BLOCK "VarFileInfo" diff -Nru keepass2-2.33+dfsg/Translation/DefaultText.xml keepass2-2.34+dfsg/Translation/DefaultText.xml --- keepass2-2.33+dfsg/Translation/DefaultText.xml 2016-03-27 17:41:54.000000000 +0000 +++ keepass2-2.34+dfsg/Translation/DefaultText.xml 2016-06-07 12:41:36.000000000 +0000 @@ -685,6 +685,9 @@ Errors + + Esc minimizes to tray instead of locking the workspace + Event @@ -1198,8 +1201,11 @@ Un&lock Workspace - - Lock workspace when minimizing main window + + Lock workspace when minimizing main window to taskbar + + + Lock workspace when minimizing main window to tray Lock workspace when the remote control mode changes diff -Nru keepass2-2.33+dfsg/Translation/TrlUtil/Properties/AssemblyInfo.cs keepass2-2.34+dfsg/Translation/TrlUtil/Properties/AssemblyInfo.cs --- keepass2-2.33+dfsg/Translation/TrlUtil/Properties/AssemblyInfo.cs 2016-05-07 08:26:24.000000000 +0000 +++ keepass2-2.34+dfsg/Translation/TrlUtil/Properties/AssemblyInfo.cs 2016-06-11 07:51:48.000000000 +0000 @@ -38,5 +38,5 @@ [assembly: Guid("39aa6f93-a1c9-497f-bad2-cc42a61d5710")] // Assembly version information -[assembly: AssemblyVersion("2.33.0.*")] -[assembly: AssemblyFileVersion("2.33.0.0")] +[assembly: AssemblyVersion("2.34.0.*")] +[assembly: AssemblyFileVersion("2.34.0.0")]