Commit a28cecdd authored by jan.koester's avatar jan.koester
Browse files

test

parent 13e0fa9c
Loading
Loading
Loading
Loading
Loading
+0 −5
Changes for src/admin.cpp: 0 added lines, 5 removed lines.
Original line number Diff line number Diff line
@@ -1135,11 +1135,6 @@ namespace authdb {
            sid = csid;
            AuthSession.remSession(sid);

            // Also remove from cluster
            if (g_Cluster && g_Cluster->isRunning()) {
                g_Cluster->removeSessionBySid(sid);
            }

            json_object *jobj = json_object_new_object();
            json_object_object_add(jobj, "status", json_object_new_string("ok"));
            sendJson(curreq, jobj);
+26 −10
Changes for src/session.cpp: 26 added lines, 10 removed lines.
Original line number Diff line number Diff line
@@ -482,19 +482,17 @@ const authdb::SessionData *authdb::Session::getSession(uuid::uuid sessionid){
}

void authdb::Session::remSession(uuid::uuid sessionid){
    // Always remove from cluster (covers all nodes)
    if (g_Cluster && g_Cluster->isRunning()) {
        g_Cluster->removeSessionBySid(sessionid);
    }

    // Remove from local linked list if present
    std::lock_guard<std::mutex> guard(_SessionLock);
    SessionData *prev=nullptr;

    for(SessionData *cur=_firstData; cur; cur=cur->_next){
        if(cur->_sid==sessionid){
            // Remove from cluster
            if (g_Cluster && g_Cluster->isRunning()) {
                uuid::uuid uid, did;
                cur->getUid(uid);
                cur->getDid(did);
                g_Cluster->removeSession(uid, did);
            }

            if(prev)
                prev->_next=cur->_next;

@@ -504,10 +502,8 @@ void authdb::Session::remSession(uuid::uuid sessionid){
            if(cur==_lastData)
                _lastData=prev;

            SessionData *ne=cur->_next;
            cur->_next=nullptr;
            delete cur;
            cur=ne;
            break;
        }
        prev=cur;
@@ -529,6 +525,26 @@ void authdb::Session::relSession(AuthBackend &backend,uuid::uuid sessionid){
        }
    }

    // Not found locally — try to import from cluster
    if(!cursess && g_Cluster && g_Cluster->isRunning()){
        uuid::uuid sid, uid, did;
        std::vector<uuid::uuid> members;
        std::string c_username;
        std::vector<std::pair<uuid::uuid, bool>> gpo_results;
        if(g_Cluster->fetchSessionBySid(sessionid, sid, uid, did, members, c_username, gpo_results)){
            cursess = new SessionData(sid, uid, did, members);
            cursess->_username = c_username;
            cursess->setGPOResults(gpo_results);
            if(!_firstData){
                _firstData = cursess;
                _lastData = _firstData;
            }else{
                _lastData->_next = cursess;
                _lastData = _lastData->_next;
            }
        }
    }

    if(!cursess)
        throw AuthBackendError("reload session: sessionid not found !");