| 107 | |
| 108 | |
| 109 | class SecurityDatabase : public VSecDb |
| 110 | { |
| 111 | public: |
| 112 | // VSecDb implementation |
| 113 | bool lookup(void* inMsg, void* outMsg) override |
| 114 | { |
| 115 | FbLocalStatus status; |
| 116 | |
| 117 | stmt->execute(&status, tra, meta().param.getMetadata(), inMsg, |
| 118 | meta().data.getMetadata(), outMsg); |
| 119 | check(&status); |
| 120 | |
| 121 | return false; // safe default |
| 122 | } |
| 123 | |
| 124 | bool test() override |
| 125 | { |
| 126 | FbLocalStatus status; |
| 127 | |
| 128 | att->ping(&status); |
| 129 | return !(status->getState() & IStatus::STATE_ERRORS); |
| 130 | } |
| 131 | |
| 132 | // This 2 are needed to satisfy temporarily different calling requirements |
| 133 | static int shutdown(const int, const int, void*) |
| 134 | { |
| 135 | return instances->shutdown(); |
| 136 | } |
| 137 | static void cleanup() |
| 138 | { |
| 139 | instances->shutdown(); |
| 140 | } |
| 141 | |
| 142 | static void forceClean(IProvider* p, CachedSecurityDatabase::Instance& instance) |
| 143 | { |
| 144 | Firebird::PathName secDbName(instance->secureDbName); |
| 145 | |
| 146 | instance.reset(); |
| 147 | cleanup(); |
| 148 | |
| 149 | ClumpletWriter dpb(ClumpletReader::dpbList, MAX_DPB_SIZE); |
| 150 | dpb.insertByte(isc_dpb_sec_attach, TRUE); |
| 151 | dpb.insertByte(isc_dpb_gfix_attach, TRUE); |
| 152 | dpb.insertTag(isc_dpb_nolinger); |
| 153 | dpb.insertString(isc_dpb_user_name, DBA_USER_NAME, fb_strlen(DBA_USER_NAME)); |
| 154 | dpb.insertString(isc_dpb_config, ParsedList::getNonLoopbackProviders(secDbName)); |
| 155 | |
| 156 | FbLocalStatus status; |
| 157 | RefPtr<IAttachment> att(REF_NO_INCR, |
| 158 | p->attachDatabase(&status, secDbName.c_str(), dpb.getBufferLength(), dpb.getBuffer())); |
| 159 | check(&status); |
| 160 | |
| 161 | HANDSHAKE_DEBUG(fprintf(stderr, "Srv SRP: gfix-like attach to sec db %s\n", secDbName.c_str())); |
| 162 | } |
| 163 | |
| 164 | SecurityDatabase(CachedSecurityDatabase::Instance& instance, ICryptKeyCallback* cryptCallback) |
| 165 | : att(nullptr), tra(nullptr), stmt(nullptr) |
| 166 | { |