fixed crash when deleting search results,

fixed bad SID Assoc.

git-svn-id: https://svn.code.sf.net/p/keepassx/code/trunk@58 b624d157-de02-0410-bad0-e51aec6abb33
master
tariq 19 years ago
parent 49059c82f4
commit 9bbe30fb16
  1. 29
      src/PwManager.cpp
  2. 2
      src/PwManager.h
  3. 4
      src/PwmConfig.cpp
  4. 6
      src/dialogs/PasswordDlg.cpp
  5. 3
      src/dialogs/SimplePasswordDlg.cpp
  6. 2
      src/export/Export_Txt.cpp
  7. 60
      src/forms/AboutDlg.ui
  8. 5
      src/forms/MainWindow.ui
  9. 6
      src/forms/PasswordDlg.ui
  10. 50
      src/forms/SettingsDlg.ui
  11. 36
      src/forms/SimplePasswordDlg.ui
  12. 3
      src/import/Import_PwManager.cpp
  13. 6
      src/lib/GroupView.cpp
  14. 1
      src/lib/GroupView.h
  15. 13
      src/lib/UrlLabel.cpp
  16. 5
      src/lib/UrlLabel.h
  17. 21
      src/mainwindow.cpp
  18. 1
      src/mainwindow.h
  19. 808
      src/translations/keepass-de_DE.ts
  20. 104
      src/translations/keepass-xx_XX.ts

