mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
struct make "struct shadow_copy_data" its own talloc context
This commit is contained in:
parent
0ec9a90c29
commit
d77854fbb2
@ -78,7 +78,6 @@
|
|||||||
typedef char SHADOW_COPY_LABEL[25];
|
typedef char SHADOW_COPY_LABEL[25];
|
||||||
|
|
||||||
struct shadow_copy_data {
|
struct shadow_copy_data {
|
||||||
TALLOC_CTX *mem_ctx;
|
|
||||||
/* Total number of shadow volumes currently mounted */
|
/* Total number of shadow volumes currently mounted */
|
||||||
uint32 num_volumes;
|
uint32 num_volumes;
|
||||||
/* Concatenated list of labels */
|
/* Concatenated list of labels */
|
||||||
|
@ -253,7 +253,7 @@ static int shadow_copy_get_shadow_copy_data(vfs_handle_struct *handle,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
tlabels = (SHADOW_COPY_LABEL *)TALLOC_REALLOC(shadow_copy_data->mem_ctx,
|
tlabels = (SHADOW_COPY_LABEL *)TALLOC_REALLOC(shadow_copy_data,
|
||||||
shadow_copy_data->labels,
|
shadow_copy_data->labels,
|
||||||
(shadow_copy_data->num_volumes+1)*sizeof(SHADOW_COPY_LABEL));
|
(shadow_copy_data->num_volumes+1)*sizeof(SHADOW_COPY_LABEL));
|
||||||
if (tlabels == NULL) {
|
if (tlabels == NULL) {
|
||||||
|
@ -918,7 +918,7 @@ static int shadow_copy2_get_shadow_copy2_data(vfs_handle_struct *handle,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
tlabels = talloc_realloc(shadow_copy2_data->mem_ctx,
|
tlabels = talloc_realloc(shadow_copy2_data,
|
||||||
shadow_copy2_data->labels,
|
shadow_copy2_data->labels,
|
||||||
SHADOW_COPY_LABEL, shadow_copy2_data->num_volumes+1);
|
SHADOW_COPY_LABEL, shadow_copy2_data->num_volumes+1);
|
||||||
if (tlabels == NULL) {
|
if (tlabels == NULL) {
|
||||||
|
@ -2215,7 +2215,6 @@ static void call_nt_transact_ioctl(connection_struct *conn,
|
|||||||
* it be deallocated when we return.
|
* it be deallocated when we return.
|
||||||
*/
|
*/
|
||||||
struct shadow_copy_data *shadow_data = NULL;
|
struct shadow_copy_data *shadow_data = NULL;
|
||||||
TALLOC_CTX *shadow_mem_ctx = NULL;
|
|
||||||
bool labels = False;
|
bool labels = False;
|
||||||
uint32 labels_data_count = 0;
|
uint32 labels_data_count = 0;
|
||||||
uint32 i;
|
uint32 i;
|
||||||
@ -2236,29 +2235,19 @@ static void call_nt_transact_ioctl(connection_struct *conn,
|
|||||||
labels = True;
|
labels = True;
|
||||||
}
|
}
|
||||||
|
|
||||||
shadow_mem_ctx = talloc_init("SHADOW_COPY_DATA");
|
shadow_data = TALLOC_ZERO_P(talloc_tos(),
|
||||||
if (shadow_mem_ctx == NULL) {
|
|
||||||
DEBUG(0,("talloc_init(SHADOW_COPY_DATA) failed!\n"));
|
|
||||||
reply_nterror(req, NT_STATUS_NO_MEMORY);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
shadow_data = TALLOC_ZERO_P(shadow_mem_ctx,
|
|
||||||
struct shadow_copy_data);
|
struct shadow_copy_data);
|
||||||
if (shadow_data == NULL) {
|
if (shadow_data == NULL) {
|
||||||
DEBUG(0,("TALLOC_ZERO() failed!\n"));
|
DEBUG(0,("TALLOC_ZERO() failed!\n"));
|
||||||
talloc_destroy(shadow_mem_ctx);
|
|
||||||
reply_nterror(req, NT_STATUS_NO_MEMORY);
|
reply_nterror(req, NT_STATUS_NO_MEMORY);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
shadow_data->mem_ctx = shadow_mem_ctx;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Call the VFS routine to actually do the work.
|
* Call the VFS routine to actually do the work.
|
||||||
*/
|
*/
|
||||||
if (SMB_VFS_GET_SHADOW_COPY_DATA(fsp, shadow_data, labels)!=0) {
|
if (SMB_VFS_GET_SHADOW_COPY_DATA(fsp, shadow_data, labels)!=0) {
|
||||||
talloc_destroy(shadow_data->mem_ctx);
|
TALLOC_FREE(shadow_data);
|
||||||
if (errno == ENOSYS) {
|
if (errno == ENOSYS) {
|
||||||
DEBUG(5,("FSCTL_GET_SHADOW_COPY_DATA: connectpath %s, not supported.\n",
|
DEBUG(5,("FSCTL_GET_SHADOW_COPY_DATA: connectpath %s, not supported.\n",
|
||||||
conn->connectpath));
|
conn->connectpath));
|
||||||
@ -2283,14 +2272,14 @@ static void call_nt_transact_ioctl(connection_struct *conn,
|
|||||||
if (max_data_count<data_count) {
|
if (max_data_count<data_count) {
|
||||||
DEBUG(0,("FSCTL_GET_SHADOW_COPY_DATA: max_data_count(%u) too small (%u) bytes needed!\n",
|
DEBUG(0,("FSCTL_GET_SHADOW_COPY_DATA: max_data_count(%u) too small (%u) bytes needed!\n",
|
||||||
max_data_count,data_count));
|
max_data_count,data_count));
|
||||||
talloc_destroy(shadow_data->mem_ctx);
|
TALLOC_FREE(shadow_data);
|
||||||
reply_nterror(req, NT_STATUS_BUFFER_TOO_SMALL);
|
reply_nterror(req, NT_STATUS_BUFFER_TOO_SMALL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
pdata = nttrans_realloc(ppdata, data_count);
|
pdata = nttrans_realloc(ppdata, data_count);
|
||||||
if (pdata == NULL) {
|
if (pdata == NULL) {
|
||||||
talloc_destroy(shadow_data->mem_ctx);
|
TALLOC_FREE(shadow_data);
|
||||||
reply_nterror(req, NT_STATUS_NO_MEMORY);
|
reply_nterror(req, NT_STATUS_NO_MEMORY);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2323,7 +2312,7 @@ static void call_nt_transact_ioctl(connection_struct *conn,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
talloc_destroy(shadow_data->mem_ctx);
|
TALLOC_FREE(shadow_data);
|
||||||
|
|
||||||
send_nt_replies(conn, req, NT_STATUS_OK, NULL, 0,
|
send_nt_replies(conn, req, NT_STATUS_OK, NULL, 0,
|
||||||
pdata, data_count);
|
pdata, data_count);
|
||||||
|
Loading…
Reference in New Issue
Block a user