summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2015-03-13 10:01:57 +0100
committerChristian Grothoff <christian@grothoff.org>2015-03-13 10:01:57 +0100
commit6404213457fbb9ddd089d556d95d841e21754ff8 (patch)
tree5bdeb05297016b09b5e769a60f5f5211d4710e58
parent968e4aa68f4185d24466bb3ba8bfaba8d9c27ef1 (diff)
downloadexchange-6404213457fbb9ddd089d556d95d841e21754ff8.tar.gz
exchange-6404213457fbb9ddd089d556d95d841e21754ff8.tar.bz2
exchange-6404213457fbb9ddd089d556d95d841e21754ff8.zip
use wire validation routine
-rw-r--r--src/include/taler_json_lib.h4
-rw-r--r--src/mint/taler-mint-httpd.c5
-rw-r--r--src/mint/taler-mint-httpd.h5
-rw-r--r--src/mint/taler-mint-httpd_deposit.c9
-rw-r--r--src/util/json.c15
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
@@ -56,6 +56,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.
*/
static struct MHD_Daemon *mydaemon;
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
@@ -49,6 +49,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 */