- 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<std::shared_ptr<SAN>>();
+
+ q = "SELECT contents, type FROM subjectAlternativeNames 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<TBSCertificate>();
+ }
+
+ std::cout << "Fetching SANs" << std::endl;
+
+ while( ( row = mysql_fetch_row( res.get() ) ) ) {
+ unsigned long* l = mysql_fetch_lengths( res.get() );
+
+ if( !l ) {
+ return std::shared_ptr<TBSCertificate>();
+ }
+
+ std::shared_ptr<SAN> nSAN = std::shared_ptr<SAN>( new SAN() );
+ nSAN->content = std::string( row[0], row[0] + l[0] );
+ nSAN->type = std::string( row[1], row[1] + l[1] );
+ 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<TBSCertificate>();
+
+ }
+
+ while( ( row = mysql_fetch_row( res.get() ) ) ) {
+ unsigned long* l = mysql_fetch_lengths( res.get() );
+
+ if( !l ) {
+ return std::shared_ptr<TBSCertificate>();
+ }
+
+ std::shared_ptr<AVA> nAVA = std::shared_ptr<AVA>( 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 );
+ }