diff options
| -rw-r--r-- | plugins/Db3x_mmap/src/database.cpp | 2 | ||||
| -rw-r--r-- | plugins/Db3x_mmap/src/dbcontacts.cpp | 8 | ||||
| -rw-r--r-- | plugins/Db3x_mmap/src/dbcrypt.cpp | 3 | ||||
| -rw-r--r-- | plugins/Db3x_mmap/src/dbheaders.cpp | 7 | ||||
| -rw-r--r-- | plugins/Db3x_mmap/src/dbintf.cpp | 1 | ||||
| -rw-r--r-- | plugins/Db3x_mmap/src/dbintf.h | 102 | ||||
| -rw-r--r-- | plugins/Db3x_mmap/src/dbmodulechain.cpp | 6 | ||||
| -rw-r--r-- | plugins/Db3x_mmap/src/dbsettings.cpp | 4 | ||||
| -rw-r--r-- | plugins/Db3x_mmap/src/ui.cpp | 2 | 
9 files changed, 73 insertions, 62 deletions
diff --git a/plugins/Db3x_mmap/src/database.cpp b/plugins/Db3x_mmap/src/database.cpp index 1df59e9575..68b60d01dd 100644 --- a/plugins/Db3x_mmap/src/database.cpp +++ b/plugins/Db3x_mmap/src/database.cpp @@ -60,7 +60,7 @@ DWORD CDb3Base::ReallocSpace(DWORD ofs, int oldSize, int newSize)  	if (ofs+oldSize == m_dbHeader.ofsFileEnd) {
  		ofsNew = ofs;
  		m_dbHeader.ofsFileEnd += newSize-oldSize;
 -		DBWrite(0,&m_dbHeader,sizeof(m_dbHeader));
 +		DBWrite(0, &m_dbHeader, sizeof(m_dbHeader));
  		log3("adding newspace %d@%08x+%d", newSize, ofsNew, oldSize);
  	}
  	else {
 diff --git a/plugins/Db3x_mmap/src/dbcontacts.cpp b/plugins/Db3x_mmap/src/dbcontacts.cpp index ee65364bf0..d330631b3b 100644 --- a/plugins/Db3x_mmap/src/dbcontacts.cpp +++ b/plugins/Db3x_mmap/src/dbcontacts.cpp @@ -142,7 +142,7 @@ STDMETHODIMP_(LONG) CDb3Base::DeleteContact(HANDLE hContact)  	dbc = (DBContact*)DBRead(hContact, sizeof(DBContact), NULL);
  	if (m_dbHeader.ofsFirstContact == (DWORD)hContact) {
  		m_dbHeader.ofsFirstContact = dbc->ofsNext;
 -		DBWrite(0,&m_dbHeader,sizeof(m_dbHeader));
 +		DBWrite(0, &m_dbHeader, sizeof(m_dbHeader));
  	}
  	else {
  		DWORD ofsNext = dbc->ofsNext;
 @@ -161,7 +161,7 @@ STDMETHODIMP_(LONG) CDb3Base::DeleteContact(HANDLE hContact)  	DeleteSpace((DWORD)hContact, sizeof(DBContact));
  	//decrement contact count
  	m_dbHeader.contactCount--;
 -	DBWrite(0,&m_dbHeader,sizeof(m_dbHeader));
 +	DBWrite(0, &m_dbHeader, sizeof(m_dbHeader));
  	DBFlush(0);
  	return 0;
  }
 @@ -179,8 +179,8 @@ STDMETHODIMP_(HANDLE) CDb3Base::AddContact()  		dbc.ofsNext = m_dbHeader.ofsFirstContact;
  		m_dbHeader.ofsFirstContact = ofsNew;
  		m_dbHeader.contactCount++;
 -		DBWrite(ofsNew,&dbc,sizeof(DBContact));
 -		DBWrite(0,&m_dbHeader,sizeof(m_dbHeader));
 +		DBWrite(ofsNew, &dbc, sizeof(DBContact));
 +		DBWrite(0, &m_dbHeader, sizeof(m_dbHeader));
  		DBFlush(0);
  	}
  	m_cache->AddContactToCache((HANDLE)ofsNew);
 diff --git a/plugins/Db3x_mmap/src/dbcrypt.cpp b/plugins/Db3x_mmap/src/dbcrypt.cpp index 7aa8a0c046..00cab246e8 100644 --- a/plugins/Db3x_mmap/src/dbcrypt.cpp +++ b/plugins/Db3x_mmap/src/dbcrypt.cpp @@ -184,8 +184,7 @@ LBL_SetNewKey:  		EnumModuleNames(sttModuleEnum, this);
  		// upgrade signature
 -		memcpy(&m_dbHeader.signature, &dbSignatureU, sizeof(dbSignatureU));
 -		DBWrite(0, &dbSignatureU, sizeof(dbSignatureU));
 +		WriteSignature(dbSignatureU);
  	}
  	if (m_dbHeader.version == DB_OLD_VERSION) {
 diff --git a/plugins/Db3x_mmap/src/dbheaders.cpp b/plugins/Db3x_mmap/src/dbheaders.cpp index 5d19daaf35..97e7b915fe 100644 --- a/plugins/Db3x_mmap/src/dbheaders.cpp +++ b/plugins/Db3x_mmap/src/dbheaders.cpp @@ -65,6 +65,11 @@ int CDb3Base::CheckDbHeaders()  	if (m_dbHeader.ofsUser == 0)
  		return EGROKPRF_DAMAGED;
 -	m_bEncrypted = 0 == memcmp(m_dbHeader.signature, &dbSignatureE, sizeof(m_dbHeader.signature));
  	return 0;
  }
 +
 +void CDb3Base::WriteSignature(DBSignature &sign)
 +{
 +	memcpy(&m_dbHeader.signature, &sign, sizeof(DBSignature));
 +	DBWrite(0, &sign, sizeof(DBSignature));
 +}
