From fd5174e88ca1727a91d6dc9bf9bd898ff9087fe8 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 4 Nov 2009 17:42:53 +1100 Subject: lib/util Split data_blob_hex_string() into upper and lower Rather than have a repeat of the bugs we found at the plugfest where hexidecimal strings must be in upper or lower case in particular places, ensure that each caller chooses which case they want. This reverts most of the callers back to upper case, as things were before tridge's patch. The critical call in the extended DN code is of course handled in lower case. Andrew Bartlett --- lib/util/data_blob.c | 19 ++++++++++++++++++- lib/util/data_blob.h | 7 ++++++- lib/util/tests/data_blob.c | 3 ++- 3 files changed, 26 insertions(+), 3 deletions(-) (limited to 'lib') diff --git a/lib/util/data_blob.c b/lib/util/data_blob.c index 825d8cf88c..6e7557f8ef 100644 --- a/lib/util/data_blob.c +++ b/lib/util/data_blob.c @@ -153,7 +153,7 @@ _PUBLIC_ int data_blob_cmp(const DATA_BLOB *d1, const DATA_BLOB *d2) /** print the data_blob as hex string **/ -_PUBLIC_ char *data_blob_hex_string(TALLOC_CTX *mem_ctx, const DATA_BLOB *blob) +_PUBLIC_ char *data_blob_hex_string_lower(TALLOC_CTX *mem_ctx, const DATA_BLOB *blob) { int i; char *hex_string; @@ -173,6 +173,23 @@ _PUBLIC_ char *data_blob_hex_string(TALLOC_CTX *mem_ctx, const DATA_BLOB *blob) return hex_string; } +_PUBLIC_ char *data_blob_hex_string_upper(TALLOC_CTX *mem_ctx, const DATA_BLOB *blob) +{ + int i; + char *hex_string; + + hex_string = talloc_array(mem_ctx, char, (blob->length*2)+1); + if (!hex_string) { + return NULL; + } + + for (i = 0; i < blob->length; i++) + slprintf(&hex_string[i*2], 3, "%02X", blob->data[i]); + + hex_string[(blob->length*2)] = '\0'; + return hex_string; +} + /** useful for constructing data blobs in test suites, while avoiding const warnings diff --git a/lib/util/data_blob.h b/lib/util/data_blob.h index ffde51cf33..c294533960 100644 --- a/lib/util/data_blob.h +++ b/lib/util/data_blob.h @@ -96,7 +96,12 @@ _PUBLIC_ int data_blob_cmp(const DATA_BLOB *d1, const DATA_BLOB *d2); /** print the data_blob as hex string **/ -_PUBLIC_ char *data_blob_hex_string(TALLOC_CTX *mem_ctx, const DATA_BLOB *blob); +_PUBLIC_ char *data_blob_hex_string_upper(TALLOC_CTX *mem_ctx, const DATA_BLOB *blob); + +/** +print the data_blob as hex string +**/ +_PUBLIC_ char *data_blob_hex_string_lower(TALLOC_CTX *mem_ctx, const DATA_BLOB *blob); /** useful for constructing data blobs in test suites, while diff --git a/lib/util/tests/data_blob.c b/lib/util/tests/data_blob.c index f0b02b8d17..53330a4afd 100644 --- a/lib/util/tests/data_blob.c +++ b/lib/util/tests/data_blob.c @@ -78,7 +78,8 @@ static bool test_cmp(struct torture_context *tctx) static bool test_hex_string(struct torture_context *tctx) { DATA_BLOB a = data_blob_string_const("\xC\xA\xF\xE"); - torture_assert_str_equal(tctx, data_blob_hex_string(tctx, &a), "0c0a0f0e", "hex string"); + torture_assert_str_equal(tctx, data_blob_hex_string_lower(tctx, &a), "0c0a0f0e", "hex string"); + torture_assert_str_equal(tctx, data_blob_hex_string_upper(tctx, &a), "0C0A0F0E", "hex string"); return true; } -- cgit