summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/librpc/idl/srvsvc.idl2
-rw-r--r--source4/rpc_server/srvsvc/dcesrv_srvsvc.c8
-rw-r--r--source4/torture/rpc/srvsvc.c8
3 files changed, 7 insertions, 11 deletions
diff --git a/source4/librpc/idl/srvsvc.idl b/source4/librpc/idl/srvsvc.idl
index 1d5a678bbe..918c8ba0ca 100644
--- a/source4/librpc/idl/srvsvc.idl
+++ b/source4/librpc/idl/srvsvc.idl
@@ -1130,7 +1130,7 @@ import "security.idl", "svcctl.idl";
WERROR srvsvc_NetSrvGetInfo(
[in,unique] [string,charset(UTF16)] uint16 *server_unc,
[in] uint32 level,
- [out,switch_is(level)] srvsvc_NetSrvInfo info
+ [out,ref,switch_is(level)] srvsvc_NetSrvInfo *info
);
/******************/
diff --git a/source4/rpc_server/srvsvc/dcesrv_srvsvc.c b/source4/rpc_server/srvsvc/dcesrv_srvsvc.c
index f0da2b099d..d14d80b806 100644
--- a/source4/rpc_server/srvsvc/dcesrv_srvsvc.c
+++ b/source4/rpc_server/srvsvc/dcesrv_srvsvc.c
@@ -1468,7 +1468,7 @@ static WERROR dcesrv_srvsvc_NetSrvGetInfo(struct dcesrv_call_state *dce_call, TA
{
struct dcesrv_context *dce_ctx = dce_call->conn->dce_ctx;
- ZERO_STRUCT(r->out);
+ ZERO_STRUCTP(r->out.info);
switch (r->in.level) {
case 100:
@@ -1482,7 +1482,7 @@ static WERROR dcesrv_srvsvc_NetSrvGetInfo(struct dcesrv_call_state *dce_call, TA
info100->server_name = dcesrv_common_get_server_name(mem_ctx, dce_ctx, r->in.server_unc);
W_ERROR_HAVE_NO_MEMORY(info100->server_name);
- r->out.info.info100 = info100;
+ r->out.info->info100 = info100;
return WERR_OK;
}
case 101:
@@ -1502,7 +1502,7 @@ static WERROR dcesrv_srvsvc_NetSrvGetInfo(struct dcesrv_call_state *dce_call, TA
info101->comment = talloc_strdup(mem_ctx, lp_serverstring(dce_ctx->lp_ctx));
W_ERROR_HAVE_NO_MEMORY(info101->comment);
- r->out.info.info101 = info101;
+ r->out.info->info101 = info101;
return WERR_OK;
}
case 102:
@@ -1531,7 +1531,7 @@ static WERROR dcesrv_srvsvc_NetSrvGetInfo(struct dcesrv_call_state *dce_call, TA
info102->userpath = dcesrv_common_get_userpath(mem_ctx, dce_ctx);
W_ERROR_HAVE_NO_MEMORY(info102->userpath);
- r->out.info.info102 = info102;
+ r->out.info->info102 = info102;
return WERR_OK;
}
default:
diff --git a/source4/torture/rpc/srvsvc.c b/source4/torture/rpc/srvsvc.c
index a6536faec7..8ce2321369 100644
--- a/source4/torture/rpc/srvsvc.c
+++ b/source4/torture/rpc/srvsvc.c
@@ -766,19 +766,15 @@ static bool test_NetSrvGetInfo(struct torture_context *tctx,
{
NTSTATUS status;
struct srvsvc_NetSrvGetInfo r;
- struct srvsvc_NetSrvInfo503 i503;
+ union srvsvc_NetSrvInfo info;
uint32_t levels[] = {100, 101, 102, 502, 503};
int i;
- uint32_t resume_handle;
-
- ZERO_STRUCT(i503);
r.in.server_unc = talloc_asprintf(tctx,"\\\\%s",dcerpc_server_name(p));
for (i=0;i<ARRAY_SIZE(levels);i++) {
- ZERO_STRUCT(r.out);
- resume_handle = 0;
r.in.level = levels[i];
+ r.out.info = &info;
torture_comment(tctx, "testing NetSrvGetInfo level %u\n", r.in.level);
status = dcerpc_srvsvc_NetSrvGetInfo(p, tctx, &r);
torture_assert_ntstatus_ok(tctx, status, "NetSrvGetInfo failed");