diff options
author | Günther Deschner <gd@samba.org> | 2007-11-06 01:24:07 +0100 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2007-12-21 05:44:25 +0100 |
commit | bffef39e71e543cfa7520884e4484680e5e260ce (patch) | |
tree | 29cca762e66242b961ffce2ce95e0cd8d6b092b5 | |
parent | ba4a5bb2ea2cf81869585bc518b2da2108cd0c28 (diff) | |
download | samba-bffef39e71e543cfa7520884e4484680e5e260ce.tar.gz samba-bffef39e71e543cfa7520884e4484680e5e260ce.tar.bz2 samba-bffef39e71e543cfa7520884e4484680e5e260ce.zip |
r25848: Add IDL and torture test for dfs_SetDcAddress and dfs_GetDcAddress.
Guenther
(This used to be commit 8fb5d36734cb19dcbcf5e22c43e80db7646e82fa)
-rw-r--r-- | source4/librpc/idl/dfs.idl | 14 | ||||
-rw-r--r-- | source4/torture/rpc/dfs.c | 75 |
2 files changed, 87 insertions, 2 deletions
diff --git a/source4/librpc/idl/dfs.idl b/source4/librpc/idl/dfs.idl index 225436f3aa..dbbd15039c 100644 --- a/source4/librpc/idl/dfs.idl +++ b/source4/librpc/idl/dfs.idl @@ -377,10 +377,20 @@ import "misc.idl"; ); /* Function 0x10 */ - WERROR dfs_GetDcAddress(); + WERROR dfs_GetDcAddress( + [in] [string,charset(UTF16)] uint16 servername[], + [in,out,ref] [string,charset(UTF16)] uint16 **server_fullname, + [in,out,ref] boolean8 *is_root, + [in,out,ref] uint32 *ttl + ); /* Function 0x11 */ - WERROR dfs_SetDcAddress(); + WERROR dfs_SetDcAddress( + [in] [string,charset(UTF16)] uint16 servername[], + [in] [string,charset(UTF16)] uint16 server_fullname[], + [in] uint32 flags, + [in] uint32 ttl + ); /* Function 0x12 */ WERROR dfs_FlushFtTable( diff --git a/source4/torture/rpc/dfs.c b/source4/torture/rpc/dfs.c index 56b0febb4d..5596a5cadf 100644 --- a/source4/torture/rpc/dfs.c +++ b/source4/torture/rpc/dfs.c @@ -522,6 +522,80 @@ static bool test_StdRoot(struct dcerpc_pipe *p, return ret; } +static bool test_GetDcAddress(struct dcerpc_pipe *p, + TALLOC_CTX *mem_ctx, + const char *host) +{ + NTSTATUS status; + struct dfs_GetDcAddress r; + uint8_t is_root = 0; + uint32_t ttl = 0; + const char *ptr; + + printf("Testing GetDcAddress\n"); + + ptr = host; + + r.in.servername = host; + r.in.server_fullname = r.out.server_fullname = &ptr; + r.in.is_root = r.out.is_root = &is_root; + r.in.ttl = r.out.ttl = &ttl; + + status = dcerpc_dfs_GetDcAddress(p, mem_ctx, &r); + if (!NT_STATUS_IS_OK(status)) { + printf("GetDcAddress failed - %s\n", nt_errstr(status)); + return false; + } else if (!W_ERROR_IS_OK(r.out.result)) { + printf("dfs_GetDcAddress failed - %s\n", + win_errstr(r.out.result)); + return false; + } + + return true; +} + +static bool test_SetDcAddress(struct dcerpc_pipe *p, + TALLOC_CTX *mem_ctx, + const char *host) +{ + NTSTATUS status; + struct dfs_SetDcAddress r; + + printf("Testing SetDcAddress\n"); + + r.in.servername = host; + r.in.server_fullname = host; + r.in.flags = 0; + r.in.ttl = 1000; + + status = dcerpc_dfs_SetDcAddress(p, mem_ctx, &r); + if (!NT_STATUS_IS_OK(status)) { + printf("SetDcAddress failed - %s\n", nt_errstr(status)); + return false; + } else if (!W_ERROR_IS_OK(r.out.result)) { + printf("dfs_SetDcAddress failed - %s\n", + win_errstr(r.out.result)); + return false; + } + + return true; +} + +static bool test_DcAddress(struct dcerpc_pipe *p, + TALLOC_CTX *mem_ctx, + const char *host) +{ + if (!test_GetDcAddress(p, mem_ctx, host)) { + return false; + } + + if (!test_SetDcAddress(p, mem_ctx, host)) { + return false; + } + + return true; +} + bool torture_rpc_dfs(struct torture_context *torture) { NTSTATUS status; @@ -538,6 +612,7 @@ bool torture_rpc_dfs(struct torture_context *torture) ret &= test_Enum(p, torture); ret &= test_EnumEx(p, torture, host); ret &= test_StdRoot(p, torture, host); + ret &= test_DcAddress(p, torture, host); return ret; } |