Loading src/cluster.cpp +13 −0 Changes for src/cluster.cpp: 13 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -572,6 +572,19 @@ namespace authdb { return false; } bool Cluster::fetchSessionLocalBySid(const uuid::uuid &session_id, uuid::uuid &sid, uuid::uuid &uid, uuid::uuid &did, std::vector<uuid::uuid> &members, std::string &username, std::vector<std::pair<uuid::uuid, bool>> &gpo_results) { uint64_t sid_gid = sidGroupId(session_id); std::vector<uint8_t> data; if (session_store_->fetch(sid_gid, 0, data)) { return SessionBlock::deserialize(data, sid, uid, did, members, username, gpo_results); } return false; } bool Cluster::hasSessionBySid(const uuid::uuid &session_id) { uint64_t sid_gid = sidGroupId(session_id); Loading src/cluster.h +7 −0 Changes for src/cluster.h: 7 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -171,6 +171,13 @@ namespace authdb { // Check if a session still exists in the cluster by SID bool hasSessionBySid(const uuid::uuid &session_id); // Local-only check: fetch session from session_store_ without network calls bool fetchSessionLocalBySid(const uuid::uuid &session_id, uuid::uuid &sid, uuid::uuid &uid, uuid::uuid &did, std::vector<uuid::uuid> &members, std::string &username, std::vector<std::pair<uuid::uuid, bool>> &gpo_results); // Fetch a session from the cluster by session ID (SID) bool fetchSessionBySid(const uuid::uuid &session_id, uuid::uuid &sid, uuid::uuid &uid, uuid::uuid &did, Loading src/session.cpp +27 −0 Changes for src/session.cpp: 27 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -423,6 +423,33 @@ const authdb::SessionData *authdb::Session::getSession(uuid::uuid sessionid){ cleanupExpired(); for(SessionData *cur=_firstData; cur; cur=cur->_next){ if(cur->_sid==sessionid){ // Sync with cluster session_store_ (local memory only, no network) if (g_Cluster && g_Cluster->isRunning()) { uuid::uuid c_sid, c_uid, c_did; std::vector<uuid::uuid> c_members; std::string c_username; std::vector<std::pair<uuid::uuid, bool>> c_gpo; if (g_Cluster->fetchSessionLocalBySid(sessionid, c_sid, c_uid, c_did, c_members, c_username, c_gpo)) { // Session still exists — update local copy with cluster data cur->_members = c_members; cur->_username = c_username; cur->setGPOResults(c_gpo); } else { // Session removed on another node — purge local copy SessionData *prev = nullptr; for (SessionData *p = _firstData; p; p = p->_next) { if (p == cur) break; prev = p; } if (prev) prev->_next = cur->_next; if (cur == _firstData) _firstData = cur->_next; if (cur == _lastData) _lastData = prev; cur->_next = nullptr; delete cur; return nullptr; } } return cur; } } Loading Loading
src/cluster.cpp +13 −0 Changes for src/cluster.cpp: 13 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -572,6 +572,19 @@ namespace authdb { return false; } bool Cluster::fetchSessionLocalBySid(const uuid::uuid &session_id, uuid::uuid &sid, uuid::uuid &uid, uuid::uuid &did, std::vector<uuid::uuid> &members, std::string &username, std::vector<std::pair<uuid::uuid, bool>> &gpo_results) { uint64_t sid_gid = sidGroupId(session_id); std::vector<uint8_t> data; if (session_store_->fetch(sid_gid, 0, data)) { return SessionBlock::deserialize(data, sid, uid, did, members, username, gpo_results); } return false; } bool Cluster::hasSessionBySid(const uuid::uuid &session_id) { uint64_t sid_gid = sidGroupId(session_id); Loading
src/cluster.h +7 −0 Changes for src/cluster.h: 7 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -171,6 +171,13 @@ namespace authdb { // Check if a session still exists in the cluster by SID bool hasSessionBySid(const uuid::uuid &session_id); // Local-only check: fetch session from session_store_ without network calls bool fetchSessionLocalBySid(const uuid::uuid &session_id, uuid::uuid &sid, uuid::uuid &uid, uuid::uuid &did, std::vector<uuid::uuid> &members, std::string &username, std::vector<std::pair<uuid::uuid, bool>> &gpo_results); // Fetch a session from the cluster by session ID (SID) bool fetchSessionBySid(const uuid::uuid &session_id, uuid::uuid &sid, uuid::uuid &uid, uuid::uuid &did, Loading
src/session.cpp +27 −0 Changes for src/session.cpp: 27 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -423,6 +423,33 @@ const authdb::SessionData *authdb::Session::getSession(uuid::uuid sessionid){ cleanupExpired(); for(SessionData *cur=_firstData; cur; cur=cur->_next){ if(cur->_sid==sessionid){ // Sync with cluster session_store_ (local memory only, no network) if (g_Cluster && g_Cluster->isRunning()) { uuid::uuid c_sid, c_uid, c_did; std::vector<uuid::uuid> c_members; std::string c_username; std::vector<std::pair<uuid::uuid, bool>> c_gpo; if (g_Cluster->fetchSessionLocalBySid(sessionid, c_sid, c_uid, c_did, c_members, c_username, c_gpo)) { // Session still exists — update local copy with cluster data cur->_members = c_members; cur->_username = c_username; cur->setGPOResults(c_gpo); } else { // Session removed on another node — purge local copy SessionData *prev = nullptr; for (SessionData *p = _firstData; p; p = p->_next) { if (p == cur) break; prev = p; } if (prev) prev->_next = cur->_next; if (cur == _firstData) _firstData = cur->_next; if (cur == _lastData) _lastData = prev; cur->_next = nullptr; delete cur; return nullptr; } } return cur; } } Loading