From c0451f0982bdb565f431417cea3ab0238342d125 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 26 May 2016 16:38:59 +0200 Subject: fix #4533 for exchange (breaks interaction with bank for /admin/add/incoming) --- src/exchange-tools/taler-exchange-reservemod.c | 60 ++++++++++++++++++++------ 1 file changed, 48 insertions(+), 12 deletions(-) (limited to 'src/exchange-tools/taler-exchange-reservemod.c') diff --git a/src/exchange-tools/taler-exchange-reservemod.c b/src/exchange-tools/taler-exchange-reservemod.c index 2aeb951ce..b87b15923 100644 --- a/src/exchange-tools/taler-exchange-reservemod.c +++ b/src/exchange-tools/taler-exchange-reservemod.c @@ -45,10 +45,15 @@ static char *reserve_pub_str; */ static char *add_str; +/** + * Details about the sender account in JSON format. + */ +static char *sender_details; + /** * Details about the wire transfer in JSON format. */ -static char *details; +static char *transfer_details; /** * Return value from main(). @@ -61,14 +66,16 @@ static int global_ret; * * @param reserve_pub public key of the reserve to use * @param add_value value to add - * @param jdetails JSON details + * @param jdetails JSON details about sender + * @param tdetails JSON details about transfer * @return #GNUNET_OK on success, #GNUNET_SYSERR on hard error, * #GNUNET_NO if record exists */ static int run_transaction (const struct TALER_ReservePublicKeyP *reserve_pub, const struct TALER_Amount *add_value, - json_t *jdetails) + json_t *jdetails, + json_t *tdetails) { int ret; struct TALER_EXCHANGEDB_Session *session; @@ -86,7 +93,8 @@ run_transaction (const struct TALER_ReservePublicKeyP *reserve_pub, reserve_pub, add_value, GNUNET_TIME_absolute_get (), - jdetails); + jdetails, + tdetails); if (GNUNET_SYSERR == ret) { fprintf (stderr, @@ -117,6 +125,7 @@ run (void *cls, { struct TALER_Amount add_value; json_t *jdetails; + json_t *tdetails; json_error_t error; struct TALER_ReservePublicKeyP reserve_pub; @@ -155,24 +164,46 @@ run (void *cls, global_ret = 1; return; } - if (NULL == details) + if (NULL == sender_details) { fprintf (stderr, - "No wiring details given (justification required)\n"); + "No sender details given (sender required)\n"); global_ret = 1; return; } - jdetails = json_loads (details, + jdetails = json_loads (sender_details, JSON_REJECT_DUPLICATES, &error); if (NULL == jdetails) { fprintf (stderr, "Failed to parse JSON transaction details `%s': %s (%s)\n", - details, + sender_details, + error.text, + error.source); + global_ret = 1; + return; + } + if (NULL == transfer_details) + { + fprintf (stderr, + "No transfer details given (justification required)\n"); + global_ret = 1; + json_decref (jdetails); + return; + } + tdetails = json_loads (transfer_details, + JSON_REJECT_DUPLICATES, + &error); + if (NULL == tdetails) + { + fprintf (stderr, + "Failed to parse JSON transaction details `%s': %s (%s)\n", + transfer_details, error.text, error.source); global_ret = 1; + json_decref (jdetails); return; } @@ -187,10 +218,12 @@ run (void *cls, if (GNUNET_SYSERR == run_transaction (&reserve_pub, &add_value, - jdetails)) + jdetails, + tdetails)) global_ret = 1; TALER_EXCHANGEDB_plugin_unload (plugin); json_decref (jdetails); + json_decref (tdetails); } @@ -208,9 +241,12 @@ main (int argc, char *const *argv) {'a', "add", "DENOM", "value to add", 1, &GNUNET_GETOPT_set_string, &add_str}, - {'d', "details", "JSON", - "details about the bank transaction which justify why we add this amount", 1, - &GNUNET_GETOPT_set_string, &details}, + {'s', "sender", "JSON", + "details about the sender's bank account", 1, + &GNUNET_GETOPT_set_string, &sender_details}, + {'t', "transfer", "JSON", + "details that uniquely identify the bank transfer", 1, + &GNUNET_GETOPT_set_string, &transfer_details}, GNUNET_GETOPT_OPTION_HELP ("Deposit funds into a Taler reserve"), {'R', "reserve", "KEY", "reserve (public key) to modify", 1, -- cgit v1.2.3