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

small stack

parent fb46d358
Loading
Loading
Loading
Loading
Loading
+1 −1
Changes for CMakeLists.txt: 1 added line, 1 removed line.
Original line number Diff line number Diff line
cmake_minimum_required(VERSION 3.18)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -Wextra --warn-no-unused-parameter -Wstack-usage=1000")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -Wextra --warn-no-unused-parameter -Wstack-usage=4096")

project(authdb)

+61 −68
Changes for src/admin.cpp: 61 added lines, 68 removed lines.
Original line number Diff line number Diff line
@@ -958,7 +958,6 @@ namespace authdb {
            curform.parse(curreq);

            if (curform.getBoundary()) {
                size_t gcount=0;

                uuid gid;
                gid.generate();
@@ -969,8 +968,6 @@ namespace authdb {

                Group grp;

                size_t git=0;

                for (libhttppp::HttpForm::MultipartForm::Data* curformdat = curform.MultipartFormData.getFormData();
                     curformdat; curformdat = curformdat->nextData()) {

@@ -1119,19 +1116,19 @@ namespace authdb {

            bool data = false;

            libhttppp::HttpForm curform;
            std::shared_ptr<libhttppp::HttpForm> curform=std::make_shared<libhttppp::HttpForm>();

            curform.parse(curreq);
            curform->parse(curreq);

            if(curform.MultipartFormData.getFormData()){
            if(curform->MultipartFormData.getFormData()){

                for (libhttppp::HttpForm::MultipartForm::Data* curformdat = curform.MultipartFormData.getFormData();
                for (libhttppp::HttpForm::MultipartForm::Data* curformdat = curform->MultipartFormData.getFormData();
                          curformdat; curformdat = curformdat->nextData()) {

                     AuthData curec(gid);
                     std::shared_ptr<AuthData> curec=std::make_shared<AuthData>(gid);

                     curec.Data.type=GroupData;
                     curec.Data.storage=EmptyStorage;
                     curec->Data.type=GroupData;
                     curec->Data.storage=EmptyStorage;

                     for(libhttppp::HttpForm::MultipartForm::Data::ContentDisposition *curdispo=curformdat->getDisposition();
                         curdispo; curdispo=curdispo->nextContentDisposition()
@@ -1147,15 +1144,15 @@ namespace authdb {
                                        [](unsigned char c){ return std::tolower(c); });

                         if(key=="name"){
                             strcpy(curec.Data.fieldname,curdispo->getValue());
                             strcpy(curec->Data.fieldname,curdispo->getValue());
                         }

                         if(key=="filename"){
                             curec.Data.storage=BinaryStorage;
                             curec->Data.storage=BinaryStorage;
                         }
                     }

                     if(curec.Data.storage==EmptyStorage){
                     if(curec->Data.storage==EmptyStorage){
                         bool numeric=true;

                         for(auto t : curformdat->Value){
@@ -1166,43 +1163,41 @@ namespace authdb {
                         }

                         if(numeric)
                             curec.Data.storage=IntStorage;
                             curec->Data.storage=IntStorage;
                         else
                             curec.Data.storage=TextStorage;
                             curec->Data.storage=TextStorage;
                     }

                     if(curec.Data.storage==TextStorage &&
                         strcmp(curec.Data.fieldname,"groupmembers")==0){
                     if(curec->Data.storage==TextStorage &&
                         strcmp(curec->Data.fieldname,"groupmembers")==0){
                         curformdat->Value.push_back('\0');
                         editrec.addMember(curformdat->Value.data());
                     }else if(curec.Data.storage==TextStorage) {
                     }else if(curec->Data.storage==TextStorage) {
                         curformdat->Value.push_back('\0');
                         curec.Data.datasize=curformdat->Value.size();
                         curec.Data.data=new char[curec.Data.datasize];
                         curec->Data.datasize=curformdat->Value.size();
                         curec->Data.data=new char[curec->Data.datasize];
                         std::copy(curformdat->Value.begin(),
                                   curformdat->Value.end(),curec.Data.data);

                         editrec.append(curec);
                         delete[] curec.Data.data;
                     }else if(curec.Data.storage==BinaryStorage){
                         curec.Data.datasize=curformdat->Value.size();
                         curec.Data.data=new char[curec.Data.datasize];
                         memcpy(curec.Data.data,curformdat->Value.data(),
                                   curformdat->Value.end(),curec->Data.data);

                         editrec.append(*curec);
                         delete[] curec->Data.data;
                     }else if(curec->Data.storage==BinaryStorage){
                         curec->Data.datasize=curformdat->Value.size();
                         curec->Data.data=new char[curec->Data.datasize];
                         memcpy(curec->Data.data,curformdat->Value.data(),
                                curformdat->Value.size());

                         editrec.append(curec);
                         delete[] curec.Data.data;
                     }else if(curec.Data.storage==IntStorage){
                         editrec.append(*curec);
                         delete[] curec->Data.data;
                     }else if(curec->Data.storage==IntStorage){
                         curformdat->Value.push_back('\0');

                         curec.Data.datasize=sizeof(int);
                         curec.Data.data=(char*)new int;
                         curec->Data.datasize=sizeof(int);
                         curec->Data.data=(char*)new int;
                         int val=atoi(curformdat->Value.data());
                         memcpy(curec.Data.data,&val,
                                curec.Data.datasize);

                         editrec.append(curec);
                         delete[] (int*)curec.Data.data;
                         std::copy(&val,&val+sizeof(int), curec->Data.data);
                         editrec.append(*curec);
                         delete[] (int*)curec->Data.data;
                     }
                }

@@ -1229,11 +1224,10 @@ namespace authdb {
                }
            }

            libhtmlpp::HtmlPage page;

            libhtmlpp::HtmlString form,out;
            std::shared_ptr<libhtmlpp::HtmlString> form=std::make_shared<libhtmlpp::HtmlString>();
            std::shared_ptr<libhtmlpp::HtmlString> out=std::make_shared<libhtmlpp::HtmlString>();

            form  << "<form method=\"post\" enctype=\"multipart/form-data\">"
            *form  << "<form method=\"post\" enctype=\"multipart/form-data\">"
                  << "<table>";

            while(rd<end){
@@ -1245,20 +1239,20 @@ namespace authdb {

                if(gid == cur->ruid && cur->type==GroupData){

                    form  << "<tr><td><label for=\""<< cur->fieldname <<"\">" << cur->fieldname << "</label></td>";
                    *form  << "<tr><td><label for=\""<< cur->fieldname <<"\">" << cur->fieldname << "</label></td>";

                    if(cur->storage==TextStorage && strcmp(cur->fieldname ,"groupname")==0){
                        cur->data = new char[cur->datasize];
                        backend->read((unsigned char*)cur->data,cur->datasize);
                        try {
                            form   << "<td><input type=\"text\" name=\"groupname\" value=\""
                            *form   << "<td><input type=\"text\" name=\"groupname\" value=\""
                                   << cur->data <<"\"></td>";
                        }catch(AuthBackendError &e){
                            std::cerr << e.what() << std::endl;
                        }
                        delete[] cur->data;

                        form   << "<td><select name=\"groupmembers\" multiple>";
                        *form   << "<td><select name=\"groupmembers\" multiple>";

                        std::vector<uuid> mrecs;
                        class Group grp;
@@ -1281,41 +1275,41 @@ namespace authdb {
                                curu->data = new char[curu->datasize];
                                backend->read((unsigned char*)curu->data,curu->datasize);

                                form << "<option value=\"" << uuid(curu->ruid).c_str() << "\" ";
                                *form << "<option value=\"" << uuid(curu->ruid).c_str() << "\" ";
                                for(const uuid &mrec : mrecs){
                                    if(mrec == curu->ruid ){
                                        form << " selected ";
                                        *form << " selected ";
                                    }
                                }

                                form << ">" << curu->data <<"</option>";
                                *form << ">" << curu->data <<"</option>";

                                delete[] curu->data;
                            }
                        }
                        form << "</select>";
                        *form << "</select>";
                    }
                    backend->setPos(rd);
                    form << "</td>";
                    *form << "</td>";
                    break;
                }
            }

            form  << "<tr><td></td><td><input type=\"submit\"></td></tr>"
            *form  << "<tr><td></td><td><input type=\"submit\"></td></tr>"
                  << "</table>"
                  << "</form>";

            libhtmlpp::HtmlElement root=*_IndexElement;
            libhtmlpp::HtmlElement *content=root.getElementbyID("content");
            std::shared_ptr<libhtmlpp::HtmlElement> root=std::make_shared<libhtmlpp::HtmlElement>(*_IndexElement);
            libhtmlpp::HtmlElement *content=root->getElementbyID("content");

            content->insertChild(form.parse());
            content->insertChild(form->parse());

            libhtmlpp::print(&root,out,true);
            libhtmlpp::print(root.get(),*out,true);

            libhttppp::HttpResponse rep;
            rep.setContentType("text/html");
            rep.setContentLength(out.size());
            rep.send(curreq,out.c_str(),out.size());
            rep.setContentLength(out->size());
            rep.send(curreq,out->c_str(),out->size());
        }

        void listSessions(libhttppp::HttpRequest *curreq, const int tid, ULONG_PTR args){
@@ -1629,8 +1623,6 @@ namespace authdb {

                gpo.remove(*backend,gpid);

                size_t i = 0;

                for (libhttppp::HttpForm::MultipartForm::Data* curformdat = GPOForm.MultipartFormData.getFormData();
                     curformdat; curformdat = curformdat->nextData()) {
                    for(libhttppp::HttpForm::MultipartForm::Data::ContentDisposition *curdispo=curformdat->getDisposition();
@@ -1740,6 +1732,7 @@ namespace authdb {

                        bool found=false;
                        for(const uuid &al : allow ){
                            std::cout << uuid(cur->ruid).c_str() << std::endl;
                            if( al==cur->ruid ){
                                found=true;
                                groupel->appendChild(&opt);
@@ -2022,17 +2015,17 @@ namespace authdb {
                throw AuthBackendError("listUsers: could not parse uuid!");
            }

            libhttppp::HttpForm form;
            form.parse(curreq);
            std::shared_ptr<libhttppp::HttpForm> form=std::make_shared<libhttppp::HttpForm>();
            form->parse(curreq);

            if(form.UrlFormData.getFormData()){
            if(form->UrlFormData.getFormData()){
                uuid clid;
                clid.generate();
                class ClientData cdat(clid);

                std::string key,keyhash;

                for(libhttppp::HttpForm::UrlcodedForm::Data *curdat=form.UrlFormData.getFormData(); curdat;
                for(libhttppp::HttpForm::UrlcodedForm::Data *curdat=form->UrlFormData.getFormData(); curdat;
                    curdat=curdat->nextData()
                ){
                    if( strcmp(curdat->getKey(),"clientname")==0 )
@@ -2041,9 +2034,9 @@ namespace authdb {
                        key=curdat->getValue();
                }

                sha512 hash;
                std::shared_ptr<sha512> hash=std::make_shared<sha512>();

                hash.hash(key,keyhash);
                hash->hash(key,keyhash);

                cdat.setKey(keyhash.c_str());

@@ -2210,15 +2203,15 @@ namespace authdb {
                content->appendChild(toolbar);
            }

            libhtmlpp::HtmlString sendat;
            std::shared_ptr<libhtmlpp::HtmlString> sendat=std::make_shared<libhtmlpp::HtmlString>();

            libhtmlpp::print((libhtmlpp::Element*)&index,sendat,false);
            libhtmlpp::print((libhtmlpp::Element*)&index,*sendat,false);

            libhttppp::HttpResponse rep;
            rep.setState(HTTP200);
            rep.setVersion(HTTPVERSION(1.1));
            rep.setContentType("text/html");
            rep.send(curreq,sendat.c_str(),sendat.size());
            rep.send(curreq,sendat->c_str(),sendat->size());
        }

        void removeClient(libhttppp::HttpRequest *curreq, const int tid, ULONG_PTR args){
+1 −0
Changes for src/hash/sha512.h: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ namespace authdb {

        void hash(const std::string input,std::string &output);

        virtual ~sha512(){};
    protected:
        void transform(const unsigned char *message, unsigned int block_nb);
        unsigned int m_tot_len;