Commit 7b5f0993 authored by jan.koester's avatar jan.koester
Browse files

test

parent 3fb1614e
Loading
Loading
Loading
Loading
Loading
+36 −36
Changes for src/admin.cpp: 36 added lines, 36 removed lines.
Original line number Diff line number Diff line
@@ -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();
@@ -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);
@@ -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);
@@ -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;
@@ -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);
@@ -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;
@@ -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();

@@ -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);
@@ -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;
@@ -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);
@@ -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();
@@ -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();
@@ -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());
@@ -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;
@@ -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);

@@ -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);

@@ -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();
@@ -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);
@@ -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());
@@ -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);
@@ -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);
@@ -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();
@@ -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)
@@ -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());
@@ -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)
@@ -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)
@@ -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();
@@ -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)
@@ -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());
@@ -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)
@@ -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)
@@ -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);
@@ -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());
@@ -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);
@@ -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();
@@ -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();

+4 −5
Changes for src/authdb.cpp: 4 added lines, 5 removed lines.
Original line number Diff line number Diff line
@@ -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;
@@ -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){
@@ -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);
@@ -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;
@@ -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();

+4 −4
Changes for src/backend.cpp: 4 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -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();
}
+12 −11
Changes for src/backend.h: 12 added lines, 11 removed lines.
Original line number Diff line number Diff line
@@ -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();
@@ -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;
    };
};
+1 −1
Changes for src/data.cpp: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -234,7 +234,7 @@ namespace authdb {
    }

    void vacuumRecords(AuthBackend &backend){
        AuthBackendLock lck(backend);
        AuthBackend::Guard lck(backend);
        backend.vacuum();
    }
};