Commit 13e0fa9c authored by jan.koester's avatar jan.koester
Browse files

test

parent bae1eedf
Loading
Loading
Loading
Loading
Loading
+13 −0
Changes for src/cluster.cpp: 13 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -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);

+7 −0
Changes for src/cluster.h: 7 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -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,
+27 −0
Changes for src/session.cpp: 27 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -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;
            }
        }