X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Fmain.cpp;h=f4c98a7a16a8fbec632cc3de7f6960d543fa650d;hb=c7f2cead9ad48debc5fd9eaca974beeef1d4dedf;hp=eb93eec38c1ed1e0163cf1a6e89f6e45b8412510;hpb=c7d16d5da407d3f5b00ee812f87f059105b93b30;p=cassiopeia.git diff --git a/src/main.cpp b/src/main.cpp index eb93eec..f4c98a7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,21 +1,3 @@ -/* - Cassiopeia - CAcert signing module - Copyright (C) 2014 CAcert Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ #include #include @@ -26,6 +8,7 @@ #include "database.h" #include "mysql.h" #include "simpleOpensslSigner.h" +#include "util.h" #ifdef NO_DAEMON #define DAEMON false @@ -45,18 +28,27 @@ std::string writeBackFile( uint32_t serial, std::string cert ) { filename += "/" + std::to_string( serial / 1000 ); mkdir( filename.c_str(), 0755 ); filename += "/" + std::to_string( serial ) + ".crt"; - std::ofstream file; - file.open( filename.c_str() ); - file << cert.c_str(); - file.close(); + writeFile( filename, cert ); + std::cout << "wrote to " << filename << std::endl; return filename; } int main( int argc, const char* argv[] ) { ( void ) argc; ( void ) argv; + bool once = false; + + if( argc == 2 && std::string( "--once" ) == std::string( argv[1] ) ) { + once = true; + } + std::ifstream config; - config.open( "config.txt" ); + + if( DAEMON ) { + config.open( "/etc/cacert/cassiopeia/cassiopeia.conf" ); + } else { + config.open( "config.txt" ); + } if( !config.is_open() ) { std::cerr << "config missing" << std::endl; @@ -150,15 +142,17 @@ int main( int argc, const char* argv[] ) { } std::cout << "Found a CSR at '" << cert->csr << "' signing" << std::endl; - std::ifstream t( cert->csr ); - cert->csr_content = std::string( std::istreambuf_iterator( t ), std::istreambuf_iterator() ); + cert->csr_content = readFile( cert->csr ); std::shared_ptr res = sign->sign( cert ); std::string fn = writeBackFile( atoi( job->target.c_str() ), res->certificate ); res->crt_name = fn; jp->writeBack( job, res ); } catch( const char* c ) { - std::cerr << c << std::endl; + std::cerr << "ERROR: " << c << std::endl; + return 2; + } catch( std::string c ) { + std::cerr << "ERROR: " << c << std::endl; return 2; } } else { @@ -169,7 +163,7 @@ int main( int argc, const char* argv[] ) { return 1; } - if( !DAEMON ) { + if( !DAEMON || once ) { return 0; } }