Backport code to read database public headers

This is required to show the public icon, color, and name of a locked database
This commit is contained in:
Jonathan White 2025-02-02 10:14:52 -05:00
parent f48dcb3dba
commit 14ee702b09
No known key found for this signature in database
GPG key ID: 440FC65F2E0C6E01
2 changed files with 18 additions and 1 deletions

View file

@ -55,6 +55,8 @@ bool KdbxReader::readMagicNumbers(QIODevice* device, quint32& sig1, quint32& sig
* Read KDBX stream from device. * Read KDBX stream from device.
* The device will automatically be reset to 0 before reading. * The device will automatically be reset to 0 before reading.
* *
* Passing a null key will only read in the unprotected headers.
*
* @param device input device * @param device input device
* @param key database encryption composite key * @param key database encryption composite key
* @param db database to read into * @param db database to read into
@ -91,6 +93,11 @@ bool KdbxReader::readDatabase(QIODevice* device, QSharedPointer<const CompositeK
return false; return false;
} }
// No key provided - don't proceed to load payload
if (key.isNull()) {
return true;
}
// read payload // read payload
return readDatabaseImpl(device, headerStream.storedData(), std::move(key), db); return readDatabaseImpl(device, headerStream.storedData(), std::move(key), db);
} }

View file

@ -242,6 +242,12 @@ void DatabaseOpenWidget::load(const QString& filename)
clearForms(); clearForms();
m_filename = filename; m_filename = filename;
// Read public headers
QString error;
m_db.reset(new Database());
m_db->open(m_filename, nullptr, &error);
m_ui->fileNameLabel->setRawText(m_filename); m_ui->fileNameLabel->setRawText(m_filename);
// Set the public name if defined // Set the public name if defined
@ -296,7 +302,9 @@ void DatabaseOpenWidget::clearForms()
toggleHardwareKeyComponent(false); toggleHardwareKeyComponent(false);
toggleQuickUnlockScreen(); toggleQuickUnlockScreen();
m_db.reset(new Database(m_filename)); QString error;
m_db.reset(new Database());
m_db->open(m_filename, nullptr, &error);
} }
QSharedPointer<Database> DatabaseOpenWidget::database() QSharedPointer<Database> DatabaseOpenWidget::database()
@ -361,6 +369,8 @@ void DatabaseOpenWidget::openDatabase()
msgBox->exec(); msgBox->exec();
if (msgBox->clickedButton() != btn) { if (msgBox->clickedButton() != btn) {
m_db.reset(new Database()); m_db.reset(new Database());
m_db->open(m_filename, nullptr, &error);
m_ui->messageWidget->showMessage(tr("Database unlock canceled."), MessageWidget::MessageType::Error); m_ui->messageWidget->showMessage(tr("Database unlock canceled."), MessageWidget::MessageType::Error);
setUserInteractionLock(false); setUserInteractionLock(false);
return; return;