static WERROR cmd_wkssvc_wkstagetinfo(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, int argc, const char **argv) { NTSTATUS status; WERROR werr; uint32_t level = 100; union wkssvc_NetWkstaInfo info; const char *server_name; struct dcerpc_binding_handle *b = cli->binding_handle; if (argc > 2) { printf("usage: %s <level>\n", argv[0]); return WERR_OK; } if (argc > 1) { level = atoi(argv[1]); } server_name = cli->desthost; status = dcerpc_wkssvc_NetWkstaGetInfo(b, mem_ctx, server_name, level, &info, &werr); if (!NT_STATUS_IS_OK(status)) { return ntstatus_to_werror(status); } return werr; }
WERROR NetWkstaGetInfo_r(struct libnetapi_ctx *ctx, struct NetWkstaGetInfo *r) { NTSTATUS status; WERROR werr; union wkssvc_NetWkstaInfo info; struct dcerpc_binding_handle *b; if (!r->out.buffer) { return WERR_INVALID_PARAMETER; } switch (r->in.level) { case 100: case 101: case 102: break; default: return WERR_INVALID_LEVEL; } werr = libnetapi_get_binding_handle(ctx, r->in.server_name, &ndr_table_wkssvc, &b); if (!W_ERROR_IS_OK(werr)) { goto done; } status = dcerpc_wkssvc_NetWkstaGetInfo(b, talloc_tos(), r->in.server_name, r->in.level, &info, &werr); if (!NT_STATUS_IS_OK(status)) { werr = ntstatus_to_werror(status); goto done; } if (!W_ERROR_IS_OK(werr)) { goto done; } status = map_wksta_info_to_WKSTA_INFO_buffer(ctx, r->in.level, &info, r->out.buffer); if (!NT_STATUS_IS_OK(status)) { werr = ntstatus_to_werror(status); goto done; } done: return werr; }
static bool test_NetWkstaGetInfo(struct torture_context *tctx, struct dcerpc_pipe *p) { NTSTATUS status; struct wkssvc_NetWkstaGetInfo r; union wkssvc_NetWkstaInfo info; uint16_t levels[] = {100, 101, 102, 502}; int i; r.in.server_name = dcerpc_server_name(p); r.out.info = &info; for (i=0;i<ARRAY_SIZE(levels);i++) { r.in.level = levels[i]; torture_comment(tctx, "testing NetWkstaGetInfo level %u\n", r.in.level); status = dcerpc_wkssvc_NetWkstaGetInfo(p, tctx, &r); torture_assert_ntstatus_ok(tctx, status, talloc_asprintf(tctx, "NetWkstaGetInfo level %u failed", r.in.level)); torture_assert_werr_ok(tctx, r.out.result, talloc_asprintf(tctx, "NetWkstaGetInfo level %u failed", r.in.level)); } return true; }