X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Fdb%2Fmysql.cpp;h=cf2bb7ebf8c0d3a6b7a39bb65ccd83924bd7e5b3;hb=3d3967b16610579e977b5d8685f3eedb10cbc23a;hp=7bb93d01746891b75ce815830f28de16ab3c4526;hpb=56358cbe81dd0d11267a06133ce227c2c53f10f7;p=cassiopeia.git diff --git a/src/db/mysql.cpp b/src/db/mysql.cpp index 7bb93d0..cf2bb7e 100644 --- a/src/db/mysql.cpp +++ b/src/db/mysql.cpp @@ -10,6 +10,7 @@ std::shared_ptr MySQLJobProvider::lib_ref( //Initializer: Store the return code as a pointer to an integer new int( mysql_library_init( 0, NULL, NULL ) ), + //Finalizer: Check the pointer and free resources []( int* ref ) { if( !ref ) { @@ -36,19 +37,8 @@ MySQLJobProvider::MySQLJobProvider( const std::string& server, const std::string connect( server, user, password, database ); } -MySQLJobProvider::~MySQLJobProvider() { - disconnect(); -} - bool MySQLJobProvider::connect( const std::string& server, const std::string& user, const std::string& password, const std::string& database ) { - if( conn ) { - if( !disconnect() ) { - return false; - } - - conn.reset(); - } - + disconnect(); conn = _connect( server, user, password, database ); return !!conn; @@ -58,13 +48,13 @@ std::shared_ptr MySQLJobProvider::_connect( const std::string& server, co MYSQL* tmp( mysql_init( NULL ) ); if( !tmp ) { - return std::shared_ptr(); + return nullptr; } tmp = mysql_real_connect( tmp, server.c_str(), user.c_str(), password.c_str(), database.c_str(), 3306, NULL, CLIENT_COMPRESS ); if( !tmp ) { - return std::shared_ptr(); + return nullptr; } auto l = lib_ref; @@ -121,7 +111,7 @@ std::shared_ptr MySQLJobProvider::fetchJob() { std::tie( err, res ) = query( q ); if( err ) { - return std::shared_ptr(); + return nullptr; } unsigned int num = mysql_num_fields( res.get() ); @@ -129,15 +119,15 @@ std::shared_ptr MySQLJobProvider::fetchJob() { MYSQL_ROW row = mysql_fetch_row( res.get() ); if( !row ) { - return std::shared_ptr(); + return nullptr; } - std::shared_ptr job( new Job() ); + auto job = std::make_shared(); unsigned long* l = mysql_fetch_lengths( res.get() ); if( !l ) { - return std::shared_ptr(); + return nullptr; } job->id = std::string( row[0], row[0] + l[0] ); @@ -182,7 +172,6 @@ void MySQLJobProvider::finishJob( std::shared_ptr job ) { if( query( q ).first ) { throw "No database entry found."; } - } void MySQLJobProvider::failJob( std::shared_ptr job ) { @@ -198,7 +187,7 @@ void MySQLJobProvider::failJob( std::shared_ptr job ) { } std::shared_ptr MySQLJobProvider::fetchTBSCert( std::shared_ptr job ) { - std::shared_ptr cert = std::shared_ptr( new TBSCertificate() ); + auto cert = std::make_shared(); std::string q = "SELECT md, profile, csr_name, csr_type, keyname FROM certs INNER JOIN profiles ON profiles.id = certs.profile WHERE certs.id='" + this->escape_string( job->target ) + "'"; int err = 0; @@ -208,19 +197,19 @@ std::shared_ptr MySQLJobProvider::fetchTBSCert( std::shared_ptr< std::tie( err, res ) = query( q ); if( err ) { - return std::shared_ptr(); + return nullptr; } MYSQL_ROW row = mysql_fetch_row( res.get() ); if( !row ) { - return std::shared_ptr(); + return nullptr; } unsigned long* l = mysql_fetch_lengths( res.get() ); if( !l ) { - return std::shared_ptr(); + return nullptr; } std::string profileName = std::string( row[4], row[4] + l[4] ); @@ -244,7 +233,7 @@ std::shared_ptr MySQLJobProvider::fetchTBSCert( std::shared_ptr< if( err ) { std::cout << mysql_error( this->conn.get() ); - return std::shared_ptr(); + return nullptr; } std::cout << "Fetching SANs" << std::endl; @@ -253,7 +242,7 @@ std::shared_ptr MySQLJobProvider::fetchTBSCert( std::shared_ptr< unsigned long* l = mysql_fetch_lengths( res.get() ); if( !l ) { - return std::shared_ptr(); + return nullptr; } std::shared_ptr nSAN = std::shared_ptr( new SAN() ); @@ -267,7 +256,7 @@ std::shared_ptr MySQLJobProvider::fetchTBSCert( std::shared_ptr< if( err ) { std::cout << mysql_error( this->conn.get() ); - return std::shared_ptr(); + return nullptr; } @@ -275,7 +264,7 @@ std::shared_ptr MySQLJobProvider::fetchTBSCert( std::shared_ptr< unsigned long* l = mysql_fetch_lengths( res.get() ); if( !l ) { - return std::shared_ptr(); + return nullptr; } std::shared_ptr nAVA = std::shared_ptr( new AVA() ); @@ -319,8 +308,7 @@ void MySQLJobProvider::writeBack( std::shared_ptr job, std::shared_ptrescape_string( res->crt_name ) + "', serial='" + this->escape_string( res->serial ) + "', caId = '" + this->escape_string( read_id ) + "', created=NOW() WHERE id='" + this->escape_string( job->target ) + "' LIMIT 1"; - + std::string q = "UPDATE certs SET crt_name='" + this->escape_string( res->crt_name ) + "', serial='" + this->escape_string( res->serial ) + "', caId = '" + this->escape_string( read_id ) + "', created='" + this->escape_string( res->before ) + "', expire='" + this->escape_string( res->after ) + "' WHERE id='" + this->escape_string( job->target ) + "' LIMIT 1"; // TODO write more thingies back if( query( q ).first ) { @@ -347,3 +335,9 @@ std::pair MySQLJobProvider::getRevocationInfo( std::sh return std::pair( std::string( row[0], row[0] + l[0] ), std::string( row[1], row[1] + l[1] ) ); } + +void MySQLJobProvider::writeBackRevocation( std::shared_ptr job, std::string date ) { + if( query( "UPDATE certs SET revoked = '" + this->escape_string( date ) + "' WHERE id = '" + this->escape_string( job->target ) + "'" ).first ) { + throw "Error while writing back revocation"; + } +}