wkssvc.c
来自「samba最新软件」· C语言 代码 · 共 1,453 行 · 第 1/3 页
C
1,453 行
r.in.domain_name = lp_workgroup(tctx->lp_ctx); torture_comment(tctx, "testing NetrLogonDomainNameAdd\n"); status = dcerpc_wkssvc_NetrLogonDomainNameAdd(p, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "NetrLogonDomainNameAdd failed"); torture_assert_werr_equal(tctx, r.out.result, WERR_NOT_SUPPORTED, "NetrLogonDomainNameAdd failed"); return true;}static bool test_NetrLogonDomainNameDel(struct torture_context *tctx, struct dcerpc_pipe *p){ NTSTATUS status; struct wkssvc_NetrLogonDomainNameDel r; r.in.domain_name = lp_workgroup(tctx->lp_ctx); torture_comment(tctx, "testing NetrLogonDomainNameDel\n"); status = dcerpc_wkssvc_NetrLogonDomainNameDel(p, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "NetrLogonDomainNameDel failed"); torture_assert_werr_equal(tctx, r.out.result, WERR_NOT_SUPPORTED, "NetrLogonDomainNameDel failed"); return true;}static bool test_NetrEnumerateComputerNames_level(struct torture_context *tctx, struct dcerpc_pipe *p, uint16_t level, const char ***names, int *num_names){ NTSTATUS status; struct wkssvc_NetrEnumerateComputerNames r; struct wkssvc_ComputerNamesCtr *ctr; int i; ctr = talloc_zero(tctx, struct wkssvc_ComputerNamesCtr); r.in.server_name = dcerpc_server_name(p); r.in.name_type = level; r.in.Reserved = 0; r.out.ctr = &ctr; torture_comment(tctx, "testing NetrEnumerateComputerNames level %u\n", r.in.name_type); status = dcerpc_wkssvc_NetrEnumerateComputerNames(p, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "NetrEnumerateComputerNames failed"); torture_assert_werr_ok(tctx, r.out.result, "NetrEnumerateComputerNames failed"); if ((level == NetPrimaryComputerName) && ctr->count != 1) { torture_comment(tctx, "NetrEnumerateComputerNames did not return one " "name but %u\n", ctr->count); return false; } if (names && num_names) { *num_names = 0; *names = NULL; for (i=0; i<ctr->count; i++) { if (!add_string_to_array(tctx, ctr->computer_name[i].string, names, num_names)) { return false; } } } return true;}static bool test_NetrEnumerateComputerNames(struct torture_context *tctx, struct dcerpc_pipe *p){ uint16_t levels[] = {0,1,2}; int i; for (i=0; i<ARRAY_SIZE(levels); i++) { if (!test_NetrEnumerateComputerNames_level(tctx, p, levels[i], NULL, NULL)) { return false; } } return true;}static bool test_NetrValidateName(struct torture_context *tctx, struct dcerpc_pipe *p){ NTSTATUS status; struct wkssvc_NetrValidateName r; uint16_t levels[] = {0,1,2,3,4,5}; int i; for (i=0; i<ARRAY_SIZE(levels); i++) { r.in.server_name = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p)); r.in.name = lp_workgroup(tctx->lp_ctx); r.in.Account = NULL; r.in.Password = NULL; r.in.name_type = levels[i]; torture_comment(tctx, "testing NetrValidateName level %u\n", r.in.name_type); status = dcerpc_wkssvc_NetrValidateName(p, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "NetrValidateName failed"); torture_assert_werr_equal(tctx, r.out.result, WERR_NOT_SUPPORTED, "NetrValidateName failed"); } return true;}static bool test_NetrValidateName2(struct torture_context *tctx, struct dcerpc_pipe *p){ NTSTATUS status; struct wkssvc_NetrValidateName2 r; uint16_t levels[] = {0,1,2,3,4,5}; int i; for (i=0; i<ARRAY_SIZE(levels); i++) { r.in.server_name = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p)); r.in.name = lp_workgroup(tctx->lp_ctx); r.in.Account = NULL; r.in.EncryptedPassword = NULL; r.in.name_type = levels[i]; torture_comment(tctx, "testing NetrValidateName2 level %u\n", r.in.name_type); status = dcerpc_wkssvc_NetrValidateName2(p, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "NetrValidateName2 failed"); torture_assert_werr_equal(tctx, r.out.result, WERR_RPC_E_REMOTE_DISABLED, "NetrValidateName2 failed"); } return true;}static bool test_NetrAddAlternateComputerName(struct torture_context *tctx, struct dcerpc_pipe *p){ NTSTATUS status; struct wkssvc_NetrAddAlternateComputerName r; const char **names = NULL; int num_names = 0; int i; r.in.server_name = dcerpc_server_name(p); r.in.NewAlternateMachineName = SMBTORTURE_ALTERNATE_NAME; r.in.Account = NULL; r.in.EncryptedPassword = NULL; r.in.Reserved = 0; torture_comment(tctx, "testing NetrAddAlternateComputerName\n"); status = dcerpc_wkssvc_NetrAddAlternateComputerName(p, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "NetrAddAlternateComputerName failed"); torture_assert_werr_ok(tctx, r.out.result, "NetrAddAlternateComputerName failed"); if (!test_NetrEnumerateComputerNames_level(tctx, p, NetAlternateComputerNames, &names, &num_names)) { return false; } for (i=0; i<num_names; i++) { if (strequal(names[i], SMBTORTURE_ALTERNATE_NAME)) { return true; } } torture_comment(tctx, "new alternate name not set\n"); return false;}static bool test_NetrRemoveAlternateComputerName(struct torture_context *tctx, struct dcerpc_pipe *p){ NTSTATUS status; struct wkssvc_NetrRemoveAlternateComputerName r; const char **names = NULL; int num_names = 0; int i; r.in.server_name = dcerpc_server_name(p); r.in.AlternateMachineNameToRemove = SMBTORTURE_ALTERNATE_NAME; r.in.Account = NULL; r.in.EncryptedPassword = NULL; r.in.Reserved = 0; torture_comment(tctx, "testing NetrRemoveAlternateComputerName\n"); status = dcerpc_wkssvc_NetrRemoveAlternateComputerName(p, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "NetrRemoveAlternateComputerName failed"); torture_assert_werr_ok(tctx, r.out.result, "NetrRemoveAlternateComputerName failed"); if (!test_NetrEnumerateComputerNames_level(tctx, p, NetAlternateComputerNames, &names, &num_names)) { return false; } for (i=0; i<num_names; i++) { if (strequal(names[i], SMBTORTURE_ALTERNATE_NAME)) { return false; } } return true;}static bool test_NetrSetPrimaryComputername_name(struct torture_context *tctx, struct dcerpc_pipe *p, const char *name){ NTSTATUS status; struct wkssvc_NetrSetPrimaryComputername r; r.in.server_name = dcerpc_server_name(p); r.in.primary_name = name; r.in.Account = NULL; r.in.EncryptedPassword = NULL; r.in.Reserved = 0; status = dcerpc_wkssvc_NetrSetPrimaryComputername(p, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "NetrSetPrimaryComputername failed"); torture_assert_werr_ok(tctx, r.out.result, "NetrSetPrimaryComputername failed"); return true;}static bool test_NetrSetPrimaryComputername(struct torture_context *tctx, struct dcerpc_pipe *p){ /* add alternate, check if there store old primary set new primary (alternate) check if there later: check if del is possible set primary back to origin check if there del alternate */ const char **names_o = NULL, **names = NULL; int num_names_o = 0, num_names = 0; torture_comment(tctx, "testing NetrSetPrimaryComputername\n"); if (!test_NetrAddAlternateComputerName(tctx, p)) { return false; } if (!test_NetrEnumerateComputerNames_level(tctx, p, NetPrimaryComputerName, &names_o, &num_names_o)) { return false; } if (num_names_o != 1) { return false; } if (!test_NetrSetPrimaryComputername_name(tctx, p, SMBTORTURE_ALTERNATE_NAME)) { return false; } if (!test_NetrEnumerateComputerNames_level(tctx, p, NetPrimaryComputerName, &names, &num_names)) { return false; } if (num_names != 1) { return false; } if (!strequal(names[0], SMBTORTURE_ALTERNATE_NAME)) { torture_comment(tctx, "name mismatch (%s != %s) after NetrSetPrimaryComputername!\n", names[0], SMBTORTURE_ALTERNATE_NAME); /*return false */; } if (!test_NetrSetPrimaryComputername_name(tctx, p, names_o[0])) { return false; } if (!test_NetrRemoveAlternateComputerName(tctx, p)) { return false; } return true;}static bool test_NetrRenameMachineInDomain(struct torture_context *tctx, struct dcerpc_pipe *p){ NTSTATUS status; struct wkssvc_NetrRenameMachineInDomain r; r.in.server_name = dcerpc_server_name(p); r.in.NewMachineName = SMBTORTURE_MACHINE_NAME; r.in.Account = NULL; r.in.password = NULL; r.in.RenameOptions = 0; torture_comment(tctx, "testing NetrRenameMachineInDomain\n"); status = dcerpc_wkssvc_NetrRenameMachineInDomain(p, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "NetrRenameMachineInDomain failed"); torture_assert_werr_equal(tctx, r.out.result, WERR_NOT_SUPPORTED, "NetrRenameMachineInDomain failed"); return true;}static bool test_NetrRenameMachineInDomain2_name(struct torture_context *tctx, struct dcerpc_pipe *p, const char *new_name){ NTSTATUS status; struct wkssvc_NetrRenameMachineInDomain2 r; r.in.server_name = dcerpc_server_name(p); r.in.NewMachineName = new_name; r.in.Account = NULL; r.in.EncryptedPassword = NULL; r.in.RenameOptions = 0; status = dcerpc_wkssvc_NetrRenameMachineInDomain2(p, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "NetrRenameMachineInDomain2 failed"); torture_assert_werr_ok(tctx, r.out.result, "NetrRenameMachineInDomain2 failed"); return true;}static bool test_NetrRenameMachineInDomain2(struct torture_context *tctx, struct dcerpc_pipe *p){ const char **names_o = NULL, **names = NULL; int num_names_o = 0, num_names = 0; torture_comment(tctx, "testing NetrRenameMachineInDomain2\n"); if (!test_NetrEnumerateComputerNames_level(tctx, p, NetPrimaryComputerName, &names_o, &num_names_o)) { return false; } if (num_names_o != 1) { return false; } if (!test_NetrRenameMachineInDomain2_name(tctx, p, SMBTORTURE_MACHINE_NAME)) { return false; } if (!test_NetrEnumerateComputerNames_level(tctx, p, NetPrimaryComputerName, &names, &num_names)) { return false; } if (num_names != 1) { return false; } if (strequal(names[0], names_o[0])) { test_NetrRenameMachineInDomain2_name(tctx, p, names_o[0]); return false; } if (!strequal(names[0], SMBTORTURE_MACHINE_NAME)) { test_NetrRenameMachineInDomain2_name(tctx, p, names_o[0]); return false; } if (!test_NetrRenameMachineInDomain2_name(tctx, p, names_o[0])) { return false; } if (!test_NetrEnumerateComputerNames_level(tctx, p, NetPrimaryComputerName, &names, &num_names)) { return false; } if (num_names != 1) { return false; } if (!strequal(names[0], names_o[0])) { return false; } return true;}static bool test_NetrWorkstationStatisticsGet(struct torture_context *tctx, struct dcerpc_pipe *p){ NTSTATUS status; struct wkssvc_NetrWorkstationStatisticsGet r; struct wkssvc_NetrWorkstationStatistics *info; ZERO_STRUCT(r); info = talloc_zero(tctx, struct wkssvc_NetrWorkstationStatistics); r.in.server_name = dcerpc_server_name(p); r.out.info = &info; torture_comment(tctx, "testing NetrWorkstationStatisticsGet\n"); status = dcerpc_wkssvc_NetrWorkstationStatisticsGet(p, tctx, &r); torture_assert_ntstatus_ok(tctx, status, "NetrWorkstationStatisticsGet failed"); torture_assert_werr_ok(tctx, r.out.result, "NetrWorkstationStatisticsGet failed"); return true;}/* only succeeds as long as the local messenger service is running - Guenther */static bool test_NetrMessageBufferSend(struct torture_context *tctx, struct dcerpc_pipe *p){ NTSTATUS status; struct wkssvc_NetrMessageBufferSend r; const char *message = SMBTORTURE_MESSAGE; size_t size; uint8_t *msg; size = push_ucs2_talloc(tctx, lp_iconv_convenience(tctx->lp_ctx), (void **)&msg, message);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?