summaryrefslogtreecommitdiff
path: root/source4/torture/nbt
diff options
context:
space:
mode:
Diffstat (limited to 'source4/torture/nbt')
-rw-r--r--source4/torture/nbt/wins.c57
1 files changed, 39 insertions, 18 deletions
diff --git a/source4/torture/nbt/wins.c b/source4/torture/nbt/wins.c
index d69c518aa3..092215e2f1 100644
--- a/source4/torture/nbt/wins.c
+++ b/source4/torture/nbt/wins.c
@@ -49,7 +49,8 @@
*/
static bool nbt_test_wins_name(struct torture_context *tctx, const char *address,
struct nbt_name *name, uint16_t nb_flags,
- bool try_low_port)
+ bool try_low_port,
+ uint8_t register_rcode)
{
struct nbt_name_register_wins io;
struct nbt_name_register name_register;
@@ -200,7 +201,11 @@ static bool nbt_test_wins_name(struct torture_context *tctx, const char *address
torture_assert_ntstatus_ok(tctx, status, talloc_asprintf(tctx, "Bad response from %s for name register", address));
CHECK_STRING(tctx, io.out.wins_server, address);
- CHECK_VALUE(tctx, io.out.rcode, 0);
+ CHECK_VALUE(tctx, io.out.rcode, register_rcode);
+
+ if (register_rcode != NBT_RCODE_OK) {
+ return true;
+ }
if (name->type != NBT_NAME_MASTER &&
name->type != NBT_NAME_LOGON &&
@@ -418,54 +423,70 @@ static bool nbt_test_wins(struct torture_context *tctx)
name.type = NBT_NAME_CLIENT;
name.scope = NULL;
- ret &= nbt_test_wins_name(tctx, address, &name, NBT_NODE_H, true);
+ ret &= nbt_test_wins_name(tctx, address, &name,
+ NBT_NODE_H, true, NBT_RCODE_OK);
name.type = NBT_NAME_MASTER;
- ret &= nbt_test_wins_name(tctx, address, &name, NBT_NODE_H, false);
+ ret &= nbt_test_wins_name(tctx, address, &name,
+ NBT_NODE_H, false, NBT_RCODE_OK);
- ret &= nbt_test_wins_name(tctx, address, &name, NBT_NODE_H | NBT_NM_GROUP, false);
+ ret &= nbt_test_wins_name(tctx, address, &name,
+ NBT_NODE_H | NBT_NM_GROUP, false, NBT_RCODE_OK);
name.type = NBT_NAME_SERVER;
- ret &= nbt_test_wins_name(tctx, address, &name, NBT_NODE_H, true);
+ ret &= nbt_test_wins_name(tctx, address, &name,
+ NBT_NODE_H, true, NBT_RCODE_OK);
name.type = NBT_NAME_LOGON;
- ret &= nbt_test_wins_name(tctx, address, &name, NBT_NODE_H | NBT_NM_GROUP, false);
+ ret &= nbt_test_wins_name(tctx, address, &name,
+ NBT_NODE_H | NBT_NM_GROUP, false, NBT_RCODE_OK);
name.type = NBT_NAME_BROWSER;
- ret &= nbt_test_wins_name(tctx, address, &name, NBT_NODE_H | NBT_NM_GROUP, false);
+ ret &= nbt_test_wins_name(tctx, address, &name,
+ NBT_NODE_H | NBT_NM_GROUP, false, NBT_RCODE_OK);
name.type = NBT_NAME_PDC;
- ret &= nbt_test_wins_name(tctx, address, &name, NBT_NODE_H, true);
+ ret &= nbt_test_wins_name(tctx, address, &name,
+ NBT_NODE_H, true, NBT_RCODE_OK);
name.type = 0xBF;
- ret &= nbt_test_wins_name(tctx, address, &name, NBT_NODE_H, true);
+ ret &= nbt_test_wins_name(tctx, address, &name,
+ NBT_NODE_H, true, NBT_RCODE_OK);
name.type = 0xBE;
- ret &= nbt_test_wins_name(tctx, address, &name, NBT_NODE_H, false);
+ ret &= nbt_test_wins_name(tctx, address, &name,
+ NBT_NODE_H, false, NBT_RCODE_OK);
name.scope = "example";
name.type = 0x72;
- ret &= nbt_test_wins_name(tctx, address, &name, NBT_NODE_H, true);
+ ret &= nbt_test_wins_name(tctx, address, &name,
+ NBT_NODE_H, true, NBT_RCODE_OK);
name.scope = "example";
name.type = 0x71;
- ret &= nbt_test_wins_name(tctx, address, &name, NBT_NODE_H | NBT_NM_GROUP, false);
+ ret &= nbt_test_wins_name(tctx, address, &name,
+ NBT_NODE_H | NBT_NM_GROUP, false, NBT_RCODE_OK);
name.scope = "foo.example.com";
name.type = 0x72;
- ret &= nbt_test_wins_name(tctx, address, &name, NBT_NODE_H, false);
+ ret &= nbt_test_wins_name(tctx, address, &name,
+ NBT_NODE_H, false, NBT_RCODE_OK);
name.name = talloc_asprintf(tctx, "_T\01-%5u.foo", r);
- ret &= nbt_test_wins_name(tctx, address, &name, NBT_NODE_H, false);
+ ret &= nbt_test_wins_name(tctx, address, &name,
+ NBT_NODE_H, false, NBT_RCODE_OK);
name.name = "";
- ret &= nbt_test_wins_name(tctx, address, &name, NBT_NODE_H, false);
+ ret &= nbt_test_wins_name(tctx, address, &name,
+ NBT_NODE_H, false, NBT_RCODE_OK);
name.name = talloc_asprintf(tctx, ".");
- ret &= nbt_test_wins_name(tctx, address, &name, NBT_NODE_H, false);
+ ret &= nbt_test_wins_name(tctx, address, &name,
+ NBT_NODE_H, false, NBT_RCODE_OK);
name.name = talloc_asprintf(tctx, "%5u-\377\200\300FOO", r);
- ret &= nbt_test_wins_name(tctx, address, &name, NBT_NODE_H, false);
+ ret &= nbt_test_wins_name(tctx, address, &name,
+ NBT_NODE_H, false, NBT_RCODE_OK);
return ret;
}