From 6404213457fbb9ddd089d556d95d841e21754ff8 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Fri, 13 Mar 2015 10:01:57 +0100 Subject: [PATCH] use wire validation routine --- src/include/taler_json_lib.h | 4 ++-- src/mint/taler-mint-httpd.c | 5 +++++ src/mint/taler-mint-httpd.h | 5 +++++ src/mint/taler-mint-httpd_deposit.c | 9 ++++++++- src/util/json.c | 15 +++++++++------ 5 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/include/taler_json_lib.h b/src/include/taler_json_lib.h index 2b9d51875..ffa440d56 100644 --- a/src/include/taler_json_lib.h +++ b/src/include/taler_json_lib.h @@ -139,11 +139,11 @@ TALER_JSON_to_data (json_t *json, * * @param type the type of the wire format * @param wire the JSON wire format object - * @return 1 if correctly formatted; 0 if not + * @return #GNUNET_YES if correctly formatted; #GNUNET_NO if not */ int TALER_JSON_validate_wireformat (const char *type, - json_t *wire); + const json_t *wire); #endif /* TALER_JSON_LIB_H_ */ diff --git a/src/mint/taler-mint-httpd.c b/src/mint/taler-mint-httpd.c index 3b1512ff1..416851066 100644 --- a/src/mint/taler-mint-httpd.c +++ b/src/mint/taler-mint-httpd.c @@ -55,6 +55,11 @@ struct GNUNET_CONFIGURATION_Handle *cfg; */ struct GNUNET_CRYPTO_EddsaPublicKey master_pub; +/** + * In which format does this MINT expect wiring instructions? + */ +char *expected_wire_format = "sepa"; + /** * The HTTP Daemon. */ diff --git a/src/mint/taler-mint-httpd.h b/src/mint/taler-mint-httpd.h index 95d3f1a66..a86b06e43 100644 --- a/src/mint/taler-mint-httpd.h +++ b/src/mint/taler-mint-httpd.h @@ -48,6 +48,11 @@ extern struct GNUNET_CONFIGURATION_Handle *cfg; */ extern char *mintdir; +/** + * In which format does this MINT expect wiring instructions? + */ +extern char *expected_wire_format; + /** * Master public key (according to the * configuration in the mint directory). diff --git a/src/mint/taler-mint-httpd_deposit.c b/src/mint/taler-mint-httpd_deposit.c index 84bcd5ba2..915a7389c 100644 --- a/src/mint/taler-mint-httpd_deposit.c +++ b/src/mint/taler-mint-httpd_deposit.c @@ -145,7 +145,14 @@ parse_and_handle_deposit_request (struct MHD_Connection *connection, return MHD_NO; /* hard failure */ if (GNUNET_NO == res) return MHD_YES; /* failure */ - /* FIXME: check that "wire" is formatted correctly */ + if (GNUNET_YES != + TALER_JSON_validate_wireformat (expected_wire_format, + wire)) + { + TALER_MINT_release_parsed_data (spec); + return TALER_MINT_reply_arg_invalid (connection, + "wire"); + } if (NULL == (wire_enc = json_dumps (wire, JSON_COMPACT | JSON_SORT_KEYS))) { LOG_WARNING ("Failed to parse JSON wire format specification for /deposit request\n"); diff --git a/src/util/json.c b/src/util/json.c index 88d9cd0c9..a9d6dc5cc 100644 --- a/src/util/json.c +++ b/src/util/json.c @@ -505,13 +505,15 @@ validate_iban (const char *iban) * * @param type the type of the wire format * @param wire the JSON wire format object - * @return 1 if correctly formatted; 0 if not + * @return #GNUNET_YES if correctly formatted; #GNUNET_NO if not */ int -TALER_JSON_validate_wireformat (const char *type, json_t *wire) +TALER_JSON_validate_wireformat (const char *type, + const json_t *wire) { json_error_t error; - if (0 == strcmp ("SEPA", type)) + + if (0 == strcasecmp ("SEPA", type)) { const char *type; const char *iban; @@ -521,7 +523,8 @@ TALER_JSON_validate_wireformat (const char *type, json_t *wire) uint64_t r; const char *address; UNPACK_EXITIF (0 != json_unpack_ex - (wire, &error, JSON_STRICT, + ((json_t *) wire, + &error, JSON_STRICT, "{" "s:s " /* type: "SEPA" */ "s:s " /* IBAN: iban */ @@ -540,11 +543,11 @@ TALER_JSON_validate_wireformat (const char *type, json_t *wire) "address", &address)); EXITIF (0 != strcmp (type, "SEPA")); EXITIF (1 != validate_iban (iban)); - return 1; + return GNUNET_YES; } EXITIF_exit: - return 0; + return GNUNET_NO; } /* End of util/json.c */