diff options
Diffstat (limited to 'source4/torture')
-rw-r--r-- | source4/torture/rpc/svcctl.c | 143 |
1 files changed, 80 insertions, 63 deletions
diff --git a/source4/torture/rpc/svcctl.c b/source4/torture/rpc/svcctl.c index ce6a0853ab..23bf4399fa 100644 --- a/source4/torture/rpc/svcctl.c +++ b/source4/torture/rpc/svcctl.c @@ -27,7 +27,9 @@ #define TORTURE_DEFAULT_SERVICE "Spooler" -static bool test_OpenSCManager(struct dcerpc_pipe *p, struct torture_context *tctx, struct policy_handle *h) +static bool test_OpenSCManager(struct dcerpc_binding_handle *b, + struct torture_context *tctx, + struct policy_handle *h) { struct svcctl_OpenSCManagerW r; @@ -37,27 +39,32 @@ static bool test_OpenSCManager(struct dcerpc_pipe *p, struct torture_context *tc r.out.handle = h; torture_assert_ntstatus_ok(tctx, - dcerpc_svcctl_OpenSCManagerW(p, tctx, &r), + dcerpc_svcctl_OpenSCManagerW_r(b, tctx, &r), "OpenSCManager failed!"); return true; } -static bool test_CloseServiceHandle(struct dcerpc_pipe *p, struct torture_context *tctx, struct policy_handle *h) +static bool test_CloseServiceHandle(struct dcerpc_binding_handle *b, + struct torture_context *tctx, + struct policy_handle *h) { struct svcctl_CloseServiceHandle r; r.in.handle = h; r.out.handle = h; torture_assert_ntstatus_ok(tctx, - dcerpc_svcctl_CloseServiceHandle(p, tctx, &r), + dcerpc_svcctl_CloseServiceHandle_r(b, tctx, &r), "CloseServiceHandle failed"); return true; } -static bool test_OpenService(struct dcerpc_pipe *p, struct torture_context *tctx, - struct policy_handle *h, const char *name, struct policy_handle *s) +static bool test_OpenService(struct dcerpc_binding_handle *b, + struct torture_context *tctx, + struct policy_handle *h, + const char *name, + struct policy_handle *s) { struct svcctl_OpenServiceW r; @@ -67,7 +74,7 @@ static bool test_OpenService(struct dcerpc_pipe *p, struct torture_context *tctx r.out.handle = s; torture_assert_ntstatus_ok(tctx, - dcerpc_svcctl_OpenServiceW(p, tctx, &r), + dcerpc_svcctl_OpenServiceW_r(b, tctx, &r), "OpenServiceW failed!"); torture_assert_werr_ok(tctx, r.out.result, "OpenServiceW failed!"); @@ -82,24 +89,25 @@ static bool test_QueryServiceStatus(struct torture_context *tctx, struct policy_handle h, s; struct SERVICE_STATUS service_status; NTSTATUS status; + struct dcerpc_binding_handle *b = p->binding_handle; - if (!test_OpenSCManager(p, tctx, &h)) + if (!test_OpenSCManager(b, tctx, &h)) return false; - if (!test_OpenService(p, tctx, &h, TORTURE_DEFAULT_SERVICE, &s)) + if (!test_OpenService(b, tctx, &h, TORTURE_DEFAULT_SERVICE, &s)) return false; r.in.handle = &s; r.out.service_status = &service_status; - status = dcerpc_svcctl_QueryServiceStatus(p, tctx, &r); + status = dcerpc_svcctl_QueryServiceStatus_r(b, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "QueryServiceStatus failed!"); torture_assert_werr_ok(tctx, r.out.result, "QueryServiceStatus failed!"); - if (!test_CloseServiceHandle(p, tctx, &s)) + if (!test_CloseServiceHandle(b, tctx, &s)) return false; - if (!test_CloseServiceHandle(p, tctx, &h)) + if (!test_CloseServiceHandle(b, tctx, &h)) return false; return true; @@ -110,16 +118,17 @@ static bool test_QueryServiceStatusEx(struct torture_context *tctx, struct dcerp struct svcctl_QueryServiceStatusEx r; struct policy_handle h, s; NTSTATUS status; + struct dcerpc_binding_handle *b = p->binding_handle; uint32_t info_level = SVC_STATUS_PROCESS_INFO; uint8_t *buffer; uint32_t offered = 0; uint32_t needed = 0; - if (!test_OpenSCManager(p, tctx, &h)) + if (!test_OpenSCManager(b, tctx, &h)) return false; - if (!test_OpenService(p, tctx, &h, TORTURE_DEFAULT_SERVICE, &s)) + if (!test_OpenService(b, tctx, &h, TORTURE_DEFAULT_SERVICE, &s)) return false; buffer = talloc(tctx, uint8_t); @@ -130,7 +139,7 @@ static bool test_QueryServiceStatusEx(struct torture_context *tctx, struct dcerp r.out.buffer = buffer; r.out.needed = &needed; - status = dcerpc_svcctl_QueryServiceStatusEx(p, tctx, &r); + status = dcerpc_svcctl_QueryServiceStatusEx_r(b, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "QueryServiceStatusEx failed!"); if (W_ERROR_EQUAL(r.out.result, WERR_INSUFFICIENT_BUFFER)) { @@ -138,15 +147,15 @@ static bool test_QueryServiceStatusEx(struct torture_context *tctx, struct dcerp buffer = talloc_array(tctx, uint8_t, needed); r.out.buffer = buffer; - status = dcerpc_svcctl_QueryServiceStatusEx(p, tctx, &r); + status = dcerpc_svcctl_QueryServiceStatusEx_r(b, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "QueryServiceStatusEx failed!"); torture_assert_werr_ok(tctx, r.out.result, "QueryServiceStatusEx failed!"); } - if (!test_CloseServiceHandle(p, tctx, &s)) + if (!test_CloseServiceHandle(b, tctx, &s)) return false; - if (!test_CloseServiceHandle(p, tctx, &h)) + if (!test_CloseServiceHandle(b, tctx, &h)) return false; return true; @@ -159,14 +168,15 @@ static bool test_QueryServiceConfigW(struct torture_context *tctx, struct QUERY_SERVICE_CONFIG query; struct policy_handle h, s; NTSTATUS status; + struct dcerpc_binding_handle *b = p->binding_handle; uint32_t offered = 0; uint32_t needed = 0; - if (!test_OpenSCManager(p, tctx, &h)) + if (!test_OpenSCManager(b, tctx, &h)) return false; - if (!test_OpenService(p, tctx, &h, TORTURE_DEFAULT_SERVICE, &s)) + if (!test_OpenService(b, tctx, &h, TORTURE_DEFAULT_SERVICE, &s)) return false; r.in.handle = &s; @@ -174,21 +184,21 @@ static bool test_QueryServiceConfigW(struct torture_context *tctx, r.out.query = &query; r.out.needed = &needed; - status = dcerpc_svcctl_QueryServiceConfigW(p, tctx, &r); + status = dcerpc_svcctl_QueryServiceConfigW_r(b, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "QueryServiceConfigW failed!"); if (W_ERROR_EQUAL(r.out.result, WERR_INSUFFICIENT_BUFFER)) { r.in.offered = needed; - status = dcerpc_svcctl_QueryServiceConfigW(p, tctx, &r); + status = dcerpc_svcctl_QueryServiceConfigW_r(b, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "QueryServiceConfigW failed!"); } torture_assert_werr_ok(tctx, r.out.result, "QueryServiceConfigW failed!"); - if (!test_CloseServiceHandle(p, tctx, &s)) + if (!test_CloseServiceHandle(b, tctx, &s)) return false; - if (!test_CloseServiceHandle(p, tctx, &h)) + if (!test_CloseServiceHandle(b, tctx, &h)) return false; return true; @@ -199,16 +209,17 @@ static bool test_QueryServiceConfig2W(struct torture_context *tctx, struct dcerp struct svcctl_QueryServiceConfig2W r; struct policy_handle h, s; NTSTATUS status; + struct dcerpc_binding_handle *b = p->binding_handle; uint32_t info_level = SERVICE_CONFIG_DESCRIPTION; uint8_t *buffer; uint32_t offered = 0; uint32_t needed = 0; - if (!test_OpenSCManager(p, tctx, &h)) + if (!test_OpenSCManager(b, tctx, &h)) return false; - if (!test_OpenService(p, tctx, &h, TORTURE_DEFAULT_SERVICE, &s)) + if (!test_OpenService(b, tctx, &h, TORTURE_DEFAULT_SERVICE, &s)) return false; buffer = talloc(tctx, uint8_t); @@ -219,7 +230,7 @@ static bool test_QueryServiceConfig2W(struct torture_context *tctx, struct dcerp r.out.buffer = buffer; r.out.needed = &needed; - status = dcerpc_svcctl_QueryServiceConfig2W(p, tctx, &r); + status = dcerpc_svcctl_QueryServiceConfig2W_r(b, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "QueryServiceConfig2W failed!"); if (W_ERROR_EQUAL(r.out.result, WERR_INSUFFICIENT_BUFFER)) { @@ -227,7 +238,7 @@ static bool test_QueryServiceConfig2W(struct torture_context *tctx, struct dcerp buffer = talloc_array(tctx, uint8_t, needed); r.out.buffer = buffer; - status = dcerpc_svcctl_QueryServiceConfig2W(p, tctx, &r); + status = dcerpc_svcctl_QueryServiceConfig2W_r(b, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "QueryServiceConfig2W failed!"); torture_assert_werr_ok(tctx, r.out.result, "QueryServiceConfig2W failed!"); } @@ -237,7 +248,7 @@ static bool test_QueryServiceConfig2W(struct torture_context *tctx, struct dcerp r.out.buffer = buffer; r.out.needed = &needed; - status = dcerpc_svcctl_QueryServiceConfig2W(p, tctx, &r); + status = dcerpc_svcctl_QueryServiceConfig2W_r(b, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "QueryServiceConfig2W failed!"); if (W_ERROR_EQUAL(r.out.result, WERR_INSUFFICIENT_BUFFER)) { @@ -245,15 +256,15 @@ static bool test_QueryServiceConfig2W(struct torture_context *tctx, struct dcerp buffer = talloc_array(tctx, uint8_t, needed); r.out.buffer = buffer; - status = dcerpc_svcctl_QueryServiceConfig2W(p, tctx, &r); + status = dcerpc_svcctl_QueryServiceConfig2W_r(b, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "QueryServiceConfig2W failed!"); torture_assert_werr_ok(tctx, r.out.result, "QueryServiceConfig2W failed!"); } - if (!test_CloseServiceHandle(p, tctx, &s)) + if (!test_CloseServiceHandle(b, tctx, &s)) return false; - if (!test_CloseServiceHandle(p, tctx, &h)) + if (!test_CloseServiceHandle(b, tctx, &h)) return false; return true; @@ -264,14 +275,15 @@ static bool test_QueryServiceObjectSecurity(struct torture_context *tctx, { struct svcctl_QueryServiceObjectSecurity r; struct policy_handle h, s; + struct dcerpc_binding_handle *b = p->binding_handle; uint8_t *buffer; uint32_t needed; - if (!test_OpenSCManager(p, tctx, &h)) + if (!test_OpenSCManager(b, tctx, &h)) return false; - if (!test_OpenService(p, tctx, &h, TORTURE_DEFAULT_SERVICE, &s)) + if (!test_OpenService(b, tctx, &h, TORTURE_DEFAULT_SERVICE, &s)) return false; r.in.handle = &s; @@ -281,7 +293,7 @@ static bool test_QueryServiceObjectSecurity(struct torture_context *tctx, r.out.needed = &needed; torture_assert_ntstatus_ok(tctx, - dcerpc_svcctl_QueryServiceObjectSecurity(p, tctx, &r), + dcerpc_svcctl_QueryServiceObjectSecurity_r(b, tctx, &r), "QueryServiceObjectSecurity failed!"); torture_assert_werr_equal(tctx, r.out.result, WERR_INVALID_PARAM, "QueryServiceObjectSecurity failed!"); @@ -289,7 +301,7 @@ static bool test_QueryServiceObjectSecurity(struct torture_context *tctx, r.in.security_flags = SECINFO_DACL; torture_assert_ntstatus_ok(tctx, - dcerpc_svcctl_QueryServiceObjectSecurity(p, tctx, &r), + dcerpc_svcctl_QueryServiceObjectSecurity_r(b, tctx, &r), "QueryServiceObjectSecurity failed!"); if (W_ERROR_EQUAL(r.out.result, WERR_INSUFFICIENT_BUFFER)) { @@ -297,16 +309,16 @@ static bool test_QueryServiceObjectSecurity(struct torture_context *tctx, buffer = talloc_array(tctx, uint8_t, needed); r.out.buffer = buffer; torture_assert_ntstatus_ok(tctx, - dcerpc_svcctl_QueryServiceObjectSecurity(p, tctx, &r), + dcerpc_svcctl_QueryServiceObjectSecurity_r(b, tctx, &r), "QueryServiceObjectSecurity failed!"); } torture_assert_werr_ok(tctx, r.out.result, "QueryServiceObjectSecurity failed!"); - if (!test_CloseServiceHandle(p, tctx, &s)) + if (!test_CloseServiceHandle(b, tctx, &s)) return false; - if (!test_CloseServiceHandle(p, tctx, &h)) + if (!test_CloseServiceHandle(b, tctx, &h)) return false; return true; @@ -317,11 +329,12 @@ static bool test_StartServiceW(struct torture_context *tctx, { struct svcctl_StartServiceW r; struct policy_handle h, s; + struct dcerpc_binding_handle *b = p->binding_handle; - if (!test_OpenSCManager(p, tctx, &h)) + if (!test_OpenSCManager(b, tctx, &h)) return false; - if (!test_OpenService(p, tctx, &h, TORTURE_DEFAULT_SERVICE, &s)) + if (!test_OpenService(b, tctx, &h, TORTURE_DEFAULT_SERVICE, &s)) return false; r.in.handle = &s; @@ -329,16 +342,16 @@ static bool test_StartServiceW(struct torture_context *tctx, r.in.Arguments = NULL; torture_assert_ntstatus_ok(tctx, - dcerpc_svcctl_StartServiceW(p, tctx, &r), + dcerpc_svcctl_StartServiceW_r(b, tctx, &r), "StartServiceW failed!"); torture_assert_werr_equal(tctx, r.out.result, WERR_SERVICE_ALREADY_RUNNING, "StartServiceW failed!"); - if (!test_CloseServiceHandle(p, tctx, &s)) + if (!test_CloseServiceHandle(b, tctx, &s)) return false; - if (!test_CloseServiceHandle(p, tctx, &h)) + if (!test_CloseServiceHandle(b, tctx, &h)) return false; return true; @@ -350,11 +363,12 @@ static bool test_ControlService(struct torture_context *tctx, struct svcctl_ControlService r; struct policy_handle h, s; struct SERVICE_STATUS service_status; + struct dcerpc_binding_handle *b = p->binding_handle; - if (!test_OpenSCManager(p, tctx, &h)) + if (!test_OpenSCManager(b, tctx, &h)) return false; - if (!test_OpenService(p, tctx, &h, TORTURE_DEFAULT_SERVICE, &s)) + if (!test_OpenService(b, tctx, &h, TORTURE_DEFAULT_SERVICE, &s)) return false; r.in.handle = &s; @@ -362,15 +376,15 @@ static bool test_ControlService(struct torture_context *tctx, r.out.service_status = &service_status; torture_assert_ntstatus_ok(tctx, - dcerpc_svcctl_ControlService(p, tctx, &r), + dcerpc_svcctl_ControlService_r(b, tctx, &r), "ControlService failed!"); torture_assert_werr_equal(tctx, r.out.result, WERR_INVALID_PARAM, "ControlService failed!"); - if (!test_CloseServiceHandle(p, tctx, &s)) + if (!test_CloseServiceHandle(b, tctx, &s)) return false; - if (!test_CloseServiceHandle(p, tctx, &h)) + if (!test_CloseServiceHandle(b, tctx, &h)) return false; return true; @@ -386,8 +400,9 @@ static bool test_EnumServicesStatus(struct torture_context *tctx, struct dcerpc_ struct ENUM_SERVICE_STATUSW *service = NULL; uint32_t needed = 0; uint32_t services_returned = 0; + struct dcerpc_binding_handle *b = p->binding_handle; - if (!test_OpenSCManager(p, tctx, &h)) + if (!test_OpenSCManager(b, tctx, &h)) return false; r.in.handle = &h; @@ -400,7 +415,7 @@ static bool test_EnumServicesStatus(struct torture_context *tctx, struct dcerpc_ r.out.services_returned = &services_returned; r.out.needed = &needed; - status = dcerpc_svcctl_EnumServicesStatusW(p, tctx, &r); + status = dcerpc_svcctl_EnumServicesStatusW_r(b, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "EnumServicesStatus failed!"); @@ -408,7 +423,7 @@ static bool test_EnumServicesStatus(struct torture_context *tctx, struct dcerpc_ r.in.offered = needed; r.out.service = talloc_array(tctx, uint8_t, needed); - status = dcerpc_svcctl_EnumServicesStatusW(p, tctx, &r); + status = dcerpc_svcctl_EnumServicesStatusW_r(b, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "EnumServicesStatus failed!"); torture_assert_werr_ok(tctx, r.out.result, "EnumServicesStatus failed"); @@ -447,7 +462,7 @@ static bool test_EnumServicesStatus(struct torture_context *tctx, struct dcerpc_ service[i].status.type, service[i].status.state); } - if (!test_CloseServiceHandle(p, tctx, &h)) + if (!test_CloseServiceHandle(b, tctx, &h)) return false; return true; @@ -464,11 +479,12 @@ static bool test_EnumDependentServicesW(struct torture_context *tctx, uint32_t states[] = { SERVICE_STATE_ACTIVE, SERVICE_STATE_INACTIVE, SERVICE_STATE_ALL }; + struct dcerpc_binding_handle *b = p->binding_handle; - if (!test_OpenSCManager(p, tctx, &h)) + if (!test_OpenSCManager(b, tctx, &h)) return false; - if (!test_OpenService(p, tctx, &h, TORTURE_DEFAULT_SERVICE, &s)) + if (!test_OpenService(b, tctx, &h, TORTURE_DEFAULT_SERVICE, &s)) return false; r.in.service = &s; @@ -479,7 +495,7 @@ static bool test_EnumDependentServicesW(struct torture_context *tctx, r.out.needed = &needed; torture_assert_ntstatus_ok(tctx, - dcerpc_svcctl_EnumDependentServicesW(p, tctx, &r), + dcerpc_svcctl_EnumDependentServicesW_r(b, tctx, &r), "EnumDependentServicesW failed!"); torture_assert_werr_equal(tctx, r.out.result, WERR_INVALID_PARAM, @@ -490,7 +506,7 @@ static bool test_EnumDependentServicesW(struct torture_context *tctx, r.in.state = states[i]; torture_assert_ntstatus_ok(tctx, - dcerpc_svcctl_EnumDependentServicesW(p, tctx, &r), + dcerpc_svcctl_EnumDependentServicesW_r(b, tctx, &r), "EnumDependentServicesW failed!"); if (W_ERROR_EQUAL(r.out.result, WERR_MORE_DATA)) { @@ -498,7 +514,7 @@ static bool test_EnumDependentServicesW(struct torture_context *tctx, r.out.service_status = talloc_array(tctx, uint8_t, needed); torture_assert_ntstatus_ok(tctx, - dcerpc_svcctl_EnumDependentServicesW(p, tctx, &r), + dcerpc_svcctl_EnumDependentServicesW_r(b, tctx, &r), "EnumDependentServicesW failed!"); } @@ -507,24 +523,25 @@ static bool test_EnumDependentServicesW(struct torture_context *tctx, "EnumDependentServicesW failed"); } - if (!test_CloseServiceHandle(p, tctx, &s)) + if (!test_CloseServiceHandle(b, tctx, &s)) return false; - if (!test_CloseServiceHandle(p, tctx, &h)) + if (!test_CloseServiceHandle(b, tctx, &h)) return false; return true; } static bool test_SCManager(struct torture_context *tctx, - struct dcerpc_pipe *p) + struct dcerpc_pipe *p) { struct policy_handle h; + struct dcerpc_binding_handle *b = p->binding_handle; - if (!test_OpenSCManager(p, tctx, &h)) + if (!test_OpenSCManager(b, tctx, &h)) return false; - if (!test_CloseServiceHandle(p, tctx, &h)) + if (!test_CloseServiceHandle(b, tctx, &h)) return false; return true; |