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
This commit is contained in:
parent
49059c82f4
commit
9bbe30fb16
|
@ -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><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">KeePassX</span> - Cross Platform Password Manager</p></body></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&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,115 +1,117 @@
|
|||
<ui stdsetdef="1" version="4.0" >
|
||||
<author/>
|
||||
<comment/>
|
||||
<exportmacro/>
|
||||
<class>SimplePasswordDialog</class>
|
||||
<widget class="QDialog" name="SimplePasswordDialog" >
|
||||
<property name="geometry" >
|
||||
<rect>
|
||||
<x>2</x>
|
||||
<y>3</y>
|
||||
<width>345</width>
|
||||
<height>90</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy" >
|
||||
<sizepolicy>
|
||||
<hsizetype>0</hsizetype>
|
||||
<vsizetype>0</vsizetype>
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize" >
|
||||
<size>
|
||||
<width>345</width>
|
||||
<height>90</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize" >
|
||||
<size>
|
||||
<width>345</width>
|
||||
<height>90</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="windowTitle" >
|
||||
<string>Enter your Password</string>
|
||||
</property>
|
||||
<widget class="QLabel" name="textLabel1" >
|
||||
<property name="geometry" >
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>20</y>
|
||||
<width>60</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<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>
|
||||
<x>170</x>
|
||||
<y>60</y>
|
||||
<width>80</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>O&K</string>
|
||||
</property>
|
||||
<property name="shortcut" >
|
||||
<string>Alt+K</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="ButtonCancel" >
|
||||
<property name="geometry" >
|
||||
<rect>
|
||||
<x>257</x>
|
||||
<y>60</y>
|
||||
<width>80</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>&Cancel</string>
|
||||
</property>
|
||||
<property name="shortcut" >
|
||||
<string>Alt+C</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="Button_HidePassword" >
|
||||
<property name="geometry" >
|
||||
<rect>
|
||||
<x>320</x>
|
||||
<y>20</y>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="shortcut" >
|
||||
<string/>
|
||||
</property>
|
||||
<property name="checkable" >
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
<ui version="4.0" >
|
||||
<author></author>
|
||||
<comment></comment>
|
||||
<exportmacro></exportmacro>
|
||||
<class>SimplePasswordDialog</class>
|
||||
<widget class="QDialog" name="SimplePasswordDialog" >
|
||||
<property name="geometry" >
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>345</width>
|
||||
<height>90</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy" >
|
||||
<sizepolicy>
|
||||
<hsizetype>0</hsizetype>
|
||||
<vsizetype>0</vsizetype>
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize" >
|
||||
<size>
|
||||
<width>345</width>
|
||||
<height>90</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize" >
|
||||
<size>
|
||||
<width>345</width>
|
||||
<height>90</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="windowTitle" >
|
||||
<string>Enter your Password</string>
|
||||
</property>
|
||||
<widget class="QLabel" name="textLabel1" >
|
||||
<property name="geometry" >
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>20</y>
|
||||
<width>60</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>Password:</string>
|
||||
</property>
|
||||
</widget>
|
||||
<layoutdefault spacing="6" margin="11" />
|
||||
<pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
|
||||
<widget class="QPushButton" name="ButtonOK" >
|
||||
<property name="geometry" >
|
||||
<rect>
|
||||
<x>170</x>
|
||||
<y>60</y>
|
||||
<width>80</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>O&K</string>
|
||||
</property>
|
||||
<property name="shortcut" >
|
||||
<string>Alt+K</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="ButtonCancel" >
|
||||
<property name="geometry" >
|
||||
<rect>
|
||||
<x>257</x>
|
||||
<y>60</y>
|
||||
<width>80</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>&Cancel</string>
|
||||
</property>
|
||||
<property name="shortcut" >
|
||||
<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>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="shortcut" >
|
||||
<string/>
|
||||
</property>
|
||||
<property name="checkable" >
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</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
|
@ -12,22 +12,6 @@
|
|||
<source>About</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Homepage:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassX - Cross Platform Password Manager</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Email:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copyright (C) 2005-2006 Tarek Saidi</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Thanks To</source>
|
||||
<translation type="unfinished"></translation>
|
||||
|
@ -40,6 +24,24 @@
|
|||
<source>Translation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">KeePassX</span> - Cross Platform Password Manager</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>tarek.saidi@arcor.de</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>http://keepass.berlios.de/</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CAboutDialog</name>
|
||||
|
@ -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/<br>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 '~/.keepass'.</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 '~/.keepass'.</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Warnung:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message encoding="UTF-8">
|
||||
<source>ungültiger RGB-Farbwert.
|
||||
</source>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<source>Warning:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid RGB color value.
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
@ -1458,11 +1470,11 @@ Make sure you have write access to '~/.keepass'.</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>
|
||||
|
|
Loading…
Reference in New Issue