1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-02 09:47:23 +03:00

r10164: - add first assoc_ctx test

- handle the case where we're no valid pull partner of the tested server

metze
(This used to be commit d2e62dc205dd450ce57b9566c29e82878eb8471b)
This commit is contained in:
Stefan Metzmacher 2005-09-12 10:06:22 +00:00 committed by Gerald (Jerry) Carter
parent 3818f7793b
commit 5c7de96d2c

View File

@ -40,6 +40,61 @@
goto done; \
}} while (0)
/*
test how assoc_ctx's are only usable on the connection
they are created on.
*/
static BOOL test_assoc_ctx1(TALLOC_CTX *mem_ctx, const char *address)
{
BOOL ret = True;
struct wrepl_request *req;
struct wrepl_socket *wrepl_socket1;
struct wrepl_associate associate1;
struct wrepl_socket *wrepl_socket2;
struct wrepl_associate associate2;
struct wrepl_pull_table pull_table;
NTSTATUS status;
printf("Test if assoc_ctx is only valid on the conection it was created on\n");
wrepl_socket1 = wrepl_socket_init(mem_ctx, NULL);
wrepl_socket2 = wrepl_socket_init(mem_ctx, NULL);
printf("Setup 2 wrepl connections\n");
status = wrepl_connect(wrepl_socket1, address);
CHECK_STATUS(status, NT_STATUS_OK);
status = wrepl_connect(wrepl_socket2, address);
CHECK_STATUS(status, NT_STATUS_OK);
printf("Send a start association request (conn1)\n");
status = wrepl_associate(wrepl_socket1, &associate1);
CHECK_STATUS(status, NT_STATUS_OK);
printf("association context (conn1): 0x%x\n", associate1.out.assoc_ctx);
printf("Send a start association request (conn2)\n");
status = wrepl_associate(wrepl_socket2, &associate2);
CHECK_STATUS(status, NT_STATUS_OK);
printf("association context (conn2): 0x%x\n", associate2.out.assoc_ctx);
printf("Send a replication table query, with assoc 1 (conn2), should be ignored\n");
pull_table.in.assoc_ctx = associate1.out.assoc_ctx;
req = wrepl_pull_table_send(wrepl_socket2, &pull_table);
talloc_free(req);
printf("Send a association request (conn2), to make sure the last request was ignored\n");
status = wrepl_associate(wrepl_socket2, &associate2);
CHECK_STATUS(status, NT_STATUS_OK);
done:
printf("Close 2 wrepl connections\n");
talloc_free(wrepl_socket1);
talloc_free(wrepl_socket2);
return ret;
}
/*
display a replication entry
*/
@ -57,7 +112,7 @@ static void display_entry(TALLOC_CTX *mem_ctx, struct wrepl_name *name)
/*
test a full replication dump from a WINS server
*/
static BOOL nbt_test_wins_replication(TALLOC_CTX *mem_ctx, const char *address)
static BOOL test_wins_replication(TALLOC_CTX *mem_ctx, const char *address)
{
BOOL ret = True;
struct wrepl_socket *wrepl_socket;
@ -67,8 +122,11 @@ static BOOL nbt_test_wins_replication(TALLOC_CTX *mem_ctx, const char *address)
struct wrepl_pull_table pull_table;
struct wrepl_pull_names pull_names;
printf("Test one pull replication cycle\n");
wrepl_socket = wrepl_socket_init(mem_ctx, NULL);
printf("Setup wrepl connections\n");
status = wrepl_connect(wrepl_socket, address);
CHECK_STATUS(status, NT_STATUS_OK);
@ -83,6 +141,23 @@ static BOOL nbt_test_wins_replication(TALLOC_CTX *mem_ctx, const char *address)
pull_table.in.assoc_ctx = associate.out.assoc_ctx;
status = wrepl_pull_table(wrepl_socket, mem_ctx, &pull_table);
if (NT_STATUS_EQUAL(NT_STATUS_NETWORK_ACCESS_DENIED,status)) {
struct wrepl_packet packet;
struct wrepl_request *req;
printf("We are not a valid pull partner for the server\n");
ZERO_STRUCT(packet);
packet.opcode = WREPL_OPCODE_BITS;
packet.assoc_ctx = associate.out.assoc_ctx;
packet.mess_type = WREPL_STOP_ASSOCIATION;
packet.message.stop.reason = 0;
req = wrepl_request_send(wrepl_socket, &packet);
talloc_free(req);
ret = False;
goto done;
}
CHECK_STATUS(status, NT_STATUS_OK);
printf("Found %d replication partners\n", pull_table.out.num_partners);
@ -109,6 +184,7 @@ static BOOL nbt_test_wins_replication(TALLOC_CTX *mem_ctx, const char *address)
}
done:
printf("Close wrepl connections\n");
talloc_free(wrepl_socket);
return ret;
}
@ -135,7 +211,9 @@ BOOL torture_nbt_winsreplication(void)
return False;
}
ret &= nbt_test_wins_replication(mem_ctx, address);
ret &= test_assoc_ctx1(mem_ctx, address);
ret &= test_wins_replication(mem_ctx, address);
talloc_free(mem_ctx);