\ No newline at end of file diff --git a/plugins/Db3x_mmap/src/dbintf.cpp b/plugins/Db3x_mmap/src/dbintf.cpp index 0efc944518..9a1b7e9fba 100644 --- a/plugins/Db3x_mmap/src/dbintf.cpp +++ b/plugins/Db3x_mmap/src/dbintf.cpp @@ -126,6 +126,7 @@ int CDb3Base::Load(bool bSkipInit)  		if (InitModuleNames()) return 1;
  		m_bReadOnly = false;
 +		m_bEncrypted = 0 == memcmp(m_dbHeader.signature, &dbSignatureE, sizeof(m_dbHeader.signature));
  		hContactDeletedEvent = CreateHookableEvent(ME_DB_CONTACT_DELETED);
  		hContactAddedEvent = CreateHookableEvent(ME_DB_CONTACT_ADDED);
 diff --git a/plugins/Db3x_mmap/src/dbintf.h b/plugins/Db3x_mmap/src/dbintf.h index b3eb943f0a..eb0b67535f 100644 --- a/plugins/Db3x_mmap/src/dbintf.h +++ b/plugins/Db3x_mmap/src/dbintf.h @@ -54,9 +54,10 @@ DBHeader  #define DBVT_ENCRYPTED 250
 -struct DBSignature {
 -  char name[15];
 -  BYTE eof;
 +struct DBSignature
 +{
 +	char name[15];
 +	BYTE eof;
  };
  struct ModuleName
 @@ -66,68 +67,69 @@ struct ModuleName  };
  #include <pshpack1.h>
 -struct DBHeader {
 -  BYTE signature[16];      // 'Miranda ICQ DB',0,26
 -  DWORD version;		   //as 4 bytes, ie 1.2.3.10 = 0x0102030a
 -                           //this version is 0x00000700
 -  DWORD ofsFileEnd;		   //offset of the end of the database - place to write
 -                           //new structures
 -  DWORD slackSpace;		   //a counter of the number of bytes that have been
 -                           //wasted so far due to deleting structures and/or
 -						   //re-making them at the end. We should compact when
 -						   //this gets above a threshold
 -  DWORD contactCount;	   //number of contacts in the chain,excluding the user
 -  DWORD ofsFirstContact;   //offset to first DBContact in the chain
 -  DWORD ofsUser;		   //offset to DBContact representing the user
 -  DWORD ofsFirstModuleName;	//offset to first struct DBModuleName in the chain
 +struct DBHeader
 +{
 +	BYTE signature[16];      // 'Miranda ICQ DB',0,26
 +	DWORD version;		   //as 4 bytes, ie 1.2.3.10 = 0x0102030a
 +	//this version is 0x00000700
 +	DWORD ofsFileEnd;		   //offset of the end of the database - place to write
 +	//new structures
 +	DWORD slackSpace;		   //a counter of the number of bytes that have been
 +	//wasted so far due to deleting structures and/or
 +	//re-making them at the end. We should compact when
 +	//this gets above a threshold
 +	DWORD contactCount;	   //number of contacts in the chain,excluding the user
 +	DWORD ofsFirstContact;   //offset to first DBContact in the chain
 +	DWORD ofsUser;		   //offset to DBContact representing the user
 +	DWORD ofsFirstModuleName;	//offset to first struct DBModuleName in the chain
  };
  #define DBCONTACT_SIGNATURE   0x43DECADEu
  struct DBContact
  {
 -  DWORD signature;
 -  DWORD ofsNext;			 //offset to the next contact in the chain. zero if
 -                             //this is the 'user' contact or the last contact
 -							 //in the chain
 -  DWORD ofsFirstSettings;	 //offset to the first DBContactSettings in the
 -                             //chain for this contact.
 -  DWORD eventCount;			 //number of events in the chain for this contact
 -  DWORD ofsFirstEvent,ofsLastEvent;	 //offsets to the first and last DBEvent in
 -                                     //the chain for this contact
 -  DWORD ofsFirstUnreadEvent; //offset to the first (chronological) unread event
 -							 //in the chain, 0 if all are read
 -  DWORD timestampFirstUnread; //timestamp of the event at ofsFirstUnreadEvent
 +	DWORD signature;
 +	DWORD ofsNext;			 //offset to the next contact in the chain. zero if
 +	//this is the 'user' contact or the last contact
 +	//in the chain
 +	DWORD ofsFirstSettings;	 //offset to the first DBContactSettings in the
 +	//chain for this contact.
 +	DWORD eventCount;			 //number of events in the chain for this contact
 +	DWORD ofsFirstEvent, ofsLastEvent;	 //offsets to the first and last DBEvent in
 +	//the chain for this contact
 +	DWORD ofsFirstUnreadEvent; //offset to the first (chronological) unread event
 +	//in the chain, 0 if all are read
 +	DWORD timestampFirstUnread; //timestamp of the event at ofsFirstUnreadEvent
  };
  #define DBMODULENAME_SIGNATURE  0x4DDECADEu
  struct DBModuleName
  {
 -  DWORD signature;
 -  DWORD ofsNext;		//offset to the next module name in the chain
 -  BYTE cbName;			//number of characters in this module name
 -  char name[1];			//name, no nul terminator
 +	DWORD signature;
 +	DWORD ofsNext;		//offset to the next module name in the chain
 +	BYTE cbName;			//number of characters in this module name
 +	char name[1];			//name, no nul terminator
  };
  #define DBCONTACTSETTINGS_SIGNATURE  0x53DECADEu
  struct DBContactSettings
  {
 -  DWORD signature;
 -  DWORD ofsNext;		 //offset to the next contactsettings in the chain
 -  DWORD ofsModuleName;	 //offset to the DBModuleName of the owner of these
 -                         //settings
 -  DWORD cbBlob;			 //size of the blob in bytes. May be larger than the
 -                         //actual size for reducing the number of moves
 -						 //required using granularity in resizing
 -  BYTE blob[1];			 //the blob. a back-to-back sequence of DBSetting
 -                         //structs, the last has cbName = 0
 +	DWORD signature;
 +	DWORD ofsNext;		 //offset to the next contactsettings in the chain
 +	DWORD ofsModuleName;	 //offset to the DBModuleName of the owner of these
 +	//settings
 +	DWORD cbBlob;			 //size of the blob in bytes. May be larger than the
 +	//actual size for reducing the number of moves
 +	//required using granularity in resizing
 +	BYTE blob[1];			 //the blob. a back-to-back sequence of DBSetting
 +	//structs, the last has cbName = 0
  };
  #define DBEVENT_SIGNATURE  0x45DECADEu
  struct DBEvent
  {
  	DWORD signature;
 -	DWORD ofsPrev,ofsNext;	 //offset to the previous and next events in the
 +	DWORD ofsPrev, ofsNext;	 //offset to the previous and next events in the
  	//chain. Chain is sorted chronologically
  	DWORD ofsModuleName;		 //offset to a DBModuleName struct of the name of
  	//the owner of this event
 @@ -151,7 +153,9 @@ struct CDb3Base : public MIDatabase, public MIDatabaseChecker, public MZeroedObj  	int Create(void);
  	int CreateDbHeaders(const DBSignature&);
  	int CheckDbHeaders();
 +
  	void DatabaseCorruption(TCHAR *text);
 +	void WriteSignature(DBSignature&);
  	__forceinline HANDLE getFile() const { return m_hDbFile; }
  	__forceinline bool isEncrypted() const { return m_bEncrypted; }
 @@ -237,7 +241,7 @@ protected:  	////////////////////////////////////////////////////////////////////////////
  	// database stuff
 -public:	
 +public:
  	UINT_PTR m_flushBuffersTimerId;
  	DWORD    m_flushFailTick;
  	PBYTE    m_pDbCache;
 @@ -257,7 +261,8 @@ protected:  	DWORD ReallocSpace(DWORD ofs, int oldSize, int newSize);
  	__forceinline PBYTE DBRead(HANDLE hContact, int bytesRequired, int *bytesAvail)
 -	{	return DBRead((DWORD)hContact, bytesRequired, bytesAvail);
 +	{
 +		return DBRead((DWORD)hContact, bytesRequired, bytesAvail);
  	}
  	////////////////////////////////////////////////////////////////////////////
 @@ -293,14 +298,14 @@ protected:  	DWORD ConvertModuleNameOfs(DWORD ofsOld);
  	void ConvertOldEvent(DBEvent*& dbei);
 -	int GetContactSettingWorker(HANDLE hContact,DBCONTACTGETSETTING *dbcgs,int isStatic);
 +	int GetContactSettingWorker(HANDLE hContact, DBCONTACTGETSETTING *dbcgs, int isStatic);
  	int WorkSettingsChain(DWORD ofsContact, DBContact *dbc, int firstTime);
  	int WorkEventChain(DWORD ofsContact, DBContact *dbc, int firstTime);
  	DWORD WriteSegment(DWORD ofs, PVOID buf, int cbBytes);
  	DWORD WriteEvent(DBEvent *dbe);
 -	void WriteOfsNextToPrevious(DWORD ofsPrev,DBContact *dbc,DWORD ofsNext);
 -	void FinishUp(DWORD ofsLast,DBContact *dbc);
 +	void WriteOfsNextToPrevious(DWORD ofsPrev, DBContact *dbc, DWORD ofsNext);
 +	void FinishUp(DWORD ofsLast, DBContact *dbc);
  	DBCHeckCallback *cb;
  	DWORD sourceFileSize, ofsAggrCur;
 @@ -326,4 +331,3 @@ protected:  	void  InitDialogs();
  	bool  EnterPassword(const BYTE *pKey, const size_t keyLen);
  };
 -
 diff --git a/plugins/Db3x_mmap/src/dbmodulechain.cpp b/plugins/Db3x_mmap/src/dbmodulechain.cpp index 743bbd2b21..3b61a236fa 100644 --- a/plugins/Db3x_mmap/src/dbmodulechain.cpp +++ b/plugins/Db3x_mmap/src/dbmodulechain.cpp @@ -95,9 +95,9 @@ DWORD CDb3Base::GetModuleNameOfs(const char *szName)  	dbmn.cbName = nameLen;
  	dbmn.ofsNext = m_dbHeader.ofsFirstModuleName;
  	m_dbHeader.ofsFirstModuleName = ofsNew;
 -	DBWrite(0,&m_dbHeader,sizeof(m_dbHeader));
 -	DBWrite(ofsNew,&dbmn,offsetof(struct DBModuleName,name));
 -	DBWrite(ofsNew+offsetof(struct DBModuleName,name),(PVOID)szName,nameLen);
 +	DBWrite(0, &m_dbHeader, sizeof(m_dbHeader));
 +	DBWrite(ofsNew, &dbmn, offsetof(struct DBModuleName, name));
 +	DBWrite(ofsNew + offsetof(struct DBModuleName, name), (PVOID)szName, nameLen);
  	DBFlush(0);
  	//add to cache
 diff --git a/plugins/Db3x_mmap/src/dbsettings.cpp b/plugins/Db3x_mmap/src/dbsettings.cpp index 0383a12e41..254718fa9a 100644 --- a/plugins/Db3x_mmap/src/dbsettings.cpp +++ b/plugins/Db3x_mmap/src/dbsettings.cpp @@ -83,7 +83,7 @@ int CDb3Base::GetContactSettingWorker(HANDLE hContact, DBCONTACTGETSETTING *dbcg  	DBVARIANT *pCachedValue = m_cache->GetCachedValuePtr(hContact, szCachedSettingName, 0);
  	if (pCachedValue != NULL) {
  		if (pCachedValue->type == DBVT_ASCIIZ || pCachedValue->type == DBVT_UTF8) {
 -			bool bIsEncrypted = m_bEncrypted || ::isEncrypted(dbcgs->szModule, dbcgs->szSetting);
 +			bool bIsEncrypted = /*m_bEncrypted || */ ::isEncrypted(dbcgs->szModule, dbcgs->szSetting);
  			int cbOrigLen = dbcgs->pValue->cchVal;
  			char *cbOrigPtr = dbcgs->pValue->pszVal;
  			memcpy(dbcgs->pValue, pCachedValue, sizeof(DBVARIANT));
 @@ -412,7 +412,7 @@ STDMETHODIMP_(BOOL) CDb3Base::WriteContactSetting(HANDLE hContact, DBCONTACTWRIT  	case DBVT_ASCIIZ: case DBVT_UTF8:
  		if (tmp.value.pszVal == NULL) return 1;
  		tmp.value.cchVal = (WORD)strlen(tmp.value.pszVal);
 -		bIsEncrypted = m_bEncrypted || ::isEncrypted(dbcws->szModule, dbcws->szSetting);
 +		bIsEncrypted = /*m_bEncrypted ||*/ ::isEncrypted(dbcws->szModule, dbcws->szSetting);
  		if (bIsEncrypted) {
  			size_t len;
  			BYTE *pResult = m_crypto->encodeString(tmp.value.pszVal, &len);
 diff --git a/plugins/Db3x_mmap/src/ui.cpp b/plugins/Db3x_mmap/src/ui.cpp index 902791c1b2..a8fa3f787a 100644 --- a/plugins/Db3x_mmap/src/ui.cpp +++ b/plugins/Db3x_mmap/src/ui.cpp @@ -192,6 +192,7 @@ LBL_Error:  				SetDlgItemTextA(hwndDlg, IDC_USERPASS2, "");
  			}
  			else {
 +				param->db->WriteSignature(dbSignatureU);
  				param->db->SetPassword(NULL);
  				param->db->StoreKey();
  				EndDialog(hwndDlg, IDREMOVE);
 @@ -215,6 +216,7 @@ LBL_Error:  			if (!CheckOldPassword(hwndDlg, param->db))
  				goto LBL_Error;
 +			param->db->WriteSignature(dbSignatureE);
  			param->db->SetPassword(buf2);
  			param->db->StoreKey();
  			SecureZeroMemory(buf2, sizeof(buf2));
  | 
