delete.c

来自「samba最新软件」· C语言 代码 · 共 1,546 行 · 第 1/4 页

C
1,546
字号
	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 + =
减小字号Ctrl + -
显示快捷键?