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

📄 setfileinfo.c

📁 samba最新软件
💻 C
📖 第 1 页 / 共 2 页
字号:
	CHECK_CALL_FNUM(ALLOCATION_INFORMATION, NT_STATUS_OK);	CHECK_VALUE(ALL_INFO, all_info, size, 0);	CHECK_VALUE(ALL_INFO, all_info, alloc_size, 0);	CHECK_CALL_PATH(ALLOCATION_INFORMATION, NT_STATUS_OK);	CHECK_VALUE(ALL_INFO, all_info, size, 0);	CHECK_VALUE(ALL_INFO, all_info, alloc_size, 0);	sfinfo.allocation_info.in.alloc_size = 4096;	CHECK_CALL_FNUM(ALLOCATION_INFORMATION, NT_STATUS_OK);	CHECK_VALUE(ALL_INFO, all_info, alloc_size, 4096);	CHECK_VALUE(ALL_INFO, all_info, size, 0);	/* setting the allocation size up via setpathinfo seems	   to be broken in w2k3 */	CHECK_CALL_PATH(ALLOCATION_INFORMATION, NT_STATUS_OK);	CHECK_VALUE(ALL_INFO, all_info, alloc_size, 0);	CHECK_VALUE(ALL_INFO, all_info, size, 0);	printf("test end_of_file_info level\n");	sfinfo.end_of_file_info.in.size = 37;	CHECK_CALL_FNUM(END_OF_FILE_INFO, NT_STATUS_OK);	CHECK_VALUE(ALL_INFO, all_info, size, 37);	sfinfo.end_of_file_info.in.size = 7;	CHECK_CALL_FNUM(END_OF_FILE_INFO, NT_STATUS_OK);	CHECK_VALUE(ALL_INFO, all_info, size, 7);	sfinfo.end_of_file_info.in.size = 37;	CHECK_CALL_FNUM(END_OF_FILE_INFORMATION, NT_STATUS_OK);	CHECK_VALUE(ALL_INFO, all_info, size, 37);	CHECK_CALL_PATH(END_OF_FILE_INFORMATION, NT_STATUS_OK);	CHECK_VALUE(ALL_INFO, all_info, size, 37);	sfinfo.end_of_file_info.in.size = 7;	CHECK_CALL_FNUM(END_OF_FILE_INFORMATION, NT_STATUS_OK);	CHECK_VALUE(ALL_INFO, all_info, size, 7);	CHECK_CALL_PATH(END_OF_FILE_INFORMATION, NT_STATUS_OK);	CHECK_VALUE(ALL_INFO, all_info, size, 7);	printf("test position_information level\n");	sfinfo.position_information.in.position = 123456;	CHECK_CALL_FNUM(POSITION_INFORMATION, NT_STATUS_OK);	CHECK_VALUE(POSITION_INFORMATION, position_information, position, 123456);	CHECK_CALL_PATH(POSITION_INFORMATION, NT_STATUS_OK);	CHECK_VALUE(POSITION_INFORMATION, position_information, position, 0);	printf("test mode_information level\n");	sfinfo.mode_information.in.mode = 2;	CHECK_CALL_FNUM(MODE_INFORMATION, NT_STATUS_OK);	CHECK_VALUE(MODE_INFORMATION, mode_information, mode, 2);	CHECK_CALL_PATH(MODE_INFORMATION, NT_STATUS_OK);	CHECK_VALUE(MODE_INFORMATION, mode_information, mode, 0);	sfinfo.mode_information.in.mode = 1;	CHECK_CALL_FNUM(MODE_INFORMATION, NT_STATUS_INVALID_PARAMETER);	CHECK_CALL_PATH(MODE_INFORMATION, NT_STATUS_INVALID_PARAMETER);	sfinfo.mode_information.in.mode = 0;	CHECK_CALL_FNUM(MODE_INFORMATION, NT_STATUS_OK);	CHECK_VALUE(MODE_INFORMATION, mode_information, mode, 0);	CHECK_CALL_PATH(MODE_INFORMATION, NT_STATUS_OK);	CHECK_VALUE(MODE_INFORMATION, mode_information, mode, 0);#if 0	printf("test unix_basic level\n");	CHECK_CALL_FNUM(UNIX_BASIC, NT_STATUS_OK);	CHECK_CALL_PATH(UNIX_BASIC, NT_STATUS_OK);	printf("test unix_link level\n");	CHECK_CALL_FNUM(UNIX_LINK, NT_STATUS_OK);	CHECK_CALL_PATH(UNIX_LINK, NT_STATUS_OK);#endifdone:	smb_raw_exit(cli->session);	smbcli_close(cli->tree, fnum);	if (NT_STATUS_IS_ERR(smbcli_unlink(cli->tree, fnum_fname))) {		printf("Failed to delete %s - %s\n", fnum_fname, smbcli_errstr(cli->tree));	}	if (NT_STATUS_IS_ERR(smbcli_unlink(cli->tree, path_fname))) {		printf("Failed to delete %s - %s\n", path_fname, smbcli_errstr(cli->tree));	}	return ret;}/* * basic testing of all RAW_SFILEINFO_RENAME call */bool torture_raw_sfileinfo_rename(struct torture_context *torture,								  struct smbcli_state *cli){	bool ret = true;	int fnum_saved, d_fnum, fnum2, fnum = -1;	char *fnum_fname;	char *fnum_fname_new;	char *path_fname;	char *path_fname_new;	char *path_dname;	char *path_dname_new;	char *saved_name;	char *saved_name_new;	union smb_fileinfo finfo1, finfo2;	union smb_setfileinfo sfinfo;	NTSTATUS status, status2;	const char *call_name;	bool check_fnum;	int n = time(NULL) % 100;		asprintf(&path_fname, BASEDIR "\\fname_test_%d.txt", n);	asprintf(&path_fname_new, BASEDIR "\\fname_test_new_%d.txt", n);	asprintf(&fnum_fname, BASEDIR "\\fnum_test_%d.txt", n);	asprintf(&fnum_fname_new, BASEDIR "\\fnum_test_new_%d.txt", n);	asprintf(&path_dname, BASEDIR "\\dname_test_%d", n);	asprintf(&path_dname_new, BASEDIR "\\dname_test_new_%d", n);	if (!torture_setup_dir(cli, BASEDIR)) {		return false;	}	RECREATE_BOTH;	ZERO_STRUCT(sfinfo);	smbcli_close(cli->tree, create_complex_file(cli, torture, fnum_fname_new));	smbcli_close(cli->tree, create_complex_file(cli, torture, path_fname_new));	sfinfo.rename_information.in.overwrite = 0;	sfinfo.rename_information.in.root_fid  = 0;	sfinfo.rename_information.in.new_name  = fnum_fname_new+strlen(BASEDIR)+1;	CHECK_CALL_FNUM(RENAME_INFORMATION, NT_STATUS_OBJECT_NAME_COLLISION);	sfinfo.rename_information.in.new_name  = path_fname_new+strlen(BASEDIR)+1;	CHECK_CALL_PATH(RENAME_INFORMATION, NT_STATUS_OBJECT_NAME_COLLISION);	sfinfo.rename_information.in.new_name  = fnum_fname_new;	sfinfo.rename_information.in.overwrite = 1;	CHECK_CALL_FNUM(RENAME_INFORMATION, NT_STATUS_NOT_SUPPORTED);	sfinfo.rename_information.in.new_name  = fnum_fname_new+strlen(BASEDIR)+1;	sfinfo.rename_information.in.overwrite = 1;	CHECK_CALL_FNUM(RENAME_INFORMATION, NT_STATUS_OK);	CHECK_STR(NAME_INFO, name_info, fname.s, fnum_fname_new);	printf("Trying rename with dest file open\n");	fnum2 = create_complex_file(cli, torture, fnum_fname);	sfinfo.rename_information.in.new_name  = fnum_fname+strlen(BASEDIR)+1;	sfinfo.rename_information.in.overwrite = 1;	CHECK_CALL_FNUM(RENAME_INFORMATION, NT_STATUS_ACCESS_DENIED);	CHECK_STR(NAME_INFO, name_info, fname.s, fnum_fname_new);	fnum_saved = fnum;	fnum = fnum2;	sfinfo.disposition_info.in.delete_on_close = 1;	CHECK_CALL_FNUM(DISPOSITION_INFO, NT_STATUS_OK);	fnum = fnum_saved;	printf("Trying rename with dest file open and delete_on_close\n");	sfinfo.rename_information.in.new_name  = fnum_fname+strlen(BASEDIR)+1;	sfinfo.rename_information.in.overwrite = 1;	CHECK_CALL_FNUM(RENAME_INFORMATION, NT_STATUS_ACCESS_DENIED);	smbcli_close(cli->tree, fnum2);	CHECK_CALL_FNUM(RENAME_INFORMATION, NT_STATUS_OK);	CHECK_STR(NAME_INFO, name_info, fname.s, fnum_fname);	printf("Trying rename with source file open twice\n");	sfinfo.rename_information.in.new_name  = fnum_fname+strlen(BASEDIR)+1;	sfinfo.rename_information.in.overwrite = 1;	CHECK_CALL_FNUM(RENAME_INFORMATION, NT_STATUS_OK);	CHECK_STR(NAME_INFO, name_info, fname.s, fnum_fname);	fnum2 = create_complex_file(cli, torture, fnum_fname);	sfinfo.rename_information.in.new_name  = fnum_fname_new+strlen(BASEDIR)+1;	sfinfo.rename_information.in.overwrite = 0;	CHECK_CALL_FNUM(RENAME_INFORMATION, NT_STATUS_OK);	CHECK_STR(NAME_INFO, name_info, fname.s, fnum_fname_new);	smbcli_close(cli->tree, fnum2);	sfinfo.rename_information.in.new_name  = fnum_fname+strlen(BASEDIR)+1;	sfinfo.rename_information.in.overwrite = 0;	CHECK_CALL_FNUM(RENAME_INFORMATION, NT_STATUS_OK);	CHECK_STR(NAME_INFO, name_info, fname.s, fnum_fname);	sfinfo.rename_information.in.new_name  = path_fname_new+strlen(BASEDIR)+1;	sfinfo.rename_information.in.overwrite = 1;	CHECK_CALL_PATH(RENAME_INFORMATION, NT_STATUS_OK);	CHECK_STR(NAME_INFO, name_info, fname.s, path_fname_new);	sfinfo.rename_information.in.new_name  = fnum_fname+strlen(BASEDIR)+1;	CHECK_CALL_FNUM(RENAME_INFORMATION, NT_STATUS_OK);	CHECK_STR(NAME_INFO, name_info, fname.s, fnum_fname);	sfinfo.rename_information.in.new_name  = path_fname+strlen(BASEDIR)+1;	CHECK_CALL_PATH(RENAME_INFORMATION, NT_STATUS_OK);	CHECK_STR(NAME_INFO, name_info, fname.s, path_fname);	printf("Trying rename with a root fid\n");	status = create_directory_handle(cli->tree, BASEDIR, &d_fnum);	CHECK_STATUS(status, NT_STATUS_OK);	sfinfo.rename_information.in.new_name  = fnum_fname_new+strlen(BASEDIR)+1;	sfinfo.rename_information.in.root_fid = d_fnum;	CHECK_CALL_FNUM(RENAME_INFORMATION, NT_STATUS_INVALID_PARAMETER);	CHECK_STR(NAME_INFO, name_info, fname.s, fnum_fname);	smbcli_close(cli->tree, d_fnum);	printf("Trying rename directory\n");	if (!torture_setup_dir(cli, path_dname)) {		ret = false;		goto done;	}	saved_name = path_fname;	saved_name_new = path_fname_new;	path_fname = path_dname;	path_fname_new = path_dname_new;	sfinfo.rename_information.in.new_name  = path_dname_new+strlen(BASEDIR)+1;	sfinfo.rename_information.in.overwrite = 0;	sfinfo.rename_information.in.root_fid  = 0;	CHECK_CALL_PATH(RENAME_INFORMATION, NT_STATUS_OK);	CHECK_STR(NAME_INFO, name_info, fname.s, path_dname_new);	path_fname = saved_name;	path_fname_new = saved_name_new;	if (torture_setting_bool(torture, "samba3", false)) {		printf("SKIP: Trying rename directory with a handle\n");		printf("SKIP: Trying rename by path while a handle is open\n");		printf("SKIP: Trying rename directory by path while a handle is open\n");		goto done;	}	printf("Trying rename directory with a handle\n");	status = create_directory_handle(cli->tree, path_dname_new, &d_fnum);	fnum_saved = fnum;	fnum = d_fnum;	saved_name = fnum_fname;	saved_name_new = fnum_fname_new;	fnum_fname = path_dname;	fnum_fname_new = path_dname_new;	sfinfo.rename_information.in.new_name  = path_dname+strlen(BASEDIR)+1;	sfinfo.rename_information.in.overwrite = 0;	sfinfo.rename_information.in.root_fid  = 0;	CHECK_CALL_FNUM(RENAME_INFORMATION, NT_STATUS_OK);	CHECK_STR(NAME_INFO, name_info, fname.s, path_dname);	smbcli_close(cli->tree, d_fnum);	fnum = fnum_saved;	fnum_fname = saved_name;	fnum_fname_new = saved_name_new;	printf("Trying rename by path while a handle is open\n");	fnum_saved = fnum;	fnum = create_complex_file(cli, torture, path_fname);	sfinfo.rename_information.in.new_name  = path_fname_new+strlen(BASEDIR)+1;	sfinfo.rename_information.in.overwrite = 0;	sfinfo.rename_information.in.root_fid  = 0;	CHECK_CALL_PATH(RENAME_INFORMATION, NT_STATUS_OK);	CHECK_STR(NAME_INFO, name_info, fname.s, path_fname_new);	/* check that the handle returns the same name */	check_fnum = true;	CHECK_STR(NAME_INFO, name_info, fname.s, path_fname_new);	/* rename it back on the handle */	sfinfo.rename_information.in.new_name  = path_fname+strlen(BASEDIR)+1;	CHECK_CALL_FNUM(RENAME_INFORMATION, NT_STATUS_OK);	CHECK_STR(NAME_INFO, name_info, fname.s, path_fname);	check_fnum = false;	CHECK_STR(NAME_INFO, name_info, fname.s, path_fname);	smbcli_close(cli->tree, fnum);	fnum = fnum_saved;	printf("Trying rename directory by path while a handle is open\n");	status = create_directory_handle(cli->tree, path_dname, &d_fnum);	fnum_saved = fnum;	fnum = d_fnum;	saved_name = path_fname;	saved_name_new = path_fname_new;	path_fname = path_dname;	path_fname_new = path_dname_new;	sfinfo.rename_information.in.new_name  = path_dname_new+strlen(BASEDIR)+1;	sfinfo.rename_information.in.overwrite = 0;	sfinfo.rename_information.in.root_fid  = 0;	CHECK_CALL_PATH(RENAME_INFORMATION, NT_STATUS_OK);	CHECK_STR(NAME_INFO, name_info, fname.s, path_dname_new);	path_fname = saved_name;	path_fname_new = saved_name_new;	saved_name = fnum_fname;	saved_name_new = fnum_fname_new;	fnum_fname = path_dname;	fnum_fname_new = path_dname_new;	/* check that the handle returns the same name */	check_fnum = true;	CHECK_STR(NAME_INFO, name_info, fname.s, path_dname_new);	/* rename it back on the handle */	sfinfo.rename_information.in.new_name  = path_dname+strlen(BASEDIR)+1;	CHECK_CALL_FNUM(RENAME_INFORMATION, NT_STATUS_OK);	CHECK_STR(NAME_INFO, name_info, fname.s, path_dname);	fnum_fname = saved_name;	fnum_fname_new = saved_name_new;	saved_name = path_fname;	saved_name_new = path_fname_new;	path_fname = path_dname;	path_fname_new = path_dname_new;	check_fnum = false;	CHECK_STR(NAME_INFO, name_info, fname.s, path_dname);	smbcli_close(cli->tree, d_fnum);	fnum = fnum_saved;	path_fname = saved_name;	path_fname_new = saved_name_new;done:	smb_raw_exit(cli->session);	smbcli_deltree(cli->tree, BASEDIR);	return ret;}/*    look for the w2k3 setpathinfo STANDARD bug*/bool torture_raw_sfileinfo_bug(struct torture_context *torture,							   struct smbcli_state *cli){	const char *fname = "\\bug3.txt";	union smb_setfileinfo sfinfo;	NTSTATUS status;	int fnum;	if (!torture_setting_bool(torture, "dangerous", false))		torture_skip(torture, 			"torture_raw_sfileinfo_bug disabled - enable dangerous tests to use\n");	fnum = create_complex_file(cli, torture, fname);	smbcli_close(cli->tree, fnum);	sfinfo.generic.level = RAW_SFILEINFO_STANDARD;	sfinfo.generic.in.file.path = fname;	sfinfo.standard.in.create_time = 0;	sfinfo.standard.in.access_time = 0;	sfinfo.standard.in.write_time  = 0;	status = smb_raw_setpathinfo(cli->tree, &sfinfo);	printf("%s - %s\n", fname, nt_errstr(status));	printf("now try and delete %s\n", fname);	return true;}

⌨️ 快捷键说明

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