Loading src/authdb.cpp +7 −2 Changes for src/authdb.cpp: 7 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -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; } Loading src/backend.cpp +2 −0 Changes for src/backend.cpp: 2 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -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){ Loading src/client.cpp +3 −1 Changes for src/client.cpp: 3 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -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; } Loading src/domain.cpp +3 −1 Changes for src/domain.cpp: 3 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -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; Loading src/session.cpp +29 −0 Changes for src/session.cpp: 29 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ namespace authdb { authdb::SessionData::SessionData(){ _next=nullptr; _created=std::chrono::steady_clock::now(); } authdb::SessionData::SessionData(const SessionData& src) : SessionData() { Loading @@ -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(){ Loading Loading @@ -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>(); Loading Loading @@ -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
src/authdb.cpp +7 −2 Changes for src/authdb.cpp: 7 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -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; } Loading
src/backend.cpp +2 −0 Changes for src/backend.cpp: 2 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -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){ Loading
src/client.cpp +3 −1 Changes for src/client.cpp: 3 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -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; } Loading
src/domain.cpp +3 −1 Changes for src/domain.cpp: 3 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -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; Loading
src/session.cpp +29 −0 Changes for src/session.cpp: 29 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ namespace authdb { authdb::SessionData::SessionData(){ _next=nullptr; _created=std::chrono::steady_clock::now(); } authdb::SessionData::SessionData(const SessionData& src) : SessionData() { Loading @@ -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(){ Loading Loading @@ -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>(); Loading Loading @@ -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; } } }