diff --git a/.gitignore b/.gitignore index 7acf2dcf9..4107ecd1e 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,7 @@ GTAGS src/lib/test_exchange_api doc/doxygen/doxygen_sqlite3.db src/auditor/taler-auditor +src/auditor/taler-auditor-dbinit src/auditor/taler-auditor-sign src/bank-lib/test_bank_api src/bank-lib/test_bank_api_new diff --git a/src/auditor/Makefile.am b/src/auditor/Makefile.am index 0770338ac..105f91c29 100644 --- a/src/auditor/Makefile.am +++ b/src/auditor/Makefile.am @@ -14,7 +14,23 @@ pkgcfg_DATA = \ bin_PROGRAMS = \ taler-auditor \ taler-wire-auditor \ - taler-auditor-sign + taler-auditor-sign \ + taler-auditor-dbinit + +taler_auditor_dbinit_SOURCES = \ + taler-auditor-dbinit.c +taler_auditor_dbinit_LDADD = \ + $(LIBGCRYPT_LIBS) \ + $(top_builddir)/src/util/libtalerutil.la \ + $(top_builddir)/src/pq/libtalerpq.la \ + $(top_builddir)/src/auditordb/libtalerauditordb.la \ + -lgnunetutil $(XLIB) +taler_auditor_dbinit_LDFLAGS = \ + $(POSTGRESQL_LDFLAGS) +taler_auditor_dbinit_CPPFLAGS = \ + -I$(top_srcdir)/src/include \ + -I$(top_srcdir)/src/pq/ \ + $(POSTGRESQL_CPPFLAGS) taler_auditor_SOURCES = \ taler-auditor.c diff --git a/src/auditor/taler-auditor-dbinit.c b/src/auditor/taler-auditor-dbinit.c new file mode 100644 index 000000000..185a39413 --- /dev/null +++ b/src/auditor/taler-auditor-dbinit.c @@ -0,0 +1,130 @@ +/* + This file is part of TALER + Copyright (C) 2014, 2015 GNUnet e.V. + + TALER 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 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, see +*/ +/** + * @file auditor/taler-auditor-dbinit.c + * @brief Create tables for the auditor database. + * @author Florian Dold + * @author Marcello Stanisci + */ +#include "platform.h" +#include +#include "taler_auditordb_plugin.h" + + +/** + * Return value from main(). + */ +static int global_ret; + +/** + * -r option: do full DB reset + */ +static int reset_db; + +/** + * -g option: garbage collect DB reset + */ +static int gc_db; + +/** + * Main function that will be run. + * + * @param cls closure + * @param args remaining command-line arguments + * @param cfgfile name of the configuration file used (for saving, can be NULL!) + * @param cfg configuration + */ +static void +run (void *cls, + char *const *args, + const char *cfgfile, + const struct GNUNET_CONFIGURATION_Handle *cfg) +{ + struct TALER_AUDITORDB_Plugin *plugin; + + if (NULL == + (plugin = TALER_AUDITORDB_plugin_load (cfg))) + { + fprintf (stderr, + "Failed to initialize database plugin.\n"); + global_ret = 1; + return; + } + if (reset_db) + (void) plugin->drop_tables (plugin->cls); + if (GNUNET_OK != + plugin->create_tables (plugin->cls)) + { + fprintf (stderr, + "Failed to initialize database.\n"); + TALER_AUDITORDB_plugin_unload (plugin); + global_ret = 1; + return; + } + if (gc_db) + { + if (GNUNET_SYSERR == plugin->gc (plugin->cls)) + fprintf (stderr, + "Garbage collection failed!\n"); + } + TALER_AUDITORDB_plugin_unload (plugin); +} + + +/** + * The main function of the database initialization tool. + * Used to initialize the Taler Exchange's database. + * + * @param argc number of arguments from the command line + * @param argv command line arguments + * @return 0 ok, 1 on error + */ +int +main (int argc, + char *const *argv) +{ + const struct GNUNET_GETOPT_CommandLineOption options[] = { + GNUNET_GETOPT_option_flag ('r', + "reset", + "reset database (DANGEROUS: all existing data is lost!)", + &reset_db), + GNUNET_GETOPT_option_flag ('g', + "gc", + "garbage collect database", + &gc_db), + GNUNET_GETOPT_OPTION_END + }; + + /* force linker to link against libtalerutil; if we do + not do this, the linker may "optimize" libtalerutil + away and skip #TALER_OS_init(), which we do need */ + (void) TALER_project_data_default (); + GNUNET_assert (GNUNET_OK == + GNUNET_log_setup ("taler-auditor-dbinit", + "INFO", + NULL)); + if (GNUNET_OK != + GNUNET_PROGRAM_run (argc, argv, + "taler-auditor-dbinit", + "Initialize Taler auditor database", + options, + &run, NULL)) + return 1; + return global_ret; +} + + +/* end of taler-auditor-dbinit.c */ diff --git a/src/exchange-lib/test_exchange_api_twisted.c b/src/exchange-lib/test_exchange_api_twisted.c index 1e3aa34b5..8c2492816 100644 --- a/src/exchange-lib/test_exchange_api_twisted.c +++ b/src/exchange-lib/test_exchange_api_twisted.c @@ -219,4 +219,4 @@ main (int argc, return 0; } -/* end of test_exchange_api_new.c */ +/* end of test_exchange_api_twisted.c */