Browse Source

Fixes

pull/985/head
apprb 11 years ago committed by Dubslow
parent
commit
eb0b33be32
  1. 5
      src/core.cpp
  2. 7
      src/historykeeper.cpp
  3. 39
      src/misc/db/encrypteddb.cpp
  4. 1
      src/misc/db/encrypteddb.h

5
src/core.cpp

@ -482,7 +482,6 @@ void Core::onGroupInvite(Tox*, int friendnumber, uint8_t type, const uint8_t *da
void Core::onGroupMessage(Tox*, int groupnumber, int peernumber, const uint8_t * message, uint16_t length, void *_core) void Core::onGroupMessage(Tox*, int groupnumber, int peernumber, const uint8_t * message, uint16_t length, void *_core)
{ {
Core* core = static_cast<Core*>(_core); Core* core = static_cast<Core*>(_core);
emit core->groupMessageReceived(groupnumber, peernumber, CString::toString(message, length), false); emit core->groupMessageReceived(groupnumber, peernumber, CString::toString(message, length), false);
} }
@ -1239,7 +1238,9 @@ bool Core::loadConfiguration(QString path)
if (salt.size() == 0) if (salt.size() == 0)
{ // maybe we should handle this better { // maybe we should handle this better
qWarning() << "Core: history db isn't encrypted, but encryption is set!! No history loaded..."; Widget::getInstance()->showWarningMsgBox(tr("Encrypted History"), tr("No encrypted history file found.\nHistory will be disabled!"));
Settings::getInstance().setEncryptLogs(false);
Settings::getInstance().setEnableLogging(false);
} }
else else
{ {

7
src/historykeeper.cpp

@ -132,9 +132,10 @@ HistoryKeeper::HistoryKeeper(GenericDdInterface *db_) :
setSyncType(Settings::getInstance().getDbSyncType()); setSyncType(Settings::getInstance().getDbSyncType());
messageID = 0;
QSqlQuery sqlAnswer = db->exec("select seq from sqlite_sequence where name=\"history\";"); QSqlQuery sqlAnswer = db->exec("select seq from sqlite_sequence where name=\"history\";");
sqlAnswer.first(); if (sqlAnswer.first())
messageID = sqlAnswer.value(0).toInt(); messageID = sqlAnswer.value(0).toInt();
} }
HistoryKeeper::~HistoryKeeper() HistoryKeeper::~HistoryKeeper()
@ -148,7 +149,7 @@ int HistoryKeeper::addChatEntry(const QString& chat, const QString& message, con
int sender_id = getAliasID(sender); int sender_id = getAliasID(sender);
db->exec("BEGIN TRANSACTION;"); db->exec("BEGIN TRANSACTION;");
db->exec(QString("INSERT INTO history (timestamp, chat_id, sender, message) ") + db->exec(QString("INSERT INTO history (timestamp, chat_id, sender, message)") +
QString("VALUES (%1, %2, %3, '%4');") QString("VALUES (%1, %2, %3, '%4');")
.arg(dt.toMSecsSinceEpoch()).arg(chat_id).arg(sender_id).arg(wrapMessage(message))); .arg(dt.toMSecsSinceEpoch()).arg(chat_id).arg(sender_id).arg(wrapMessage(message)));
db->exec(QString("INSERT INTO sent_status (status) VALUES (%1);").arg(isSent)); db->exec(QString("INSERT INTO sent_status (status) VALUES (%1);").arg(isSent));

39
src/misc/db/encrypteddb.cpp

@ -24,8 +24,8 @@
#include <QDebug> #include <QDebug>
#include <QSqlError> #include <QSqlError>
qint64 EncryptedDb::plainChunkSize = 4096; qint64 EncryptedDb::encryptedChunkSize = 4096;
qint64 EncryptedDb::encryptedChunkSize = EncryptedDb::plainChunkSize + tox_pass_encryption_extra_length(); qint64 EncryptedDb::plainChunkSize = EncryptedDb::encryptedChunkSize - tox_pass_encryption_extra_length();
EncryptedDb::EncryptedDb(const QString &fname, QList<QString> initList) : EncryptedDb::EncryptedDb(const QString &fname, QList<QString> initList) :
PlainDb(":memory:", initList), fileName(fname) PlainDb(":memory:", initList), fileName(fname)
@ -65,7 +65,7 @@ EncryptedDb::~EncryptedDb()
QSqlQuery EncryptedDb::exec(const QString &query) QSqlQuery EncryptedDb::exec(const QString &query)
{ {
QSqlQuery retQSqlQuery = PlainDb::exec(query); QSqlQuery retQSqlQuery = PlainDb::exec(query);
if (query.startsWith("INSERT", Qt::CaseInsensitive)) if (checkCmd(query))
appendToEncrypted(query); appendToEncrypted(query);
return retQSqlQuery; return retQSqlQuery;
@ -100,31 +100,15 @@ bool EncryptedDb::pullFileContent(const QString &fname, QByteArray &buf)
for (auto ba_line : splittedBA) for (auto ba_line : splittedBA)
{ {
QString line = QByteArray::fromBase64(ba_line); QString line = QByteArray::fromBase64(ba_line);
if (line.size() == 0) sqlCmds.append(line);
continue;
bool isGoodLine = false;
if (line.startsWith("CREATE", Qt::CaseInsensitive) || line.startsWith("INSERT", Qt::CaseInsensitive))
{
if (line.endsWith(");"))
{
sqlCmds.append(line);
isGoodLine = true;
}
}
if (!isGoodLine)
{
qWarning() << "Encrypted history log is corrupted: errors in content";
buf = QByteArray();
return false;
}
} }
PlainDb::exec("BEGIN TRANSACTION;");
for (auto line : sqlCmds) for (auto line : sqlCmds)
{ {
QSqlQuery r = PlainDb::exec(line); QSqlQuery r = PlainDb::exec(line);
} }
PlainDb::exec("COMMIT TRANSACTION;");
dbFile.close(); dbFile.close();
@ -184,3 +168,14 @@ bool EncryptedDb::check(const QString &fname)
file.close(); file.close();
return state; return state;
} }
bool EncryptedDb::checkCmd(const QString &cmd)
{
if (cmd.startsWith("INSERT", Qt::CaseInsensitive) || cmd.startsWith("UPDATE", Qt::CaseInsensitive)
|| cmd.startsWith("DELETE", Qt::CaseInsensitive))
{
return true;
}
return false;
}

1
src/misc/db/encrypteddb.h

@ -34,6 +34,7 @@ public:
private: private:
bool pullFileContent(const QString& fname, QByteArray &buf); bool pullFileContent(const QString& fname, QByteArray &buf);
void appendToEncrypted(const QString &sql); void appendToEncrypted(const QString &sql);
bool checkCmd(const QString &cmd);
QFile encrFile; QFile encrFile;
QString fileName; QString fileName;

Loading…
Cancel
Save