Skip to content

Commit

Permalink
Make all internal connections to the security database use embedded p…
Browse files Browse the repository at this point in the history
…rovider only.

It should fix bug CORE-5540 : Every other execution of embedded isql slow.
  • Loading branch information
hvlad committed May 16, 2017
1 parent 61e2266 commit cc102b7
Show file tree
Hide file tree
Showing 8 changed files with 9 additions and 6 deletions.
1 change: 1 addition & 0 deletions src/auth/SecureRemotePassword/manage/SrpManagement.cpp
Expand Up @@ -233,6 +233,7 @@ class SrpManagement FB_FINAL : public Firebird::StdPlugin<Firebird::IManagementI

Firebird::ClumpletWriter dpb(Firebird::ClumpletReader::dpbList, MAX_DPB_SIZE);
dpb.insertByte(isc_dpb_sec_attach, TRUE);
dpb.insertString(isc_dpb_config, EMBEDDED_PROVIDERS, fb_strlen(EMBEDDED_PROVIDERS));

unsigned int authBlockSize;
const unsigned char* authBlock = logonInfo->authBlock(&authBlockSize);
Expand Down
3 changes: 1 addition & 2 deletions src/auth/SecureRemotePassword/server/SrpServer.cpp
Expand Up @@ -141,8 +141,7 @@ int SrpServer::authenticate(CheckStatusWrapper* status, IServerBlock* sb, IWrite
ClumpletWriter dpb(ClumpletReader::dpbList, MAX_DPB_SIZE);
dpb.insertByte(isc_dpb_sec_attach, TRUE);
dpb.insertString(isc_dpb_user_name, DBA_USER_NAME, fb_strlen(DBA_USER_NAME));
const char* providers = "Providers=" CURRENT_ENGINE;
dpb.insertString(isc_dpb_config, providers, fb_strlen(providers));
dpb.insertString(isc_dpb_config, EMBEDDED_PROVIDERS, fb_strlen(EMBEDDED_PROVIDERS));
att = p->attachDatabase(status, secDbName, dpb.getBufferLength(), dpb.getBuffer());
check(status);
HANDSHAKE_DEBUG(fprintf(stderr, "Srv SRP: attached sec db %s\n", secDbName));
Expand Down
1 change: 1 addition & 0 deletions src/auth/SecurityDatabase/LegacyManagement.epp
Expand Up @@ -131,6 +131,7 @@ void SecurityDatabaseManagement::start(Firebird::CheckStatusWrapper* st, Firebir

Firebird::ClumpletWriter dpb(Firebird::ClumpletReader::dpbList, MAX_DPB_SIZE);
dpb.insertByte(isc_dpb_sec_attach, TRUE);
dpb.insertString(isc_dpb_config, EMBEDDED_PROVIDERS, fb_strlen(EMBEDDED_PROVIDERS));

unsigned int authBlockSize;
const unsigned char* authBlock = logonInfo->authBlock(&authBlockSize);
Expand Down
3 changes: 1 addition & 2 deletions src/auth/SecurityDatabase/LegacyServer.cpp
Expand Up @@ -293,8 +293,7 @@ void SecurityDatabase::prepare()
dpb.insertString(isc_dpb_trusted_auth, DBA_USER_NAME, fb_strlen(DBA_USER_NAME));

// Do not use other providers except current engine
const char* providers = "Providers=" CURRENT_ENGINE;
dpb.insertString(isc_dpb_config, providers, fb_strlen(providers));
dpb.insertString(isc_dpb_config, EMBEDDED_PROVIDERS, fb_strlen(EMBEDDED_PROVIDERS));

isc_db_handle tempHandle = 0;
isc_attach_database(status, 0, secureDbName, &tempHandle,
Expand Down
1 change: 1 addition & 0 deletions src/jrd/DbCreators.cpp
Expand Up @@ -73,6 +73,7 @@ bool openDb(const char* securityDb, RefPtr<IAttachment>& att, RefPtr<ITransactio
ClumpletWriter embeddedAttach(ClumpletWriter::Tagged, MAX_DPB_SIZE, isc_dpb_version1);
embeddedAttach.insertString(isc_dpb_user_name, DBA_USER_NAME, fb_strlen(DBA_USER_NAME));
embeddedAttach.insertByte(isc_dpb_sec_attach, TRUE);
embeddedAttach.insertString(isc_dpb_config, EMBEDDED_PROVIDERS, fb_strlen(EMBEDDED_PROVIDERS));
embeddedAttach.insertByte(isc_dpb_no_db_triggers, TRUE);

FbLocalStatus st;
Expand Down
2 changes: 2 additions & 0 deletions src/jrd/Mapping.cpp
Expand Up @@ -944,6 +944,7 @@ class DbHandle : public AutoPtr<IAttachment, SimpleRelease<IAttachment> >
ClumpletWriter embeddedSysdba(ClumpletWriter::Tagged, 1024, isc_dpb_version1);
embeddedSysdba.insertString(isc_dpb_user_name, DBA_USER_NAME, fb_strlen(DBA_USER_NAME));
embeddedSysdba.insertByte(isc_dpb_sec_attach, TRUE);
embeddedSysdba.insertString(isc_dpb_config, EMBEDDED_PROVIDERS, fb_strlen(EMBEDDED_PROVIDERS));
embeddedSysdba.insertByte(isc_dpb_map_attach, TRUE);
embeddedSysdba.insertByte(isc_dpb_no_db_triggers, TRUE);

Expand Down Expand Up @@ -1563,6 +1564,7 @@ RecordBuffer* MappingList::getList(thread_db* tdbb, jrd_rel* relation)
embeddedSysdba.insertString(isc_dpb_user_name, DBA_USER_NAME,
fb_strlen(DBA_USER_NAME));
embeddedSysdba.insertByte(isc_dpb_sec_attach, TRUE);
embeddedSysdba.insertString(isc_dpb_config, EMBEDDED_PROVIDERS, fb_strlen(EMBEDDED_PROVIDERS));
embeddedSysdba.insertByte(isc_dpb_no_db_triggers, TRUE);

const char* dbName = tdbb->getDatabase()->dbb_config->getSecurityDatabase();
Expand Down
1 change: 1 addition & 0 deletions src/jrd/constants.h
Expand Up @@ -450,6 +450,7 @@ const TraNumber MAX_TRA_NUMBER = 0x0000FFFFFFFFFFFF; // ~2.8 * 10^14
const int OPT_STATIC_ITEMS = 64;

#define CURRENT_ENGINE "Engine13"
#define EMBEDDED_PROVIDERS "Providers=" CURRENT_ENGINE

const int WITH_GRANT_OPTION = 1;
const int WITH_ADMIN_OPTION = 2;
Expand Down
3 changes: 1 addition & 2 deletions src/jrd/svc.cpp
Expand Up @@ -567,8 +567,7 @@ unsigned int Service::getAuthBlock(const unsigned char** bytes)

void Service::fillDpb(ClumpletWriter& dpb)
{
const char* providers = "Providers=" CURRENT_ENGINE;
dpb.insertString(isc_dpb_config, providers, fb_strlen(providers));
dpb.insertString(isc_dpb_config, EMBEDDED_PROVIDERS, fb_strlen(EMBEDDED_PROVIDERS));
if (svc_address_path.hasData())
{
dpb.insertString(isc_dpb_address_path, svc_address_path);
Expand Down

0 comments on commit cc102b7

Please sign in to comment.