diff options
| author | Christian Grothoff <christian@grothoff.org> | 2015-03-16 18:19:05 +0100 | 
|---|---|---|
| committer | Christian Grothoff <christian@grothoff.org> | 2015-03-16 18:19:05 +0100 | 
| commit | 293b4018d1270fa3edc9f893d6a80a78b5f091a7 (patch) | |
| tree | ce9f26a63f811aeb983c1e1ae73dc475ee0157a7 /src/mint | |
| parent | b3e076b10a1ef630d03bf8ed123a4a64e34395b5 (diff) | |
fix documentation and minor issues in DB tools
Diffstat (limited to 'src/mint')
| -rw-r--r-- | src/mint/taler-mint-dbinit.c | 74 | ||||
| -rw-r--r-- | src/mint/taler-mint-reservemod.c | 193 | 
2 files changed, 180 insertions, 87 deletions
| diff --git a/src/mint/taler-mint-dbinit.c b/src/mint/taler-mint-dbinit.c index 8106b54c..838f98e2 100644 --- a/src/mint/taler-mint-dbinit.c +++ b/src/mint/taler-mint-dbinit.c @@ -1,6 +1,6 @@  /*    This file is part of TALER -  Copyright (C) 2014 Christian Grothoff (and other contributing authors) +  Copyright (C) 2014, 2015 Christian Grothoff (and other contributing authors)    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 @@ -14,7 +14,7 @@    TALER; see the file COPYING.  If not, If not, see <http://www.gnu.org/licenses/>  */  /** - * @file taler-mint-dbinit.c + * @file mint/taler-mint-dbinit.c   * @brief Create tables for the mint database.   * @author Florian Dold   */ @@ -24,74 +24,96 @@  #include "taler_util.h"  #include "mint_db.h" -#define break_db_err(result) do { \ -    GNUNET_break(0); \ -    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Database failure: %s\n", PQresultErrorMessage (result)); \ -    PQclear (result); \ -  } while (0) - +/** + * Mint directory with the keys. + */  static char *mint_base_dir; -static struct GNUNET_CONFIGURATION_Handle *cfg; -static PGconn *db_conn; -static char *TALER_MINT_db_connection_cfg_str; +/** + * Our configuration. + */ +static struct GNUNET_CONFIGURATION_Handle *cfg; +/** + * Database connection handle. + */ +static PGconn *db_conn;  /** - * The main function of the serve tool + * The main function of the database initialization tool. + * Used to initialize the Taler Mint'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) +main (int argc, +      char *const *argv)  {    static const struct GNUNET_GETOPT_CommandLineOption options[] = { -    GNUNET_GETOPT_OPTION_HELP ("gnunet-mint-keyup OPTIONS"), +    GNUNET_GETOPT_OPTION_HELP ("gnunet-mint-dbinit OPTIONS"),      {'d', "mint-dir", "DIR",       "mint directory", 1,       &GNUNET_GETOPT_set_filename, &mint_base_dir},      GNUNET_GETOPT_OPTION_END    }; +  char *db_connection_cfg_str; -  if (GNUNET_GETOPT_run ("taler-mint-serve", options, argc, argv) < 0) +  if (GNUNET_GETOPT_run ("taler-mint-dbinit", +                         options, +                         argc, argv) < 0)      return 1; -  GNUNET_assert (GNUNET_OK == GNUNET_log_setup ("taler-mint-dbinit", "INFO", NULL)); - +  GNUNET_assert (GNUNET_OK == +                 GNUNET_log_setup ("taler-mint-dbinit", +                                   "INFO", +                                   NULL));    if (NULL == mint_base_dir)    { -    fprintf (stderr, "Mint base directory not given.\n"); +    fprintf (stderr, +             "Mint base directory not given.\n");      return 1;    }    cfg = TALER_config_load (mint_base_dir);    if (NULL == cfg)    { -    fprintf (stderr, "Can't load mint configuration.\n"); +    fprintf (stderr, +             "Failed to load mint configuration.\n");      return 1;    } -  if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (cfg, "mint", "db", &TALER_MINT_db_connection_cfg_str)) +  if (GNUNET_OK != +      GNUNET_CONFIGURATION_get_value_string (cfg, +                                             "mint", +                                             "db", +                                             &db_connection_cfg_str))    { -    fprintf (stderr, "Configuration 'mint.db' not found.\n"); -    return 42; +    fprintf (stderr, +             "Configuration 'mint.db' not found.\n"); +    return 1;    } -  db_conn = PQconnectdb (TALER_MINT_db_connection_cfg_str); +  db_conn = PQconnectdb (db_connection_cfg_str);    if (CONNECTION_OK != PQstatus (db_conn))    { -    fprintf (stderr, "Database connection failed: %s\n", PQerrorMessage (db_conn)); +    fprintf (stderr, +             "Database connection failed: %s\n", +             PQerrorMessage (db_conn)); +    free (db_connection_cfg_str);      return 1;    } +  free (db_connection_cfg_str);    if (GNUNET_OK != TALER_MINT_DB_create_tables (GNUNET_NO))    { -    fprintf (stderr, "Failed to initialize database.\n"); +    fprintf (stderr, +             "Failed to initialize database.\n");      return 1;    } -    return 0;  } + +/* end of taler-mint-dbinit.c */ diff --git a/src/mint/taler-mint-reservemod.c b/src/mint/taler-mint-reservemod.c index e7795e67..e805cacc 100644 --- a/src/mint/taler-mint-reservemod.c +++ b/src/mint/taler-mint-reservemod.c @@ -1,6 +1,6 @@  /*    This file is part of TALER -  Copyright (C) 2014 Christian Grothoff (and other contributing authors) +  Copyright (C) 2014, 2015 Christian Grothoff (and other contributing authors)    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 @@ -13,14 +13,12 @@    You should have received a copy of the GNU General Public License along with    TALER; see the file COPYING.  If not, If not, see <http://www.gnu.org/licenses/>  */ -  /**   * @file taler-mint-reservemod.c - * @brief Modify reserves. + * @brief Modify reserves.  Allows manipulation of reserve balances for testing.   * @author Florian Dold   * @author Benedikt Mueller   */ -  #include "platform.h"  #include <gnunet/gnunet_util_lib.h>  #include <libpq-fe.h> @@ -29,47 +27,74 @@  #include "mint_db.h"  #include "db_pq.h" -char *mintdir; +/** + * Director of the mint, containing the keys. + */ +static char *mintdir; + +/** + * Public key of the reserve to manipulate. + */  static struct GNUNET_CRYPTO_EddsaPublicKey *reserve_pub; -struct GNUNET_CONFIGURATION_Handle *cfg; +/** + * Handle to the mint's configuration + */ +static struct GNUNET_CONFIGURATION_Handle *cfg; +/** + * Database connection handle. + */  static PGconn *db_conn; -  /** - * Create a new or add to existing reserve. - * Fails if currencies do not match. + * Create a new or add to existing reserve.  Fails if currencies do + * not match.   *   * @param denom denomination to add - * - * @return ... + * @return #GNUNET_OK on success, + *         #GNUNET_SYSERR on error   */  static int  reservemod_add (struct TALER_Amount denom)  {    PGresult *result; -  { -    const void *param_values[] = { reserve_pub }; -    int param_lengths[] = {sizeof(struct GNUNET_CRYPTO_EddsaPublicKey)}; -    int param_formats[] = {1}; -    result = PQexecParams (db_conn, -                           "select balance_value, balance_fraction, balance_currency from reserves where reserve_pub=$1 limit 1;", -                           1, NULL, (const char * const *) param_values, param_lengths, param_formats, 1); -  } +  const void *param_values[] = { +    reserve_pub +  }; +  int param_lengths[] = { +    sizeof(struct GNUNET_CRYPTO_EddsaPublicKey) +  }; +  int param_formats[] = { +    1 +  }; +  struct TALER_Amount old_denom; +  struct TALER_Amount new_denom; +  struct TALER_AmountNBO new_denom_nbo; +  result = PQexecParams (db_conn, +                         "SELECT balance_value, balance_fraction, balance_currency" +                         " FROM reserves" +                         " WHERE reserve_pub=$1" +                         " LIMIT 1;", +                         1, +                         NULL, +                         (const char * const *) param_values, +                         param_lengths, +                         param_formats, +                         1);    if (PGRES_TUPLES_OK != PQresultStatus (result))    { -    fprintf (stderr, "Select failed: %s\n", PQresultErrorMessage (result)); +    fprintf (stderr, +             "Select failed: %s\n", +             PQresultErrorMessage (result));      return GNUNET_SYSERR;    }    if (0 == PQntuples (result))    {      struct GNUNET_TIME_AbsoluteNBO exnbo; -    exnbo = GNUNET_TIME_absolute_hton (GNUNET_TIME_absolute_add ( GNUNET_TIME_absolute_get (), GNUNET_TIME_UNIT_YEARS)); -      uint32_t value = htonl (denom.value);      uint32_t fraction = htonl (denom.fraction);      const void *param_values[] = { @@ -77,33 +102,53 @@ reservemod_add (struct TALER_Amount denom)        &value,        &fraction,        denom.currency, -      &exnbo}; -    int param_lengths[] = {32, 4, 4, strlen(denom.currency), 8}; -    int param_formats[] = {1, 1, 1, 1, 1}; +      &exnbo +    }; +    int param_lengths[] = { +      sizeof (struct GNUNET_CRYPTO_EddsaPublicKey), +      sizeof (uint32_t), +      sizeof (uint32_t), +      strlen (denom.currency), +      sizeof (struct GNUNET_TIME_AbsoluteNBO) +    }; +    int param_formats[] = { +      1, 1, 1, 1, 1 +    }; + +    exnbo = GNUNET_TIME_absolute_hton (GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_YEARS));      result = PQexecParams (db_conn, -                           "insert into reserves (reserve_pub, balance_value, balance_fraction, balance_currency, " -                           " expiration_date )" -                           "values ($1,$2,$3,$4,$5);", -                           5, NULL, (const char **) param_values, param_lengths, param_formats, 1); +                           "INSERT INTO reserves (reserve_pub, balance_value, balance_fraction, balance_currency, expiration_date)" +                           " VALUES ($1,$2,$3,$4,$5);", +                           5, +                           NULL, +                           (const char **) param_values, +                           param_lengths, +                           param_formats, +                           1);      if (PGRES_COMMAND_OK != PQresultStatus (result))      { -      fprintf (stderr, "Insert failed: %s\n", PQresultErrorMessage (result)); +      fprintf (stderr, +               "Insert failed: %s\n", +               PQresultErrorMessage (result));        return GNUNET_SYSERR;      }    }    else    { -    struct TALER_Amount old_denom; -    struct TALER_Amount new_denom; -    struct TALER_AmountNBO new_denom_nbo; -    int param_lengths[] = {4, 4, 32}; -    int param_formats[] = {1, 1, 1};      const void *param_values[] = {        &new_denom_nbo.value,        &new_denom_nbo.fraction,        reserve_pub      }; +    int param_lengths[] = { +      sizeof (new_denom_nbo.value), +      sizeof (new_denom_nbo.fraction), +      sizeof (struct GNUNET_CRYPTO_EddsaPublicKey) +    }; +    int param_formats[] = { +      1, 1, 1 +    };      GNUNET_assert (GNUNET_OK ==                     TALER_DB_extract_amount (result, 0, @@ -111,28 +156,36 @@ reservemod_add (struct TALER_Amount denom)                                              "balance_fraction",                                              "balance_currency",                                              &old_denom)); -    new_denom = TALER_amount_add (old_denom, denom); +    new_denom = TALER_amount_add (old_denom, +                                  denom);      new_denom_nbo = TALER_amount_hton (new_denom);      result = PQexecParams (db_conn, -                           "UPDATE reserves " -                           "SET balance_value = $1, balance_fraction = $2, " -                           " status_sig = NULL, status_sign_pub = NULL " -                           "WHERE reserve_pub = $3 ", -                           3, NULL, (const char **) param_values, param_lengths, param_formats, 1); +                           "UPDATE reserves" +                           " SET balance_value = $1, balance_fraction = $2, status_sig = NULL, status_sign_pub = NULL" +                           " WHERE reserve_pub = $3;", +                           3, +                           NULL, +                           (const char **) param_values, +                           param_lengths, +                           param_formats, +                           1);      if (PGRES_COMMAND_OK != PQresultStatus (result))      { -      fprintf (stderr, "Update failed: %s\n", PQresultErrorMessage (result)); +      fprintf (stderr, +               "Update failed: %s\n", +               PQresultErrorMessage (result));        return GNUNET_SYSERR;      } - -    if (0 != strcmp ("1", PQcmdTuples (result))) +    /* FIXME: strcmp!? There must be an API that returns an int! */ +    if (0 != strcmp ("1", +                     PQcmdTuples (result)))      { -      fprintf (stderr, "Update failed (updated '%s' tupes instead of '1')\n", +      fprintf (stderr, +               "Update failed (updated `%s' tupes instead of '1')\n",                 PQcmdTuples (result));        return GNUNET_SYSERR;      } -    }    return GNUNET_OK;  } @@ -151,7 +204,7 @@ main (int argc, char *const *argv)    static char *reserve_pub_str;    static char *add_str;    static const struct GNUNET_GETOPT_CommandLineOption options[] = { -    GNUNET_GETOPT_OPTION_HELP ("gnunet-mint-keyup OPTIONS"), +    GNUNET_GETOPT_OPTION_HELP ("gnunet-mint-reservemod OPTIONS"),      {'d', "mint-dir", "DIR",       "mint directory with keys to update", 1,       &GNUNET_GETOPT_set_filename, &mintdir}, @@ -165,13 +218,19 @@ main (int argc, char *const *argv)    };    char *TALER_MINT_db_connection_cfg_str; -  GNUNET_assert (GNUNET_OK == GNUNET_log_setup ("taler-mint-keycheck", "WARNING", NULL)); +  GNUNET_assert (GNUNET_OK == +                 GNUNET_log_setup ("taler-mint-reservemod", +                                   "WARNING", +                                   NULL)); -  if (GNUNET_GETOPT_run ("taler-mint-keyup", options, argc, argv) < 0) +  if (GNUNET_GETOPT_run ("taler-mint-keyup", +                         options, +                         argc, argv) < 0)      return 1;    if (NULL == mintdir)    { -    fprintf (stderr, "mint directory not given\n"); +    fprintf (stderr, +             "Mint directory not given\n");      return 1;    } @@ -183,14 +242,15 @@ main (int argc, char *const *argv)                                        reserve_pub,                                        sizeof (struct GNUNET_CRYPTO_EddsaPublicKey))))    { -    fprintf (stderr, "reserve key invalid\n"); +    fprintf (stderr, +             "Parsing reserve key invalid\n");      return 1;    } -    cfg = TALER_config_load (mintdir);    if (NULL == cfg)    { -    fprintf (stderr, "can't load mint configuration\n"); +    fprintf (stderr, +             "Failed to load mint configuration\n");      return 1;    }    if (GNUNET_OK != @@ -199,29 +259,40 @@ main (int argc, char *const *argv)                                               "db",                                               &TALER_MINT_db_connection_cfg_str))    { -    fprintf (stderr, "db configuration string not found\n"); -    return 42; +    fprintf (stderr, +             "Database configuration string not found\n"); +    return 1;    }    db_conn = PQconnectdb (TALER_MINT_db_connection_cfg_str);    if (CONNECTION_OK != PQstatus (db_conn))    { -    fprintf (stderr, "db connection failed: %s\n", PQerrorMessage (db_conn)); +    fprintf (stderr, +             "Database connection failed: %s\n", +             PQerrorMessage (db_conn));      return 1;    } -    if (NULL != add_str)    {      struct TALER_Amount add_value; -    if (GNUNET_OK != TALER_string_to_amount (add_str, &add_value)) + +    if (GNUNET_OK != +        TALER_string_to_amount (add_str, +                                &add_value))      { -      fprintf (stderr, "could not read value\n"); +      fprintf (stderr, +               "Failed to parse currency amount `%s'\n", +               add_str);        return 1;      } -    if (GNUNET_OK != reservemod_add (add_value)) +    if (GNUNET_OK != +        reservemod_add (add_value))      { -      fprintf (stderr, "adding value failed\n"); +      fprintf (stderr, +               "Failed to update reserve.\n");        return 1;      }    }    return 0;  } + +/* end taler-mint-reservemod.c */ | 
