mirror of
https://github.com/samba-team/samba.git
synced 2025-02-21 01:59:07 +03:00
r11415: - create a seperate nbt socket for handling incoming packets
- remove useless .release attribute, we have seperate tests for this now - add first owned,active vs. replica test, including handling incoming name queries from the server metze
This commit is contained in:
parent
7e3c22f57b
commit
7843b6c5c8
@ -23,7 +23,9 @@
|
||||
#include "includes.h"
|
||||
#include "libcli/nbt/libnbt.h"
|
||||
#include "libcli/wrepl/winsrepl.h"
|
||||
#include "lib/events/events.h"
|
||||
#include "lib/socket/socket.h"
|
||||
#include "system/time.h"
|
||||
|
||||
#define CHECK_STATUS(status, correct) do { \
|
||||
if (!NT_STATUS_EQUAL(status, correct)) { \
|
||||
@ -330,7 +332,8 @@ struct test_wrepl_conflict_conn {
|
||||
|
||||
const char *myaddr;
|
||||
struct nbt_name_socket *nbtsock;
|
||||
BOOL nbt_root_port;
|
||||
|
||||
struct nbt_name_socket *nbtsock_srv;
|
||||
|
||||
uint32_t addresses_1_num;
|
||||
struct wrepl_ip *addresses_1;
|
||||
@ -443,18 +446,22 @@ static struct test_wrepl_conflict_conn *test_create_conflict_ctx(TALLOC_CTX *mem
|
||||
|
||||
talloc_free(pull_table.out.partners);
|
||||
|
||||
ctx->nbtsock = nbt_name_socket_init(ctx, NULL);
|
||||
if (!ctx->nbtsock) return NULL;
|
||||
|
||||
ctx->myaddr = talloc_strdup(mem_ctx, iface_best_ip(address));
|
||||
if (!ctx->myaddr) return NULL;
|
||||
|
||||
status = socket_listen(ctx->nbtsock->sock, ctx->myaddr, lp_nbt_port(), 0, 0);
|
||||
ctx->nbtsock = nbt_name_socket_init(ctx, NULL);
|
||||
if (!ctx->nbtsock) return NULL;
|
||||
|
||||
status = socket_listen(ctx->nbtsock->sock, ctx->myaddr, 0, 0, 0);
|
||||
if (!NT_STATUS_IS_OK(status)) return NULL;
|
||||
|
||||
ctx->nbtsock_srv = nbt_name_socket_init(ctx, NULL);
|
||||
if (!ctx->nbtsock_srv) return NULL;
|
||||
|
||||
status = socket_listen(ctx->nbtsock_srv->sock, ctx->myaddr, lp_nbt_port(), 0, 0);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
status = socket_listen(ctx->nbtsock->sock, ctx->myaddr, 0, 0, 0);
|
||||
if (!NT_STATUS_IS_OK(status)) return NULL;
|
||||
} else {
|
||||
ctx->nbt_root_port = True;
|
||||
talloc_free(ctx->nbtsock_srv);
|
||||
ctx->nbtsock_srv = NULL;
|
||||
}
|
||||
|
||||
ctx->addresses_1_num = 1;
|
||||
@ -3840,7 +3847,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
BOOL mhomed;
|
||||
uint32_t num_ips;
|
||||
const struct wrepl_ip *ips;
|
||||
BOOL release;
|
||||
BOOL apply_expected;
|
||||
} wins;
|
||||
struct {
|
||||
@ -3864,7 +3870,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -3888,7 +3893,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -3912,7 +3916,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -3936,7 +3939,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -3960,7 +3962,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -3984,7 +3985,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4008,7 +4008,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4032,7 +4031,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4056,7 +4054,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4080,7 +4077,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4104,7 +4100,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4128,7 +4123,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4152,7 +4146,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4176,7 +4169,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4200,7 +4192,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4224,7 +4215,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4248,7 +4238,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4272,7 +4261,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4296,7 +4284,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4320,7 +4307,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4344,7 +4330,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4368,7 +4353,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4392,7 +4376,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4416,7 +4399,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4440,7 +4422,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4464,7 +4445,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4488,7 +4468,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4512,7 +4491,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4536,7 +4514,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4560,7 +4537,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4584,7 +4560,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4608,7 +4583,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4632,7 +4606,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4656,7 +4629,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4680,7 +4652,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4704,7 +4675,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4728,7 +4698,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4752,7 +4721,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4776,7 +4744,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4800,7 +4767,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4824,7 +4790,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4848,7 +4813,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4872,7 +4836,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4896,7 +4859,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4920,7 +4882,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4944,7 +4905,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4968,7 +4928,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -4992,7 +4951,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -5016,7 +4974,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = True,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -5040,7 +4997,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = True,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -5064,7 +5020,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = True,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -5088,7 +5043,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = True,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -5112,7 +5066,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = True,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -5136,7 +5089,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = True,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -5160,7 +5112,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = True,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -5184,7 +5135,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = True,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -5208,7 +5158,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = True,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -5232,7 +5181,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = True,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -5256,7 +5204,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = True,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -5280,7 +5227,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = True,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -5304,7 +5250,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = True,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -5328,7 +5273,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = True,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -5352,7 +5296,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = True,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -5376,7 +5319,6 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
.mhomed = True,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = True,
|
||||
.apply_expected = True
|
||||
},
|
||||
.replica= {
|
||||
@ -5430,27 +5372,26 @@ static BOOL test_conflict_owned_released_vs_replica(struct test_wrepl_conflict_c
|
||||
CHECK_VALUE_STRING(name_register->out.name.scope, records[i].name.scope);
|
||||
CHECK_VALUE_STRING(name_register->out.reply_addr, records[i].wins.ips[0].ip);
|
||||
|
||||
if (records[i].wins.release) {
|
||||
release->in.name = records[i].name;
|
||||
release->in.dest_addr = ctx->address;
|
||||
release->in.address = records[i].wins.ips[0].ip;
|
||||
release->in.nb_flags = records[i].wins.nb_flags;
|
||||
release->in.broadcast = False;
|
||||
release->in.timeout = 30;
|
||||
release->in.retries = 0;
|
||||
/* release the record */
|
||||
release->in.name = records[i].name;
|
||||
release->in.dest_addr = ctx->address;
|
||||
release->in.address = records[i].wins.ips[0].ip;
|
||||
release->in.nb_flags = records[i].wins.nb_flags;
|
||||
release->in.broadcast = False;
|
||||
release->in.timeout = 30;
|
||||
release->in.retries = 0;
|
||||
|
||||
status = nbt_name_release(ctx->nbtsock, ctx, release);
|
||||
if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) {
|
||||
printf("No response from %s for name release\n", ctx->address);
|
||||
return False;
|
||||
}
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
printf("Bad response from %s for name query - %s\n",
|
||||
ctx->address, nt_errstr(status));
|
||||
return False;
|
||||
}
|
||||
CHECK_VALUE(release->out.rcode, 0);
|
||||
status = nbt_name_release(ctx->nbtsock, ctx, release);
|
||||
if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) {
|
||||
printf("No response from %s for name release\n", ctx->address);
|
||||
return False;
|
||||
}
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
printf("Bad response from %s for name query - %s\n",
|
||||
ctx->address, nt_errstr(status));
|
||||
return False;
|
||||
}
|
||||
CHECK_VALUE(release->out.rcode, 0);
|
||||
|
||||
/*
|
||||
* Setup Replica
|
||||
@ -5515,6 +5456,35 @@ done:
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct test_conflict_owned_active_vs_replica_struct {
|
||||
const char *line; /* just better debugging */
|
||||
struct nbt_name name;
|
||||
struct {
|
||||
uint32_t nb_flags;
|
||||
BOOL mhomed;
|
||||
uint32_t num_ips;
|
||||
const struct wrepl_ip *ips;
|
||||
BOOL apply_expected;
|
||||
} wins;
|
||||
struct {
|
||||
uint32_t timeout;
|
||||
BOOL positive;
|
||||
} defend;
|
||||
struct {
|
||||
enum wrepl_name_type type;
|
||||
enum wrepl_name_state state;
|
||||
enum wrepl_name_node node;
|
||||
BOOL is_static;
|
||||
uint32_t num_ips;
|
||||
const struct wrepl_ip *ips;
|
||||
BOOL apply_expected;
|
||||
} replica;
|
||||
};
|
||||
|
||||
static void test_conflict_owned_active_vs_replica_handler(struct nbt_name_socket *nbtsock,
|
||||
struct nbt_name_packet *req_packet,
|
||||
const struct nbt_peer_socket *src);
|
||||
|
||||
static BOOL test_conflict_owned_active_vs_replica(struct test_wrepl_conflict_conn *ctx)
|
||||
{
|
||||
BOOL ret = True;
|
||||
@ -5526,42 +5496,23 @@ static BOOL test_conflict_owned_active_vs_replica(struct test_wrepl_conflict_con
|
||||
struct nbt_name_release release_;
|
||||
struct nbt_name_release *release = &release_;
|
||||
uint32_t i;
|
||||
struct {
|
||||
const char *line; /* just better debugging */
|
||||
struct nbt_name name;
|
||||
struct {
|
||||
uint32_t nb_flags;
|
||||
BOOL mhomed;
|
||||
uint32_t num_ips;
|
||||
const struct wrepl_ip *ips;
|
||||
BOOL release;
|
||||
BOOL apply_expected;
|
||||
} wins;
|
||||
struct {
|
||||
enum wrepl_name_type type;
|
||||
enum wrepl_name_state state;
|
||||
enum wrepl_name_node node;
|
||||
BOOL is_static;
|
||||
uint32_t num_ips;
|
||||
const struct wrepl_ip *ips;
|
||||
BOOL apply_expected;
|
||||
} replica;
|
||||
} records[] = {
|
||||
#if 0
|
||||
struct test_conflict_owned_active_vs_replica_struct records[] = {
|
||||
/*
|
||||
* unique,active vs. unique,active with same ip(s)
|
||||
* unique,active vs. unique,active with same ip(s), unchecked
|
||||
*/
|
||||
{
|
||||
.line = __location__,
|
||||
.name = _NBT_NAME("_UA_UA_SI", 0x00, NULL),
|
||||
.name = _NBT_NAME("_UA_UA_SI_U", 0x00, NULL),
|
||||
.wins = {
|
||||
.nb_flags = 0,
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = False,
|
||||
.apply_expected = True
|
||||
},
|
||||
.defend = {
|
||||
.timeout = 0,
|
||||
},
|
||||
.replica= {
|
||||
.type = WREPL_TYPE_UNIQUE,
|
||||
.state = WREPL_STATE_ACTIVE,
|
||||
@ -5573,19 +5524,49 @@ static BOOL test_conflict_owned_active_vs_replica(struct test_wrepl_conflict_con
|
||||
},
|
||||
},
|
||||
/*
|
||||
* unique,active vs. unique,active with different ip(s)
|
||||
* unique,active vs. unique,active with different ip(s), positive response
|
||||
*/
|
||||
{
|
||||
.line = __location__,
|
||||
.name = _NBT_NAME("_UA_UA_DI", 0x00, NULL),
|
||||
.name = _NBT_NAME("_UA_UA_DI_P", 0x00, NULL),
|
||||
.wins = {
|
||||
.nb_flags = 0,
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = False,
|
||||
.apply_expected = True
|
||||
},
|
||||
.defend = {
|
||||
.timeout = 10,
|
||||
.positive = True,
|
||||
},
|
||||
.replica= {
|
||||
.type = WREPL_TYPE_UNIQUE,
|
||||
.state = WREPL_STATE_ACTIVE,
|
||||
.node = WREPL_NODE_B,
|
||||
.is_static = False,
|
||||
.num_ips = ARRAY_SIZE(addresses_B_1),
|
||||
.ips = addresses_B_1,
|
||||
.apply_expected = False
|
||||
},
|
||||
},
|
||||
/*
|
||||
* unique,active vs. unique,active with different ip(s), negative response
|
||||
*/
|
||||
{
|
||||
.line = __location__,
|
||||
.name = _NBT_NAME("_UA_UA_DI_N", 0x00, NULL),
|
||||
.wins = {
|
||||
.nb_flags = 0,
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.apply_expected = True
|
||||
},
|
||||
.defend = {
|
||||
.timeout = 10,
|
||||
.positive = False,
|
||||
},
|
||||
.replica= {
|
||||
.type = WREPL_TYPE_UNIQUE,
|
||||
.state = WREPL_STATE_ACTIVE,
|
||||
@ -5597,19 +5578,21 @@ static BOOL test_conflict_owned_active_vs_replica(struct test_wrepl_conflict_con
|
||||
},
|
||||
},
|
||||
/*
|
||||
* unique,active vs. unique,tombstone with same ip(s)
|
||||
* unique,active vs. unique,tombstone with same ip(s), unchecked
|
||||
*/
|
||||
{
|
||||
.line = __location__,
|
||||
.name = _NBT_NAME("_UA_UT_SI", 0x00, NULL),
|
||||
.name = _NBT_NAME("_UA_UT_SI_U", 0x00, NULL),
|
||||
.wins = {
|
||||
.nb_flags = 0,
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = False,
|
||||
.apply_expected = True
|
||||
},
|
||||
.defend = {
|
||||
.timeout = 0,
|
||||
},
|
||||
.replica= {
|
||||
.type = WREPL_TYPE_UNIQUE,
|
||||
.state = WREPL_STATE_TOMBSTONE,
|
||||
@ -5621,19 +5604,21 @@ static BOOL test_conflict_owned_active_vs_replica(struct test_wrepl_conflict_con
|
||||
},
|
||||
},
|
||||
/*
|
||||
* unique,active vs. unique,tombstone with different ip(s)
|
||||
* unique,active vs. unique,tombstone with different ip(s), unchecked
|
||||
*/
|
||||
{
|
||||
.line = __location__,
|
||||
.name = _NBT_NAME("_UA_UT_DI", 0x00, NULL),
|
||||
.name = _NBT_NAME("_UA_UT_DI_U", 0x00, NULL),
|
||||
.wins = {
|
||||
.nb_flags = 0,
|
||||
.mhomed = False,
|
||||
.num_ips = ctx->addresses_1_num,
|
||||
.ips = ctx->addresses_1,
|
||||
.release = False,
|
||||
.apply_expected = True
|
||||
},
|
||||
.defend = {
|
||||
.timeout = 0,
|
||||
},
|
||||
.replica= {
|
||||
.type = WREPL_TYPE_UNIQUE,
|
||||
.state = WREPL_STATE_TOMBSTONE,
|
||||
@ -5641,15 +5626,14 @@ static BOOL test_conflict_owned_active_vs_replica(struct test_wrepl_conflict_con
|
||||
.is_static = False,
|
||||
.num_ips = ARRAY_SIZE(addresses_B_1),
|
||||
.ips = addresses_B_1,
|
||||
.apply_expected = True
|
||||
.apply_expected = False
|
||||
},
|
||||
},
|
||||
#endif
|
||||
};
|
||||
|
||||
if (!ctx) return False;
|
||||
|
||||
if (!ctx->nbt_root_port) {
|
||||
if (!ctx->nbtsock_srv) {
|
||||
printf("SKIP: Test Replica records vs. owned active records: not bound to port[%d]\n",
|
||||
lp_nbt_port());
|
||||
return True;
|
||||
@ -5658,9 +5642,16 @@ static BOOL test_conflict_owned_active_vs_replica(struct test_wrepl_conflict_con
|
||||
printf("Test Replica records vs. owned active records\n");
|
||||
|
||||
for(i=0; ret && i < ARRAY_SIZE(records); i++) {
|
||||
struct timeval end;
|
||||
|
||||
printf("%s => %s\n", nbt_name_string(ctx, &records[i].name),
|
||||
(records[i].replica.apply_expected?"REPLACE":"NOT REPLACE"));
|
||||
|
||||
/* Prepare for the current test */
|
||||
nbt_set_incoming_handler(ctx->nbtsock_srv,
|
||||
test_conflict_owned_active_vs_replica_handler,
|
||||
&records[i]);
|
||||
|
||||
/*
|
||||
* Setup Register
|
||||
*/
|
||||
@ -5692,28 +5683,6 @@ static BOOL test_conflict_owned_active_vs_replica(struct test_wrepl_conflict_con
|
||||
CHECK_VALUE_STRING(name_register->out.name.scope, records[i].name.scope);
|
||||
CHECK_VALUE_STRING(name_register->out.reply_addr, records[i].wins.ips[0].ip);
|
||||
|
||||
if (records[i].wins.release) {
|
||||
release->in.name = records[i].name;
|
||||
release->in.dest_addr = ctx->address;
|
||||
release->in.address = records[i].wins.ips[0].ip;
|
||||
release->in.nb_flags = records[i].wins.nb_flags;
|
||||
release->in.broadcast = False;
|
||||
release->in.timeout = 30;
|
||||
release->in.retries = 0;
|
||||
|
||||
status = nbt_name_release(ctx->nbtsock, ctx, release);
|
||||
if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) {
|
||||
printf("No response from %s for name release\n", ctx->address);
|
||||
return False;
|
||||
}
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
printf("Bad response from %s for name query - %s\n",
|
||||
ctx->address, nt_errstr(status));
|
||||
return False;
|
||||
}
|
||||
CHECK_VALUE(release->out.rcode, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Setup Replica
|
||||
*/
|
||||
@ -5732,6 +5701,17 @@ static BOOL test_conflict_owned_active_vs_replica(struct test_wrepl_conflict_con
|
||||
wins_name->unknown = "255.255.255.255";
|
||||
|
||||
ret &= test_wrepl_update_one(ctx, &ctx->b, wins_name);
|
||||
|
||||
/*
|
||||
* wait for the name query, which is handled in
|
||||
* test_conflict_owned_active_vs_replica_handler()
|
||||
*/
|
||||
end = timeval_current_ofs(records[i].defend.timeout,0);
|
||||
while (records[i].defend.timeout > 0) {
|
||||
event_loop_once(ctx->nbtsock_srv->event_ctx);
|
||||
if (timeval_expired(&end)) break;
|
||||
}
|
||||
|
||||
ret &= test_wrepl_is_applied(ctx, &ctx->b, wins_name,
|
||||
records[i].replica.apply_expected);
|
||||
|
||||
@ -5777,6 +5757,109 @@ done:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void test_conflict_owned_active_vs_replica_handler(struct nbt_name_socket *nbtsock,
|
||||
struct nbt_name_packet *req_packet,
|
||||
const struct nbt_peer_socket *src)
|
||||
{
|
||||
struct nbt_name *name;
|
||||
struct nbt_name_packet *rep_packet;
|
||||
struct test_conflict_owned_active_vs_replica_struct *rec = nbtsock->incoming.private;
|
||||
|
||||
switch (req_packet->operation & NBT_OPCODE) {
|
||||
case NBT_OPCODE_QUERY:
|
||||
break;
|
||||
default:
|
||||
printf("%s: unexpected incoming packet\n", __location__);
|
||||
return;
|
||||
}
|
||||
|
||||
#define _NBT_ASSERT(v, correct) do { \
|
||||
if ((v) != (correct)) { \
|
||||
printf("(%s) Incorrect value %s=%d - should be %s (%d)\n", \
|
||||
__location__, #v, v, #correct, correct); \
|
||||
return; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
_NBT_ASSERT(req_packet->qdcount, 1);
|
||||
_NBT_ASSERT(req_packet->questions[0].question_type, NBT_QTYPE_NETBIOS);
|
||||
_NBT_ASSERT(req_packet->questions[0].question_class, NBT_QCLASS_IP);
|
||||
|
||||
name = &req_packet->questions[0].name;
|
||||
|
||||
#define _NBT_ASSERT_STRING(v, correct) do { \
|
||||
if ( ((!v) && (correct)) || \
|
||||
((v) && (!correct)) || \
|
||||
((v) && (correct) && strcmp(v,correct) != 0)) { \
|
||||
printf("(%s) Incorrect value %s=%s - should be %s\n", \
|
||||
__location__, #v, v, correct); \
|
||||
return; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
_NBT_ASSERT(name->type, rec->name.type);
|
||||
_NBT_ASSERT_STRING(name->name, rec->name.name);
|
||||
_NBT_ASSERT_STRING(name->scope, rec->name.scope);
|
||||
|
||||
rep_packet = talloc_zero(nbtsock, struct nbt_name_packet);
|
||||
if (rep_packet == NULL) return;
|
||||
|
||||
rep_packet->name_trn_id = req_packet->name_trn_id;
|
||||
rep_packet->ancount = 1;
|
||||
|
||||
rep_packet->answers = talloc_array(rep_packet, struct nbt_res_rec, 1);
|
||||
if (rep_packet->answers == NULL) return;
|
||||
|
||||
rep_packet->answers[0].name = *name;
|
||||
rep_packet->answers[0].rr_type = NBT_QTYPE_NULL;
|
||||
rep_packet->answers[0].rr_class = NBT_QCLASS_IP;
|
||||
rep_packet->answers[0].ttl = 0;
|
||||
|
||||
if (rec->defend.positive) {
|
||||
uint32_t i;
|
||||
|
||||
/* send a positive reply */
|
||||
rep_packet->operation =
|
||||
NBT_FLAG_REPLY |
|
||||
NBT_OPCODE_QUERY |
|
||||
NBT_FLAG_AUTHORITIVE |
|
||||
NBT_FLAG_RECURSION_DESIRED |
|
||||
NBT_FLAG_RECURSION_AVAIL;
|
||||
|
||||
rep_packet->answers[0].rdata.netbios.length = rec->wins.num_ips*6;
|
||||
rep_packet->answers[0].rdata.netbios.addresses =
|
||||
talloc_array(rep_packet->answers, struct nbt_rdata_address, rec->wins.num_ips);
|
||||
if (rep_packet->answers[0].rdata.netbios.addresses == NULL) return;
|
||||
|
||||
for (i=0; i < rec->wins.num_ips; i++) {
|
||||
struct nbt_rdata_address *addr =
|
||||
&rep_packet->answers[0].rdata.netbios.addresses[i];
|
||||
addr->nb_flags = rec->wins.nb_flags;
|
||||
addr->ipaddr = rec->wins.ips[i].ip;
|
||||
}
|
||||
DEBUG(2,("Sending positive name query reply for %s to %s:%d\n",
|
||||
nbt_name_string(rep_packet, name), src->addr, src->port));
|
||||
} else {
|
||||
/* send a negative reply */
|
||||
rep_packet->operation =
|
||||
NBT_FLAG_REPLY |
|
||||
NBT_OPCODE_QUERY |
|
||||
NBT_FLAG_AUTHORITIVE |
|
||||
NBT_RCODE_NAM;
|
||||
ZERO_STRUCT(rep_packet->answers[0].rdata);
|
||||
|
||||
DEBUG(2,("Sending negative name query reply for %s to %s:%d\n",
|
||||
nbt_name_string(rep_packet, name), src->addr, src->port));
|
||||
}
|
||||
|
||||
nbt_name_reply_send(nbtsock, src, rep_packet);
|
||||
talloc_free(rep_packet);
|
||||
|
||||
/* make sure we push the reply to the wire */
|
||||
event_loop_once(nbtsock->event_ctx);
|
||||
|
||||
rec->defend.timeout = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
test WINS replication operations
|
||||
|
Loading…
x
Reference in New Issue
Block a user