#include <stdexcept>
void writeFile( const std::string& name, const std::string& content ) {
- std::ofstream file;
-
- file.open( name );
+ std::ofstream file( name );
file << content;
- file.close();
+
+ //! \FIXME: Error checking
}
std::string readFile( const std::string& name ) {
std::ifstream t( name );
std::string res = std::string( std::istreambuf_iterator<char>( t ), std::istreambuf_iterator<char>() );
- t.close();
return res;
}
std::string writeBackFile( const std::string& serial, const std::string& cert, const std::string& keydir ) {
+ errno = 0;
+
std::string filename = keydir;
- mkdir( filename.c_str(), 0755 );
+
+ if( 0 != mkdir( filename.c_str(), 0755 ) ) {
+ if( EEXIST != errno ) {
+ return "";
+ }
+
+ //! \FIXME: Check this is a directory
+ }
+
filename += "/crt";
- mkdir( filename.c_str(), 0755 );
+
+ if( 0 != mkdir( filename.c_str(), 0755 ) ) {
+ if( EEXIST != errno ) {
+ return "";
+ }
+
+ //! \FIXME: Check this is a directory
+ }
+
std::string first;
if( serial.length() < 3 ) {
}
filename += "/" + first;
- mkdir( filename.c_str(), 0755 );
+
+ if( 0 != mkdir( filename.c_str(), 0755 ) ) {
+ if( EEXIST != errno ) {
+ return "";
+ }
+
+ //! \FIXME: Check this is a directory
+ }
+
filename += "/" + serial + ".crt";
writeFile( filename, cert );
return filename;
}
+
bool isDigit( char c ) {
return ( c >= '0' ) && ( c <= '9' );
}
std::size_t siz = strftime( check, 11, "%Y-%m-%d", &t );
if( siz != 10 ) {
- return std::pair<bool, time_t>( false, 0 );
+ return std::pair<bool, time_t>( false, 0 ); // NO-COVERAGE (by contract of strftime)
}
std::string checkS( check, siz );
if( checkS != date ) {
- return std::pair<bool, time_t>( false, 0 );
+ return { false, 0 };
}
return std::pair<bool, time_t>( true, res );
}
return std::pair<bool, time_t>( true, res );
-
}
std::pair<bool, time_t> parseMonthInterval( std::time_t t, const std::string& date ) {
return std::pair<bool, time_t>( false, 0 );
}
}
+
std::pair<bool, time_t> parseYearInterval( std::time_t t, const std::string& date ) {
if( date[date.size() - 1] != 'y' ) {
return std::pair<bool, time_t>( false, 0 );
return std::pair<bool, time_t>( false, 0 );
}
}
+
+std::unique_ptr<std::ofstream> openLogfile( const std::string &name ) {
+ struct stat buffer;
+ std::string tname = name;
+ int ctr = 2;
+
+ while( stat( tname.c_str(), &buffer ) == 0 ) {
+ tname = name + "_" + std::to_string( ctr++ );
+ }
+
+ auto res = std::make_unique<std::ofstream>( tname );
+
+ if( ! res->good() ) {
+ throw std::string( "Failed to open file for logging: " ) + name;
+ }
+
+ return res;
+}
+
+std::string timestamp(){
+ time_t c_time;
+ if( time( &c_time ) == -1 ) {
+ throw std::runtime_error( "Error while fetching time?" );
+ }
+ return std::to_string( c_time );
+}