mirror of
https://github.com/samba-team/samba.git
synced 2025-02-02 09:47:23 +03:00
opendb: return the path that should be deleted in odb_close_file()
That means the last close returns the path name if the delete_on_close flag is set. metze (This used to be commit fc27730bad24e8dddaa2e7f754a16811e38a2f60)
This commit is contained in:
parent
2a209a6a9d
commit
85d58175c8
@ -409,10 +409,12 @@ static NTSTATUS odb_ctdb_open_file_pending(struct odb_lock *lck, void *private)
|
||||
/*
|
||||
remove a opendb entry
|
||||
*/
|
||||
static NTSTATUS odb_ctdb_close_file(struct odb_lock *lck, void *file_handle)
|
||||
static NTSTATUS odb_ctdb_close_file(struct odb_lock *lck, void *file_handle,
|
||||
const char **_delete_path)
|
||||
{
|
||||
struct odb_context *odb = lck->odb;
|
||||
struct opendb_file file;
|
||||
const char *delete_path = NULL;
|
||||
int i;
|
||||
NTSTATUS status;
|
||||
|
||||
@ -448,6 +450,15 @@ static NTSTATUS odb_ctdb_close_file(struct odb_lock *lck, void *file_handle)
|
||||
file.num_pending = 0;
|
||||
|
||||
file.num_entries--;
|
||||
|
||||
if (file.num_entries == 0 && file.delete_on_close) {
|
||||
delete_path = talloc_strdup(lck, file.path);
|
||||
NT_STATUS_HAVE_NO_MEMORY(delete_path);
|
||||
}
|
||||
|
||||
if (_delete_path) {
|
||||
*_delete_path = delete_path;
|
||||
}
|
||||
|
||||
return odb_push_record(lck, &file);
|
||||
}
|
||||
|
@ -118,9 +118,10 @@ _PUBLIC_ NTSTATUS odb_open_file_pending(struct odb_lock *lck, void *private)
|
||||
/*
|
||||
remove a opendb entry
|
||||
*/
|
||||
_PUBLIC_ NTSTATUS odb_close_file(struct odb_lock *lck, void *file_handle)
|
||||
_PUBLIC_ NTSTATUS odb_close_file(struct odb_lock *lck, void *file_handle,
|
||||
const char **delete_path)
|
||||
{
|
||||
return ops->odb_close_file(lck, file_handle);
|
||||
return ops->odb_close_file(lck, file_handle, delete_path);
|
||||
}
|
||||
|
||||
|
||||
|
@ -32,7 +32,8 @@ struct opendb_ops {
|
||||
uint32_t open_disposition, bool break_to_none,
|
||||
uint32_t oplock_level, uint32_t *oplock_granted);
|
||||
NTSTATUS (*odb_open_file_pending)(struct odb_lock *lck, void *private);
|
||||
NTSTATUS (*odb_close_file)(struct odb_lock *lck, void *file_handle);
|
||||
NTSTATUS (*odb_close_file)(struct odb_lock *lck, void *file_handle,
|
||||
const char **delete_path);
|
||||
NTSTATUS (*odb_remove_pending)(struct odb_lock *lck, void *private);
|
||||
NTSTATUS (*odb_rename)(struct odb_lock *lck, const char *path);
|
||||
NTSTATUS (*odb_set_delete_on_close)(struct odb_lock *lck, bool del_on_close);
|
||||
|
@ -527,10 +527,12 @@ static NTSTATUS odb_tdb_open_file_pending(struct odb_lock *lck, void *private)
|
||||
/*
|
||||
remove a opendb entry
|
||||
*/
|
||||
static NTSTATUS odb_tdb_close_file(struct odb_lock *lck, void *file_handle)
|
||||
static NTSTATUS odb_tdb_close_file(struct odb_lock *lck, void *file_handle,
|
||||
const char **_delete_path)
|
||||
{
|
||||
struct odb_context *odb = lck->odb;
|
||||
struct opendb_file file;
|
||||
const char *delete_path = NULL;
|
||||
int i;
|
||||
NTSTATUS status;
|
||||
|
||||
@ -566,7 +568,16 @@ static NTSTATUS odb_tdb_close_file(struct odb_lock *lck, void *file_handle)
|
||||
file.num_pending = 0;
|
||||
|
||||
file.num_entries--;
|
||||
|
||||
|
||||
if (file.num_entries == 0 && file.delete_on_close) {
|
||||
delete_path = talloc_strdup(lck, file.path);
|
||||
NT_STATUS_HAVE_NO_MEMORY(delete_path);
|
||||
}
|
||||
|
||||
if (_delete_path) {
|
||||
*_delete_path = delete_path;
|
||||
}
|
||||
|
||||
return odb_push_record(lck, &file);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user