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

test

parent 806cdd1a
Loading
Loading
Loading
Loading
Loading
+7 −2
Changes for src/authdb.cpp: 7 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -380,20 +380,25 @@ namespace authdb {
    int searchValue(authdb::AuthBackend &backend,const char*fieldname,const char *value){
        authdb::AuthData::Record *user=new AuthData::Record;
        size_t rd=sizeof(authdb::AuthHeader),brd=rd;
        while(rd>backend.end()){
        while(rd<backend.end()){
            backend.setPos(rd);
            backend.read((unsigned char*)user,sizeof(AuthData::Record));
            rd=backend.getPos();
            rd=backend.getPos()+user->datasize;
            if(strcmp(user->fieldname,fieldname) == 0){
                user->data = new char[user->datasize];
                backend.read((unsigned char*)user->data,user->datasize);
                if(strcmp(user->data,value) == 0){
                    delete[] user->data;
                    user->data=nullptr;
                    goto VALUEFOUND;
                }
                delete[] user->data;
                user->data=nullptr;
            }
            brd=rd;
        }
VALUEFOUND:
        delete user;
        return brd;
    }

+2 −0
Changes for src/backend.cpp: 2 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -60,11 +60,13 @@ void authdb::AuthBackend::write(const unsigned char* dest, size_t destsize){
}

void authdb::AuthBackend::lock(){
    _Lock.lock();
    _Api->lock();
}

void authdb::AuthBackend::unlock(){
    _Api->unlock();
    _Lock.unlock();
}

void authdb::AuthBackend::setPos(size_t pos){
+3 −1
Changes for src/client.cpp: 3 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -154,8 +154,10 @@ void authdb::Client::info(AuthBackend& backend, class ClientData& dat, size_t& p
            && strcmp(cur->fieldname,"clientname")==0
        ){

            if(!getRecord(backend,dat,DataType::ClientData))
            if(!getRecord(backend,dat,DataType::ClientData)){
                delete cur;
                continue;
            }

            dat.ClientName=&dat.Data;
        }
+3 −1
Changes for src/domain.cpp: 3 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -157,8 +157,10 @@ void authdb::Domain::info(AuthBackend& backend, class DomainData& dat, size_t& p
            strcmp(cur->fieldname,"domainname")==0
        ){

            if(!getRecord(backend,dat,DataType::DomainData))
            if(!getRecord(backend,dat,DataType::DomainData)){
                delete cur;
                continue;
            }

            if(strcmp(dat.Data.fieldname,"domainname")==0){
                dat._name=&dat.Data;
+29 −0
Changes for src/session.cpp: 29 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ namespace authdb {

authdb::SessionData::SessionData(){
    _next=nullptr;
    _created=std::chrono::steady_clock::now();
}

authdb::SessionData::SessionData(const SessionData& src) : SessionData() {
@@ -66,6 +67,7 @@ authdb::SessionData::SessionData(uuid::uuid sessionid, uuid::uuid userid, uuid::
    _uid=userid;
    _did=domainid;
    _next=nullptr;
    _created=std::chrono::steady_clock::now();
}

authdb::SessionData::~SessionData(){
@@ -179,6 +181,9 @@ authdb::Session::~Session(){

const authdb::SessionData *authdb::Session::addSession(AuthBackend &backend,uuid::uuid domainid,uuid::uuid userid){
    std::lock_guard<std::mutex> guard(_SessionLock);

    cleanupExpired();

    std::string username;
    std::shared_ptr<authdb::AuthData::Record> cur=std::make_shared<authdb::AuthData::Record>();

@@ -365,3 +370,27 @@ const authdb::SessionData *authdb::Session::firstData() const{
    std::lock_guard<std::mutex> guard(_SessionLock);
    return _firstData;
}

void authdb::Session::cleanupExpired(){
    auto now=std::chrono::steady_clock::now();
    SessionData *prev=nullptr;
    SessionData *cur=_firstData;
    while(cur){
        auto age=std::chrono::duration_cast<std::chrono::hours>(now - cur->_created).count();
        if(age >= 24){
            SessionData *next=cur->_next;
            if(prev)
                prev->_next=next;
            if(cur==_firstData)
                _firstData=next;
            if(cur==_lastData)
                _lastData=prev;
            cur->_next=nullptr;
            delete cur;
            cur=next;
        }else{
            prev=cur;
            cur=cur->_next;
        }
    }
}
Loading