1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

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
This commit is contained in:
Andrew Bartlett 2009-11-04 17:42:53 +11:00
parent a8769e6675
commit fd5174e88c
11 changed files with 39 additions and 16 deletions

View File

@ -153,7 +153,7 @@ _PUBLIC_ int data_blob_cmp(const DATA_BLOB *d1, const DATA_BLOB *d2)
/** /**
print the data_blob as hex string 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; int i;
char *hex_string; char *hex_string;
@ -173,6 +173,23 @@ _PUBLIC_ char *data_blob_hex_string(TALLOC_CTX *mem_ctx, const DATA_BLOB *blob)
return hex_string; 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 useful for constructing data blobs in test suites, while
avoiding const warnings avoiding const warnings

View File

@ -96,7 +96,12 @@ _PUBLIC_ int data_blob_cmp(const DATA_BLOB *d1, const DATA_BLOB *d2);
/** /**
print the data_blob as hex string 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 useful for constructing data blobs in test suites, while

View File

@ -78,7 +78,8 @@ static bool test_cmp(struct torture_context *tctx)
static bool test_hex_string(struct torture_context *tctx) static bool test_hex_string(struct torture_context *tctx)
{ {
DATA_BLOB a = data_blob_string_const("\xC\xA\xF\xE"); 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; return true;
} }

View File

@ -91,7 +91,7 @@ _PUBLIC_ void ndr_print_drsuapi_DsReplicaOID(struct ndr_print *ndr, const char *
if (r->binary_oid) { if (r->binary_oid) {
char *partial_oid = NULL; char *partial_oid = NULL;
DATA_BLOB oid_blob = data_blob_const(r->binary_oid, r->length); 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); ber_read_partial_OID_String(ndr, oid_blob, (const char **)&partial_oid);
ndr->depth++; ndr->depth++;
ndr->print(ndr, "%-25s: 0x%s (%s)", "binary_oid", hex_str, partial_oid); ndr->print(ndr, "%-25s: 0x%s (%s)", "binary_oid", hex_str, partial_oid);

View File

@ -291,7 +291,7 @@ _PUBLIC_ char *GUID_hexstring(TALLOC_CTX *mem_ctx, const struct GUID *guid)
return NULL; 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); talloc_free(tmp_mem);
return ret; return ret;
} }

View File

@ -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); return talloc_asprintf(mem_ctx, " uuid %s/0x%02x", uuidstr, syntax.if_version);
} else { /* IPX */ } else { /* IPX */
return talloc_asprintf(mem_ctx, "IPX:%s", 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: case EPM_PROTOCOL_NCACN:

View File

@ -1137,7 +1137,7 @@ static int setup_supplemental_field(struct setup_password_fields_io *io)
nt_errstr(status)); nt_errstr(status));
return LDB_ERR_OPERATIONS_ERROR; 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) { if (!pknb_hexstr) {
ldb_oom(ldb); ldb_oom(ldb);
return LDB_ERR_OPERATIONS_ERROR; return LDB_ERR_OPERATIONS_ERROR;
@ -1169,7 +1169,7 @@ static int setup_supplemental_field(struct setup_password_fields_io *io)
nt_errstr(status)); nt_errstr(status));
return LDB_ERR_OPERATIONS_ERROR; 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) { if (!pkb_hexstr) {
ldb_oom(ldb); ldb_oom(ldb);
return LDB_ERR_OPERATIONS_ERROR; return LDB_ERR_OPERATIONS_ERROR;
@ -1200,7 +1200,7 @@ static int setup_supplemental_field(struct setup_password_fields_io *io)
nt_errstr(status)); nt_errstr(status));
return LDB_ERR_OPERATIONS_ERROR; 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) { if (!pdb_hexstr) {
ldb_oom(ldb); ldb_oom(ldb);
return LDB_ERR_OPERATIONS_ERROR; return LDB_ERR_OPERATIONS_ERROR;
@ -1229,7 +1229,7 @@ static int setup_supplemental_field(struct setup_password_fields_io *io)
nt_errstr(status)); nt_errstr(status));
return LDB_ERR_OPERATIONS_ERROR; 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) { if (!pcb_hexstr) {
ldb_oom(ldb); ldb_oom(ldb);
return LDB_ERR_OPERATIONS_ERROR; return LDB_ERR_OPERATIONS_ERROR;
@ -1255,7 +1255,7 @@ static int setup_supplemental_field(struct setup_password_fields_io *io)
nt_errstr(status)); nt_errstr(status));
return LDB_ERR_OPERATIONS_ERROR; 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) { if (!pb_hexstr) {
ldb_oom(ldb); ldb_oom(ldb);
return LDB_ERR_OPERATIONS_ERROR; return LDB_ERR_OPERATIONS_ERROR;

View File

@ -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, static int extended_dn_write_hex(struct ldb_context *ldb, void *mem_ctx,
const struct ldb_val *in, struct ldb_val *out) 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) { if (!out->data) {
return -1; return -1;
} }

View File

@ -68,7 +68,7 @@ _PUBLIC_ char *reg_val_data_string(TALLOC_CTX *mem_ctx,
(void **)&ret, NULL, false); (void **)&ret, NULL, false);
return ret; return ret;
case REG_BINARY: case REG_BINARY:
ret = data_blob_hex_string(mem_ctx, &data); ret = data_blob_hex_string_upper(mem_ctx, &data);
return ret; return ret;
case REG_DWORD: case REG_DWORD:
if (*(int *)data.data == 0) if (*(int *)data.data == 0)

View File

@ -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; 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) { if (!om_hex) {
return false; return false;
} }

View File

@ -593,11 +593,11 @@ static bool samsync_handle_user(struct torture_context *tctx, TALLOC_CTX *mem_ct
if (nt_hash_p) { if (nt_hash_p) {
DATA_BLOB nt_hash_blob = data_blob_const(nt_hash_p, 16); 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) { if (lm_hash_p) {
DATA_BLOB lm_hash_blob = data_blob_const(lm_hash_p, 16); 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, nt_status = test_SamLogon(samsync_state->p_netlogon_wksta, mem_ctx, samsync_state->creds_netlogon_wksta,