file.open( name );
file << content;
file.close();
+
+ //! \FIXME: Error checking
}
std::string readFile( const std::string& name ) {
}
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' );
}
return std::pair<bool, time_t>( false, 0 );
}
}
+
+std::shared_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::shared_ptr<std::ofstream>(new std::ofstream( tname ),
+ [](std::ofstream *p){
+ p->close();
+ delete p;
+ });
+ if(! res->good() ){
+ throw std::string("Failed to open file for logging: ") + name;
+ }
+ return res;
+}