Release 2.1.3

- Fix possible overflow in zxcvbn library [#363]
- Revert HiDPI setting to avoid problems on laptop screens [#332]
- Set file meta properties in Windows executable [#330]
- Suppress error message when auto-reloading a locked database [#345]
- Improve usability of question dialog when database is already locked by a different instance [#346]
- Fix compiler warnings in QHttp library [#351]
- Use unified toolbar on Mac OS X [#361]
- Fix an issue on X11 where the main window would be raised instead of closed on Alt+F4 [#362]
This commit is contained in:
Janek Bevendorff 2017-03-02 21:56:54 +01:00
commit 76dcfb5ed0
No known key found for this signature in database
GPG Key ID: CFEC2F6850BFFA53
26 changed files with 1766 additions and 697 deletions

View File

@ -1,3 +1,15 @@
2.1.3 (2017-03-03)
=========================
- Fix possible overflow in zxcvbn library [#363]
- Revert HiDPI setting to avoid problems on laptop screens [#332]
- Set file meta properties in Windows executable [#330]
- Suppress error message when auto-reloading a locked database [#345]
- Improve usability of question dialog when database is already locked by a different instance [#346]
- Fix compiler warnings in QHttp library [#351]
- Use unified toolbar on Mac OS X [#361]
- Fix an issue on X11 where the main window would be raised instead of closed on Alt+F4 [#362]
2.1.2 (2017-02-17)
=========================

View File

@ -38,8 +38,8 @@ option(WITH_XC_AUTOTYPE "Include Autotype." OFF)
option(WITH_XC_HTTP "Include KeePassHTTP." OFF)
option(WITH_XC_YUBIKEY "Include Yubikey support." OFF)
set(KEEPASSXC_VERSION "2.1.2")
set(KEEPASSXC_VERSION_NUM "2.1.2")
set(KEEPASSXC_VERSION "2.1.3")
set(KEEPASSXC_VERSION_NUM "2.1.3")
if("${CMAKE_C_COMPILER}" MATCHES "clang$" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_COMPILER_IS_CLANG 1)

View File

@ -0,0 +1,118 @@
# The MIT License (MIT)
#
# Copyright (c) 2015, by [halex2005](mailto:akharlov@gmail.com)
#
# Permission is hereby granted, free of charge, to any person obtaining a copy of
# this software and associated documentation files (the "Software"), to deal in
# the Software without restriction, including without limitation the rights to
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
# the Software, and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
include (CMakeParseArguments)
set (GenerateProductVersionCurrentDir ${CMAKE_CURRENT_LIST_DIR})
# generate_product_version() function
#
# This function uses VersionInfo.in template file and VersionResource.rc file
# to generate WIN32 resource with version information and general resource strings.
#
# Usage:
# generate_product_version(
# SomeOutputResourceVariable
# NAME MyGreatProject
# ICON ${PATH_TO_APP_ICON}
# VERSION_MAJOR 2
# VERSION_MINOR 3
# VERSION_PATH ${BUILD_COUNTER}
# VERSION_REVISION ${BUILD_REVISION}
# )
# where BUILD_COUNTER and BUILD_REVISION could be values from your CI server.
#
# You can use generated resource for your executable targets:
# add_executable(target-name ${target-files} ${SomeOutputResourceVariable})
#
# You can specify resource strings in arguments:
# NAME - name of executable (no defaults, ex: Microsoft Word)
# BUNDLE - bundle (${NAME} is default, ex: Microsoft Office)
# VERSION_MAJOR - 1 is default
# VERSION_MINOR - 0 is default
# VERSION_PATCH - 0 is default
# COMPANY_NAME - your company name (no defaults)
# COMPANY_COPYRIGHT - ${COMPANY_NAME} (C) Copyright ${CURRENT_YEAR} is default
# COMMENTS - ${NAME} v${VERSION_MAJOR}.${VERSION_MINOR} is default
# ORIGINAL_FILENAME - ${NAME} is default
# INTERNAL_NAME - ${NAME} is default
# FILE_DESCRIPTION - ${NAME} is default
function(generate_product_version outfiles)
set (options)
set (oneValueArgs
NAME
BUNDLE
VERSION_MAJOR
VERSION_MINOR
VERSION_PATCH
COMPANY_NAME
COMPANY_COPYRIGHT
COMMENTS
ORIGINAL_FILENAME
INTERNAL_NAME
FILE_DESCRIPTION)
set (multiValueArgs)
cmake_parse_arguments(PRODUCT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
if (NOT PRODUCT_BUNDLE OR "${PRODUCT_BUNDLE}" STREQUAL "")
set(PRODUCT_BUNDLE "${PRODUCT_NAME}")
endif()
if (NOT PRODUCT_VERSION_MAJOR OR "${PRODUCT_VERSION_MAJOR}" STREQUAL "")
set(PRODUCT_VERSION_MAJOR 1)
endif()
if (NOT PRODUCT_VERSION_MINOR OR "${PRODUCT_VERSION_MINOR}" STREQUAL "")
set(PRODUCT_VERSION_MINOR 0)
endif()
if (NOT PRODUCT_VERSION_PATCH OR "${PRODUCT_VERSION_PATCH}" STREQUAL "")
set(PRODUCT_VERSION_PATCH 0)
endif()
if (NOT PRODUCT_COMPANY_COPYRIGHT OR "${PRODUCT_COMPANY_COPYRIGHT}" STREQUAL "")
string(TIMESTAMP PRODUCT_CURRENT_YEAR "%Y")
set(PRODUCT_COMPANY_COPYRIGHT "Copyright (C) ${PRODUCT_CURRENT_YEAR} ${PRODUCT_COMPANY_NAME}")
endif()
if (NOT PRODUCT_COMMENTS OR "${PRODUCT_COMMENTS}" STREQUAL "")
set(PRODUCT_COMMENTS "${PRODUCT_NAME} v${PRODUCT_VERSION_MAJOR}.${PRODUCT_VERSION_MINOR}")
endif()
if (NOT PRODUCT_ORIGINAL_FILENAME OR "${PRODUCT_ORIGINAL_FILENAME}" STREQUAL "")
set(PRODUCT_ORIGINAL_FILENAME "${PRODUCT_NAME}")
endif()
if (NOT PRODUCT_INTERNAL_NAME OR "${PRODUCT_INTERNAL_NAME}" STREQUAL "")
set(PRODUCT_INTERNAL_NAME "${PRODUCT_NAME}")
endif()
if (NOT PRODUCT_FILE_DESCRIPTION OR "${PRODUCT_FILE_DESCRIPTION}" STREQUAL "")
set(PRODUCT_FILE_DESCRIPTION "${PRODUCT_NAME}")
endif()
set (_VersionInfoFile ${CMAKE_CURRENT_BINARY_DIR}/VersionInfo.h)
set (_VersionResourceFile ${CMAKE_CURRENT_BINARY_DIR}/VersionResource.rc)
configure_file(
${GenerateProductVersionCurrentDir}/VersionInfo.in
${_VersionInfoFile}
@ONLY)
configure_file(
${GenerateProductVersionCurrentDir}/VersionResource.rc
${_VersionResourceFile}
COPYONLY)
list(APPEND ${outfiles} ${_VersionInfoFile} ${_VersionResourceFile})
set (${outfiles} ${${outfiles}} PARENT_SCOPE)
endfunction()

68
cmake/VersionInfo.in Normal file
View File

@ -0,0 +1,68 @@
#pragma once
#ifndef PRODUCT_VERSION_MAJOR
#define PRODUCT_VERSION_MAJOR @PRODUCT_VERSION_MAJOR@
#endif
#ifndef PRODUCT_VERSION_MINOR
#define PRODUCT_VERSION_MINOR @PRODUCT_VERSION_MINOR@
#endif
#ifndef PRODUCT_VERSION_PATCH
#define PRODUCT_VERSION_PATCH @PRODUCT_VERSION_PATCH@
#endif
#ifndef FILE_VERSION_MAJOR
#define FILE_VERSION_MAJOR @PRODUCT_VERSION_MAJOR@
#endif
#ifndef FILE_VERSION_MINOR
#define FILE_VERSION_MINOR @PRODUCT_VERSION_MINOR@
#endif
#ifndef FILE_VERSION_PATCH
#define FILE_VERSION_PATCH @PRODUCT_VERSION_PATCH@
#endif
#ifndef __TO_STRING
#define __TO_STRING_IMPL(x) #x
#define __TO_STRING(x) __TO_STRING_IMPL(x)
#endif
#define PRODUCT_VERSION_MAJOR_MINOR_STR __TO_STRING(PRODUCT_VERSION_MAJOR) "." __TO_STRING(PRODUCT_VERSION_MINOR)
#define PRODUCT_VERSION_MAJOR_MINOR_PATCH_STR PRODUCT_VERSION_MAJOR_MINOR_STR "." __TO_STRING(PRODUCT_VERSION_PATCH)
#define PRODUCT_VERSION_RESOURCE PRODUCT_VERSION_MAJOR,PRODUCT_VERSION_MINOR,PRODUCT_VERSION_PATCH,0
#define PRODUCT_VERSION_RESOURCE_STR PRODUCT_VERSION_MAJOR_MINOR_PATCH_STR "\0"
#define FILE_VERSION_MAJOR_MINOR_STR __TO_STRING(FILE_VERSION_MAJOR) "." __TO_STRING(FILE_VERSION_MINOR)
#define FILE_VERSION_MAJOR_MINOR_PATCH_STR FILE_VERSION_MAJOR_MINOR_STR "." __TO_STRING(FILE_VERSION_PATCH)
#define FILE_VERSION_RESOURCE FILE_VERSION_MAJOR,FILE_VERSION_MINOR,FILE_VERSION_PATCH,0
#define FILE_VERSION_RESOURCE_STR FILE_VERSION_MAJOR_MINOR_PATCH_STR "\0"
#ifndef PRODUCT_COMMENTS
#define PRODUCT_COMMENTS "@PRODUCT_COMMENTS@\0"
#endif
#ifndef PRODUCT_COMPANY_NAME
#define PRODUCT_COMPANY_NAME "@PRODUCT_COMPANY_NAME@\0"
#endif
#ifndef PRODUCT_COMPANY_COPYRIGHT
#define PRODUCT_COMPANY_COPYRIGHT "@PRODUCT_COMPANY_COPYRIGHT@\0"
#endif
#ifndef PRODUCT_FILE_DESCRIPTION
#define PRODUCT_FILE_DESCRIPTION "@PRODUCT_FILE_DESCRIPTION@\0"
#endif
#ifndef PRODUCT_INTERNAL_NAME
#define PRODUCT_INTERNAL_NAME "@PRODUCT_NAME@\0"
#endif
#ifndef PRODUCT_ORIGINAL_FILENAME
#define PRODUCT_ORIGINAL_FILENAME "@PRODUCT_ORIGINAL_FILENAME@\0"
#endif
#ifndef PRODUCT_BUNDLE
#define PRODUCT_BUNDLE "@PRODUCT_BUNDLE@\0"
#endif

36
cmake/VersionResource.rc Normal file
View File

@ -0,0 +1,36 @@
#include "VersionInfo.h"
#include "winresrc.h"
VS_VERSION_INFO VERSIONINFO
FILEVERSION FILE_VERSION_RESOURCE
PRODUCTVERSION PRODUCT_VERSION_RESOURCE
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "Comments", PRODUCT_COMMENTS
VALUE "CompanyName", PRODUCT_COMPANY_NAME
VALUE "FileDescription", PRODUCT_FILE_DESCRIPTION
VALUE "FileVersion", FILE_VERSION_RESOURCE_STR
VALUE "InternalName", PRODUCT_INTERNAL_NAME
VALUE "LegalCopyright", PRODUCT_COMPANY_COPYRIGHT
VALUE "OriginalFilename", PRODUCT_ORIGINAL_FILENAME
VALUE "ProductName", PRODUCT_BUNDLE
VALUE "ProductVersion", PRODUCT_VERSION_RESOURCE_STR
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END

View File

@ -388,11 +388,6 @@ Discard changes and close anyway?</source>
<source>Unable to open the database.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The database you are trying to open is locked by another instance of KeePassXC.
Do you want to open it anyway? Alternatively the database is opened read-only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Merge database</source>
<translation type="unfinished"></translation>
@ -406,6 +401,20 @@ Do you want to save it anyway?</source>
<source>Passwords</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Database already opened</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The database you are trying to open is locked by another instance of KeePassXC.
Do you want to open it anyway?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open read-only</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DatabaseWidget</name>
@ -516,10 +525,6 @@ Do you want to save it anyway?</source>
<source>Autoreload Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Could not parse or unlock the new database file while attempting to autoreload this database.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Could not open the new database file while attempting to autoreload this database.</source>
<translation type="unfinished"></translation>
@ -1297,11 +1302,6 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>Sh&amp;ow a notification when credentials are requested</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Return only best matching entries for an URL instead
of all entries for the whole domain</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Match URL schemes
Only entries with the same scheme (http://, https://, ftp://, ...) are returned</source>
@ -1311,10 +1311,6 @@ Only entries with the same scheme (http://, https://, ftp://, ...) are returned<
<source>Sort matching entries by &amp;username</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>R&amp;emove all shared encryption-keys from active database</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Re&amp;move all stored permissions from entries in active database</source>
<translation type="unfinished"></translation>
@ -1327,10 +1323,6 @@ Only entries with the same scheme (http://, https://, ftp://, ...) are returned<
<source>Advanced</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Activate the following only, if you know what you are doing!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Always allow &amp;access to entries</source>
<translation type="unfinished"></translation>
@ -1347,14 +1339,6 @@ Only entries with the same scheme (http://, https://, ftp://, ...) are returned<
<source>Only the selected database has to be connected with a client!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Return also advanced string fields which start with &quot;KPH: &quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Automatic creates or updates are not supported for string fields!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>HTTP Port:</source>
<translation type="unfinished"></translation>
@ -1389,6 +1373,27 @@ This is required for accessing your databases from ChromeIPass or PassIFox</sour
Using default port 19455.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Return only best matching entries for a URL instead
of all entries for the whole domain</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>R&amp;emove all shared encryption keys from active database</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The following options can be dangerous. Change them only if you know what you are doing.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Automatically creating or updating string fields is not supported.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@ -1761,10 +1766,6 @@ give it a unique name to identify and accept it.</source>
<source>key file of the database</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>filename(s) of the password database(s) to open (*.kdbx)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>KeePassXC - cross-platform password manager</source>
<translation type="unfinished"></translation>
@ -1773,5 +1774,9 @@ give it a unique name to identify and accept it.</source>
<source>read password of the database from stdin</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>filenames of the password databases to open (*.kdbx)</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

File diff suppressed because it is too large Load Diff

View File

@ -13,16 +13,16 @@
<source>About KeePassXC</source>
<translation>Apie KeePassXC</translation>
</message>
<message>
<source>KeePassXC is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
<translation>KeePassXC yra platinama GNU Bendrosios Viešosios Licencijos (GPL) versijos 2 arba (jūsų pasirinkimu) versijos 3 sąlygomis.</translation>
</message>
<message>
<source>Extensions:
</source>
<translation>Plėtiniai:
</translation>
</message>
<message>
<source>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
<translation>KeePassXC yra platinama GNU Bendrosios Viešosios Licencijos (GPL) versijos 2 arba (jūsų pasirinkimu) versijos 3 sąlygomis.</translation>
</message>
</context>
<context>
<name>AccessControlDialog</name>
@ -100,10 +100,6 @@ Pasirinkite, ar norite leisti prieigą.</translation>
<source>Repeat password:</source>
<translation>Pakartokite slaptažodį:</translation>
</message>
<message>
<source>Key file</source>
<translation>Rakto failas</translation>
</message>
<message>
<source>Browse</source>
<translation>Naršyti</translation>
@ -158,6 +154,10 @@ Pasirinkite, ar norite leisti prieigą.</translation>
<translation>Nepavyko nustatyti %1 kaip rakto failą:
%2</translation>
</message>
<message>
<source>&amp;Key file</source>
<translation>&amp;Rakto failas</translation>
</message>
</context>
<context>
<name>DatabaseOpenWidget</name>
@ -257,10 +257,6 @@ Dabar galite ją įrašyti.</translation>
<source>Default username:</source>
<translation>Numatytasis naudotojo vardas:</translation>
</message>
<message>
<source>Use recycle bin:</source>
<translation>Naudoti šiukšlinę:</translation>
</message>
<message>
<source> MiB</source>
<translation> MiB</translation>
@ -277,6 +273,10 @@ Dabar galite ją įrašyti.</translation>
<source>Max. history size:</source>
<translation>Didžiausias istorijos dydis:</translation>
</message>
<message>
<source>Use recycle bin</source>
<translation>Naudoti šiukšlinę</translation>
</message>
</context>
<context>
<name>DatabaseTabWidget</name>
@ -396,12 +396,6 @@ Vis tiek atmesti pakeitimus ir užverti?</translation>
<source>Unable to open the database.</source>
<translation>Nepavyko atverti duomenų bazės.</translation>
</message>
<message>
<source>The database you are trying to open is locked by another instance of KeePassXC.
Do you want to open it anyway? Alternatively the database is opened read-only.</source>
<translation>Duomenų bazė, kurią bandote atverti, yra užrakinta kito KeePassXC egzemplioriaus.
Ar vis tiek norite atverti? Tokiu atveju duomenų bazė bus atverta tik skaitymui.</translation>
</message>
<message>
<source>Merge database</source>
<translation>Sulieti duomenų bazę</translation>
@ -412,6 +406,25 @@ Do you want to save it anyway?</source>
<translation>Duomenų bazė, kurią bandote įrašyti yra užrakinta kito KeePassXC programos egzemplioriaus.
Ar vis tiek norite įrašyti?</translation>
</message>
<message>
<source>Passwords</source>
<translation>Slaptažodžiai</translation>
</message>
<message>
<source>Database already opened</source>
<translation>Duomenų bazė jau atverta</translation>
</message>
<message>
<source>The database you are trying to open is locked by another instance of KeePassXC.
Do you want to open it anyway?</source>
<translation>Duomenų bazė, kurią bandote atverti yra užrakinta kito KeePassXC programos egzemplioriaus.
Ar vis tiek norite atverti?</translation>
</message>
<message>
<source>Open read-only</source>
<translation>Atverti tik skaitymui</translation>
</message>
</context>
<context>
<name>DatabaseWidget</name>
@ -519,10 +532,6 @@ Ar vis tiek norite ją įrašyti?</translation>
<source>Autoreload Failed</source>
<translation>Automatinis įkėlimas naujo nepavyko</translation>
</message>
<message>
<source>Could not parse or unlock the new database file while attempting to autoreload this database.</source>
<translation>Nepavyko išanalizuoti ar atrakinti naujos duomenų bazės failo, bandant automatiškai naujo įkelti š duomenų bazę.</translation>
</message>
<message>
<source>Could not open the new database file while attempting to autoreload this database.</source>
<translation>Nepavyko atverti naujos duomenų bazės failo, bandant automatiškai naujo įkelti š duomenų bazę.</translation>
@ -650,14 +659,6 @@ Ar vis tiek norite ją įrašyti?</translation>
<source>Enable Auto-Type for this entry</source>
<translation>Įjungti šiam įrašui automatinį rinkimą</translation>
</message>
<message>
<source>Inherit default Auto-Type sequence from the group</source>
<translation>Paveldėti numatytąją automatinio rinkimo seką grupės</translation>
</message>
<message>
<source>Use custom Auto-Type sequence:</source>
<translation>Naudoti tinkintą automatinio rinkimo seka:</translation>
</message>
<message>
<source>+</source>
<translation>+</translation>
@ -671,12 +672,20 @@ Ar vis tiek norite ją įrašyti?</translation>
<translation>Lango antraštė:</translation>
</message>
<message>
<source>Use default sequence</source>
<translation>Naudoti numatytąją seką</translation>
<source>Inherit default Auto-Type sequence from the &amp;group</source>
<translation>Paveldėti numatytąją automatinio rinkimo seką &amp;grupės</translation>
</message>
<message>
<source>Set custom sequence:</source>
<translation>Nustatyti tinkintą seką:</translation>
<source>&amp;Use custom Auto-Type sequence:</source>
<translation>Na&amp;udoti tinkintą automatinio rinkimo seka:</translation>
</message>
<message>
<source>Use default se&amp;quence</source>
<translation>Naudoti numatytąją se&amp;</translation>
</message>
<message>
<source>Set custo&amp;m sequence:</source>
<translation>Nustatyti tinkintą s&amp;eką:</translation>
</message>
</context>
<context>
@ -801,14 +810,6 @@ Ar vis tiek norite ją įrašyti?</translation>
</context>
<context>
<name>EditWidgetIcons</name>
<message>
<source>Use default icon</source>
<translation>Naudoti numatytąją piktogramą</translation>
</message>
<message>
<source>Use custom icon</source>
<translation>Naudoti tinkintą piktogramą</translation>
</message>
<message>
<source>Add custom icon</source>
<translation>Pridėti tinkintą piktogramą</translation>
@ -853,6 +854,14 @@ Ar vis tiek norite ją įrašyti?</translation>
<source>Can&apos;t delete icon. Still used by %1 items.</source>
<translation>Nepavyksta ištrinti piktogramos. Vis dar naudojama %1 elementų.</translation>
</message>
<message>
<source>&amp;Use default icon</source>
<translation>Na&amp;udoti numatytąją piktogramą</translation>
</message>
<message>
<source>Use custo&amp;m icon</source>
<translation>Naudoti tinkintą piktogra&amp;</translation>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@ -1298,12 +1307,6 @@ Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų
<source>Sh&amp;ow a notification when credentials are requested</source>
<translation>R&amp;odyti pranešimą, kai reikalaujama prisijungimo duomenų</translation>
</message>
<message>
<source>&amp;Return only best matching entries for an URL instead
of all entries for the whole domain</source>
<translation>&amp;Vietoj visų įrašų, skirtų visai sričiai,
grąžinti tik geriausiai atitinkančius įrašus, skirtus URL</translation>
</message>
<message>
<source>&amp;Match URL schemes
Only entries with the same scheme (http://, https://, ftp://, ...) are returned</source>
@ -1314,10 +1317,6 @@ Bus grąžinami įrašai tik su ta pačia schema (http://, https://, ftp://, ...
<source>Sort matching entries by &amp;username</source>
<translation>Rikiuoti atitinkančius įrašus pagal na&amp;udotojo vardą</translation>
</message>
<message>
<source>R&amp;emove all shared encryption-keys from active database</source>
<translation>Ša&amp;linti aktyvios duomenų bazės visus bendrinamus šifravimo raktus</translation>
</message>
<message>
<source>Re&amp;move all stored permissions from entries in active database</source>
<translation>Šal&amp;inti įrašų aktyvioje duomenų bazėje visus saugomus leidimus</translation>
@ -1330,10 +1329,6 @@ Bus grąžinami įrašai tik su ta pačia schema (http://, https://, ftp://, ...
<source>Advanced</source>
<translation>Išplėstiniai</translation>
</message>
<message>
<source>Activate the following only, if you know what you are doing!</source>
<translation>Aktyvuokite tai tik tuo atveju, jeigu žinote darote!</translation>
</message>
<message>
<source>Always allow &amp;access to entries</source>
<translation>Visada leisti &amp;prieigą prie įrašų</translation>
@ -1350,14 +1345,6 @@ Bus grąžinami įrašai tik su ta pačia schema (http://, https://, ftp://, ...
<source>Only the selected database has to be connected with a client!</source>
<translation>Su klientu turi būti sujungta tik pasirinkta duomenų bazė!</translation>
</message>
<message>
<source>&amp;Return also advanced string fields which start with &quot;KPH: &quot;</source>
<translation>&amp;Taip pat grąžinti ir išplėstines eilutes, kurios prasideda &quot;KPH: &quot;</translation>
</message>
<message>
<source>Automatic creates or updates are not supported for string fields!</source>
<translation>Šiems eilutės laukams automatiniai kūrimai ir atnaujinimai neprieinami!</translation>
</message>
<message>
<source>HTTP Port:</source>
<translation>HTTP prievadas:</translation>
@ -1394,6 +1381,28 @@ Using default port 19455.</source>
<translation>Nepavyksta susieti su privilegijuotais prievadais žemiau 1024!
Naudojamas numatytasis prievadas 19455.</translation>
</message>
<message>
<source>&amp;Return only best matching entries for a URL instead
of all entries for the whole domain</source>
<translation>&amp;Vietoj visų įrašų, skirtų visai sričiai,
grąžinti tik geriausiai atitinkančius įrašus, skirtus URL</translation>
</message>
<message>
<source>R&amp;emove all shared encryption keys from active database</source>
<translation>Ša&amp;linti aktyvios duomenų bazės visus bendrinamus šifravimo raktus</translation>
</message>
<message>
<source>The following options can be dangerous. Change them only if you know what you are doing.</source>
<translation>Šios parinktys gali būti pavojingos. Keiskite jas tik tuo atveju, jeigu žinote darote!</translation>
</message>
<message>
<source>&amp;Return advanced string fields which start with &quot;KPH: &quot;</source>
<translation>&amp;Grąžinti išplėstines eilutes, kurios prasideda &quot;KPH: &quot;</translation>
</message>
<message>
<source>Automatically creating or updating string fields is not supported.</source>
<translation>Automatinis eilutės laukų kūrimas ar atnaujinimas nėra palaikomas.</translation>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@ -1463,7 +1472,7 @@ Naudojamas numatytasis prievadas 19455.</translation>
</message>
<message>
<source>Entropy: %1 bit</source>
<translation>Entropija: %1 bit</translation>
<translation>Entropija: %1 bitų</translation>
</message>
<message>
<source>Password Quality: %1</source>
@ -1535,7 +1544,7 @@ Naudojamas numatytasis prievadas 19455.</translation>
</message>
<message>
<source>Search</source>
<translation>Ieškoti</translation>
<translation>Paieška</translation>
</message>
<message>
<source>Find</source>
@ -1771,10 +1780,6 @@ ir priimtumėte jį.</translation>
<source>key file of the database</source>
<translation>duomenų bazės rakto failas</translation>
</message>
<message>
<source>filename(s) of the password database(s) to open (*.kdbx)</source>
<translation>norimos atverti slaptažodžių duomenų bazės(-) failo pavadinimas(-ai) (*.kdbx)</translation>
</message>
<message>
<source>KeePassXC - cross-platform password manager</source>
<translation>KeePassXC - daugiaplatformė slaptažodžių tvarkytuvė</translation>
@ -1783,5 +1788,9 @@ ir priimtumėte jį.</translation>
<source>read password of the database from stdin</source>
<translation>nuskaityti duomenų bazės slaptažodį stdin</translation>
</message>
<message>
<source>filenames of the password databases to open (*.kdbx)</source>
<translation>norimų atverti slaptažodžių duomenų bazių failų pavadinimai (*.kdbx)</translation>
</message>
</context>
</TS>

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
name: keepassxc
version: 2.1.0
version: 2.1.3
grade: stable
summary: community driven port of the windows application “Keepass Password Safe”
description: |
@ -11,7 +11,7 @@ confinement: strict
apps:
keepassxc:
command: desktop-launch keepassxc
plugs: [unity7, opengl, gsettings, home]
plugs: [unity7, opengl, gsettings, home, network, network-bind]
parts:
keepassxc:
@ -21,6 +21,7 @@ parts:
- -DCMAKE_BUILD_TYPE=Release
- -DWITH_TESTS=OFF
- -DWITH_XC_AUTOTYPE=ON
- -DWITH_XC_HTTP=ON
build-packages:
- g++
- libgcrypt20-dev

View File

@ -204,7 +204,24 @@ if (UNIX AND NOT APPLE)
target_link_libraries(keepassx_core Qt5::DBus)
endif()
add_executable(${PROGNAME} WIN32 MACOSX_BUNDLE ${keepassx_SOURCES_MAINEXE})
if(MINGW)
string(REPLACE "." ";" VERSION_LIST ${KEEPASSXC_VERSION})
list(GET VERSION_LIST 0 KEEPASSXC_VERSION_MAJOR)
list(GET VERSION_LIST 1 KEEPASSXC_VERSION_MINOR)
list(GET VERSION_LIST 2 KEEPASSXC_VERSION_PATCH)
include(GenerateProductVersion)
generate_product_version(
WIN32_ProductVersionFiles
NAME "KeePassXC"
COMPANY_NAME "KeePassXC Team"
VERSION_MAJOR ${KEEPASSXC_VERSION_MAJOR}
VERSION_MINOR ${KEEPASSXC_VERSION_MINOR}
VERSION_PATCH ${KEEPASSXC_VERSION_PATCH}
)
endif()
add_executable(${PROGNAME} WIN32 MACOSX_BUNDLE ${keepassx_SOURCES_MAINEXE} ${WIN32_ProductVersionFiles})
target_link_libraries(${PROGNAME} keepassx_core)
set_target_properties(${PROGNAME} PROPERTIES ENABLE_EXPORTS ON)

View File

@ -21,6 +21,7 @@
#include <QLockFile>
#include <QSaveFile>
#include <QTabWidget>
#include <QPushButton>
#include "autotype/AutoType.h"
#include "core/Config.h"
@ -157,21 +158,29 @@ void DatabaseTabWidget::openDatabase(const QString& fileName, const QString& pw,
// for now silently ignore if we can't create a lock file
// due to lack of permissions
if (lockFile->error() != QLockFile::PermissionError) {
QMessageBox::StandardButton result = MessageBox::question(this, tr("Open database"),
tr("The database you are trying to open is locked by another instance of KeePassXC.\n"
"Do you want to open it anyway? Alternatively the database is opened read-only."),
QMessageBox::Yes | QMessageBox::No);
QMessageBox msgBox;
msgBox.setWindowTitle(tr("Database already opened"));
msgBox.setText(tr("The database you are trying to open is locked by another instance of KeePassXC.\n\n"
"Do you want to open it anyway?"));
msgBox.setIcon(QMessageBox::Question);
msgBox.addButton(QMessageBox::Yes);
msgBox.addButton(QMessageBox::No);
auto readOnlyButton = msgBox.addButton(tr("Open read-only"), QMessageBox::NoRole);
msgBox.setDefaultButton(readOnlyButton);
msgBox.setEscapeButton(QMessageBox::No);
auto result = msgBox.exec();
if (result == QMessageBox::No) {
if (msgBox.clickedButton() == readOnlyButton) {
dbStruct.readOnly = true;
delete lockFile;
lockFile = nullptr;
}
else {
} else if (result == QMessageBox::Yes) {
// take over the lock file if possible
if (lockFile->removeStaleLockFile()) {
lockFile->tryLock();
}
} else {
return;
}
}
}

View File

@ -1061,8 +1061,7 @@ void DatabaseWidget::reloadDatabaseFile()
// Merge the old database into the new one
m_db->setEmitModified(false);
db->merge(m_db);
}
else {
} else {
// Since we are accepting the new file as-is, internally mark as unmodified
// TODO: when saving is moved out of DatabaseTabWidget, this should be replaced
m_databaseModified = false;
@ -1086,16 +1085,9 @@ void DatabaseWidget::reloadDatabaseFile()
restoreGroupEntryFocus(groupBeforeReload, entryBeforeReload);
}
else {
} else {
MessageBox::critical(this, tr("Autoreload Failed"),
tr("Could not parse or unlock the new database file while attempting"
" to autoreload this database."));
}
}
else {
MessageBox::critical(this, tr("Autoreload Failed"),
tr("Could not open the new database file while attempting to autoreload"
" this database."));
tr("Could not open the new database file while attempting to autoreload this database."));
}
// Rewatch the database file

View File

@ -282,6 +282,10 @@ MainWindow::MainWindow()
connect(m_ui->actionAbout, SIGNAL(triggered()), SLOT(showAboutDialog()));
#ifdef Q_OS_MAC
setUnifiedTitleAndToolBarOnMac(true);
#endif
updateTrayIcon();
}
@ -559,7 +563,7 @@ void MainWindow::closeEvent(QCloseEvent* event)
if (minimizeOnClose && !appExitCalled)
{
event->ignore();
toggleWindow();
hideWindow();
if (config()->get("security/lockdatabaseminimize").toBool()) {
m_ui->tabWidget->lockDatabases();
@ -724,15 +728,20 @@ void MainWindow::trayIconTriggered(QSystemTrayIcon::ActivationReason reason)
}
}
void MainWindow::toggleWindow()
void MainWindow::hideWindow()
{
if ((QApplication::activeWindow() == this) && isVisible() && !isMinimized()) {
setWindowState(windowState() | Qt::WindowMinimized);
QTimer::singleShot(0, this, SLOT(hide()));
if (config()->get("security/lockdatabaseminimize").toBool()) {
m_ui->tabWidget->lockDatabases();
}
}
void MainWindow::toggleWindow()
{
if ((QApplication::activeWindow() == this) && isVisible() && !isMinimized()) {
hideWindow();
} else {
ensurePolished();
setWindowState(windowState() & ~Qt::WindowMinimized);

View File

@ -68,6 +68,7 @@ private Q_SLOTS:
void rememberOpenDatabases(const QString& filePath);
void applySettingsChanges();
void trayIconTriggered(QSystemTrayIcon::ActivationReason reason);
void hideWindow();
void toggleWindow();
void lockDatabasesAfterInactivity();
void repairDatabase();

View File

@ -45,7 +45,7 @@ This is required for accessing your databases from ChromeIPass or PassIFox</stri
<item>
<widget class="QCheckBox" name="bestMatchOnly">
<property name="text">
<string>&amp;Return only best matching entries for an URL instead
<string>&amp;Return only best matching entries for a URL instead
of all entries for the whole domain</string>
</property>
</widget>
@ -82,7 +82,7 @@ Only entries with the same scheme (http://, https://, ftp://, ...) are returned<
<item>
<widget class="QPushButton" name="removeSharedEncryptionKeys">
<property name="text">
<string>R&amp;emove all shared encryption-keys from active database</string>
<string>R&amp;emove all shared encryption keys from active database</string>
</property>
</widget>
</item>
@ -148,7 +148,7 @@ Only entries with the same scheme (http://, https://, ftp://, ...) are returned<
<string notr="true">color: rgb(255, 0, 0);</string>
</property>
<property name="text">
<string>Activate the following only, if you know what you are doing!</string>
<string>The following options can be dangerous. Change them only if you know what you are doing.</string>
</property>
</widget>
</item>
@ -186,14 +186,14 @@ Only entries with the same scheme (http://, https://, ftp://, ...) are returned<
<item>
<widget class="QCheckBox" name="supportKphFields">
<property name="text">
<string>&amp;Return also advanced string fields which start with &quot;KPH: &quot;</string>
<string>&amp;Return advanced string fields which start with &quot;KPH: &quot;</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Automatic creates or updates are not supported for string fields!</string>
<string>Automatically creating or updating string fields is not supported.</string>
</property>
<property name="indent">
<number>30</number>

View File

@ -110,7 +110,7 @@ static QByteArray encrypt2(const QByteArray & data, SymmetricCipherGcrypt & ciph
//Encrypt
QByteArray buffer = data + QByteArray(paddingSize, paddingSize);
cipher.reset();
cipher.processInPlace(buffer);
Q_UNUSED(cipher.processInPlace(buffer));
return buffer;
}

View File

@ -91,7 +91,7 @@ typedef int (*http_cb) (http_parser*);
/* Status Codes */
#define HTTP_STATUS_MAP(XX) \
#define HTTPPARSER_HTTP_STATUS_MAP(XX) \
XX(100, CONTINUE, Continue) \
XX(101, SWITCHING_PROTOCOLS, Switching Protocols) \
XX(102, PROCESSING, Processing) \
@ -150,12 +150,12 @@ typedef int (*http_cb) (http_parser*);
XX(507, INSUFFICIENT_STORAGE, Insufficient Storage) \
XX(508, LOOP_DETECTED, Loop Detected) \
XX(510, NOT_EXTENDED, Not Extended) \
XX(511, NETWORK_AUTHENTICATION_REQUIRED, Network Authentication Required) \
XX(511, NETWORK_AUTHENTICATION_REQUIRED, Network Authentication Required)
enum http_status
{
#define XX(num, name, string) HTTP_STATUS_##name = num,
HTTP_STATUS_MAP(XX)
HTTPPARSER_HTTP_STATUS_MAP(XX)
#undef XX
};

View File

@ -41,7 +41,7 @@ public:
if ( !icollectRequired ) // not allowed to collect data
return false;
int newLength = icollectedData.length() + (int) length;
int newLength = icollectedData.length() + static_cast<int>(length);
if ( icollectCapacity > 0 && newLength > icollectCapacity )
return false; // the capacity is full

View File

@ -112,7 +112,7 @@ protected:
void onReadyRead() {
while ( isocket.bytesAvailable() > 0 ) {
char buffer[4097] = {0};
size_t readLength = (size_t) isocket.readRaw(buffer, 4096);
size_t readLength = static_cast<size_t>(isocket.readRaw(buffer, 4096));
parse(buffer, readLength);
}

View File

@ -42,7 +42,7 @@ public:
// if it's a QLocalServer
virtual void incomingConnection(quintptr socketDescriptor) {
iserver->incomingConnection((qintptr) socketDescriptor);
iserver->incomingConnection(static_cast<qintptr>(socketDescriptor));
}
};

View File

@ -83,7 +83,7 @@ public:
void onReadyRead() {
while ( isocket.bytesAvailable() > 0 ) {
char buffer[4097] = {0};
size_t readLength = (size_t) isocket.readRaw(buffer, 4096);
size_t readLength = static_cast<size_t>(isocket.readRaw(buffer, 4096));
parse(buffer, readLength);
}

View File

@ -8,7 +8,7 @@ namespace qhttp {
# error "to compile QHttp classes, Qt 5.0 or later is needed."
#endif
#define HTTP_STATUS_MAP(XX) \
#define QHTTPABSTRACTS_HTTP_STATUS_MAP(XX) \
XX(100, "Continue") \
XX(101, "Switching Protocols") \
/* RFC 2518) obsoleted by RFC 4918 */ \
@ -78,7 +78,7 @@ static struct {
int code;
const char* message;
} g_status_codes[] {
HTTP_STATUS_MAP(PATCH_STATUS_CODES)
QHTTPABSTRACTS_HTTP_STATUS_MAP(PATCH_STATUS_CODES)
};
#undef PATCH_STATUS_CODES

View File

@ -18,7 +18,6 @@
#include <QCommandLineParser>
#include <QFile>
#include <QTextStream>
#include <QtGlobal>
#include "config-keepassx.h"
#include "core/Config.h"
@ -46,9 +45,6 @@ int main(int argc, char** argv)
#endif
Tools::setupSearchPaths();
#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
Application app(argc, argv);
Application::setApplicationName("keepassxc");
Application::setApplicationVersion(KEEPASSX_VERSION);
@ -68,7 +64,7 @@ int main(int argc, char** argv)
QCommandLineParser parser;
parser.setApplicationDescription(QCoreApplication::translate("main", "KeePassXC - cross-platform password manager"));
parser.addPositionalArgument("filename", QCoreApplication::translate("main", "filename(s) of the password database(s) to open (*.kdbx)"), "[filename(s)]");
parser.addPositionalArgument("filename", QCoreApplication::translate("main", "filenames of the password databases to open (*.kdbx)"), "[filename(s)]");
QCommandLineOption configOption("config",
QCoreApplication::translate("main", "path to a custom config file"),

View File

@ -496,7 +496,7 @@ typedef struct
uint8_t LeetCnv[sizeof L33TCnv / LEET_NORM_MAP_SIZE + 1];
/* uint8_t LeetChr[3]; */
uint8_t First;
uint8_t PossChars[48];
uint8_t PossChars[49];
} DictWork_t;
/**********************************************************************************