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 + -
显示快捷键?