diff options
-rw-r--r-- | source3/modules/onefs_open.c | 113 |
1 files changed, 0 insertions, 113 deletions
diff --git a/source3/modules/onefs_open.c b/source3/modules/onefs_open.c index d3ba0ac979..c5030f4ab8 100644 --- a/source3/modules/onefs_open.c +++ b/source3/modules/onefs_open.c @@ -1649,119 +1649,6 @@ static NTSTATUS onefs_open_directory(connection_struct *conn, } /* - * If a main file is opened for delete, all streams need to be checked for - * !FILE_SHARE_DELETE. Do this by opening with DELETE_ACCESS. - * If that works, delete them all by setting the delete on close and close. - */ - -static NTSTATUS open_streams_for_delete(connection_struct *conn, - const char *fname) -{ - struct stream_struct *stream_info; - files_struct **streams; - int i; - unsigned int num_streams; - TALLOC_CTX *frame = talloc_stackframe(); - NTSTATUS status; - - status = SMB_VFS_STREAMINFO(conn, NULL, fname, talloc_tos(), - &num_streams, &stream_info); - - if (NT_STATUS_EQUAL(status, NT_STATUS_NOT_IMPLEMENTED) - || NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_NOT_FOUND)) { - DEBUG(10, ("no streams around\n")); - TALLOC_FREE(frame); - return NT_STATUS_OK; - } - - if (!NT_STATUS_IS_OK(status)) { - DEBUG(10, ("SMB_VFS_STREAMINFO failed: %s\n", - nt_errstr(status))); - goto fail; - } - - DEBUG(10, ("open_streams_for_delete found %d streams\n", - num_streams)); - - if (num_streams == 0) { - TALLOC_FREE(frame); - return NT_STATUS_OK; - } - - streams = TALLOC_ARRAY(talloc_tos(), files_struct *, num_streams); - if (streams == NULL) { - DEBUG(0, ("talloc failed\n")); - status = NT_STATUS_NO_MEMORY; - goto fail; - } - - /* Open the base file */ - - for (i=0; i<num_streams; i++) { - char *streamname; - - if (strequal(stream_info[i].name, "::$DATA")) { - streams[i] = NULL; - continue; - } - - streamname = talloc_asprintf(talloc_tos(), "%s%s", fname, - stream_info[i].name); - - if (streamname == NULL) { - DEBUG(0, ("talloc_aprintf failed\n")); - status = NT_STATUS_NO_MEMORY; - goto fail; - } - - status = onefs_create_file_unixpath - (conn, /* conn */ - NULL, /* req */ - streamname, /* fname */ - DELETE_ACCESS, /* access_mask */ - FILE_SHARE_READ | FILE_SHARE_WRITE - | FILE_SHARE_DELETE, /* share_access */ - FILE_OPEN, /* create_disposition*/ - NTCREATEX_OPTIONS_PRIVATE_STREAM_DELETE, /* create_options */ - FILE_ATTRIBUTE_NORMAL, /* file_attributes */ - 0, /* oplock_request */ - 0, /* allocation_size */ - NULL, /* sd */ - NULL, /* ea_list */ - &streams[i], /* result */ - NULL, /* pinfo */ - NULL, /* fsp_data */ - NULL); /* psbuf */ - - TALLOC_FREE(streamname); - - if (!NT_STATUS_IS_OK(status)) { - DEBUG(10, ("Could not open stream %s: %s\n", - streamname, nt_errstr(status))); - break; - } - } - - /* - * don't touch the variable "status" beyond this point :-) - */ - - for (i -= 1 ; i >= 0; i--) { - if (streams[i] == NULL) { - continue; - } - - DEBUG(10, ("Closing stream # %d, %s\n", i, - streams[i]->fsp_name)); - close_file(NULL, streams[i], NORMAL_CLOSE); - } - - fail: - TALLOC_FREE(frame); - return status; -} - -/* * Wrapper around onefs_open_file_ntcreate and onefs_open_directory. */ static NTSTATUS onefs_create_file_unixpath(connection_struct *conn, |