diff options
author | Stefan Metzmacher <metze@samba.org> | 2005-10-06 14:38:07 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:39:28 -0500 |
commit | 6799fde75d1ccf93171874fd33f9e89e4472fd81 (patch) | |
tree | 193c4ccfc996e8893123d558f084e09a72371efd /source4/torture | |
parent | 093a30d7ed86e0772d1f590b25b74969b5c0b0ff (diff) | |
download | samba-6799fde75d1ccf93171874fd33f9e89e4472fd81.tar.gz samba-6799fde75d1ccf93171874fd33f9e89e4472fd81.tar.bz2 samba-6799fde75d1ccf93171874fd33f9e89e4472fd81.zip |
r10766: - make it possible to mark a wrepl_request as send only,
used for WREPL_REPL_INFORM* messsages
- make it possible to close the connection after a request was send
used for WREPL_ASSOCIATION_STOP
- fix the torture test that tests the assoc context handling
between connections, you can issue a request and get the reply
on another connection, I think we should not implement that in our server
code, as I think it's a security hole, you can cause a windows server
to send the replies to someone another client, that doesn't wait for data,
and as there're no massage_id in the protocol the client would be confused
by a replies that doesn't belong to a query
metze
(This used to be commit dfc95de8fa7ded8ea92cafe58cf86efcc7920156)
Diffstat (limited to 'source4/torture')
-rw-r--r-- | source4/torture/nbt/winsreplication.c | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/source4/torture/nbt/winsreplication.c b/source4/torture/nbt/winsreplication.c index 68961ab180..e72ba9c8d6 100644 --- a/source4/torture/nbt/winsreplication.c +++ b/source4/torture/nbt/winsreplication.c @@ -53,18 +53,20 @@ static BOOL test_assoc_ctx1(TALLOC_CTX *mem_ctx, const char *address) struct wrepl_socket *wrepl_socket2; struct wrepl_associate associate2; struct wrepl_pull_table pull_table; + struct wrepl_packet *rep_packet; + struct wrepl_associate_stop assoc_stop; 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); + status = wrepl_connect(wrepl_socket1, NULL, address); CHECK_STATUS(status, NT_STATUS_OK); - status = wrepl_connect(wrepl_socket2, address); + status = wrepl_connect(wrepl_socket2, NULL, address); CHECK_STATUS(status, NT_STATUS_OK); printf("Send a start association request (conn1)\n"); @@ -79,15 +81,39 @@ static BOOL test_assoc_ctx1(TALLOC_CTX *mem_ctx, const char *address) 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"); + printf("Send a replication table query, with assoc 1 (conn2), the anwser should be on conn1\n"); pull_table.in.assoc_ctx = associate1.out.assoc_ctx; req = wrepl_pull_table_send(wrepl_socket2, &pull_table); - talloc_free(req); + req->send_only = True; + status = wrepl_request_recv(req, mem_ctx, &rep_packet); + CHECK_STATUS(status, NT_STATUS_OK); 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); + printf("Send a replication table query, with invalid assoc (conn1), receive answer from conn2\n"); + pull_table.in.assoc_ctx = 0; + req = wrepl_pull_table_send(wrepl_socket1, &pull_table); + status = wrepl_request_recv(req, mem_ctx, &rep_packet); + CHECK_STATUS(status, NT_STATUS_OK); + + printf("Send a association request (conn1), to make sure the last request was handled correct\n"); + status = wrepl_associate(wrepl_socket1, &associate2); + CHECK_STATUS(status, NT_STATUS_OK); + + assoc_stop.in.assoc_ctx = associate1.out.assoc_ctx; + assoc_stop.in.reason = 4; + printf("Send a association stop request (conn1), reson: %u\n", assoc_stop.in.reason); + status = wrepl_associate_stop(wrepl_socket1, &assoc_stop); + CHECK_STATUS(status, NT_STATUS_END_OF_FILE); + + assoc_stop.in.assoc_ctx = associate2.out.assoc_ctx; + assoc_stop.in.reason = 0; + printf("Send a association stop request (conn2), reson: %u\n", assoc_stop.in.reason); + status = wrepl_associate_stop(wrepl_socket2, &assoc_stop); + CHECK_STATUS(status, NT_STATUS_OK); + done: printf("Close 2 wrepl connections\n"); talloc_free(wrepl_socket1); @@ -111,7 +137,7 @@ static BOOL test_assoc_ctx2(TALLOC_CTX *mem_ctx, const char *address) wrepl_socket = wrepl_socket_init(mem_ctx, NULL); printf("Setup wrepl connections\n"); - status = wrepl_connect(wrepl_socket, address); + status = wrepl_connect(wrepl_socket, NULL, address); CHECK_STATUS(status, NT_STATUS_OK); @@ -175,7 +201,7 @@ static BOOL test_wins_replication(TALLOC_CTX *mem_ctx, const char *address) wrepl_socket = wrepl_socket_init(mem_ctx, NULL); printf("Setup wrepl connections\n"); - status = wrepl_connect(wrepl_socket, address); + status = wrepl_connect(wrepl_socket, NULL, address); CHECK_STATUS(status, NT_STATUS_OK); printf("Send a start association request\n"); |