⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 netlogon.c

📁 samba最新软件
💻 C
📖 第 1 页 / 共 4 页
字号:
static bool test_GetDcName(struct torture_context *tctx, 			   struct dcerpc_pipe *p){	NTSTATUS status;	struct netr_GetDcName r;	r.in.logon_server = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));	r.in.domainname = lp_workgroup(tctx->lp_ctx);	status = dcerpc_netr_GetDcName(p, tctx, &r);	torture_assert_ntstatus_ok(tctx, status, "GetDcName");	torture_assert_werr_ok(tctx, r.out.result, "GetDcName");	torture_comment(tctx, "\tDC is at '%s'\n", r.out.dcname);	return true;}/*  try a netlogon LogonControl */static bool test_LogonControl(struct torture_context *tctx, 			      struct dcerpc_pipe *p){	NTSTATUS status;	struct netr_LogonControl r;	int i;	r.in.logon_server = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));	r.in.function_code = 1;	for (i=1;i<4;i++) {		r.in.level = i;		torture_comment(tctx, "Testing LogonControl level %d\n", i);		status = dcerpc_netr_LogonControl(p, tctx, &r);		torture_assert_ntstatus_ok(tctx, status, "LogonControl");	}	return true;}/*  try a netlogon GetAnyDCName*/static bool test_GetAnyDCName(struct torture_context *tctx, 			      struct dcerpc_pipe *p){	NTSTATUS status;	struct netr_GetAnyDCName r;	r.in.logon_server = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));	r.in.domainname = lp_workgroup(tctx->lp_ctx);	status = dcerpc_netr_GetAnyDCName(p, tctx, &r);	torture_assert_ntstatus_ok(tctx, status, "GetAnyDCName");	if (r.out.dcname) {	    torture_comment(tctx, "\tDC is at '%s'\n", r.out.dcname);	}	return true;}/*  try a netlogon LogonControl2*/static bool test_LogonControl2(struct torture_context *tctx, 			       struct dcerpc_pipe *p){	NTSTATUS status;	struct netr_LogonControl2 r;	int i;	r.in.logon_server = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));	r.in.function_code = NETLOGON_CONTROL_REDISCOVER;	r.in.data.domain = lp_workgroup(tctx->lp_ctx);	for (i=1;i<4;i++) {		r.in.level = i;		torture_comment(tctx, "Testing LogonControl2 level %d function %d\n", 		       i, r.in.function_code);		status = dcerpc_netr_LogonControl2(p, tctx, &r);		torture_assert_ntstatus_ok(tctx, status, "LogonControl");	}	r.in.function_code = NETLOGON_CONTROL_TC_QUERY;	r.in.data.domain = lp_workgroup(tctx->lp_ctx);	for (i=1;i<4;i++) {		r.in.level = i;		torture_comment(tctx, "Testing LogonControl2 level %d function %d\n", 		       i, r.in.function_code);		status = dcerpc_netr_LogonControl2(p, tctx, &r);		torture_assert_ntstatus_ok(tctx, status, "LogonControl");	}	r.in.function_code = NETLOGON_CONTROL_TRANSPORT_NOTIFY;	r.in.data.domain = lp_workgroup(tctx->lp_ctx);	for (i=1;i<4;i++) {		r.in.level = i;		torture_comment(tctx, "Testing LogonControl2 level %d function %d\n", 		       i, r.in.function_code);		status = dcerpc_netr_LogonControl2(p, tctx, &r);		torture_assert_ntstatus_ok(tctx, status, "LogonControl");	}	r.in.function_code = NETLOGON_CONTROL_SET_DBFLAG;	r.in.data.debug_level = ~0;	for (i=1;i<4;i++) {		r.in.level = i;		torture_comment(tctx, "Testing LogonControl2 level %d function %d\n", 		       i, r.in.function_code);		status = dcerpc_netr_LogonControl2(p, tctx, &r);		torture_assert_ntstatus_ok(tctx, status, "LogonControl");	}	return true;}/*  try a netlogon DatabaseSync2*/static bool test_DatabaseSync2(struct torture_context *tctx, 			       struct dcerpc_pipe *p,			       struct cli_credentials *machine_credentials){	NTSTATUS status;	struct netr_DatabaseSync2 r;	struct creds_CredentialState *creds;	const uint32_t database_ids[] = {0, 1, 2}; 	int i;	if (!test_SetupCredentials2(p, tctx, NETLOGON_NEG_AUTH2_FLAGS, 				    machine_credentials,				    SEC_CHAN_BDC, &creds)) {		return false;	}	r.in.logon_server = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));	r.in.computername = TEST_MACHINE_NAME;	r.in.preferredmaximumlength = (uint32_t)-1;	ZERO_STRUCT(r.in.return_authenticator);	for (i=0;i<ARRAY_SIZE(database_ids);i++) {		r.in.sync_context = 0;		r.in.database_id = database_ids[i];		r.in.restart_state = 0;		torture_comment(tctx, "Testing DatabaseSync2 of id %d\n", r.in.database_id);		do {			creds_client_authenticator(creds, &r.in.credential);			status = dcerpc_netr_DatabaseSync2(p, tctx, &r);			if (NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES))			    break;			/* Native mode servers don't do this */			if (NT_STATUS_EQUAL(status, NT_STATUS_NOT_SUPPORTED)) {				return true;			}			torture_assert_ntstatus_ok(tctx, status, "DatabaseSync2");			if (!creds_client_check(creds, &r.out.return_authenticator.cred)) {				torture_comment(tctx, "Credential chaining failed\n");			}			r.in.sync_context = r.out.sync_context;		} while (NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES));	}	return true;}/*  try a netlogon LogonControl2Ex*/static bool test_LogonControl2Ex(struct torture_context *tctx, 				 struct dcerpc_pipe *p){	NTSTATUS status;	struct netr_LogonControl2Ex r;	int i;	r.in.logon_server = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));	r.in.function_code = NETLOGON_CONTROL_REDISCOVER;	r.in.data.domain = lp_workgroup(tctx->lp_ctx);	for (i=1;i<4;i++) {		r.in.level = i;		torture_comment(tctx, "Testing LogonControl2Ex level %d function %d\n", 		       i, r.in.function_code);		status = dcerpc_netr_LogonControl2Ex(p, tctx, &r);		torture_assert_ntstatus_ok(tctx, status, "LogonControl");	}	r.in.function_code = NETLOGON_CONTROL_TC_QUERY;	r.in.data.domain = lp_workgroup(tctx->lp_ctx);	for (i=1;i<4;i++) {		r.in.level = i;		torture_comment(tctx, "Testing LogonControl2Ex level %d function %d\n", 		       i, r.in.function_code);		status = dcerpc_netr_LogonControl2Ex(p, tctx, &r);		torture_assert_ntstatus_ok(tctx, status, "LogonControl");	}	r.in.function_code = NETLOGON_CONTROL_TRANSPORT_NOTIFY;	r.in.data.domain = lp_workgroup(tctx->lp_ctx);	for (i=1;i<4;i++) {		r.in.level = i;		torture_comment(tctx, "Testing LogonControl2Ex level %d function %d\n", 		       i, r.in.function_code);		status = dcerpc_netr_LogonControl2Ex(p, tctx, &r);		torture_assert_ntstatus_ok(tctx, status, "LogonControl");	}	r.in.function_code = NETLOGON_CONTROL_SET_DBFLAG;	r.in.data.debug_level = ~0;	for (i=1;i<4;i++) {		r.in.level = i;		torture_comment(tctx, "Testing LogonControl2Ex level %d function %d\n", 		       i, r.in.function_code);		status = dcerpc_netr_LogonControl2Ex(p, tctx, &r);		torture_assert_ntstatus_ok(tctx, status, "LogonControl");	}	return true;}static bool test_netr_DsRGetForestTrustInformation(struct torture_context *tctx, 						   struct dcerpc_pipe *p, const char *trusted_domain_name) {	NTSTATUS status;	struct netr_DsRGetForestTrustInformation r;	struct lsa_ForestTrustInformation info, *info_ptr;	info_ptr = &info;	r.in.server_name = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));	r.in.trusted_domain_name = trusted_domain_name;	r.in.flags = 0;	r.out.forest_trust_info = &info_ptr;	torture_comment(tctx ,"Testing netr_DsRGetForestTrustInformation\n");	status = dcerpc_netr_DsRGetForestTrustInformation(p, tctx, &r);	torture_assert_ntstatus_ok(tctx, status, "DsRGetForestTrustInformation");	torture_assert_werr_ok(tctx, r.out.result, "DsRGetForestTrustInformation");	return true;}/*  try a netlogon netr_DsrEnumerateDomainTrusts*/static bool test_DsrEnumerateDomainTrusts(struct torture_context *tctx, 					  struct dcerpc_pipe *p){	NTSTATUS status;	struct netr_DsrEnumerateDomainTrusts r;	int i;	r.in.server_name = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));	r.in.trust_flags = 0x3f;	status = dcerpc_netr_DsrEnumerateDomainTrusts(p, tctx, &r);	torture_assert_ntstatus_ok(tctx, status, "DsrEnumerateDomaintrusts");	torture_assert_werr_ok(tctx, r.out.result, "DsrEnumerateDomaintrusts");	/* when trusted_domain_name is NULL, netr_DsRGetForestTrustInformation	 * will show non-forest trusts and all UPN suffixes of the own forest	 * as LSA_FOREST_TRUST_TOP_LEVEL_NAME types */	if (r.out.count) {		if (!test_netr_DsRGetForestTrustInformation(tctx, p, NULL)) {			return false;		}	}	for (i=0; i<r.out.count; i++) {		/* get info for transitive forest trusts */		if (r.out.trusts[i].trust_attributes & NETR_TRUST_ATTRIBUTE_FOREST_TRANSITIVE) {			if (!test_netr_DsRGetForestTrustInformation(tctx, p, 								    r.out.trusts[i].dns_name)) {				return false;			}		}	}	return true;}static bool test_netr_NetrEnumerateTrustedDomains(struct torture_context *tctx,						  struct dcerpc_pipe *p){	NTSTATUS status;	struct netr_NetrEnumerateTrustedDomains r;	struct netr_Blob trusted_domains_blob;	r.in.server_name = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));	r.out.trusted_domains_blob = &trusted_domains_blob;	status = dcerpc_netr_NetrEnumerateTrustedDomains(p, tctx, &r);	torture_assert_ntstatus_ok(tctx, status, "netr_NetrEnumerateTrustedDomains");	torture_assert_werr_ok(tctx, r.out.result, "NetrEnumerateTrustedDomains");	return true;}static bool test_netr_NetrEnumerateTrustedDomainsEx(struct torture_context *tctx,						    struct dcerpc_pipe *p){	NTSTATUS status;	struct netr_NetrEnumerateTrustedDomainsEx r;	struct netr_DomainTrustList dom_trust_list;	r.in.server_name = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));	r.out.dom_trust_list = &dom_trust_list;	status = dcerpc_netr_NetrEnumerateTrustedDomainsEx(p, tctx, &r);	torture_assert_ntstatus_ok(tctx, status, "netr_NetrEnumerateTrustedDomainsEx");	torture_assert_werr_ok(tctx, r.out.result, "NetrEnumerateTrustedDomainsEx");	return true;}static bool test_netr_DsRGetSiteName(struct dcerpc_pipe *p, struct torture_context *tctx,				     const char *computer_name, 				     const char *expected_site) {	NTSTATUS status;	struct netr_DsRGetSiteName r;	if (torture_setting_bool(tctx, "samba4", false))		torture_skip(tctx, "skipping DsRGetSiteName test against Samba4");	r.in.computer_name		= computer_name;	torture_comment(tctx, "Testing netr_DsRGetSiteName\n");	status = dcerpc_netr_DsRGetSiteName(p, tctx, &r);	torture_assert_ntstatus_ok(tctx, status, "DsRGetSiteName");	torture_assert_werr_ok(tctx, r.out.result, "DsRGetSiteName");	torture_assert_str_equal(tctx, expected_site, r.out.site, "netr_DsRGetSiteName");	r.in.computer_name		= talloc_asprintf(tctx, "\\\\%s", computer_name);	torture_comment(tctx, 			"Testing netr_DsRGetSiteName with broken computer name: %s\n", r.in.computer_name);	status = dcerpc_netr_DsRGetSiteName(p, tctx, &r);	torture_assert_ntstatus_ok(tctx, status, "DsRGetSiteName");	torture_assert_werr_equal(tctx, r.out.result, WERR_INVALID_COMPUTERNAME, "netr_DsRGetSiteName");	return true;}/*  try a netlogon netr_DsRGetDCName*/static bool test_netr_DsRGetDCName(struct torture_context *tctx, 				   struct dcerpc_pipe *p){	NTSTATUS status;	struct netr_DsRGetDCName r;	r.in.server_unc		= talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));	r.in.domain_name	= talloc_asprintf(tctx, "%s", lp_realm(tctx->lp_ctx));	r.in.domain_guid	= NULL;	r.in.site_guid	        = NULL;	r.in.flags		= DS_RETURN_DNS_NAME;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -