diff options
author | Andrew Bartlett <abartlet@samba.org> | 2009-11-04 17:42:53 +1100 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2009-11-12 16:34:01 +1100 |
commit | fd5174e88ca1727a91d6dc9bf9bd898ff9087fe8 (patch) | |
tree | 7f1511fcea311f2ef637ca23dee8699ba00adfb6 | |
parent | a8769e667514f83a45ee3e825d21a351987d0210 (diff) | |
download | samba-fd5174e88ca1727a91d6dc9bf9bd898ff9087fe8.tar.gz samba-fd5174e88ca1727a91d6dc9bf9bd898ff9087fe8.tar.bz2 samba-fd5174e88ca1727a91d6dc9bf9bd898ff9087fe8.zip |
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
-rw-r--r-- | lib/util/data_blob.c | 19 | ||||
-rw-r--r-- | lib/util/data_blob.h | 7 | ||||
-rw-r--r-- | lib/util/tests/data_blob.c | 3 | ||||
-rw-r--r-- | librpc/ndr/ndr_drsuapi.c | 2 | ||||
-rw-r--r-- | librpc/ndr/uuid.c | 2 | ||||
-rw-r--r-- | librpc/rpc/binding.c | 2 | ||||
-rw-r--r-- | source4/dsdb/samdb/ldb_modules/password_hash.c | 10 | ||||
-rw-r--r-- | source4/lib/ldb-samba/ldif_handlers.c | 2 | ||||
-rw-r--r-- | source4/lib/registry/util.c | 2 | ||||
-rw-r--r-- | source4/torture/ldap/schema.c | 2 | ||||
-rw-r--r-- | source4/torture/rpc/samsync.c | 4 |
11 files changed, 39 insertions, 16 deletions
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; } diff --git a/librpc/ndr/ndr_drsuapi.c b/librpc/ndr/ndr_drsuapi.c index bfc3c75b4e..15f2f842bd 100644 --- a/librpc/ndr/ndr_drsuapi.c +++ b/librpc/ndr/ndr_drsuapi.c @@ -91,7 +91,7 @@ _PUBLIC_ void ndr_print_drsuapi_DsReplicaOID(struct ndr_print *ndr, const char * if (r->binary_oid) { char *partial_oid = NULL; DATA_BLOB oid_blob = data_blob_const(r->binary_oid, r->length); - char *hex_str = data_blob_hex_string(ndr, &oid_blob); + char *hex_str = data_blob_hex_string_upper(ndr, &oid_blob); ber_read_partial_OID_String(ndr, oid_blob, (const char **)&partial_oid); ndr->depth++; ndr->print(ndr, "%-25s: 0x%s (%s)", "binary_oid", hex_str, partial_oid); diff --git a/librpc/ndr/uuid.c b/librpc/ndr/uuid.c index 004a8d35cc..df17d7824e 100644 --- a/librpc/ndr/uuid.c +++ b/librpc/ndr/uuid.c @@ -291,7 +291,7 @@ _PUBLIC_ char *GUID_hexstring(TALLOC_CTX *mem_ctx, const struct GUID *guid) return NULL; } - ret = data_blob_hex_string(mem_ctx, &guid_blob); + ret = data_blob_hex_string_upper(mem_ctx, &guid_blob); talloc_free(tmp_mem); return ret; } diff --git a/librpc/rpc/binding.c b/librpc/rpc/binding.c index 734471451b..20c3a389f1 100644 --- a/librpc/rpc/binding.c +++ b/librpc/rpc/binding.c @@ -113,7 +113,7 @@ const char *epm_floor_string(TALLOC_CTX *mem_ctx, struct epm_floor *epm_floor) return talloc_asprintf(mem_ctx, " uuid %s/0x%02x", uuidstr, syntax.if_version); } else { /* IPX */ return talloc_asprintf(mem_ctx, "IPX:%s", - data_blob_hex_string(mem_ctx, &epm_floor->rhs.uuid.unknown)); + data_blob_hex_string_upper(mem_ctx, &epm_floor->rhs.uuid.unknown)); } case EPM_PROTOCOL_NCACN: diff --git a/source4/dsdb/samdb/ldb_modules/password_hash.c b/source4/dsdb/samdb/ldb_modules/password_hash.c index 7779a1752b..8791db2bc4 100644 --- a/source4/dsdb/samdb/ldb_modules/password_hash.c +++ b/source4/dsdb/samdb/ldb_modules/password_hash.c @@ -1137,7 +1137,7 @@ static int setup_supplemental_field(struct setup_password_fields_io *io) nt_errstr(status)); return LDB_ERR_OPERATIONS_ERROR; } - pknb_hexstr = data_blob_hex_string(io->ac, &pknb_blob); + pknb_hexstr = data_blob_hex_string_upper(io->ac, &pknb_blob); if (!pknb_hexstr) { ldb_oom(ldb); return LDB_ERR_OPERATIONS_ERROR; @@ -1169,7 +1169,7 @@ static int setup_supplemental_field(struct setup_password_fields_io *io) nt_errstr(status)); return LDB_ERR_OPERATIONS_ERROR; } - pkb_hexstr = data_blob_hex_string(io->ac, &pkb_blob); + pkb_hexstr = data_blob_hex_string_upper(io->ac, &pkb_blob); if (!pkb_hexstr) { ldb_oom(ldb); return LDB_ERR_OPERATIONS_ERROR; @@ -1200,7 +1200,7 @@ static int setup_supplemental_field(struct setup_password_fields_io *io) nt_errstr(status)); return LDB_ERR_OPERATIONS_ERROR; } - pdb_hexstr = data_blob_hex_string(io->ac, &pdb_blob); + pdb_hexstr = data_blob_hex_string_upper(io->ac, &pdb_blob); if (!pdb_hexstr) { ldb_oom(ldb); return LDB_ERR_OPERATIONS_ERROR; @@ -1229,7 +1229,7 @@ static int setup_supplemental_field(struct setup_password_fields_io *io) nt_errstr(status)); return LDB_ERR_OPERATIONS_ERROR; } - pcb_hexstr = data_blob_hex_string(io->ac, &pcb_blob); + pcb_hexstr = data_blob_hex_string_upper(io->ac, &pcb_blob); if (!pcb_hexstr) { ldb_oom(ldb); return LDB_ERR_OPERATIONS_ERROR; @@ -1255,7 +1255,7 @@ static int setup_supplemental_field(struct setup_password_fields_io *io) nt_errstr(status)); return LDB_ERR_OPERATIONS_ERROR; } - pb_hexstr = data_blob_hex_string(io->ac, &pb_blob); + pb_hexstr = data_blob_hex_string_upper(io->ac, &pb_blob); if (!pb_hexstr) { ldb_oom(ldb); return LDB_ERR_OPERATIONS_ERROR; diff --git a/source4/lib/ldb-samba/ldif_handlers.c b/source4/lib/ldb-samba/ldif_handlers.c index 9467bef873..d8edeb0beb 100644 --- a/source4/lib/ldb-samba/ldif_handlers.c +++ b/source4/lib/ldb-samba/ldif_handlers.c @@ -784,7 +784,7 @@ static int ldif_write_replUpToDateVector(struct ldb_context *ldb, void *mem_ctx, static int extended_dn_write_hex(struct ldb_context *ldb, void *mem_ctx, const struct ldb_val *in, struct ldb_val *out) { - *out = data_blob_string_const(data_blob_hex_string(mem_ctx, in)); + *out = data_blob_string_const(data_blob_hex_string_lower(mem_ctx, in)); if (!out->data) { return -1; } diff --git a/source4/lib/registry/util.c b/source4/lib/registry/util.c index a1897eff2e..038b23fc87 100644 --- a/source4/lib/registry/util.c +++ b/source4/lib/registry/util.c @@ -68,7 +68,7 @@ _PUBLIC_ char *reg_val_data_string(TALLOC_CTX *mem_ctx, (void **)&ret, NULL, false); return ret; case REG_BINARY: - ret = data_blob_hex_string(mem_ctx, &data); + ret = data_blob_hex_string_upper(mem_ctx, &data); return ret; case REG_DWORD: if (*(int *)data.data == 0) diff --git a/source4/torture/ldap/schema.c b/source4/torture/ldap/schema.c index 7fe171691a..b0a4892d7a 100644 --- a/source4/torture/ldap/schema.c +++ b/source4/torture/ldap/schema.c @@ -356,7 +356,7 @@ static bool test_dump_sorted_syntax(struct ldb_context *ldb, struct test_rootDSE if (strcmp(syntaxes[i], a->attributeSyntax_oid) != 0) continue; - om_hex = data_blob_hex_string(ldb, &a->oMObjectClass); + om_hex = data_blob_hex_string_upper(ldb, &a->oMObjectClass); if (!om_hex) { return false; } diff --git a/source4/torture/rpc/samsync.c b/source4/torture/rpc/samsync.c index 52df4eb6b9..19060c69a9 100644 --- a/source4/torture/rpc/samsync.c +++ b/source4/torture/rpc/samsync.c @@ -593,11 +593,11 @@ static bool samsync_handle_user(struct torture_context *tctx, TALLOC_CTX *mem_ct if (nt_hash_p) { DATA_BLOB nt_hash_blob = data_blob_const(nt_hash_p, 16); - DEBUG(100,("ACCOUNT [%s\\%-25s] NTHASH %s\n", samsync_state->domain_name[0], username, data_blob_hex_string(mem_ctx, &nt_hash_blob))); + DEBUG(100,("ACCOUNT [%s\\%-25s] NTHASH %s\n", samsync_state->domain_name[0], username, data_blob_hex_string_upper(mem_ctx, &nt_hash_blob))); } if (lm_hash_p) { DATA_BLOB lm_hash_blob = data_blob_const(lm_hash_p, 16); - DEBUG(100,("ACCOUNT [%s\\%-25s] LMHASH %s\n", samsync_state->domain_name[0], username, data_blob_hex_string(mem_ctx, &lm_hash_blob))); + DEBUG(100,("ACCOUNT [%s\\%-25s] LMHASH %s\n", samsync_state->domain_name[0], username, data_blob_hex_string_upper(mem_ctx, &lm_hash_blob))); } nt_status = test_SamLogon(samsync_state->p_netlogon_wksta, mem_ctx, samsync_state->creds_netlogon_wksta, |