Loading src/admin.cpp +36 −36 Changes for src/admin.cpp: 36 added lines, 36 removed lines. Original line number Diff line number Diff line Loading @@ -141,7 +141,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("listUsers: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); json_object *jobj = json_object_new_object(); json_object *jarr = json_object_new_array(); Loading Loading @@ -184,7 +184,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("getUser: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid uid; uid.parse(cuid); Loading Loading @@ -219,7 +219,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("createUser: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); libhttppp::HttpForm curform; curform.parse(curreq); Loading Loading @@ -350,7 +350,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("removeUser: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); User user; uuid::uuid uuid; Loading @@ -368,7 +368,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("editUser: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid uid; uid.parse(cuid); Loading Loading @@ -503,7 +503,7 @@ namespace authdb { if (!sdat) return false; // Refresh admin backend data from cluster (RAII: lock + unlock) AuthBackendLock guard(_AdminBackend); AuthBackend::Guard guard(_AdminBackend); // Get the user ID from the session uuid::uuid uid; Loading Loading @@ -682,7 +682,7 @@ namespace authdb { /* ---- JSON API: List Domains ---- */ void apiListDomains(libhttppp::HttpRequest &curreq) { AuthBackendLock guard(_AdminBackend); AuthBackend::Guard guard(_AdminBackend); json_object *jobj = json_object_new_object(); json_object *jarr = json_object_new_array(); Loading Loading @@ -722,7 +722,7 @@ namespace authdb { void apiCreateDomain(libhttppp::HttpRequest &curreq, const SessionData *sdat) { if (!isSuperAdmin(sdat)) throw AuthBackendError("createDomain: nur SuperAdmins von admin.local erlaubt!"); AuthBackendLock guard(_AdminBackend); AuthBackend::Guard guard(_AdminBackend); std::vector<char> body; libhttppp::HttpForm curform; curform.parse(curreq); Loading Loading @@ -809,7 +809,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *domBackend = resolveDomain(uid.c_str(), _AdminBackend, dbackend); if (domBackend) { AuthBackendLock dguard(*domBackend); AuthBackend::Guard dguard(*domBackend); // Create "Domain Admins" group uuid::uuid gid; Loading Loading @@ -855,7 +855,7 @@ namespace authdb { void apiRemoveDomain(libhttppp::HttpRequest &curreq, const char *cdid, const SessionData *sdat) { if (!isSuperAdmin(sdat)) throw AuthBackendError("removeDomain: nur SuperAdmins von admin.local erlaubt!"); AuthBackendLock guard(_AdminBackend); AuthBackend::Guard guard(_AdminBackend); Domain domain; uuid::uuid uuid; uuid.parse(cdid); Loading @@ -872,7 +872,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("listGroups: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); json_object *jobj = json_object_new_object(); json_object *jarr = json_object_new_array(); Loading Loading @@ -911,7 +911,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("getGroup: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid gid(cgid); json_object *jobj = json_object_new_object(); Loading Loading @@ -962,7 +962,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("createGroup: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); std::string reqbody = getRequestBody(curreq); json_object *jreq = json_tokener_parse(reqbody.c_str()); Loading Loading @@ -1001,7 +1001,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("removeGroup: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); Group group; uuid::uuid uuid; Loading @@ -1019,7 +1019,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("editGroup: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid gid(cgid); Loading Loading @@ -1109,7 +1109,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("reloadSession: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); AuthSession.relSession(*backend, sid); Loading @@ -1124,7 +1124,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("listGpos: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); json_object *jobj = json_object_new_object(); json_object *jarr = json_object_new_array(); Loading Loading @@ -1170,7 +1170,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("getGpo: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid gpid; gpid.parse(cgpid); Loading Loading @@ -1232,7 +1232,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("createGpo: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); std::string reqbody = getRequestBody(curreq); json_object *jreq = json_tokener_parse(reqbody.c_str()); Loading Loading @@ -1282,7 +1282,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("removeGpo: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid gpid; gpid.parse(cgpid); Loading @@ -1301,7 +1301,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("editGpo: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid gpid; gpid.parse(cgpid); Loading Loading @@ -1351,7 +1351,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("listServices: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); json_object *jobj = json_object_new_object(); json_object *jarr = json_object_new_array(); Loading Loading @@ -1401,7 +1401,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("getService: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid sid; if (sid.parse(csid) != 0) Loading Loading @@ -1433,7 +1433,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("createService: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); std::string reqbody = getRequestBody(curreq); json_object *jreq = json_tokener_parse(reqbody.c_str()); Loading Loading @@ -1511,7 +1511,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("removeService: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid svid; if (svid.parse(csid) != 0) Loading @@ -1530,7 +1530,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("editService: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid sid; if (sid.parse(csid) != 0) Loading Loading @@ -1616,7 +1616,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("listClients: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); json_object *jobj = json_object_new_object(); json_object *jarr = json_object_new_array(); Loading Loading @@ -1656,7 +1656,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("getClient: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid clid; if (clid.parse(cclid) != 0) Loading @@ -1679,7 +1679,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("createClient: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); std::string reqbody = getRequestBody(curreq); json_object *jreq = json_tokener_parse(reqbody.c_str()); Loading Loading @@ -1731,7 +1731,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("removeClient: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid cldid; if (cldid.parse(cclid) != 0) Loading @@ -1750,7 +1750,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("editClient: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid clid; if (clid.parse(cclid) != 0) Loading Loading @@ -1808,7 +1808,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("export: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); json_object *jobj = Export::toJson(*backend); sendJson(curreq, jobj); Loading @@ -1820,7 +1820,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("import: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); std::string reqbody = getRequestBody(curreq); json_object *jreq = json_tokener_parse(reqbody.c_str()); Loading @@ -1841,7 +1841,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("vacuum: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); size_t sizeBefore = backend->end(); vacuumRecords(*backend); Loading Loading @@ -1891,7 +1891,7 @@ namespace authdb { } // Lock backend to fetch latest data from cluster before reading AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); User user; size_t rd = sizeof(authdb::AuthHeader), end = backend->end(); Loading Loading @@ -1993,7 +1993,7 @@ namespace authdb { libhtmlpp::HtmlElement index = *_LoginElement, *domel = index.getElementbyID("domain"); libhtmlpp::HtmlElement *loginel = index.getElementbyID("login"); AuthBackendLock domguard(_AdminBackend); AuthBackend::Guard domguard(_AdminBackend); Domain domain; size_t rd = sizeof(authdb::AuthHeader), end = _AdminBackend.end(); Loading src/authdb.cpp +4 −5 Changes for src/authdb.cpp: 4 added lines, 5 removed lines. Original line number Diff line number Diff line Loading @@ -238,7 +238,7 @@ namespace authdb { } if(_AdminBackend.end()<=sizeof(authdb::AuthHeader)){ AuthBackendLock admlock(_AdminBackend); AuthBackend::Guard admlock(_AdminBackend); try{ WizzardEvent(curreq,tid,args); return; Loading Loading @@ -291,7 +291,7 @@ namespace authdb { DomainInfo dinfo; { AuthBackendLock admlock(_AdminBackend); AuthBackend::Guard admlock(_AdminBackend); try { dinfo=db.resolve(did.value); }catch(std::exception &e){ Loading Loading @@ -326,7 +326,7 @@ namespace authdb { } if(apidb){ apidb->lock(); AuthBackend::Guard guard(*apidb); try{ ApiController(*apidb,did,curreq,tid,args); g_Log.access(clientAddr,method,curreq.getRequestURL(),200); Loading @@ -336,7 +336,6 @@ namespace authdb { }catch(...){ g_Log.access(clientAddr,method,curreq.getRequestURL(),500); } apidb->unlock(); }else{ g_Log.access(clientAddr,method,curreq.getRequestURL(),404); libhttppp::HttpResponse rep; Loading Loading @@ -401,7 +400,7 @@ namespace authdb { ::uuid::uuid uid(cuid); // Always lock the resolved backend AuthBackendLock domlock(*backend); AuthBackend::Guard domlock(*backend); size_t rd=sizeof(authdb::AuthHeader),end=backend->end(); Loading src/backend.cpp +4 −4 Changes for src/backend.cpp: 4 added lines, 4 removed lines. Original line number Diff line number Diff line Loading @@ -109,11 +109,11 @@ void authdb::AuthBackend::vacuum(){ _Api->vacuum(); } authdb::AuthBackendLock::AuthBackendLock(AuthBackend &lock) : _Lock(lock){ _Lock.lock(); authdb::AuthBackend::Guard::Guard(AuthBackend &backend) : _Backend(backend){ _Backend.lock(); } authdb::AuthBackendLock::~AuthBackendLock(){ _Lock.unlock(); authdb::AuthBackend::Guard::~Guard(){ _Backend.unlock(); } src/backend.h +12 −11 Changes for src/backend.h: 12 added lines, 11 removed lines. Original line number Diff line number Diff line Loading @@ -67,8 +67,15 @@ namespace authdb{ AuthBackend(const AuthBackend &backend); ~AuthBackend(); void lock(); void unlock(); class Guard { public: Guard(AuthBackend &backend); ~Guard(); Guard(const Guard &) = delete; Guard &operator=(const Guard &) = delete; private: AuthBackend &_Backend; }; void setPos(size_t pos); size_t getPos(); Loading @@ -87,19 +94,13 @@ namespace authdb{ int getType() const { return _Type; } private: void lock(); void unlock(); int _Type; AuthBackendApi *_Api; const std::string _Options; const std::string _Domain; std::timed_mutex _Lock; friend class AuthBackendLock; }; class VISIBILITY AuthBackendLock{ public: AuthBackendLock(AuthBackend &lock); ~AuthBackendLock(); private: AuthBackend &_Lock; }; }; src/data.cpp +1 −1 Changes for src/data.cpp: 1 added line, 1 removed line. Original line number Diff line number Diff line Loading @@ -234,7 +234,7 @@ namespace authdb { } void vacuumRecords(AuthBackend &backend){ AuthBackendLock lck(backend); AuthBackend::Guard lck(backend); backend.vacuum(); } }; Loading
src/admin.cpp +36 −36 Changes for src/admin.cpp: 36 added lines, 36 removed lines. Original line number Diff line number Diff line Loading @@ -141,7 +141,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("listUsers: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); json_object *jobj = json_object_new_object(); json_object *jarr = json_object_new_array(); Loading Loading @@ -184,7 +184,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("getUser: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid uid; uid.parse(cuid); Loading Loading @@ -219,7 +219,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("createUser: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); libhttppp::HttpForm curform; curform.parse(curreq); Loading Loading @@ -350,7 +350,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("removeUser: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); User user; uuid::uuid uuid; Loading @@ -368,7 +368,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("editUser: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid uid; uid.parse(cuid); Loading Loading @@ -503,7 +503,7 @@ namespace authdb { if (!sdat) return false; // Refresh admin backend data from cluster (RAII: lock + unlock) AuthBackendLock guard(_AdminBackend); AuthBackend::Guard guard(_AdminBackend); // Get the user ID from the session uuid::uuid uid; Loading Loading @@ -682,7 +682,7 @@ namespace authdb { /* ---- JSON API: List Domains ---- */ void apiListDomains(libhttppp::HttpRequest &curreq) { AuthBackendLock guard(_AdminBackend); AuthBackend::Guard guard(_AdminBackend); json_object *jobj = json_object_new_object(); json_object *jarr = json_object_new_array(); Loading Loading @@ -722,7 +722,7 @@ namespace authdb { void apiCreateDomain(libhttppp::HttpRequest &curreq, const SessionData *sdat) { if (!isSuperAdmin(sdat)) throw AuthBackendError("createDomain: nur SuperAdmins von admin.local erlaubt!"); AuthBackendLock guard(_AdminBackend); AuthBackend::Guard guard(_AdminBackend); std::vector<char> body; libhttppp::HttpForm curform; curform.parse(curreq); Loading Loading @@ -809,7 +809,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *domBackend = resolveDomain(uid.c_str(), _AdminBackend, dbackend); if (domBackend) { AuthBackendLock dguard(*domBackend); AuthBackend::Guard dguard(*domBackend); // Create "Domain Admins" group uuid::uuid gid; Loading Loading @@ -855,7 +855,7 @@ namespace authdb { void apiRemoveDomain(libhttppp::HttpRequest &curreq, const char *cdid, const SessionData *sdat) { if (!isSuperAdmin(sdat)) throw AuthBackendError("removeDomain: nur SuperAdmins von admin.local erlaubt!"); AuthBackendLock guard(_AdminBackend); AuthBackend::Guard guard(_AdminBackend); Domain domain; uuid::uuid uuid; uuid.parse(cdid); Loading @@ -872,7 +872,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("listGroups: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); json_object *jobj = json_object_new_object(); json_object *jarr = json_object_new_array(); Loading Loading @@ -911,7 +911,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("getGroup: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid gid(cgid); json_object *jobj = json_object_new_object(); Loading Loading @@ -962,7 +962,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("createGroup: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); std::string reqbody = getRequestBody(curreq); json_object *jreq = json_tokener_parse(reqbody.c_str()); Loading Loading @@ -1001,7 +1001,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("removeGroup: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); Group group; uuid::uuid uuid; Loading @@ -1019,7 +1019,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("editGroup: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid gid(cgid); Loading Loading @@ -1109,7 +1109,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("reloadSession: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); AuthSession.relSession(*backend, sid); Loading @@ -1124,7 +1124,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("listGpos: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); json_object *jobj = json_object_new_object(); json_object *jarr = json_object_new_array(); Loading Loading @@ -1170,7 +1170,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("getGpo: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid gpid; gpid.parse(cgpid); Loading Loading @@ -1232,7 +1232,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("createGpo: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); std::string reqbody = getRequestBody(curreq); json_object *jreq = json_tokener_parse(reqbody.c_str()); Loading Loading @@ -1282,7 +1282,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("removeGpo: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid gpid; gpid.parse(cgpid); Loading @@ -1301,7 +1301,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("editGpo: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid gpid; gpid.parse(cgpid); Loading Loading @@ -1351,7 +1351,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("listServices: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); json_object *jobj = json_object_new_object(); json_object *jarr = json_object_new_array(); Loading Loading @@ -1401,7 +1401,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("getService: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid sid; if (sid.parse(csid) != 0) Loading Loading @@ -1433,7 +1433,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("createService: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); std::string reqbody = getRequestBody(curreq); json_object *jreq = json_tokener_parse(reqbody.c_str()); Loading Loading @@ -1511,7 +1511,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("removeService: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid svid; if (svid.parse(csid) != 0) Loading @@ -1530,7 +1530,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("editService: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid sid; if (sid.parse(csid) != 0) Loading Loading @@ -1616,7 +1616,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("listClients: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); json_object *jobj = json_object_new_object(); json_object *jarr = json_object_new_array(); Loading Loading @@ -1656,7 +1656,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("getClient: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid clid; if (clid.parse(cclid) != 0) Loading @@ -1679,7 +1679,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("createClient: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); std::string reqbody = getRequestBody(curreq); json_object *jreq = json_tokener_parse(reqbody.c_str()); Loading Loading @@ -1731,7 +1731,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("removeClient: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid cldid; if (cldid.parse(cclid) != 0) Loading @@ -1750,7 +1750,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("editClient: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); uuid::uuid clid; if (clid.parse(cclid) != 0) Loading Loading @@ -1808,7 +1808,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("export: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); json_object *jobj = Export::toJson(*backend); sendJson(curreq, jobj); Loading @@ -1820,7 +1820,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("import: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); std::string reqbody = getRequestBody(curreq); json_object *jreq = json_tokener_parse(reqbody.c_str()); Loading @@ -1841,7 +1841,7 @@ namespace authdb { DomainBackend dbackend(_AdminBackend); AuthBackend *backend = resolveDomain(cdid, _AdminBackend, dbackend); if (!backend) throw AuthBackendError("vacuum: could not resolve domain!"); AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); size_t sizeBefore = backend->end(); vacuumRecords(*backend); Loading Loading @@ -1891,7 +1891,7 @@ namespace authdb { } // Lock backend to fetch latest data from cluster before reading AuthBackendLock guard(*backend); AuthBackend::Guard guard(*backend); User user; size_t rd = sizeof(authdb::AuthHeader), end = backend->end(); Loading Loading @@ -1993,7 +1993,7 @@ namespace authdb { libhtmlpp::HtmlElement index = *_LoginElement, *domel = index.getElementbyID("domain"); libhtmlpp::HtmlElement *loginel = index.getElementbyID("login"); AuthBackendLock domguard(_AdminBackend); AuthBackend::Guard domguard(_AdminBackend); Domain domain; size_t rd = sizeof(authdb::AuthHeader), end = _AdminBackend.end(); Loading
src/authdb.cpp +4 −5 Changes for src/authdb.cpp: 4 added lines, 5 removed lines. Original line number Diff line number Diff line Loading @@ -238,7 +238,7 @@ namespace authdb { } if(_AdminBackend.end()<=sizeof(authdb::AuthHeader)){ AuthBackendLock admlock(_AdminBackend); AuthBackend::Guard admlock(_AdminBackend); try{ WizzardEvent(curreq,tid,args); return; Loading Loading @@ -291,7 +291,7 @@ namespace authdb { DomainInfo dinfo; { AuthBackendLock admlock(_AdminBackend); AuthBackend::Guard admlock(_AdminBackend); try { dinfo=db.resolve(did.value); }catch(std::exception &e){ Loading Loading @@ -326,7 +326,7 @@ namespace authdb { } if(apidb){ apidb->lock(); AuthBackend::Guard guard(*apidb); try{ ApiController(*apidb,did,curreq,tid,args); g_Log.access(clientAddr,method,curreq.getRequestURL(),200); Loading @@ -336,7 +336,6 @@ namespace authdb { }catch(...){ g_Log.access(clientAddr,method,curreq.getRequestURL(),500); } apidb->unlock(); }else{ g_Log.access(clientAddr,method,curreq.getRequestURL(),404); libhttppp::HttpResponse rep; Loading Loading @@ -401,7 +400,7 @@ namespace authdb { ::uuid::uuid uid(cuid); // Always lock the resolved backend AuthBackendLock domlock(*backend); AuthBackend::Guard domlock(*backend); size_t rd=sizeof(authdb::AuthHeader),end=backend->end(); Loading
src/backend.cpp +4 −4 Changes for src/backend.cpp: 4 added lines, 4 removed lines. Original line number Diff line number Diff line Loading @@ -109,11 +109,11 @@ void authdb::AuthBackend::vacuum(){ _Api->vacuum(); } authdb::AuthBackendLock::AuthBackendLock(AuthBackend &lock) : _Lock(lock){ _Lock.lock(); authdb::AuthBackend::Guard::Guard(AuthBackend &backend) : _Backend(backend){ _Backend.lock(); } authdb::AuthBackendLock::~AuthBackendLock(){ _Lock.unlock(); authdb::AuthBackend::Guard::~Guard(){ _Backend.unlock(); }
src/backend.h +12 −11 Changes for src/backend.h: 12 added lines, 11 removed lines. Original line number Diff line number Diff line Loading @@ -67,8 +67,15 @@ namespace authdb{ AuthBackend(const AuthBackend &backend); ~AuthBackend(); void lock(); void unlock(); class Guard { public: Guard(AuthBackend &backend); ~Guard(); Guard(const Guard &) = delete; Guard &operator=(const Guard &) = delete; private: AuthBackend &_Backend; }; void setPos(size_t pos); size_t getPos(); Loading @@ -87,19 +94,13 @@ namespace authdb{ int getType() const { return _Type; } private: void lock(); void unlock(); int _Type; AuthBackendApi *_Api; const std::string _Options; const std::string _Domain; std::timed_mutex _Lock; friend class AuthBackendLock; }; class VISIBILITY AuthBackendLock{ public: AuthBackendLock(AuthBackend &lock); ~AuthBackendLock(); private: AuthBackend &_Lock; }; };
src/data.cpp +1 −1 Changes for src/data.cpp: 1 added line, 1 removed line. Original line number Diff line number Diff line Loading @@ -234,7 +234,7 @@ namespace authdb { } void vacuumRecords(AuthBackend &backend){ AuthBackendLock lck(backend); AuthBackend::Guard lck(backend); backend.vacuum(); } };