summaryrefslogtreecommitdiff
path: root/source4
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2006-12-28 22:51:56 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:30:22 -0500
commit105d18eb305197366172943c8037e27a96b24782 (patch)
treefe5fb163de046b7c70d28d0dcbc23185bfd58a4a /source4
parenta1a6a0d52a9d6a5e14263d31cab47c2fbaefa967 (diff)
downloadsamba-105d18eb305197366172943c8037e27a96b24782.tar.gz
samba-105d18eb305197366172943c8037e27a96b24782.tar.bz2
samba-105d18eb305197366172943c8037e27a96b24782.zip
r20395: Decode more unknowns in the IDL. These are language and codepage IDs!
Try to pass more of the CrackNames test. Make the test quieter. Andrew Bartlett (This used to be commit a6bbfebf52f53f99b0edf52d3c23b72785b97469)
Diffstat (limited to 'source4')
-rw-r--r--source4/dsdb/samdb/cracknames.c1
-rw-r--r--source4/librpc/idl/drsuapi.idl4
-rw-r--r--source4/torture/rpc/drsuapi_cracknames.c40
3 files changed, 26 insertions, 19 deletions
diff --git a/source4/dsdb/samdb/cracknames.c b/source4/dsdb/samdb/cracknames.c
index 991ccfca03..28c9890db5 100644
--- a/source4/dsdb/samdb/cracknames.c
+++ b/source4/dsdb/samdb/cracknames.c
@@ -863,6 +863,7 @@ static WERROR DsCrackNameOneFilter(struct ldb_context *sam_ctx, TALLOC_CTX *mem_
return WERR_OK;
}
default:
+ info1->status = DRSUAPI_DS_NAME_STATUS_NO_MAPPING;
return WERR_OK;
}
diff --git a/source4/librpc/idl/drsuapi.idl b/source4/librpc/idl/drsuapi.idl
index d60c3dd78a..4b78d848ed 100644
--- a/source4/librpc/idl/drsuapi.idl
+++ b/source4/librpc/idl/drsuapi.idl
@@ -915,8 +915,8 @@ interface drsuapi
} drsuapi_DsNameString;
typedef struct {
- uint32 unknown1; /* 0x000004e4 */
- uint32 unknown2; /* 0x00000407 */
+ uint32 codepage; /* 0x000004e4 - 1252 is german codepage*/
+ uint32 language; /* 0x00000407 - german language ID*/
drsuapi_DsNameFlags format_flags;
drsuapi_DsNameFormat format_offered;
drsuapi_DsNameFormat format_desired;
diff --git a/source4/torture/rpc/drsuapi_cracknames.c b/source4/torture/rpc/drsuapi_cracknames.c
index f8a6a48c95..d3ab2e86ee 100644
--- a/source4/torture/rpc/drsuapi_cracknames.c
+++ b/source4/torture/rpc/drsuapi_cracknames.c
@@ -59,8 +59,8 @@ static BOOL test_DsCrackNamesMatrix(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
ZERO_STRUCT(r);
r.in.bind_handle = &priv->bind_handle;
r.in.level = 1;
- r.in.req.req1.unknown1 = 0x000004e4;
- r.in.req.req1.unknown2 = 0x00000407;
+ r.in.req.req1.codepage = 1252; /* german */
+ r.in.req.req1.language = 0x00000407; /* german */
r.in.req.req1.count = 1;
r.in.req.req1.names = names;
r.in.req.req1.format_flags = DRSUAPI_DS_NAME_FLAG_NO_FLAGS;
@@ -71,18 +71,21 @@ static BOOL test_DsCrackNamesMatrix(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
r.in.req.req1.format_offered = DRSUAPI_DS_NAME_FORMAT_FQDN_1779;
r.in.req.req1.format_desired = formats[i];
names[0].str = dn;
- printf("testing DsCrackNames (matrix prep) with name '%s' from format: %d desired format:%d ",
- names[0].str, r.in.req.req1.format_offered, r.in.req.req1.format_desired);
-
status = dcerpc_drsuapi_DsCrackNames(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status)) {
const char *errstr = nt_errstr(status);
if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
errstr = dcerpc_errstr(mem_ctx, p->last_fault_code);
}
+ printf("testing DsCrackNames (matrix prep) with name '%s' from format: %d desired format:%d ",
+ names[0].str, r.in.req.req1.format_offered, r.in.req.req1.format_desired);
+
printf("dcerpc_drsuapi_DsCrackNames failed - %s\n", errstr);
ret = False;
} else if (!W_ERROR_IS_OK(r.out.result)) {
+ printf("testing DsCrackNames (matrix prep) with name '%s' from format: %d desired format:%d ",
+ names[0].str, r.in.req.req1.format_offered, r.in.req.req1.format_desired);
+
printf("DsCrackNames failed - %s\n", win_errstr(r.out.result));
ret = False;
}
@@ -228,8 +231,8 @@ BOOL test_DsCrackNames(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
ZERO_STRUCT(r);
r.in.bind_handle = &priv->bind_handle;
r.in.level = 1;
- r.in.req.req1.unknown1 = 0x000004e4;
- r.in.req.req1.unknown2 = 0x00000407;
+ r.in.req.req1.codepage = 1252; /* german */
+ r.in.req.req1.language = 0x00000407; /* german */
r.in.req.req1.count = 1;
r.in.req.req1.names = names;
r.in.req.req1.format_flags = DRSUAPI_DS_NAME_FLAG_NO_FLAGS;
@@ -539,6 +542,7 @@ BOOL test_DsCrackNames(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
.expected_str = talloc_asprintf(mem_ctx, "%s\n", dns_domain),
.status = DRSUAPI_DS_NAME_STATUS_OK
},
+#if 0 /* perhaps we don't really need to look for this one */
{
.format_offered = DRSUAPI_DS_NAME_FORMAT_DISPLAY,
.format_desired = DRSUAPI_DS_NAME_FORMAT_FQDN_1779,
@@ -547,6 +551,7 @@ BOOL test_DsCrackNames(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
.status = DRSUAPI_DS_NAME_STATUS_OK,
.alternate_status = DRSUAPI_DS_NAME_STATUS_NOT_UNIQUE
},
+#endif
{
.format_offered = DRSUAPI_DS_NAME_FORMAT_GUID,
.format_desired = DRSUAPI_DS_NAME_FORMAT_FQDN_1779,
@@ -809,16 +814,17 @@ BOOL test_DsCrackNames(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
int i;
for (i=0; i < ARRAY_SIZE(crack); i++) {
+ const char *comment;
r.in.req.req1.format_flags = crack[i].flags;
r.in.req.req1.format_offered = crack[i].format_offered;
r.in.req.req1.format_desired = crack[i].format_desired;
names[0].str = crack[i].str;
if (crack[i].comment) {
- printf("testing DsCrackNames '%s' with name '%s' desired format:%d\n",
- crack[i].comment, names[0].str, r.in.req.req1.format_desired);
+ comment = talloc_asprintf(mem_ctx, "'%s' with name '%s' desired format:%d\n",
+ crack[i].comment, names[0].str, r.in.req.req1.format_desired);
} else {
- printf("testing DsCrackNames with name '%s' desired format:%d\n",
+ comment = talloc_asprintf(mem_ctx, "'%s' desired format:%d\n",
names[0].str, r.in.req.req1.format_desired);
}
status = dcerpc_drsuapi_DsCrackNames(p, mem_ctx, &r);
@@ -827,7 +833,7 @@ BOOL test_DsCrackNames(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
errstr = dcerpc_errstr(mem_ctx, p->last_fault_code);
}
- printf("dcerpc_drsuapi_DsCrackNames failed - %s\n", errstr);
+ printf("dcerpc_drsuapi_DsCrackNames failed on %s - %s\n", comment, errstr);
ret = False;
} else if (!W_ERROR_IS_OK(r.out.result)) {
printf("DsCrackNames failed - %s\n", win_errstr(r.out.result));
@@ -835,26 +841,26 @@ BOOL test_DsCrackNames(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
} else if (r.out.ctr.ctr1->array[0].status != crack[i].status) {
if (crack[i].alternate_status) {
if (r.out.ctr.ctr1->array[0].status != crack[i].alternate_status) {
- printf("DsCrackNames unexpected status %d, wanted %d or %d on name: %s\n",
+ printf("DsCrackNames unexpected status %d, wanted %d or %d on: %s\n",
r.out.ctr.ctr1->array[0].status,
crack[i].status,
crack[i].alternate_status,
- crack[i].str);
+ comment);
ret = False;
}
} else {
- printf("DsCrackNames unexpected status %d, wanted %d on name: %s\n",
+ printf("DsCrackNames unexpected status %d, wanted %d on: %s\n",
r.out.ctr.ctr1->array[0].status,
crack[i].status,
- crack[i].str);
+ comment);
ret = False;
}
} else if (crack[i].expected_str
&& (strcmp(r.out.ctr.ctr1->array[0].result_name,
crack[i].expected_str) != 0)) {
- printf("DsCrackNames failed - got %s, expected %s\n",
+ printf("DsCrackNames failed - got %s, expected %s on %s\n",
r.out.ctr.ctr1->array[0].result_name,
- crack[i].expected_str);
+ crack[i].expected_str, comment);
ret = False;
}
}