X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Fmysql.cpp;h=bd6929e96f829f4b5eff9a106ea572a94e7e93fe;hb=7a72391242e316a16992e0874a118999486afb87;hp=66c24427411664c1aceb23605e5679aa63520611;hpb=858fcca3a53da84a306f55d1811bf119bf8d862f;p=cassiopeia.git diff --git a/src/mysql.cpp b/src/mysql.cpp index 66c2442..bd6929e 100644 --- a/src/mysql.cpp +++ b/src/mysql.cpp @@ -95,7 +95,7 @@ std::pair< int, std::shared_ptr > MySQLJobProvider::query( const std: int err = mysql_real_query( this->conn.get(), query.c_str(), query.size() ); if( err ) { - throw( std::string( "MySQL error: " ) + mysql_error( this->conn.get() ) ).c_str(); + throw std::string( "MySQL error: " ) + mysql_error( this->conn.get() ); } auto c = conn; @@ -155,7 +155,7 @@ std::shared_ptr MySQLJobProvider::fetchJob() { return job; } -std::string MySQLJobProvider::escape_string( const std::string & target ) { +std::string MySQLJobProvider::escape_string( const std::string& target ) { if( !conn ) { throw "Not connected!"; } @@ -187,7 +187,7 @@ bool MySQLJobProvider::finishJob( std::shared_ptr job ) { std::shared_ptr MySQLJobProvider::fetchTBSCert( std::shared_ptr job ) { std::shared_ptr cert = std::shared_ptr( new TBSCertificate() ); - std::string q = "SELECT CN, subject, md, profile, csr_name, csr_type FROM certs WHERE id='" + this->escape_string( job->target ) + "'"; + std::string q = "SELECT md, profile, csr_name, csr_type FROM certs WHERE id='" + this->escape_string( job->target ) + "'"; int err = 0; @@ -211,12 +211,10 @@ std::shared_ptr MySQLJobProvider::fetchTBSCert( std::shared_ptr< return std::shared_ptr(); } - cert->CN = std::string( row[0], row[0] + l[0] ); - cert->subj = std::string( row[1], row[1] + l[1] ); - cert->md = std::string( row[2], row[2] + l[2] ); - cert->profile = std::string( row[3], row[3] + l[3] ); - cert->csr = std::string( row[4], row[4] + l[4] ); - cert->csr_type = std::string( row[5], row[5] + l[5] ); + cert->md = std::string( row[0], row[0] + l[0] ); + cert->profile = std::string( row[1], row[1] + l[1] ); + cert->csr = std::string( row[2], row[2] + l[2] ); + cert->csr_type = std::string( row[3], row[3] + l[3] ); cert->SANs = std::vector>(); @@ -228,6 +226,8 @@ std::shared_ptr MySQLJobProvider::fetchTBSCert( std::shared_ptr< return std::shared_ptr(); } + std::cout << "Fetching SANs" << std::endl; + while( ( row = mysql_fetch_row( res.get() ) ) ) { unsigned long* l = mysql_fetch_lengths( res.get() ); @@ -241,5 +241,41 @@ std::shared_ptr MySQLJobProvider::fetchTBSCert( std::shared_ptr< cert->SANs.push_back( nSAN ); } + q = "SELECT name, value FROM certAvas WHERE certid='" + this->escape_string( job->target ) + "'"; + std::tie( err, res ) = query( q ); + + if( err ) { + std::cout << mysql_error( this->conn.get() ); + return std::shared_ptr(); + + } + + while( ( row = mysql_fetch_row( res.get() ) ) ) { + unsigned long* l = mysql_fetch_lengths( res.get() ); + + if( !l ) { + return std::shared_ptr(); + } + + std::shared_ptr nAVA = std::shared_ptr( new AVA() ); + nAVA->name = std::string( row[0], row[0] + l[0] ); + nAVA->value = std::string( row[1], row[1] + l[1] ); + cert->AVAs.push_back( nAVA ); + } + return cert; } + +void MySQLJobProvider::writeBack( std::shared_ptr job, std::shared_ptr res ) { + if( !conn ) { + throw "Error while writing back"; + } + + std::string q = "UPDATE certs SET crt_name='" + this->escape_string( res->crt_name ) + "', serial='" + this->escape_string( res->serial ) + "', created=NOW() WHERE id='" + this->escape_string( job->target ) + "' LIMIT 1"; + + // TODO write more thingies back + + if( query( q ).first ) { + throw "Error while writing back"; + } +}