@ -109,13 +109,13 @@ return false;}
if((Version & 0xFFFFFF00) != (PWM_DBVER_DW & 0xFFFFFF00)){
err=tr("Unsupported File Version");
err=tr("Unsupported File Version.");
return false;}
if(Flags & PWM_FLAG_RIJNDAEL) CryptoAlgorithmus = ALGO_AES;
else if(Flags & PWM_FLAG_TWOFISH) CryptoAlgorithmus = ALGO_TWOFISH;
else {
err=tr("Unknown Encryption Algorithm");
err=tr("Unknown Encryption Algorithm.");
return false;
}
@ -147,7 +147,7 @@ else if(CryptoAlgorithmus == ALGO_TWOFISH)
total_size - DB_HEADER_SIZE, (Q_UINT8 *)buffer + DB_HEADER_SIZE);
}
if((crypto_size > 2147483446) || (crypto_size == 0)){err=tr("Decryption failed.\nThe key is wrong or the file is damaged"); return false;}
if((crypto_size > 2147483446) || (crypto_size == 0)){err=tr("Decryption failed.\nThe key is wrong or the file is damaged."); return false;}
sha256_starts(&sha32);
sha256_update(&sha32,(unsigned char *)buffer + DB_HEADER_SIZE,crypto_size);
@ -252,7 +252,7 @@ Rijndael rijndael;
sha256_context sha2;
if(rijndael.init(Rijndael::ECB, Rijndael::Encrypt, (const Q_UINT8 *)KeySeed,
Rijndael::Key32Bytes, 0) != RIJNDAEL_SUCCESS){
cout << QString("unexpected error in %1, line %2").arg(__FILE__).arg(__LINE__).ascii() << endl;
_ERROR
exit(1);}
memcpy(tmp,src,32);
@ -341,9 +341,24 @@ return true;
}
void PwDatabase::addEntry(CEntry* NewEntry){
CEntry *entry=addEntry();
*entry=*NewEntry;
CEntry* PwDatabase::addEntry(CEntry* NewEntry){
if(Entries.size()==0){
NewEntry->sID=0;
getRandomBytes(&NewEntry->ID,16,1,false);
}
else {
NewEntry->sID=Entries.back().sID+1;
while(1){
bool used=false;
getRandomBytes(&NewEntry->ID,16,1,false);
for(int j=0;j<Entries.size();j++){
int k;
for(k=0;k<16;k++){if(Entries[j].ID[k]!=NewEntry->ID[k])k=0;break;}
if(k==15)used=true;}
if(used==false)break;
}}
Entries.push_back(*NewEntry);
return &Entries.back();
}

@ -68,7 +68,7 @@ public:
void deleteEntry(CEntry* pEntry);
void moveEntry(CEntry* pEntry,CGroup* pDstGroup);
CEntry* addEntry();
void addEntry(CEntry* NewEntry);
CEntry* addEntry(CEntry* NewEntry);
void merge(PwDatabase* db2);
bool isParentGroup(CGroup* Group,CGroup* PotenialParent);
QString getError(); //get first error

@ -140,14 +140,14 @@ return str;
QColor CConfig::ParseColorString(QString str){
QStringList lst=QStringList::split(',',str);
if(lst.size()!=3){
qWarning(QObject::tr("Warnung:")+" CConfig::ParseColorString(QString):"+QObject::tr("ungültiger RGB-Farbwert.\n"));
qWarning(QObject::tr("Warning:")+" CConfig::ParseColorString(QString):"+QObject::tr("Invalid RGB color value.\n"));
return QColor(0,0,0);}
bool err[3];
int r=lst[0].toUInt(err);
int g=lst[1].toUInt(err+1);
int b=lst[2].toUInt(err+2);
if(!err[0] || !err[1] || !err[2]){
qWarning(QObject::tr("Warnung:")+" CConfig::ParseColorString(QString):"+QObject::tr("ungültiger RGB-Farbwert.\n"));
qWarning(QObject::tr("Warning:")+" CConfig::ParseColorString(QString):"+QObject::tr("Invalid RGB color value.\n"));
return QColor(0,0,0);}
return QColor(r,g,b);
}

@ -1,5 +1,5 @@
/***************************************************************************
* Copyright (C) 2005 by Tarek Saidi *
* Copyright (C) 2005-2006 by Tarek Saidi *
* tarek@linux *
* *
* This program is free software; you can redistribute it and/or modify *
@ -36,7 +36,6 @@ CPasswordDialog::CPasswordDialog(QWidget* parent, const char* name, bool modal,
{
setupUi(this);
createBanner(Banner,Icon_Key32x32,tr("Database Key"));
QDir media(config.MountDir);
if(media.exists()){
QStringList Paths;
@ -68,6 +67,7 @@ connect( Edit_Password, SIGNAL( textChanged(const QString&) ), this, SLOT( OnPas
connect( CheckBox_Both, SIGNAL( stateChanged(int) ), this, SLOT( OnCheckBox_BothChanged(int) ) );
connect( ButtonChangeEchoMode, SIGNAL( clicked() ), this, SLOT( ChangeEchoMode() ) );
connect( Edit_Password, SIGNAL( returnPressed() ), this, SLOT( OnOK() ) );
connect( Edit_PasswordRep, SIGNAL( returnPressed() ), this, SLOT( OnOK() ) );
connect( ButtonExit, SIGNAL( clicked()),this,SLOT(OnButtonExit()));
ButtonExit->setVisible(ShowExitButton);
@ -170,7 +170,7 @@ if(KeyType==BOTH || KeyType==KEYFILE){
return;
}
if(!fileinfo.isReadable()){
QMessageBox::warning(this,tr("Error"),tr("The selected key file or directory is not readable\n.Please check your permissions."),tr("OK"),"","",0,0);
QMessageBox::warning(this,tr("Error"),tr("The selected key file or directory is not readable.\nPlease check your permissions."),tr("OK"),"","",0,0);
return;
}
if(fileinfo.isDir()){

@ -29,6 +29,9 @@ CSimplePasswordDialog::CSimplePasswordDialog(QWidget* parent, const char* name,
{
setupUi(this);
if(!config.ShowPasswords)Button_HidePassword->toggle();
connect(ButtonOK,SIGNAL(clicked()),this,SLOT(OnOK()));
connect(ButtonCancel,SIGNAL(clicked()),this,SLOT(OnCancel()));
connect(Button_HidePassword,SIGNAL(toggled(bool)),this,SLOT(OnHidePasswordToggled(bool)));
}
CSimplePasswordDialog::~CSimplePasswordDialog()

@ -52,7 +52,7 @@ for(int g=0;g<db->Groups.size();g++){
.arg(db->Entries[e].UserName)
.arg(db->Entries[e].URL)
.arg(db->Entries[e].Password.string())
.arg(db->Entries[e].Additional)
.arg(db->Entries[e].Additional.replace('\n',"\n "))
.utf8());
db->Entries[e].Password.lock();
}

@ -64,56 +64,61 @@
<attribute name="title" >
<string>About</string>
</attribute>
<widget class="QLabel" name="Label3" >
<widget class="QLabel" name="label" >
<property name="geometry" >
<rect>
<x>20</x>
<y>40</y>
<width>81</width>
<height>20</height>
<y>20</y>
<width>351</width>
<height>17</height>
</rect>
</property>
<property name="text" >
<string>Homepage:</string>
<string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;/head>&lt;body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-size:12pt; font-weight:600;">KeePassX&lt;/span> - Cross Platform Password Manager&lt;/p>&lt;/body>&lt;/html></string>
</property>
</widget>
<widget class="QLabel" name="Label0" >
<widget class="QLabel" name="label_4" >
<property name="geometry" >
<rect>
<x>20</x>
<y>10</y>
<width>281</width>
<height>20</height>
<x>30</x>
<y>110</y>
<width>341</width>
<height>51</height>
</rect>
</property>
<property name="text" >
<string>KeePassX - Cross Platform Password Manager</string>
<string>Copyright (C) 2005 - 2006 Tarek Saidi
KeePassX is distributed under the terms of the
General Public License (GPL) version 2.</string>
</property>
</widget>
<widget class="QLabel" name="Label4" >
<widget class="LinkLabel" name="label_3" >
<property name="geometry" >
<rect>
<x>20</x>
<y>70</y>
<width>111</width>
<height>20</height>
<x>30</x>
<y>80</y>
<width>351</width>
<height>17</height>
</rect>
</property>
<property name="text" >
<string>Email:</string>
<string>tarek.saidi@arcor.de</string>
</property>
</widget>
<widget class="QLabel" name="Label1" >
<widget class="LinkLabel" name="label_2" >
<property name="geometry" >
<rect>
<x>20</x>
<y>100</y>
<width>301</width>
<height>20</height>
<x>30</x>
<y>50</y>
<width>351</width>
<height>17</height>
</rect>
</property>
<property name="text" >
<string>Copyright (C) 2005-2006 Tarek Saidi</string>
<string>http://keepass.berlios.de/</string>
</property>
<property name="buddy" >
<cstring></cstring>
</property>
</widget>
</widget>
@ -175,6 +180,15 @@
</widget>
<layoutdefault spacing="6" margin="11" />
<pixmapfunction></pixmapfunction>
<customwidgets>
<customwidget>
<class>LinkLabel</class>
<extends>QLabel</extends>
<header>../../src/lib/UrlLabel.h</header>
<container>0</container>
<pixmap></pixmap>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

@ -477,6 +477,11 @@
<string>Plain Text (*.txt)</string>
</property>
</action>
<action name="HideSearchResultsAction" >
<property name="text" >
<string>Hide</string>
</property>
</action>
</widget>
<pixmapfunction></pixmapfunction>
<customwidgets>

@ -332,12 +332,14 @@
</customwidgets>
<tabstops>
<tabstop>Edit_Password</tabstop>
<tabstop>Edit_PasswordRep</tabstop>
<tabstop>Combo_Dirs</tabstop>
<tabstop>ButtonBrowse</tabstop>
<tabstop>CheckBox_Both</tabstop>
<tabstop>ButtonChangeEchoMode</tabstop>
<tabstop>ButtonBrowse</tabstop>
<tabstop>ButtonOK</tabstop>
<tabstop>ButtonCancel</tabstop>
<tabstop>ButtonChangeEchoMode</tabstop>
<tabstop>ButtonExit</tabstop>
</tabstops>
<resources/>
<connections/>

@ -234,6 +234,18 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize" >
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize" >
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="text" >
<string>Change...</string>
</property>
@ -324,6 +336,18 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize" >
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize" >
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="text" >
<string>Change...</string>
</property>
@ -372,6 +396,18 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize" >
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize" >
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="text" >
<string>C&amp;hange...</string>
</property>
@ -466,6 +502,18 @@
</property>
<item row="1" column="2" >
<widget class="QPushButton" name="Button_MountDirBrowse" >
<property name="minimumSize" >
<size>
<width>0</width>
<height>23</height>
</size>
</property>
<property name="maximumSize" >
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="text" >
<string>Browse...</string>
</property>
@ -487,7 +535,7 @@
<item row="1" column="0" >
<widget class="QLabel" name="label_2" >
<property name="text" >
<string>Media Directory:</string>
<string>Mounting Root:</string>
</property>
</widget>
</item>

@ -1,13 +1,13 @@
<ui stdsetdef="1" version="4.0" >
<author/>
<comment/>
<exportmacro/>
<ui version="4.0" >
<author></author>
<comment></comment>
<exportmacro></exportmacro>
<class>SimplePasswordDialog</class>
<widget class="QDialog" name="SimplePasswordDialog" >
<property name="geometry" >
<rect>
<x>2</x>
<y>3</y>
<x>0</x>
<y>0</y>
<width>345</width>
<height>90</height>
</rect>
@ -48,16 +48,6 @@
<string>Password:</string>
</property>
</widget>
<widget class="QLineEdit" name="EditPassword" >
<property name="geometry" >
<rect>
<x>80</x>
<y>20</y>
<width>240</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QPushButton" name="ButtonOK" >
<property name="geometry" >
<rect>
@ -90,13 +80,23 @@
<string>Alt+C</string>
</property>
</widget>
<widget class="QLineEdit" name="EditPassword" >
<property name="geometry" >
<rect>
<x>80</x>
<y>20</y>
<width>240</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QPushButton" name="Button_HidePassword" >
<property name="geometry" >
<rect>
<x>320</x>
<y>20</y>
<width>20</width>
<height>20</height>
<height>21</height>
</rect>
</property>
<property name="text" >
@ -112,4 +112,6 @@
</widget>
<layoutdefault spacing="6" margin="11" />
<pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
<resources/>
<connections/>
</ui>

@ -36,7 +36,7 @@ int len=0;
if(!file.exists()){err+=QObject::tr("File not found."); return false;}
if(!file.open(QIODevice::ReadOnly)){err+=QObject::tr("Could not open file."); return false;}
if(len=file.size()) buffer=new char[len];
else {err+=QObject::tr("Datei ist leer"); return false;}
else {err+=QObject::tr("File is empty."); return false;}
file.readBlock(buffer,len);
file.close();
if(QString::fromAscii(buffer,17)!="PWM_PASSWORD_FILE")
@ -107,6 +107,7 @@ delete[] content_hash;
if(!parseXmlContent((char*)xml)){
delete [] xml;
err+=QObject::tr("Invalid XML data (see stdout for details)."); return false;}
database->CalcMasterKeyByPassword(password);
return true;
}

@ -45,6 +45,7 @@ LastHoverItem=NULL;
setHeaderLabels(QStringList()<<tr("Groups"));
ShowSearchGroup=false;
ContextMenu=new QMenu(this);
ContextMenuSearchGroup=new QMenu(this);
}
void KeepassGroupView::selectSearchGroup(){
@ -282,7 +283,10 @@ if(!(GroupViewItem*)itemAt(e->pos()) && selectedItems().size()){
setItemSelected(selectedItems()[0],false);
}
e->accept();
ContextMenu->popup(e->globalPos());
if(isSearchResultGroup((GroupViewItem*)itemAt(e->pos())))
ContextMenuSearchGroup->popup(e->globalPos());
else
ContextMenu->popup(e->globalPos());
}
GroupViewItem::GroupViewItem(QTreeWidget *parent):QTreeWidgetItem(parent){

@ -39,6 +39,7 @@ public:
bool ShowSearchGroup; //needs a "updateItems()" after a change!
vector<GroupViewItem*>Items;
QMenu *ContextMenu;
QMenu *ContextMenuSearchGroup;
signals:
void fileModified();

@ -20,11 +20,11 @@
#include "UrlLabel.h"
#include "main.h"
#include <qfont.h>
#include <qcolor.h>
#include <qcursor.h>
#include <qfontmetrics.h>
//Added by qt3to4:
#include <QMouseEvent>
#include <QLabel>
@ -41,15 +41,22 @@ LinkLabel::~LinkLabel(){
}
QString LinkLabel::url(){
if(URL!=QString())return URL;
if(text().contains("@"))
return QString("mailto:")+text();
else return text();
}
void LinkLabel::mouseReleaseEvent(QMouseEvent* event){
if(event->button()==Qt::LeftButton)
clicked();
emit clicked();
openBrowser(url());
}
void LinkLabel::setPos(int x,int y){
QFontMetrics fm(font());
setGeometry(x,y,fm.width(text()),fm.height());
}
void LinkLabel::setText(const QString& text){

@ -30,17 +30,20 @@ public:
LinkLabel(QWidget *parent, const char* name = 0,const QString& text=QString::null, int x=0, int y=0,Qt::WFlags f=0);
~LinkLabel();
void setPos(int x,int y);
QString url();
public slots:
virtual void setText(const QString&);
signals:
void clicked();
protected:
virtual void mouseReleaseEvent(QMouseEvent* event);
private:
QString URL;
};
#endif

@ -145,6 +145,7 @@ void KeepassMainWindow::setupConnections(){
connect(GroupView,SIGNAL(itemSelectionChanged()), this, SLOT(OnGroupSelectionChanged()));
connect(GroupView,SIGNAL(fileModified()),this,SLOT(OnFileModified()));
connect(QuickSearchEdit,SIGNAL(returnPressed()), this, SLOT(OnQuickSearch()));
connect(HideSearchResultsAction,SIGNAL(triggered()),this, SLOT(OnHideSearchGroup()));
}
@ -201,6 +202,7 @@ void KeepassMainWindow::setupMenus(){
GroupView->ContextMenu->addAction(EditNewEntryAction);
GroupView->ContextMenu->addSeparator();
GroupView->ContextMenu->addAction(EditGroupSearchAction);
GroupView->ContextMenuSearchGroup->addAction(HideSearchResultsAction);
EntryView->ContextMenu->addAction(EditPasswordToClipboardAction);
EntryView->ContextMenu->addAction(EditUsernameToClipboardAction);
@ -367,6 +369,9 @@ FileSaveAsAction->setEnabled(IsOpen);
FileCloseAction->setEnabled(IsOpen);
FileSettingsAction->setEnabled(IsOpen);
FileChangeKeyAction->setEnabled(IsOpen);
FileExpPlainTextAction->setEnabled(IsOpen);
EditSearchAction->setEnabled(IsOpen);
GroupView->setEnabled(IsOpen);
EntryView->setEnabled(IsOpen);
@ -615,6 +620,7 @@ QString filename=QFileDialog::getOpenFileName(this,tr("Open Database..."),QDir::
if(filename!=QString::null){
Q_ASSERT(!FileOpen);
db = new PwDatabase();
db->newDatabase();
CSimplePasswordDialog dlg(this,"SimplePasswordDlg",true);
if(!dlg.exec()){
delete db;
@ -654,6 +660,7 @@ QString filename=QFileDialog::getOpenFileName(this,tr("Open Database..."),QDir::
if(filename!=QString::null){
Q_ASSERT(!FileOpen);
db = new PwDatabase();
db->newDatabase();
GroupView->db=db;
EntryView->db=db;
QString err;
@ -810,7 +817,10 @@ for(int i=0; i<entries.size();i++){
db->deleteEntry(((EntryViewItem*)entries[i])->pEntry);
}
setStateFileModified(true);
EntryView->updateItems(currentGroup()->ID);
if(GroupView->isSearchResultGroup((GroupViewItem*)(GroupView->selectedItems()[0])))
EntryView->showSearchResults(SearchResults);
else
EntryView->updateItems(currentGroup()->ID);
}
void KeepassMainWindow::removeFromSearchResults(int id){
@ -885,7 +895,7 @@ EntryView->showSearchResults(SearchResults);
CGroup* KeepassMainWindow::currentGroup(){
Q_ASSERT(GroupView->selectedItems().size());
return static_cast<GroupViewItem*>(GroupView->selectedItems()[0])->pGroup;
return ((GroupViewItem*)(GroupView->selectedItems()[0]))->pGroup;
}
CEntry* KeepassMainWindow::currentEntry(){
@ -935,6 +945,13 @@ else
e->accept();
}
void KeepassMainWindow::OnHideSearchGroup(){
GroupView->ShowSearchGroup=false;
GroupView->updateItems();
EntryView->updateItems(0);
SearchResults.clear();
}
void KeepassMainWindow::OnExtrasSettings(){
CSettingsDlg dlg(this,"SettingsDlg");

@ -92,6 +92,7 @@ private slots:
void OnHelpAbout();
void OnItemExpanded(QTreeWidgetItem*);
void OnItemCollaped(QTreeWidgetItem*);
void OnHideSearchGroup();
private:
enum SelectionState{NONE,SINGLE,MULTIPLE,SEARCHGROUP};

File diff suppressed because it is too large Load Diff

@ -13,31 +13,33 @@
<translation type="unfinished"></translation>
</message>
<message>
<source>Homepage:</source>
<source>Thanks To</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>KeePassX - Cross Platform Password Manager</source>
<source>License</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Email:</source>
<source>Translation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Copyright (C) 2005-2006 Tarek Saidi</source>
<source>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;/head&gt;&lt;body style=&quot; white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;&quot;&gt;&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;KeePassX&lt;/span&gt; - Cross Platform Password Manager&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Thanks To</source>
<source>Copyright (C) 2005 - 2006 Tarek Saidi
KeePassX is distributed under the terms of the
General Public License (GPL) version 2.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>License</source>
<source>tarek.saidi@arcor.de</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Translation</source>
<source>http://keepass.berlios.de/</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -99,9 +101,14 @@
http://keepass.berlios.de/translation-howto.html</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>CChangeKeyDlg</name>
<message>
<source>Matthias Miller</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>http://www.outofhanwell.com/&lt;br&gt;Mac OS X Support</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>CDbSettingsDlg</name>
@ -277,11 +284,6 @@ Are you sure?</source>
<source>The selected key file or directory does not exist.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The selected key file or directory is not readable
.Please check your permissions.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The given directory does not contain any key files.</source>
<translation type="unfinished"></translation>
@ -340,6 +342,11 @@ Do you want to replace it?</source>
Do you want to replace it?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The selected key file or directory is not readable.
Please check your permissions.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>CSearchDlg</name>
@ -371,9 +378,6 @@ Do you want to replace it?</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChangeKeyDialog</name>
</context>
<context>
<name>EditEntryDialog</name>
<message>
@ -727,10 +731,6 @@ Do you want to replace it?</source>
<source>Keepass - %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unknown error in PwDatabase::loadDatabase()</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished"></translation>
@ -839,6 +839,10 @@ to save the changes?</source>
<source>Unknown error in Import_KWalletXml::importFile()</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unknown error in PwDatabase::openDatabase()</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -1046,6 +1050,10 @@ to save the changes?</source>
<source>Plain Text (*.txt)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Hide</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PasswordDlg</name>
@ -1116,23 +1124,10 @@ to save the changes?</source>
<source>Wrong Signature</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unsupported File Version</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unknown Encryption Algorithm</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>AES-Init Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Decryption failed.
The key is wrong or the file is damaged</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unexpected error: Offset is out of range. [G1]</source>
<translation type="unfinished"></translation>
@ -1166,6 +1161,27 @@ The key is wrong or the file is damaged.</source>
<source>Key file could not be written.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Could not open file.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Could not open file for writing.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unsupported File Version.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unknown Encryption Algorithm.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Decryption failed.
The key is wrong or the file is damaged.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
@ -1194,10 +1210,6 @@ Make sure you have write access to &apos;~/.keepass&apos;.</source>
<source>Could not open file.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Datei ist leer</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>File is no valid PwManager file.</source>
<translation type="unfinished"></translation>
@ -1247,16 +1259,16 @@ Make sure you have write access to &apos;~/.keepass&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warnung:</source>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message encoding="UTF-8">
<source>ungültiger RGB-Farbwert.
</source>
<message>
<source>Warning:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error</source>
<source>Invalid RGB color value.
</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -1458,11 +1470,11 @@ Make sure you have write access to &apos;~/.keepass&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Media Directory:</source>
<source>Remember last key type and location</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Remember last key type and location</source>
<source>Mounting Root:</source>
<translation type="unfinished"></translation>
</message>
</context>