From: Günther Deschner Date: Mon, 20 Apr 2020 13:09:01 +0000 (+0200) Subject: s4-torture: add test for svcctl_QueryServiceConfigEx X-Git-Tag: talloc-2.4.2~805 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=80b4893aa12458f294ccadae9ec26792842f69f0;p=thirdparty%2Fsamba.git s4-torture: add test for svcctl_QueryServiceConfigEx Guenther Signed-off-by: Guenther Deschner Reviewed-by: Andrew Bartlett --- diff --git a/selftest/knownfail b/selftest/knownfail index 4e34effbbd1..e43e4deb89e 100644 --- a/selftest/knownfail +++ b/selftest/knownfail @@ -251,6 +251,8 @@ # not implemented ^samba3.rpc.svcctl.svcctl.ChangeServiceConfigW\(ad_dc\) ^samba3.rpc.svcctl.svcctl.ChangeServiceConfigW\(nt4_dc\) +^samba3.rpc.svcctl.svcctl.QueryServiceConfigEx\(ad_dc\) +^samba3.rpc.svcctl.svcctl.QueryServiceConfigEx\(nt4_dc\) # # This makes less sense when not running against an AD DC # diff --git a/source4/torture/rpc/svcctl.c b/source4/torture/rpc/svcctl.c index 746b399360e..2dcf786514b 100644 --- a/source4/torture/rpc/svcctl.c +++ b/source4/torture/rpc/svcctl.c @@ -271,6 +271,45 @@ static bool test_QueryServiceConfig2W(struct torture_context *tctx, struct dcerp return true; } +static bool test_QueryServiceConfigEx(struct torture_context *tctx, struct dcerpc_pipe *p) +{ + struct svcctl_QueryServiceConfigEx r; + struct policy_handle h, s; + NTSTATUS status; + struct dcerpc_binding_handle *b = p->binding_handle; + struct SC_RPC_CONFIG_INFOW info; + int i; + + if (!test_OpenSCManager(b, tctx, &h)) + return false; + + if (!test_OpenService(b, tctx, &h, TORTURE_DEFAULT_SERVICE, &s)) + return false; + + for (i=0; i < 16; i++) { + + r.in.hService = s; + r.in.dwInfoLevel = i; + r.out.pInfo = &info; + + status = dcerpc_svcctl_QueryServiceConfigEx_r(b, tctx, &r); + if (i == 8) { + torture_assert_ntstatus_ok(tctx, status, "QueryServiceConfigEx failed!"); + torture_assert_werr_ok(tctx, r.out.result, "QueryServiceConfigEx failed!"); + } else { + torture_assert_ntstatus_equal(tctx, status, NT_STATUS_RPC_ENUM_VALUE_OUT_OF_RANGE, "QueryServiceConfigEx failed!"); + } + } + + if (!test_CloseServiceHandle(b, tctx, &s)) + return false; + + if (!test_CloseServiceHandle(b, tctx, &h)) + return false; + + return true; +} + static bool test_QueryServiceObjectSecurity(struct torture_context *tctx, struct dcerpc_pipe *p) { @@ -721,6 +760,8 @@ struct torture_suite *torture_rpc_svcctl(TALLOC_CTX *mem_ctx) test_QueryServiceConfigW); torture_rpc_tcase_add_test(tcase, "QueryServiceConfig2W", test_QueryServiceConfig2W); + torture_rpc_tcase_add_test(tcase, "QueryServiceConfigEx", + test_QueryServiceConfigEx); torture_rpc_tcase_add_test(tcase, "QueryServiceObjectSecurity", test_QueryServiceObjectSecurity); torture_rpc_tcase_add_test(tcase, "SetServiceObjectSecurity",