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.
* 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 key database encryption composite key
* @param db database to read into
@ -91,6 +93,11 @@ bool KdbxReader::readDatabase(QIODevice* device, QSharedPointer<const CompositeK
return false;
}
// No key provided - don't proceed to load payload
if (key.isNull()) {
return true;
}
// read payload
return readDatabaseImpl(device, headerStream.storedData(), std::move(key), db);
}

View File

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