From: <di...@us...> - 2010-10-28 18:16:27
|
Revision: 51792 http://firebird.svn.sourceforge.net/firebird/?rev=51792&view=rev Author: dimitr Date: 2010-10-28 18:16:21 +0000 (Thu, 28 Oct 2010) Log Message: ----------- Fixed CORE-3202: execute_immediate API call family may crash the remote server. Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2010-10-28 18:14:49 UTC (rev 51791) +++ firebird/trunk/src/remote/server/server.cpp 2010-10-28 18:16:21 UTC (rev 51792) @@ -2296,7 +2296,12 @@ if (this->port_statement->rsr_bind_format) { in_msg_length = this->port_statement->rsr_bind_format->fmt_length; - in_msg = this->port_statement->rsr_message->msg_address; + RMessage* message = this->port_statement->rsr_message; + if (!message->msg_address) + { + message->msg_address = message->msg_buffer; + } + in_msg = message->msg_address; } out_blr_length = exnow->p_sqlst_out_blr.cstr_length; out_blr = exnow->p_sqlst_out_blr.cstr_address; @@ -2307,9 +2312,6 @@ RMessage* message = this->port_statement->rsr_message; if (!message->msg_address) { - // TMN: Obvious bugfix. Please look at your compilers warnings. - // They are not enemies, they're friends! - // port->port_statement->rsr_message->msg_address = &port->port_statement->rsr_message->msg_buffer; message->msg_address = message->msg_buffer; } out_msg = message->msg_address; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hv...@us...> - 2011-02-02 14:58:22
|
Revision: 52278 http://firebird.svn.sourceforge.net/firebird/?rev=52278&view=rev Author: hvlad Date: 2011-02-02 14:58:16 +0000 (Wed, 02 Feb 2011) Log Message: ----------- Fixed bug CORE-3327 : Thread pool in network server could create more threads than necessary Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2011-02-02 14:55:15 UTC (rev 52277) +++ firebird/trunk/src/remote/server/server.cpp 2011-02-02 14:58:16 UTC (rev 52278) @@ -608,6 +608,8 @@ static server_req_t* request_que = NULL; static server_req_t* free_requests = NULL; static server_req_t* active_requests = NULL; +static int ports_active = 0; // length of active_requests +static int ports_pending = 0; // length of request_que static GlobalPtr<Mutex> servers_mutex; static srvr* servers = NULL; @@ -1283,6 +1285,7 @@ que_inst = &(*que_inst)->req_next; *que_inst = request; + ports_pending++; } @@ -5046,6 +5049,7 @@ REMOTE_TRACE(("Dequeue request %p", request_que)); request_que = request->req_next; + ports_pending--; reqQueGuard.leave(); while (request) @@ -5070,6 +5074,7 @@ MutexLockGuard queGuard(request_que_mutex); request->req_next = active_requests; active_requests = request; + ports_active++; } // Validate port. If it looks ok, process request @@ -5143,6 +5148,7 @@ if (*req_ptr == request) { *req_ptr = request->req_next; + ports_active--; break; } } @@ -5190,6 +5196,7 @@ append_request_next(next, &request_que); request = request_que; request_que = request->req_next; + ports_pending--; } else { request = NULL; @@ -5200,8 +5207,8 @@ } else { + worker.setState(false); reqQueGuard.leave(); - worker.setState(false); if (Worker::isShuttingDown()) break; @@ -5413,6 +5420,22 @@ bool Worker::wakeUp() { + MutexLockGuard reqQueGuard(request_que_mutex); +#ifdef _DEBUG + int cnt = 0; + for (server_req_t* req = request_que; req; req = req->req_next) + cnt++; + fb_assert(cnt == ports_pending); + + cnt = 0; + for (server_req_t* req = active_requests; req; req = req->req_next) + cnt++; + fb_assert(cnt == ports_active); +#endif + + if (!ports_pending) + return true; + MutexLockGuard guard(m_mutex); if (m_idleWorkers) { @@ -5421,6 +5444,8 @@ idle->m_sem.release(); return true; } + if (m_cntAll >= ports_active + ports_pending) + return true; return (m_cntAll >= MAX_THREADS); } @@ -5477,9 +5502,12 @@ void Worker::start(USHORT flags) { - MutexLockGuard guard(m_mutex); if (!isShuttingDown() && !wakeUp()) { + if (isShuttingDown()) + return; + + MutexLockGuard guard(m_mutex); try { Thread::start(loopThread, (void*)(IPTR) flags, THREAD_medium); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2011-07-18 11:50:57
|
Revision: 53336 http://firebird.svn.sourceforge.net/firebird/?rev=53336&view=rev Author: alexpeshkoff Date: 2011-07-18 11:50:51 +0000 (Mon, 18 Jul 2011) Log Message: ----------- Simplified code - thanks to Claudio Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2011-07-18 11:19:58 UTC (rev 53335) +++ firebird/trunk/src/remote/server/server.cpp 2011-07-18 11:50:51 UTC (rev 53336) @@ -1955,10 +1955,8 @@ } rdb->rdb_iface->detach(&status_vector); + rdb->rdb_iface = NULL; - if (status_vector.isSuccess()) - rdb->rdb_iface = NULL; - while (rdb->rdb_events) release_event(rdb->rdb_events); @@ -1969,9 +1967,7 @@ if (rdb->rdb_svc_iface) { rdb->rdb_svc_iface->detach(&status_vector); - - if (status_vector.isSuccess()) - rdb->rdb_svc_iface = NULL; + rdb->rdb_svc_iface = NULL; } REMOTE_free_packet(this, sendL); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2011-12-26 12:57:36
|
Revision: 53760 http://firebird.svn.sourceforge.net/firebird/?rev=53760&view=rev Author: dimitr Date: 2011-12-26 12:57:30 +0000 (Mon, 26 Dec 2011) Log Message: ----------- Fixed a connection error (FB3 client - FB3 server), only LegacyAuth was affected. Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2011-12-26 12:41:01 UTC (rev 53759) +++ firebird/trunk/src/remote/server/server.cpp 2011-12-26 12:57:30 UTC (rev 53760) @@ -1355,7 +1355,6 @@ // We are going to try authentication handshake LocalStatus status; - P_ACPT* accept = &send->p_acpt; bool returnData = false; if (accepted && version >= PROTOCOL_VERSION13) { @@ -1377,7 +1376,6 @@ if (port->port_srv_auth_block->getPluginName()) { - accept = &send->p_acpd; Firebird::PathName file(connect->p_cnct_file.cstr_address, connect->p_cnct_file.cstr_length); port->port_srv_auth_block->setPath(&file); HANDSHAKE_DEBUG(fprintf(stderr, "accept connection calls createPluginsItr\n")); @@ -1441,10 +1439,11 @@ return false; } + send->p_operation = returnData ? op_accept_data : op_accept; + P_ACPT* accept = returnData ? &send->p_acpd : &send->p_acpt; accept->p_acpt_version = port->port_protocol = version; accept->p_acpt_architecture = architecture; accept->p_acpt_type = type; - send->p_operation = returnData ? op_accept_data : op_accept; HANDSHAKE_DEBUG(fprintf(stderr, "accepted ud=%d v=%x\n", returnData, version)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2012-01-11 12:05:36
|
Revision: 53844 http://firebird.svn.sourceforge.net/firebird/?rev=53844&view=rev Author: alexpeshkoff Date: 2012-01-11 12:05:27 +0000 (Wed, 11 Jan 2012) Log Message: ----------- Misc Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2012-01-11 11:47:09 UTC (rev 53843) +++ firebird/trunk/src/remote/server/server.cpp 2012-01-11 12:05:27 UTC (rev 53844) @@ -1379,7 +1379,7 @@ for (; plugins->hasData(); plugins->next()) { port->port_srv_auth_block->authBlockWriter.setMethod(plugins->name()); - switch (port->port_srv_auth_block->plugins->plugin()->authenticate( + switch (plugins->plugin()->authenticate( &status, port->port_srv_auth_block, &port->port_srv_auth_block->authBlockWriter)) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2012-02-27 16:08:01
|
Revision: 54057 http://firebird.svn.sourceforge.net/firebird/?rev=54057&view=rev Author: alexpeshkoff Date: 2012-02-27 16:07:51 +0000 (Mon, 27 Feb 2012) Log Message: ----------- cleanup Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2012-02-27 15:51:39 UTC (rev 54056) +++ firebird/trunk/src/remote/server/server.cpp 2012-02-27 16:07:51 UTC (rev 54057) @@ -5244,7 +5244,7 @@ port_crypt_complete = true; send_response(sendL, 0, 0, &st, false); - fprintf(stderr, "Installed cipher %s key %s\n", cp.name(), key->type); + // fprintf(stderr, "Installed cipher %s key %s\n", cp.name(), key->type); } catch(const Exception& ex) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2012-03-14 17:39:10
|
Revision: 54156 http://firebird.svn.sourceforge.net/firebird/?rev=54156&view=rev Author: dimitr Date: 2012-03-14 17:39:01 +0000 (Wed, 14 Mar 2012) Log Message: ----------- Totally misc. Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2012-03-14 17:38:32 UTC (rev 54155) +++ firebird/trunk/src/remote/server/server.cpp 2012-03-14 17:39:01 UTC (rev 54156) @@ -678,7 +678,6 @@ for (GetPlugins<ICryptPlugin> cpItr(PluginType::Crypt, FB_CRYPT_PLUGIN_VERSION, upInfo); cpItr.hasData(); cpItr.next()) { - unsigned l; const char* list = cpItr.plugin()->getKnownTypes(&st); if (! st.isSuccess()) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2012-03-15 14:39:49
|
Revision: 54175 http://firebird.svn.sourceforge.net/firebird/?rev=54175&view=rev Author: alexpeshkoff Date: 2012-03-15 14:39:38 +0000 (Thu, 15 Mar 2012) Log Message: ----------- Fixed assertion at client side in service logon Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2012-03-15 12:10:11 UTC (rev 54174) +++ firebird/trunk/src/remote/server/server.cpp 2012-03-15 14:39:38 UTC (rev 54175) @@ -4982,7 +4982,7 @@ svc->svc_iface = iface; } - return this->send_response(sendL, 0, sendL->p_resp.p_resp_data.cstr_length, + return this->send_response(sendL, 0, authenticated ? sendL->p_resp.p_resp_data.cstr_length : 0, &status_vector, false); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2012-04-23 08:20:51
|
Revision: 54400 http://firebird.svn.sourceforge.net/firebird/?rev=54400&view=rev Author: alexpeshkoff Date: 2012-04-23 08:20:40 +0000 (Mon, 23 Apr 2012) Log Message: ----------- Fix java client login Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2012-04-23 04:48:57 UTC (rev 54399) +++ firebird/trunk/src/remote/server/server.cpp 2012-04-23 08:20:40 UTC (rev 54400) @@ -72,6 +72,8 @@ #include "../common/classes/GetPlugins.h" #include "../common/StatementMetadata.h" #include "../common/isc_f_proto.h" +#include "../auth/SecurityDatabase/LegacyHash.h" +#include "../common/enc_proto.h" using namespace Firebird; @@ -295,11 +297,22 @@ HANDSHAKE_DEBUG(fprintf(stderr, "ServerAuth(): miss data with tag %d\n", tags->specific_data)); } } - else if (authPort->port_srv_auth_block->getLogin() && aPb->find(tags->password_enc)) + else if (authPort->port_srv_auth_block->getLogin() && + (aPb->find(tags->password_enc) || aPb->find(tags->password))) { authPort->port_srv_auth_block->setPluginName("Legacy_Auth"); authPort->port_srv_auth_block->setPluginList("Legacy_Auth"); aPb->getData(u); + if (aPb->getClumpTag() == tags->password) + { + TEXT pwt[Auth::MAX_LEGACY_PASSWORD_LENGTH + 2]; + u.push(0); + ENC_crypt(pwt, sizeof pwt, reinterpret_cast<TEXT*>(u.begin()), + Auth::LEGACY_PASSWORD_SALT); + unsigned l = strlen(&pwt[2]); + memcpy(u.getBuffer(l), &pwt[2], l); + HANDSHAKE_DEBUG(fprintf(stderr, "CALLED des locally\n")); + } authPort->port_srv_auth_block->setDataForPlugin(u); } #ifdef WIN_NT This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <asf...@us...> - 2012-05-06 22:27:09
|
Revision: 54454 http://firebird.svn.sourceforge.net/firebird/?rev=54454&view=rev Author: asfernandes Date: 2012-05-06 22:27:03 +0000 (Sun, 06 May 2012) Log Message: ----------- Misc. Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2012-05-06 04:48:18 UTC (rev 54453) +++ firebird/trunk/src/remote/server/server.cpp 2012-05-06 22:27:03 UTC (rev 54454) @@ -297,7 +297,7 @@ HANDSHAKE_DEBUG(fprintf(stderr, "ServerAuth(): miss data with tag %d\n", tags->specific_data)); } } - else if (authPort->port_srv_auth_block->getLogin() && + else if (authPort->port_srv_auth_block->getLogin() && (aPb->find(tags->password_enc) || aPb->find(tags->password))) { authPort->port_srv_auth_block->setPluginName("Legacy_Auth"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2013-11-05 08:53:52
|
Revision: 58749 http://sourceforge.net/p/firebird/code/58749 Author: alexpeshkoff Date: 2013-11-05 08:53:49 +0000 (Tue, 05 Nov 2013) Log Message: ----------- Do not encrypt xnet connections Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2013-11-05 07:59:22 UTC (rev 58748) +++ firebird/trunk/src/remote/server/server.cpp 2013-11-05 08:53:49 UTC (rev 58749) @@ -1540,6 +1540,12 @@ bool wireEncryption(rem_port* port, ClumpletReader& id) { + if (port->port_type == rem_port::XNET) // local connection + { + port->port_required_encryption = false; + return false; + } + int clientCrypt = id.find(CNCT_client_crypt) ? id.getInt() : WIRE_CRYPT_ENABLED; int serverCrypt = port->getPortConfig()->getWireCrypt(WC_SERVER); if (wcCompatible[clientCrypt][serverCrypt] < 0) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2013-11-14 13:52:50
|
Revision: 58784 http://sourceforge.net/p/firebird/code/58784 Author: alexpeshkoff Date: 2013-11-14 13:52:47 +0000 (Thu, 14 Nov 2013) Log Message: ----------- misc.debug Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2013-11-14 10:26:29 UTC (rev 58783) +++ firebird/trunk/src/remote/server/server.cpp 2013-11-14 13:52:47 UTC (rev 58784) @@ -1690,6 +1690,7 @@ if (accepted && wireEncryption(port, id)) { + HANDSHAKE_DEBUG(fprintf(stderr, "accepted && wireEncryption\n")); if (version >= PROTOCOL_VERSION13) { ConnectAuth* cnctAuth = new ConnectAuth(port, id); @@ -1706,6 +1707,7 @@ if (port->port_required_encryption) { + HANDSHAKE_DEBUG(fprintf(stderr, "port_required_encryption, reset accepted\n")); accepted = false; } } @@ -1798,6 +1800,7 @@ // Send off out gracious acceptance or flag rejection if (!accepted) { + HANDSHAKE_DEBUG(fprintf(stderr, "!accepted, sending reject\n")); if (!status.isSuccess()) port->send_response(send, 0, 0, status.get(), false); else This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2013-11-15 09:52:58
|
Revision: 58791 http://sourceforge.net/p/firebird/code/58791 Author: dimitr Date: 2013-11-15 09:52:55 +0000 (Fri, 15 Nov 2013) Log Message: ----------- Prevent races by allowing the worker thread to process op_exit / op_disconnect packets only after the listener had synchronously called cancel_operation(). This fixes CORE-4268: Server may crash while disconnecting from a database. Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2013-11-15 08:30:29 UTC (rev 58790) +++ firebird/trunk/src/remote/server/server.cpp 2013-11-15 09:52:55 UTC (rev 58791) @@ -1241,46 +1241,43 @@ const P_OP operation = request->req_receive.p_operation; server_req_t* queue; - { // request_que_mutex scope - MutexLockGuard queGuard(request_que_mutex, FB_FUNCTION); + MutexLockGuard queGuard(request_que_mutex, FB_FUNCTION); - bool active = true; - queue = active_requests; + bool active = true; + queue = active_requests; - while (true) + while (true) + { + for (; queue; queue = queue->req_next) { - for (; queue; queue = queue->req_next) + if (queue->req_port == port) { - if (queue->req_port == port) + // Don't queue a dummy keepalive packet if there is a request on this port + if (operation == op_dummy) { - // Don't queue a dummy keepalive packet if there is a request on this port - if (operation == op_dummy) - { - free_request(request); - return true; - } + free_request(request); + return true; + } - append_request_chain(request, &queue->req_chain); + append_request_chain(request, &queue->req_chain); #ifdef DEBUG_REMOTE_MEMORY - printf("link_request %s request_queued %d\n", - active ? "ACTIVE" : "PENDING", port->port_requests_queued.value()); - fflush(stdout); + printf("link_request %s request_queued %d\n", + active ? "ACTIVE" : "PENDING", port->port_requests_queued.value()); + fflush(stdout); #endif - break; - } + break; } + } - if (queue || !active) - break; + if (queue || !active) + break; - queue = request_que; - active = false; - } + queue = request_que; + active = false; + } - if (!queue) { - append_request_next(request, &request_que); - } - } // request_que_mutex scope + if (!queue) + append_request_next(request, &request_que); ++port->port_requests_queued; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2013-11-27 12:46:07
|
Revision: 58846 http://sourceforge.net/p/firebird/code/58846 Author: alexpeshkoff Date: 2013-11-27 12:46:04 +0000 (Wed, 27 Nov 2013) Log Message: ----------- Fixed CORE-4283: Resource temporarily unavailable errors while simultaneously registering events Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2013-11-27 11:14:04 UTC (rev 58845) +++ firebird/trunk/src/remote/server/server.cpp 2013-11-27 12:46:04 UTC (rev 58846) @@ -616,13 +616,18 @@ { if (id) { + mtx->enter(FB_FUNCTION); + string firebirdPortMutex; firebirdPortMutex.printf(PORT_FILE, id); TEXT filename[MAXPATHLEN]; gds__prefix_lock(filename, firebirdPortMutex.c_str()); - if ((fd = open(filename, O_WRONLY | O_CREAT, 0666)) < 0) + while ((fd = open(filename, O_WRONLY | O_CREAT, 0666)) < 0) { - system_call_failed::raise("open"); + if (errno != EINTR) + { + system_call_failed::raise("open"); + } } struct flock lock; @@ -630,9 +635,12 @@ lock.l_whence = 0; lock.l_start = 0; lock.l_len = 0; - if (fcntl(fd, F_SETLK, &lock) == -1) + while (fcntl(fd, F_SETLKW, &lock) == -1) { - system_call_failed::raise("fcntl"); + if (errno != EINTR) + { + system_call_failed::raise("fcntl"); + } } } } @@ -646,18 +654,26 @@ lock.l_whence = 0; lock.l_start = 0; lock.l_len = 0; - if (fcntl(fd, F_SETLK, &lock) == -1) + while (fcntl(fd, F_SETLK, &lock) == -1) { - system_call_failed::raise("fcntl"); + if (errno != EINTR) + { + system_call_failed::raise("fcntl"); + } } close(fd); + + mtx->leave(); } } private: int fd; + static GlobalPtr<Mutex> mtx; }; + +GlobalPtr<Mutex> GlobalPortLock::mtx; #endif class Callback FB_FINAL : public RefCntIface<IEventCallback, FB_EVENT_CALLBACK_VERSION> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2013-12-02 14:28:43
|
Revision: 58871 http://sourceforge.net/p/firebird/code/58871 Author: alexpeshkoff Date: 2013-12-02 14:28:40 +0000 (Mon, 02 Dec 2013) Log Message: ----------- Fixed post-Alpha1 security regression, reported privately by Pavel Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2013-12-02 13:59:52 UTC (rev 58870) +++ firebird/trunk/src/remote/server/server.cpp 2013-12-02 14:28:40 UTC (rev 58871) @@ -222,6 +222,25 @@ GlobalPtr<FailedLogins> usernameFailedLogins; GlobalPtr<FailedLogins> remoteFailedLogins; +void loginFail(const string& login, const string& remId) +{ + // do not remove variables - both functions should be called + bool f1 = usernameFailedLogins->loginFail(login); + bool f2 = remoteFailedLogins->loginFail(remId); + if (f1 || f2) + { + // Ahh, someone is too active today + THREAD_SLEEP(FAILURE_DELAY * 1000); + } +} + +void loginSuccess(const string& login, const string& remId) +{ + usernameFailedLogins->loginSuccess(login); + remoteFailedLogins->loginSuccess(remId); +} + + MakeUpgradeInfo<> upInfo; template <typename T> @@ -421,8 +440,7 @@ { case Auth::AUTH_SUCCESS: HANDSHAKE_DEBUG(fprintf(stderr, "Srv: authenticate: Ahh - success\n")); - usernameFailedLogins->loginSuccess(userName); - remoteFailedLogins->loginSuccess(authPort->getRemoteId()); + loginSuccess(userName, authPort->getRemoteId()); authServer = NULL; authPort->port_srv_auth_block->authCompleted(true); accept(send, &authPort->port_srv_auth_block->authBlockWriter); @@ -493,14 +511,7 @@ } // no success - perform failure processing - // do not remove variables - both functions should be called - bool f1 = usernameFailedLogins->loginFail(userName); - bool f2 = remoteFailedLogins->loginFail(authPort->getRemoteId()); - if (f1 || f2) - { - // Ahh, someone is too active today - THREAD_SLEEP(FAILURE_DELAY * 1000); - } + loginFail(userName, authPort->getRemoteId()); Arg::Gds loginError(isc_login); #ifndef DEV_BUILD @@ -1783,8 +1794,7 @@ &port->port_srv_auth_block->authBlockWriter)) { case Auth::AUTH_SUCCESS: - usernameFailedLogins->loginSuccess(port->port_login); - remoteFailedLogins->loginSuccess(port->getRemoteId()); + loginSuccess(port->port_login, port->getRemoteId()); port->port_srv_auth_block->authCompleted(true); send->p_acpd.p_acpt_authenticated = 1; returnData = true; @@ -1798,6 +1808,7 @@ // failed setErrorStatus(&status); accepted = false; + loginFail(port->port_login, port->getRemoteId()); break; } port->port_srv_auth_block->setPluginName(plugins->name()); @@ -1813,6 +1824,7 @@ case Auth::AUTH_FAILED: setErrorStatus(&status); accepted = false; + loginFail(port->port_login, port->getRemoteId()); break; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2013-12-09 08:19:52
|
Revision: 58911 http://sourceforge.net/p/firebird/code/58911 Author: alexpeshkoff Date: 2013-12-09 08:19:49 +0000 (Mon, 09 Dec 2013) Log Message: ----------- Fixed issues noticed by Claudio Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2013-12-09 03:14:59 UTC (rev 58910) +++ firebird/trunk/src/remote/server/server.cpp 2013-12-09 08:19:49 UTC (rev 58911) @@ -257,6 +257,7 @@ { const UCHAR* specData = id.getBytes(); size_t len = id.getClumpLength(); + fb_assert(len <= 255); if (len > 1) { @@ -264,6 +265,10 @@ unsigned offset = specData[0]; if (offset + 1 > top) top = offset + 1; + if (checkBytes[offset]) + { + (Arg::Gds(isc_random) << "Invalid CNCT block: repeated data").raise(); // print offset No here + } checkBytes[offset] = 1; offset *= 254; @@ -1581,6 +1586,17 @@ } int clientCrypt = id.find(CNCT_client_crypt) ? id.getInt() : WIRE_CRYPT_ENABLED; + switch(clientCrypt) + { + case WIRE_CRYPT_REQUIRED: + case WIRE_CRYPT_ENABLED: + case WIRE_CRYPT_DISABLED: + break; + default: + clientCrypt = WIRE_CRYPT_ENABLED; + break; + } + int serverCrypt = port->getPortConfig()->getWireCrypt(WC_SERVER); if (wcCompatible[clientCrypt][serverCrypt] < 0) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2013-12-19 11:41:14
|
Revision: 58952 http://sourceforge.net/p/firebird/code/58952 Author: dimitr Date: 2013-12-19 11:41:11 +0000 (Thu, 19 Dec 2013) Log Message: ----------- I prefer to explicitly initialize suspicious pointers. Related to CORE-4300 (although there's no crash here). Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2013-12-19 00:45:27 UTC (rev 58951) +++ firebird/trunk/src/remote/server/server.cpp 2013-12-19 11:41:11 UTC (rev 58952) @@ -3705,10 +3705,12 @@ return; } + const ULONG buffer_length = stuff->p_info_buffer_length; + // Make sure there is a suitable temporary blob buffer Array<UCHAR> buf; - UCHAR* const buffer = buf.getBuffer(stuff->p_info_buffer_length); - memset(buffer, 0, stuff->p_info_buffer_length); + UCHAR* const buffer = buffer_length ? buf.getBuffer(buffer_length) : NULL; + memset(buffer, 0, buffer_length); HalfStaticArray<UCHAR, 1024> info; UCHAR* info_buffer = NULL; @@ -3718,7 +3720,7 @@ if (op == op_info_database) { - temp_buffer = temp.getBuffer(stuff->p_info_buffer_length); + temp_buffer = buffer_length ? temp.getBuffer(buffer_length) : NULL; } else { @@ -3746,13 +3748,13 @@ case op_info_blob: getHandle(blob, stuff->p_info_object); blob->rbl_iface->getInfo(&status_vector, info_len, info_buffer, - stuff->p_info_buffer_length, buffer); + buffer_length, buffer); break; case op_info_database: rdb->rdb_iface->getInfo(&status_vector, stuff->p_info_items.cstr_length, stuff->p_info_items.cstr_address, - stuff->p_info_buffer_length, //sizeof(temp) + buffer_length, //sizeof(temp) temp_buffer); //temp if (status_vector.isSuccess()) @@ -3761,7 +3763,7 @@ version.printf("%s/%s%s", FB_VERSION, this->port_version->str_data, this->port_crypt_complete ? ":C" : ""); info_db_len = MERGE_database_info(temp_buffer, //temp - buffer, stuff->p_info_buffer_length, + buffer, buffer_length, DbImplementation::current.backwardCompatibleImplementation(), 4, 1, reinterpret_cast<const UCHAR*>(version.c_str()), reinterpret_cast<const UCHAR*>(this->port_host->str_data)); @@ -3773,21 +3775,21 @@ Rrq* requestL; getHandle(requestL, stuff->p_info_object); requestL->rrq_iface->getInfo(&status_vector, stuff->p_info_incarnation, - info_len, info_buffer, stuff->p_info_buffer_length, buffer); + info_len, info_buffer, buffer_length, buffer); } break; case op_info_transaction: getHandle(transaction, stuff->p_info_object); transaction->rtr_iface->getInfo(&status_vector, info_len, info_buffer, - stuff->p_info_buffer_length, buffer); + buffer_length, buffer); break; case op_service_info: service = rdb->rdb_svc; service->svc_iface->query(&status_vector, stuff->p_info_items.cstr_length, stuff->p_info_items.cstr_address, - info_len, info_buffer, stuff->p_info_buffer_length, buffer); + info_len, info_buffer, buffer_length, buffer); break; case op_info_sql: @@ -3795,13 +3797,13 @@ statement->checkIface(isc_info_unprepared_stmt); statement->rsr_iface->getInfo(&status_vector, info_len, info_buffer, - stuff->p_info_buffer_length, buffer); + buffer_length, buffer); break; } // Send a response that includes the segment. - ULONG response_len = info_db_len ? info_db_len : stuff->p_info_buffer_length; + ULONG response_len = info_db_len ? info_db_len : buffer_length; SLONG skip_len = 0; if (buffer && *buffer == isc_info_length) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2014-01-14 09:00:45
|
Revision: 59035 http://sourceforge.net/p/firebird/code/59035 Author: dimitr Date: 2014-01-14 09:00:40 +0000 (Tue, 14 Jan 2014) Log Message: ----------- Fixed the server crash during disconnection forced by the network layer. Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2014-01-14 00:56:35 UTC (rev 59034) +++ firebird/trunk/src/remote/server/server.cpp 2014-01-14 09:00:40 UTC (rev 59035) @@ -4946,6 +4946,17 @@ * Release a GDML or SQL statement? * **************************************/ + (*statement)->rsr_cursor = NULL; + + Rtr* const transaction = (*statement)->rsr_rtr; + if (transaction) + { + size_t pos; + if (!transaction->rtr_cursors.find(*statement, pos)) + fb_assert(false); + transaction->rtr_cursors.remove(pos); + } + delete (*statement)->rsr_select_format; delete (*statement)->rsr_bind_format; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2014-01-14 10:41:27
|
Revision: 59036 http://sourceforge.net/p/firebird/code/59036 Author: dimitr Date: 2014-01-14 10:41:25 +0000 (Tue, 14 Jan 2014) Log Message: ----------- Correction. Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2014-01-14 09:00:40 UTC (rev 59035) +++ firebird/trunk/src/remote/server/server.cpp 2014-01-14 10:41:25 UTC (rev 59036) @@ -4946,11 +4946,13 @@ * Release a GDML or SQL statement? * **************************************/ - (*statement)->rsr_cursor = NULL; + if ((*statement)->rsr_cursor) + { + (*statement)->rsr_cursor = NULL; - Rtr* const transaction = (*statement)->rsr_rtr; - if (transaction) - { + Rtr* const transaction = (*statement)->rsr_rtr; + fb_assert(transaction); + size_t pos; if (!transaction->rtr_cursors.find(*statement, pos)) fb_assert(false); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2014-01-17 13:14:04
|
Revision: 59048 http://sourceforge.net/p/firebird/code/59048 Author: alexpeshkoff Date: 2014-01-17 13:14:01 +0000 (Fri, 17 Jan 2014) Log Message: ----------- misc Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2014-01-17 12:33:23 UTC (rev 59047) +++ firebird/trunk/src/remote/server/server.cpp 2014-01-17 13:14:01 UTC (rev 59048) @@ -3370,7 +3370,7 @@ statement->rsr_rtr->rtr_cursors.add(statement); - if (status_vector.isSuccess() && statement->rsr_cursor_name.hasData()) + if (statement->rsr_cursor_name.hasData()) { statement->rsr_cursor->setCursorName(&status_vector, statement->rsr_cursor_name.c_str()); if (status_vector.isSuccess()) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2014-06-10 07:07:05
|
Revision: 59677 http://sourceforge.net/p/firebird/code/59677 Author: alexpeshkoff Date: 2014-06-10 07:06:56 +0000 (Tue, 10 Jun 2014) Log Message: ----------- Avoid shutdown delay when all logins appear wrong due to closed security database Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2014-06-09 19:03:17 UTC (rev 59676) +++ firebird/trunk/src/remote/server/server.cpp 2014-06-10 07:06:56 UTC (rev 59677) @@ -221,13 +221,14 @@ GlobalPtr<FailedLogins> usernameFailedLogins; GlobalPtr<FailedLogins> remoteFailedLogins; +bool server_shutdown = false; void loginFail(const string& login, const string& remId) { // do not remove variables - both functions should be called bool f1 = usernameFailedLogins->loginFail(login); bool f2 = remoteFailedLogins->loginFail(remId); - if (f1 || f2) + if ((f1 || f2) && !server_shutdown) { // Ahh, someone is too active today THREAD_SLEEP(FAILURE_DELAY * 1000); @@ -1038,7 +1039,6 @@ static GlobalPtr<Mutex> servers_mutex; static srvr* servers = NULL; static AtomicCounter cntServers; -static bool server_shutdown = false; static const UCHAR request_info[] = This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <asf...@us...> - 2015-10-09 14:47:54
|
Revision: 62341 http://sourceforge.net/p/firebird/code/62341 Author: asfernandes Date: 2015-10-09 14:47:52 +0000 (Fri, 09 Oct 2015) Log Message: ----------- Fix debug code. Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2015-10-09 13:57:39 UTC (rev 62340) +++ firebird/trunk/src/remote/server/server.cpp 2015-10-09 14:47:52 UTC (rev 62341) @@ -5499,7 +5499,7 @@ port_crypt_complete = true; send_response(sendL, 0, 0, &st, false); - WIRECRYPT_DEBUG(fprintf(stderr, "Installed cipher %s key %s\n", cp.name(), key->type)); + WIRECRYPT_DEBUG(fprintf(stderr, "Installed cipher %s\n", cp.name())); } catch (const Exception& ex) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hv...@us...> - 2015-10-22 10:15:24
|
Revision: 62394 http://sourceforge.net/p/firebird/code/62394 Author: hvlad Date: 2015-10-22 10:15:22 +0000 (Thu, 22 Oct 2015) Log Message: ----------- It should fix TCS issue with events reported privately by Alex Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2015-10-21 16:51:42 UTC (rev 62393) +++ firebird/trunk/src/remote/server/server.cpp 2015-10-22 10:15:22 UTC (rev 62394) @@ -4600,7 +4600,10 @@ for (event = rdb->rdb_events; event; event = event->rvnt_next) { if (!event->rvnt_iface) + { + event->rvnt_destroyed = 0; break; + } } if (!event) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hv...@us...> - 2015-10-25 13:48:22
|
Revision: 62416 http://sourceforge.net/p/firebird/code/62416 Author: hvlad Date: 2015-10-25 13:48:20 +0000 (Sun, 25 Oct 2015) Log Message: ----------- Avoid send over closing socket (it put errors 10058 (WSAESHUTDOWN) in firebird.log) Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2015-10-25 13:45:10 UTC (rev 62415) +++ firebird/trunk/src/remote/server/server.cpp 2015-10-25 13:48:20 UTC (rev 62416) @@ -2628,7 +2628,9 @@ if (this->port_flags & PORT_async) { - if (rdb && rdb->rdb_port && !(rdb->rdb_port->port_flags & PORT_disconnect)) + if (!(this->port_flags & PORT_detached) && + rdb && rdb->rdb_port && + !(rdb->rdb_port->port_flags & (PORT_disconnect | PORT_detached))) { PACKET *packet = &rdb->rdb_packet; packet->p_operation = op_dummy; @@ -2784,6 +2786,8 @@ rdb->rdb_iface = NULL; port_flags |= PORT_detached; + if (port_async) + port_async->port_flags |= PORT_detached; while (rdb->rdb_events) release_event(rdb->rdb_events); @@ -2859,6 +2863,9 @@ return this->send_response(sendL, 0, 0, &status_vector, false); port_flags |= PORT_detached; + if (port_async) + port_async->port_flags |= PORT_detached; + rdb->rdb_iface = NULL; while (rdb->rdb_events) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hv...@us...> - 2015-11-12 14:13:36
|
Revision: 62553 http://sourceforge.net/p/firebird/code/62553 Author: hvlad Date: 2015-11-12 14:13:33 +0000 (Thu, 12 Nov 2015) Log Message: ----------- Fixed bug CORE-5015 : AV in engine could happen when ON DISCONNECT trigger posted event Modified Paths: -------------- firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2015-11-12 13:43:38 UTC (rev 62552) +++ firebird/trunk/src/remote/server/server.cpp 2015-11-12 14:13:33 UTC (rev 62553) @@ -692,8 +692,8 @@ class Callback FB_FINAL : public RefCntIface<IEventCallbackImpl<Callback, CheckStatusWrapper> > { public: - explicit Callback(Rvnt* aevent) - : event(aevent) + explicit Callback(Rdb* aRdb, Rvnt* aEvent) + : rdb(aRdb), event(aEvent) { } // IEventCallback implementation @@ -709,21 +709,22 @@ * **************************************/ { - const bool allowCancel = event->rvnt_destroyed.compareExchange(0, 1); - if (!allowCancel) + rem_port* port = rdb->rdb_port->port_async; + if (!port || port->port_flags & PORT_detached) return; - Rdb* rdb = event->rvnt_rdb; + RefMutexGuard portGuard(*port->port_sync, FB_FUNCTION); - rem_port* port = rdb->rdb_port->port_async; - if (!port) + if (port->port_flags & PORT_detached) return; - RefMutexGuard portGuard(*port->port_sync, FB_FUNCTION); - // hvlad: it is important to call IEvents::cancel() under protection // of async port mutex to avoid crash in rem_port::que_events + const bool allowCancel = event->rvnt_destroyed.compareExchange(0, 1); + if (!allowCancel) + return; + if (allowCancel && event->rvnt_iface) { LocalStatus ls; @@ -758,6 +759,7 @@ } private: + Rdb* rdb; Rvnt* event; }; @@ -2294,6 +2296,13 @@ connected = aux_port->connect(send) != NULL; if (connected) aux_port->port_context = rdb; + else + { + aux_port->port_flags &= ~PORT_connecting; + fb_assert(port->port_async == aux_port); + port->port_async = NULL; + aux_port->disconnect(); + } } catch (const Exception& ex) { @@ -2868,13 +2877,16 @@ port_flags |= PORT_detached; if (port_async) + { port_async->port_flags |= PORT_detached; + RefMutexGuard portGuard(*port_async->port_sync, FB_FUNCTION); + while (rdb->rdb_events) + release_event(rdb->rdb_events); + } + rdb->rdb_iface = NULL; - while (rdb->rdb_events) - release_event(rdb->rdb_events); - while (rdb->rdb_requests) release_request(rdb->rdb_requests); @@ -4616,7 +4628,7 @@ #endif event->rvnt_next = rdb->rdb_events; rdb->rdb_events = event; - event->rvnt_callback = FB_NEW Callback(event); + event->rvnt_callback = FB_NEW Callback(rdb, event); } event->rvnt_id = stuff->p_event_rid; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |