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

📄 base.c

📁 samba最新软件
💻 C
📖 第 1 页 / 共 4 页
字号:
			res = smbcli_read(cli->tree, fnum, buf,					  random() % filesize, sizeof(buf));			torture_assert(tctx, res == sizeof(buf), 						   talloc_asprintf(tctx, "read failed: %s",										   smbcli_errstr(cli->tree)));		}		for (i=0; i<num_writes; i++) {			ssize_t res;			if (ops++ > torture_numops) {				return true;			}			res = smbcli_write(cli->tree, fnum, 0, buf,					  random() % filesize, sizeof(buf));			torture_assert(tctx, res == sizeof(buf),						   talloc_asprintf(tctx, "read failed: %s",				       smbcli_errstr(cli->tree)));		}	}	return true;}/**  tries variants of chkpath */static bool torture_chkpath_test(struct torture_context *tctx, 								 struct smbcli_state *cli){	int fnum;	bool ret;	torture_comment(tctx, "Testing valid and invalid paths\n");	/* cleanup from an old run */	smbcli_rmdir(cli->tree, "\\chkpath.dir\\dir2");	smbcli_unlink(cli->tree, "\\chkpath.dir\\*");	smbcli_rmdir(cli->tree, "\\chkpath.dir");	if (NT_STATUS_IS_ERR(smbcli_mkdir(cli->tree, "\\chkpath.dir"))) {		torture_comment(tctx, "mkdir1 failed : %s\n", smbcli_errstr(cli->tree));		return false;	}	if (NT_STATUS_IS_ERR(smbcli_mkdir(cli->tree, "\\chkpath.dir\\dir2"))) {		torture_comment(tctx, "mkdir2 failed : %s\n", smbcli_errstr(cli->tree));		return false;	}	fnum = smbcli_open(cli->tree, "\\chkpath.dir\\foo.txt", O_RDWR|O_CREAT|O_EXCL, DENY_NONE);	if (fnum == -1) {		torture_comment(tctx, "open1 failed (%s)\n", smbcli_errstr(cli->tree));		return false;	}	smbcli_close(cli->tree, fnum);	if (NT_STATUS_IS_ERR(smbcli_chkpath(cli->tree, "\\chkpath.dir"))) {		torture_comment(tctx, "chkpath1 failed: %s\n", smbcli_errstr(cli->tree));		ret = false;	}	if (NT_STATUS_IS_ERR(smbcli_chkpath(cli->tree, "\\chkpath.dir\\dir2"))) {		torture_comment(tctx, "chkpath2 failed: %s\n", smbcli_errstr(cli->tree));		ret = false;	}	if (NT_STATUS_IS_ERR(smbcli_chkpath(cli->tree, "\\chkpath.dir\\foo.txt"))) {		ret = check_error(__location__, cli, ERRDOS, ERRbadpath, 				  NT_STATUS_NOT_A_DIRECTORY);	} else {		torture_comment(tctx, "* chkpath on a file should fail\n");		ret = false;	}	if (NT_STATUS_IS_ERR(smbcli_chkpath(cli->tree, "\\chkpath.dir\\bar.txt"))) {		ret = check_error(__location__, cli, ERRDOS, ERRbadpath, 				  NT_STATUS_OBJECT_NAME_NOT_FOUND);	} else {		torture_comment(tctx, "* chkpath on a non existent file should fail\n");		ret = false;	}	if (NT_STATUS_IS_ERR(smbcli_chkpath(cli->tree, "\\chkpath.dir\\dirxx\\bar.txt"))) {		ret = check_error(__location__, cli, ERRDOS, ERRbadpath, 				  NT_STATUS_OBJECT_PATH_NOT_FOUND);	} else {		torture_comment(tctx, "* chkpath on a non existent component should fail\n");		ret = false;	}	smbcli_rmdir(cli->tree, "\\chkpath.dir\\dir2");	smbcli_unlink(cli->tree, "\\chkpath.dir\\*");	smbcli_rmdir(cli->tree, "\\chkpath.dir");	return ret;}/* * This is a test to excercise some weird Samba3 error paths. */static bool torture_samba3_errorpaths(struct torture_context *tctx){	bool nt_status_support;	struct smbcli_state *cli_nt = NULL, *cli_dos = NULL;	bool result = false;	int fnum;	const char *os2_fname = ".+,;=[].";	const char *dname = "samba3_errordir";	union smb_open io;	TALLOC_CTX *mem_ctx = talloc_init("samba3_errorpaths");	NTSTATUS status;	if (mem_ctx == NULL) {		torture_comment(tctx, "talloc_init failed\n");		return false;	}	nt_status_support = lp_nt_status_support(tctx->lp_ctx);	if (!lp_set_cmdline(tctx->lp_ctx, "nt status support", "yes")) {		torture_comment(tctx, "Could not set 'nt status support = yes'\n");		goto fail;	}	if (!torture_open_connection(&cli_nt, tctx, 0)) {		goto fail;	}	if (!lp_set_cmdline(tctx->lp_ctx, "nt status support", "no")) {		torture_comment(tctx, "Could not set 'nt status support = yes'\n");		goto fail;	}	if (!torture_open_connection(&cli_dos, tctx, 1)) {		goto fail;	}	if (!lp_set_cmdline(tctx->lp_ctx, "nt status support",			    nt_status_support ? "yes":"no")) {		torture_comment(tctx, "Could not reset 'nt status support = yes'");		goto fail;	}	smbcli_unlink(cli_nt->tree, os2_fname);	smbcli_rmdir(cli_nt->tree, dname);	if (!NT_STATUS_IS_OK(smbcli_mkdir(cli_nt->tree, dname))) {		torture_comment(tctx, "smbcli_mkdir(%s) failed: %s\n", dname,		       smbcli_errstr(cli_nt->tree));		goto fail;	}	io.generic.level = RAW_OPEN_NTCREATEX;	io.ntcreatex.in.flags = NTCREATEX_FLAGS_EXTENDED;	io.ntcreatex.in.root_fid = 0;	io.ntcreatex.in.access_mask = SEC_RIGHTS_FILE_ALL;	io.ntcreatex.in.alloc_size = 1024*1024;	io.ntcreatex.in.file_attr = FILE_ATTRIBUTE_DIRECTORY;	io.ntcreatex.in.share_access = NTCREATEX_SHARE_ACCESS_NONE;	io.ntcreatex.in.open_disposition = NTCREATEX_DISP_CREATE;	io.ntcreatex.in.create_options = 0;	io.ntcreatex.in.impersonation = NTCREATEX_IMPERSONATION_ANONYMOUS;	io.ntcreatex.in.security_flags = 0;	io.ntcreatex.in.fname = dname;	status = smb_raw_open(cli_nt->tree, mem_ctx, &io);	if (!NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {		torture_comment(tctx, "(%s) incorrect status %s should be %s\n",		       __location__, nt_errstr(status),		       nt_errstr(NT_STATUS_OBJECT_NAME_COLLISION));		goto fail;	}	status = smb_raw_open(cli_dos->tree, mem_ctx, &io);	if (!NT_STATUS_EQUAL(status, NT_STATUS_DOS(ERRDOS, ERRfilexists))) {		torture_comment(tctx, "(%s) incorrect status %s should be %s\n",		       __location__, nt_errstr(status),		       nt_errstr(NT_STATUS_DOS(ERRDOS, ERRfilexists)));		goto fail;	}	status = smbcli_mkdir(cli_nt->tree, dname);	if (!NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {		torture_comment(tctx, "(%s) incorrect status %s should be %s\n",		       __location__, nt_errstr(status),		       nt_errstr(NT_STATUS_OBJECT_NAME_COLLISION));		goto fail;	}	status = smbcli_mkdir(cli_dos->tree, dname);	if (!NT_STATUS_EQUAL(status, NT_STATUS_DOS(ERRDOS, ERRnoaccess))) {		torture_comment(tctx, "(%s) incorrect status %s should be %s\n",		       __location__, nt_errstr(status),		       nt_errstr(NT_STATUS_DOS(ERRDOS, ERRnoaccess)));		goto fail;	}	{		union smb_mkdir md;		md.t2mkdir.level = RAW_MKDIR_T2MKDIR;		md.t2mkdir.in.path = dname;		md.t2mkdir.in.num_eas = 0;		md.t2mkdir.in.eas = NULL;		status = smb_raw_mkdir(cli_nt->tree, &md);		if (!NT_STATUS_EQUAL(status,				     NT_STATUS_OBJECT_NAME_COLLISION)) {			torture_comment(				tctx, "(%s) incorrect status %s should be "				"NT_STATUS_OBJECT_NAME_COLLISION\n",				__location__, nt_errstr(status));			goto fail;		}		status = smb_raw_mkdir(cli_dos->tree, &md);		if (!NT_STATUS_EQUAL(status,				     NT_STATUS_DOS(ERRDOS, ERRrename))) {			torture_comment(tctx, "(%s) incorrect status %s "					"should be ERRDOS:ERRrename\n",					__location__, nt_errstr(status));			goto fail;		}	}	io.ntcreatex.in.create_options = NTCREATEX_OPTIONS_DIRECTORY;	status = smb_raw_open(cli_nt->tree, mem_ctx, &io);	if (!NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {		torture_comment(tctx, "(%s) incorrect status %s should be %s\n",		       __location__, nt_errstr(status),		       nt_errstr(NT_STATUS_OBJECT_NAME_COLLISION));		goto fail;	}	status = smb_raw_open(cli_dos->tree, mem_ctx, &io);	if (!NT_STATUS_EQUAL(status, NT_STATUS_DOS(ERRDOS, ERRfilexists))) {		torture_comment(tctx, "(%s) incorrect status %s should be %s\n",		       __location__, nt_errstr(status),		       nt_errstr(NT_STATUS_DOS(ERRDOS, ERRfilexists)));		goto fail;	}	{		/* Test an invalid DOS deny mode */		const char *fname = "test.txt";		fnum = smbcli_open(cli_nt->tree, fname, O_RDWR | O_CREAT, 5);		if (fnum != -1) {			torture_comment(tctx, "Open(%s) with invalid deny mode succeeded -- "			       "expected failure\n", fname);			smbcli_close(cli_nt->tree, fnum);			goto fail;		}		if (!NT_STATUS_EQUAL(smbcli_nt_error(cli_nt->tree),				     NT_STATUS_DOS(ERRDOS,ERRbadaccess))) {			torture_comment(tctx, "Expected DOS error ERRDOS/ERRbadaccess, "			       "got %s\n", smbcli_errstr(cli_nt->tree));			goto fail;		}		fnum = smbcli_open(cli_dos->tree, fname, O_RDWR | O_CREAT, 5);		if (fnum != -1) {			torture_comment(tctx, "Open(%s) with invalid deny mode succeeded -- "			       "expected failure\n", fname);			smbcli_close(cli_nt->tree, fnum);			goto fail;		}		if (!NT_STATUS_EQUAL(smbcli_nt_error(cli_nt->tree),				     NT_STATUS_DOS(ERRDOS,ERRbadaccess))) {			torture_comment(tctx, "Expected DOS error ERRDOS:ERRbadaccess, "			       "got %s\n", smbcli_errstr(cli_nt->tree));			goto fail;		}	}	{		/*		 * Samba 3.0.23 has a bug that an existing file can be opened		 * as a directory using ntcreate&x. Test this.		 */		const char *fname = "\\test_dir.txt";		fnum = smbcli_open(cli_nt->tree, fname, O_RDWR|O_CREAT,				   DENY_NONE);		if (fnum == -1) {			d_printf("(%s) smbcli_open failed: %s\n", __location__,				 smbcli_errstr(cli_nt->tree));		}		smbcli_close(cli_nt->tree, fnum);		io.generic.level = RAW_OPEN_NTCREATEX;		io.ntcreatex.in.root_fid = 0;		io.ntcreatex.in.access_mask = SEC_RIGHTS_FILE_ALL;		io.ntcreatex.in.alloc_size = 0;		io.ntcreatex.in.file_attr = FILE_ATTRIBUTE_DIRECTORY;		io.ntcreatex.in.share_access = NTCREATEX_SHARE_ACCESS_READ|			NTCREATEX_SHARE_ACCESS_WRITE|			NTCREATEX_SHARE_ACCESS_DELETE;		io.ntcreatex.in.open_disposition = NTCREATEX_DISP_OPEN;		io.ntcreatex.in.create_options = NTCREATEX_OPTIONS_DIRECTORY;		io.ntcreatex.in.impersonation =			NTCREATEX_IMPERSONATION_ANONYMOUS;		io.ntcreatex.in.security_flags = 0;		io.ntcreatex.in.fname = fname;		io.ntcreatex.in.flags = 0;		status = smb_raw_open(cli_nt->tree, mem_ctx, &io);		if (!NT_STATUS_EQUAL(status, NT_STATUS_NOT_A_DIRECTORY)) {			torture_comment(tctx, "ntcreate as dir gave %s, "					"expected NT_STATUS_NOT_A_DIRECTORY\n",					nt_errstr(status));			result = false;		}		if (NT_STATUS_IS_OK(status)) {			smbcli_close(cli_nt->tree, io.ntcreatex.out.file.fnum);		}		status = smb_raw_open(cli_dos->tree, mem_ctx, &io);		if (!NT_STATUS_EQUAL(status, NT_STATUS_DOS(ERRDOS,							   ERRbaddirectory))) {			torture_comment(tctx, "ntcreate as dir gave %s, "					"expected NT_STATUS_NOT_A_DIRECTORY\n",					nt_errstr(status));			result = false;		}		if (NT_STATUS_IS_OK(status)) {			smbcli_close(cli_dos->tree,				     io.ntcreatex.out.file.fnum);		}		smbcli_unlink(cli_nt->tree, fname);	}	if (!torture_setting_bool(tctx, "samba3", false)) {		goto done;	}	fnum = smbcli_open(cli_dos->tree, os2_fname, 			   O_RDWR | O_CREAT | O_TRUNC,			   DENY_NONE);	if (fnum != -1) {		torture_comment(tctx, "Open(%s) succeeded -- expected failure\n",		       os2_fname);		smbcli_close(cli_dos->tree, fnum);		goto fail;	}	if (!NT_STATUS_EQUAL(smbcli_nt_error(cli_dos->tree),			     NT_STATUS_DOS(ERRDOS, ERRcannotopen))) {		torture_comment(tctx, "Expected DOS error ERRDOS/ERRcannotopen, got %s\n",		       smbcli_errstr(cli_dos->tree));		goto fail;	}	fnum = smbcli_open(cli_nt->tree, os2_fname, 			   O_RDWR | O_CREAT | O_TRUNC,			   DENY_NONE);	if (fnum != -1) {		torture_comment(tctx, "Open(%s) succeeded -- expected failure\n",		       os2_fname);		smbcli_close(cli_nt->tree, fnum);		goto fail;	}	if (!NT_STATUS_EQUAL(smbcli_nt_error(cli_nt->tree),			     NT_STATUS_OBJECT_NAME_NOT_FOUND)) {		torture_comment(tctx, "Expected error NT_STATUS_OBJECT_NAME_NOT_FOUND, "		       "got %s\n", smbcli_errstr(cli_nt->tree));		goto fail;	} done:	result = true; fail:	if (cli_dos != NULL) {		torture_close_connection(cli_dos);	}	if (cli_nt != NULL) {		torture_close_connection(cli_nt);	}		return result;}NTSTATUS torture_base_init(void){	struct torture_suite *suite = torture_suite_create(talloc_autofree_context(), "BASE");	torture_suite_add_2smb_test(suite, "FDPASS", run_fdpasstest);	torture_suite_add_suite(suite, torture_base_locktest(suite));	torture_suite_add_1smb_test(suite, "UNLINK", torture_unlinktest);	torture_suite_add_1smb_test(suite, "ATTR",   run_attrtest);	torture_suite_add_1smb_test(suite, "TRANS2", run_trans2test);	torture_suite_add_simple_test(suite, "NEGNOWAIT", run_negprot_nowait);	torture_suite_add_1smb_test(suite, "DIR1",  torture_dirtest1);	torture_suite_add_1smb_test(suite, "DIR2",  torture_dirtest2);	torture_suite_add_1smb_test(suite, "DENY1",  torture_denytest1);	torture_suite_add_2smb_test(suite, "DENY2",  torture_denytest2);	torture_suite_add_2smb_test(suite, "DENY3",  torture_denytest3);	torture_suite_add_1smb_test(suite, "DENYDOS",  torture_denydos_sharing);	torture_suite_add_smb_multi_test(suite, "NTDENY1", torture_ntdenytest1);	torture_suite_add_2smb_test(suite, "NTDENY2",  torture_ntdenytest2);	torture_suite_add_1smb_test(suite, "TCON",  run_tcon_test);	torture_suite_add_1smb_test(suite, "TCONDEV",  run_tcon_devtype_test);	torture_suite_add_1smb_test(suite, "VUID", run_vuidtest);	torture_suite_add_2smb_test(suite, "RW1",  run_readwritetest);	torture_suite_add_2smb_test(suite, "OPEN", run_opentest);	torture_suite_add_smb_multi_test(suite, "DEFER_OPEN", run_deferopen);	torture_suite_add_1smb_test(suite, "XCOPY", run_xcopy);	torture_suite_add_1smb_test(suite, "IOMETER", run_iometer);	torture_suite_add_1smb_test(suite, "RENAME", torture_test_rename);	torture_suite_add_suite(suite, torture_test_delete());	torture_suite_add_1smb_test(suite, "PROPERTIES", torture_test_properties);	torture_suite_add_1smb_test(suite, "MANGLE", torture_mangle);	torture_suite_add_1smb_test(suite, "OPENATTR", torture_openattrtest);	torture_suite_add_suite(suite, torture_charset(suite));	torture_suite_add_1smb_test(suite, "CHKPATH",  torture_chkpath_test);	torture_suite_add_1smb_test(suite, "SECLEAK",  torture_sec_leak);	torture_suite_add_simple_test(suite, "DISCONNECT",  torture_disconnect);	torture_suite_add_suite(suite, torture_delay_write());	torture_suite_add_simple_test(suite, "SAMBA3ERROR", torture_samba3_errorpaths);	torture_suite_add_1smb_test(suite, "CASETABLE", torture_casetable);	torture_suite_add_1smb_test(suite, "UTABLE", torture_utable);	torture_suite_add_simple_test(suite, "SMB", torture_smb_scan);	torture_suite_add_suite(suite, torture_trans2_aliases(suite));	torture_suite_add_1smb_test(suite, "TRANS2-SCAN", torture_trans2_scan);	torture_suite_add_1smb_test(suite, "NTTRANS", torture_nttrans_scan);	torture_suite_add_simple_test(suite, "BENCH-HOLDCON", torture_holdcon);	torture_suite_add_simple_test(suite, "BENCH-READWRITE", run_benchrw);	torture_suite_add_smb_multi_test(suite, "BENCH-TORTURE", run_torture);	torture_suite_add_1smb_test(suite, "SCAN-PIPE_NUMBER", run_pipe_number);	torture_suite_add_1smb_test(suite, "SCAN-IOCTL", torture_ioctl_test);	torture_suite_add_smb_multi_test(suite, "SCAN-MAXFID", run_maxfidtest);	suite->description = talloc_strdup(suite, 					"Basic SMB tests (imported from the original smbtorture)");	torture_register_suite(suite);	return NT_STATUS_OK;}

⌨️ 快捷键说明

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