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

📄 delete.c

📁 samba最新软件
💻 C
📖 第 1 页 / 共 4 页
字号:
	torture_assert(tctx, fnum2 != -1, talloc_asprintf(tctx, "open - 1 of %s failed (%s)", 		       fname, smbcli_errstr(cli1->tree)));	correct &= check_delete_on_close(tctx, cli2, fnum2, fname, false, __location__);	smbcli_close(cli2->tree, fnum2);	smbcli_close(cli1->tree, fnum1);	fnum1 = smbcli_nt_create_full(cli1->tree, fname, 0, 				      SEC_FILE_READ_EA,				      FILE_ATTRIBUTE_NORMAL, 				      NTCREATEX_SHARE_ACCESS_READ|				      NTCREATEX_SHARE_ACCESS_WRITE|				      NTCREATEX_SHARE_ACCESS_DELETE,				      NTCREATEX_DISP_OPEN,				      0, 0);	torture_assert(tctx, fnum1 != -1, talloc_asprintf(tctx, "open - 1 of %s failed (%s)", 		       fname, smbcli_errstr(cli1->tree)));	smbcli_close(cli1->tree, fnum1);	fnum1 = smbcli_nt_create_full(cli1->tree, fname_new, 0, 				      SEC_FILE_READ_EA,				      FILE_ATTRIBUTE_NORMAL, 				      NTCREATEX_SHARE_ACCESS_READ|				      NTCREATEX_SHARE_ACCESS_WRITE|				      NTCREATEX_SHARE_ACCESS_DELETE,				      NTCREATEX_DISP_OPEN,				      0, 0);	torture_assert(tctx, fnum1 == -1, 		"smbcli_open succeeded, should have "		       "failed");	return correct;}/* Test 16 ... */static bool deltest16(struct torture_context *tctx, struct smbcli_state *cli1, struct smbcli_state *cli2){	int fnum1 = -1;	int fnum2 = -1;	bool correct = true;	del_clean_area(cli1, cli2);	/* Test 16. */	/* Ensure the file doesn't already exist. */	smbcli_close(cli1->tree, fnum1);	smbcli_close(cli1->tree, fnum2);	smbcli_setatr(cli1->tree, fname, 0, 0);	smbcli_unlink(cli1->tree, fname);	/* Firstly create with all access, but delete on close. */	fnum1 = smbcli_nt_create_full(cli1->tree, fname, 0, 				      SEC_RIGHTS_FILE_ALL,				      FILE_ATTRIBUTE_NORMAL,				      NTCREATEX_SHARE_ACCESS_READ|				      NTCREATEX_SHARE_ACCESS_WRITE|				      NTCREATEX_SHARE_ACCESS_DELETE,				      NTCREATEX_DISP_CREATE,				      NTCREATEX_OPTIONS_DELETE_ON_CLOSE, 0);		torture_assert (tctx, fnum1 != -1, talloc_asprintf(tctx, "open - 1 of %s failed (%s)", fname, smbcli_errstr(cli1->tree)));	/* The delete on close bit is *not* reported as being set. */	correct &= check_delete_on_close(tctx, cli1, fnum1, fname, false, __location__);	/* The delete on close bit is *not* reported as being set. */	correct &= check_delete_on_close(tctx, cli1, -1, fname, false, __location__);	correct &= check_delete_on_close(tctx, cli2, -1, fname, false, __location__);	/* Now try opening again for read-only. */	fnum2 = smbcli_nt_create_full(cli2->tree, fname, 0, 				      SEC_RIGHTS_FILE_READ,				      FILE_ATTRIBUTE_NORMAL,				      NTCREATEX_SHARE_ACCESS_READ|				      NTCREATEX_SHARE_ACCESS_WRITE|				      NTCREATEX_SHARE_ACCESS_DELETE,				      NTCREATEX_DISP_OPEN,				      0, 0);		/* Should work. */	torture_assert(tctx, fnum2 != -1, talloc_asprintf(tctx, "open - 1 of %s failed (%s)", 		      fname, smbcli_errstr(cli1->tree)));	correct &= check_delete_on_close(tctx, cli1, fnum1, fname, false, __location__);	correct &= check_delete_on_close(tctx, cli1, -1, fname, false, __location__);	correct &= check_delete_on_close(tctx, cli2, fnum2, fname, false, __location__);	correct &= check_delete_on_close(tctx, cli2, -1, fname, false, __location__);	smbcli_close(cli1->tree, fnum1);	correct &= check_delete_on_close(tctx, cli2, fnum2, fname, true, __location__);	correct &= check_delete_on_close(tctx, cli2, -1, fname, true, __location__);	smbcli_close(cli2->tree, fnum2);	/* And the file should be deleted ! */	fnum1 = smbcli_open(cli1->tree, fname, O_RDWR, DENY_NONE);	torture_assert(tctx, fnum1 == -1, talloc_asprintf(tctx, "open of %s succeeded (should fail)", 		       fname));	return correct;}/* Test 17 ... */static bool deltest17(struct torture_context *tctx, struct smbcli_state *cli1, struct smbcli_state *cli2){	int fnum1 = -1;	int fnum2 = -1;	bool correct = true;	del_clean_area(cli1, cli2);	/* Test 17. */	/* Ensure the file doesn't already exist. */	smbcli_close(cli1->tree, fnum1);	smbcli_close(cli1->tree, fnum2);	smbcli_setatr(cli1->tree, fname, 0, 0);	smbcli_unlink(cli1->tree, fname);	/* Firstly open and create with all access */	fnum1 = smbcli_nt_create_full(cli1->tree, fname, 0, 				      SEC_RIGHTS_FILE_ALL,				      FILE_ATTRIBUTE_NORMAL,				      NTCREATEX_SHARE_ACCESS_READ|				      NTCREATEX_SHARE_ACCESS_WRITE|				      NTCREATEX_SHARE_ACCESS_DELETE,				      NTCREATEX_DISP_CREATE, 				      0, 0);	torture_assert(tctx, fnum1 != -1, talloc_asprintf(tctx, "open - 1 of %s failed (%s)", 		       fname, smbcli_errstr(cli1->tree)));	/* And close - just to create the file. */	smbcli_close(cli1->tree, fnum1);		/* Next open with all access, but add delete on close. */	fnum1 = smbcli_nt_create_full(cli1->tree, fname, 0, 				      SEC_RIGHTS_FILE_ALL,				      FILE_ATTRIBUTE_NORMAL,				      NTCREATEX_SHARE_ACCESS_READ|				      NTCREATEX_SHARE_ACCESS_WRITE|				      NTCREATEX_SHARE_ACCESS_DELETE,				      NTCREATEX_DISP_OPEN,				      NTCREATEX_OPTIONS_DELETE_ON_CLOSE, 0);		torture_assert(tctx, fnum1 != -1, talloc_asprintf(tctx, "open - 1 of %s failed (%s)", 		       fname, smbcli_errstr(cli1->tree)));	/* The delete on close bit is *not* reported as being set. */	correct &= check_delete_on_close(tctx, cli1, fnum1, fname, false, __location__);	/* Now try opening again for read-only. */	fnum2 = smbcli_nt_create_full(cli1->tree, fname, 0, 				      SEC_RIGHTS_FILE_READ|				      SEC_STD_DELETE,				      FILE_ATTRIBUTE_NORMAL,				      NTCREATEX_SHARE_ACCESS_READ|				      NTCREATEX_SHARE_ACCESS_WRITE|				      NTCREATEX_SHARE_ACCESS_DELETE,				      NTCREATEX_DISP_OPEN,				      0, 0);		/* Should work. */	torture_assert(tctx, fnum2 != -1, talloc_asprintf(tctx, "open - 1 of %s failed (%s)", 		       fname, smbcli_errstr(cli1->tree)));	/* still not reported as being set on either */	correct &= check_delete_on_close(tctx, cli1, fnum1, fname, false, __location__);	correct &= check_delete_on_close(tctx, cli1, fnum2, fname, false, __location__);	smbcli_close(cli1->tree, fnum1);	correct &= check_delete_on_close(tctx, cli1, fnum2, fname, false, __location__);	smbcli_close(cli1->tree, fnum2);	/* See if the file is deleted - shouldn't be.... */	fnum1 = smbcli_open(cli1->tree, fname, O_RDWR, DENY_NONE);	torture_assert(tctx, fnum1 != -1, talloc_asprintf(tctx, "open of %s failed (should succeed) - %s", 		       fname, smbcli_errstr(cli1->tree)));	return correct;}/* Test 18 ... */static bool deltest18(struct torture_context *tctx, struct smbcli_state *cli1, struct smbcli_state *cli2){	int fnum1 = -1;	int fnum2 = -1;	bool correct = true;	del_clean_area(cli1, cli2);	/* Test 18. With directories. */	/* Ensure the file doesn't already exist. */	smbcli_close(cli1->tree, fnum1);	smbcli_close(cli1->tree, fnum2);	smbcli_deltree(cli1->tree, dname);	/* Firstly create with all access, but delete on close. */	fnum1 = smbcli_nt_create_full(cli1->tree, dname, 0, 				      SEC_FILE_READ_DATA|				      SEC_FILE_WRITE_DATA|				      SEC_STD_DELETE,				      FILE_ATTRIBUTE_DIRECTORY,				      NTCREATEX_SHARE_ACCESS_READ|				      NTCREATEX_SHARE_ACCESS_WRITE|				      NTCREATEX_SHARE_ACCESS_DELETE,				      NTCREATEX_DISP_CREATE,				      NTCREATEX_OPTIONS_DIRECTORY|NTCREATEX_OPTIONS_DELETE_ON_CLOSE, 0);		torture_assert(tctx, fnum1 != -1, talloc_asprintf(tctx, "open - 1 of %s failed (%s)", 		       dname, smbcli_errstr(cli1->tree)));	/* The delete on close bit is *not* reported as being set. */	correct &= check_delete_on_close(tctx, cli1, fnum1, dname, false, __location__);	/* Now try opening again for read-only. */	fnum2 = smbcli_nt_create_full(cli1->tree, dname, 0, 				      SEC_RIGHTS_FILE_READ,				      FILE_ATTRIBUTE_DIRECTORY,				      NTCREATEX_SHARE_ACCESS_READ|				      NTCREATEX_SHARE_ACCESS_WRITE|				      NTCREATEX_SHARE_ACCESS_DELETE,				      NTCREATEX_DISP_OPEN,				      NTCREATEX_OPTIONS_DIRECTORY, 0);		/* Should work. */	torture_assert(tctx, fnum2 != -1, talloc_asprintf(tctx, "open - 1 of %s failed (%s)", 		       dname, smbcli_errstr(cli1->tree)));	correct &= check_delete_on_close(tctx, cli1, fnum1, dname, false, __location__);	correct &= check_delete_on_close(tctx, cli1, fnum2, dname, false, __location__);	smbcli_close(cli1->tree, fnum1);	correct &= check_delete_on_close(tctx, cli1, fnum2, dname, true, __location__);	smbcli_close(cli1->tree, fnum2);	/* And the directory should be deleted ! */	fnum1 = smbcli_nt_create_full(cli1->tree, dname, 0, 				      SEC_RIGHTS_FILE_READ,				      FILE_ATTRIBUTE_DIRECTORY,				      NTCREATEX_SHARE_ACCESS_READ|				      NTCREATEX_SHARE_ACCESS_WRITE|				      NTCREATEX_SHARE_ACCESS_DELETE,				      NTCREATEX_DISP_OPEN,				      NTCREATEX_OPTIONS_DIRECTORY, 0);	torture_assert(tctx, fnum1 == -1, talloc_asprintf(tctx, "open of %s succeeded (should fail)", 		       dname));	return correct;}/* Test 19 ... */static bool deltest19(struct torture_context *tctx, struct smbcli_state *cli1, struct smbcli_state *cli2){	int fnum1 = -1;	int fnum2 = -1;	bool correct = true;	del_clean_area(cli1, cli2);	/* Test 19. */	smbcli_deltree(cli1->tree, dname);	/* Firstly open and create with all access */	fnum1 = smbcli_nt_create_full(cli1->tree, dname, 0, 				      SEC_FILE_READ_DATA|				      SEC_FILE_WRITE_DATA|				      SEC_STD_DELETE,				      FILE_ATTRIBUTE_DIRECTORY,				      NTCREATEX_SHARE_ACCESS_READ|				      NTCREATEX_SHARE_ACCESS_WRITE|				      NTCREATEX_SHARE_ACCESS_DELETE,				      NTCREATEX_DISP_CREATE,				      NTCREATEX_OPTIONS_DIRECTORY, 0);		torture_assert(tctx, fnum1 != -1, talloc_asprintf(tctx, "open - 1 of %s failed (%s)", 		       dname, smbcli_errstr(cli1->tree)));	/* And close - just to create the directory. */	smbcli_close(cli1->tree, fnum1);		/* Next open with all access, but add delete on close. */	fnum1 = smbcli_nt_create_full(cli1->tree, dname, 0, 				      SEC_FILE_READ_DATA|				      SEC_FILE_WRITE_DATA|				      SEC_STD_DELETE,				      FILE_ATTRIBUTE_DIRECTORY,				      NTCREATEX_SHARE_ACCESS_READ|				      NTCREATEX_SHARE_ACCESS_WRITE|				      NTCREATEX_SHARE_ACCESS_DELETE,				      NTCREATEX_DISP_OPEN,				      NTCREATEX_OPTIONS_DIRECTORY|NTCREATEX_OPTIONS_DELETE_ON_CLOSE, 0);		torture_assert(tctx, fnum1 != -1, 		talloc_asprintf(tctx, "open - 1 of %s failed (%s)", fname, smbcli_errstr(cli1->tree)));	/* The delete on close bit is *not* reported as being set. */	correct &= check_delete_on_close(tctx, cli1, fnum1, dname, false, __location__);	/* Now try opening again for read-only. */	fnum2 = smbcli_nt_create_full(cli1->tree, dname, 0, 				      SEC_RIGHTS_FILE_READ,				      FILE_ATTRIBUTE_DIRECTORY,				      NTCREATEX_SHARE_ACCESS_READ|				      NTCREATEX_SHARE_ACCESS_WRITE|				      NTCREATEX_SHARE_ACCESS_DELETE,				      NTCREATEX_DISP_OPEN,				      NTCREATEX_OPTIONS_DIRECTORY, 0);		/* Should work. */	torture_assert(tctx, fnum2 != -1, talloc_asprintf(tctx, "open - 1 of %s failed (%s)", 		       dname, smbcli_errstr(cli1->tree)));	smbcli_close(cli1->tree, fnum1);	correct &= check_delete_on_close(tctx, cli1, fnum2, dname, true, __location__);	smbcli_close(cli1->tree, fnum2);	/* See if the file is deleted - for a directory this seems to be true ! */	fnum1 = smbcli_nt_create_full(cli1->tree, dname, 0, 				      SEC_RIGHTS_FILE_READ,				      FILE_ATTRIBUTE_DIRECTORY,				      NTCREATEX_SHARE_ACCESS_READ|				      NTCREATEX_SHARE_ACCESS_WRITE|				      NTCREATEX_SHARE_ACCESS_DELETE,				      NTCREATEX_DISP_OPEN,				      NTCREATEX_OPTIONS_DIRECTORY, 0);	CHECK_STATUS(cli1, NT_STATUS_OBJECT_NAME_NOT_FOUND);	torture_assert(tctx, fnum1 == -1, 		talloc_asprintf(tctx, "open of %s succeeded (should fail)", dname));	return correct;}/* Test 20 ... */static bool deltest20(struct torture_context *tctx, struct smbcli_state *cli1, struct smbcli_state *cli2){	int fnum1 = -1;	int dnum1 = -1;	bool correct = true;	NTSTATUS status;	del_clean_area(cli1, cli2);	/* Test 20 -- non-empty directory hardest to get right... */	if (torture_setting_bool(tctx, "samba3", false)) {		return true;	}	smbcli_deltree(cli1->tree, dname);	dnum1 = smbcli_nt_create_full(cli1->tree, dname, 0,				      SEC_FILE_READ_DATA|				      SEC_FILE_WRITE_DATA|				      SEC_STD_DELETE,				      FILE_ATTRIBUTE_DIRECTORY, 				      NTCREATEX_SHARE_ACCESS_READ|				      NTCREATEX_SHARE_ACCESS_WRITE|				      NTCREATEX_SHARE_ACCESS_DELETE,				      NTCREATEX_DISP_CREATE, 				      NTCREATEX_OPTIONS_DIRECTORY, 0);	torture_assert(tctx, dnum1 != -1, talloc_asprintf(tctx, "open of %s failed: %s!", 		       dname, smbcli_errstr(cli1->tree)));	correct &= check_delete_on_close(tctx, cli1, dnum1, dname, false, __location__);	status = smbcli_nt_delete_on_close(cli1->tree, dnum1, true);	{		char *fullname;

⌨️ 快捷键说明

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