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:
parent
a8769e6675
commit
fd5174e88c
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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:
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user