X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Fmain.cpp;h=072547de31f39f8616b5e4b29440fdfb9462886a;hb=2c79061a72b54efdcac10b6beca62bf53f7383c8;hp=56ff30fd3e8cc8a2670b4832b1297bd141737e8f;hpb=59e3ff1a00dbe5c819ea6f34f86b03b2912b71c5;p=cassiopeia.git diff --git a/src/main.cpp b/src/main.cpp index 56ff30f..072547d 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,19 +28,29 @@ 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 handlermain( int argc, const char* argv[] ); + 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; @@ -128,6 +121,7 @@ int main( int argc, const char* argv[] ) { } config.close(); + return handlermain( argc, argv ); std::shared_ptr jp( new MySQLJobProvider( sqlHost, sqlUser, sqlPass, sqlDB ) ); std::shared_ptr sign( new SimpleOpensslSigner() ); @@ -151,15 +145,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 { @@ -170,7 +166,7 @@ int main( int argc, const char* argv[] ) { return 1; } - if( !DAEMON ) { + if( !DAEMON || once ) { return 0; } }