summaryrefslogtreecommitdiffstats
path: root/source3/smbd/process.c
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2014-06-20 14:12:14 +0000
committerVolker Lendecke <vl@samba.org>2014-06-21 20:38:11 +0200
commit0ead434b84a7c3226ac223acc79ad0e794da3877 (patch)
tree12387237bea0a1e1a9228cc74ed4907d84e0bfb5 /source3/smbd/process.c
parent01c197dc159297d9abdc62f0d2f69d4724b9fc5c (diff)
downloadsamba-0ead434b84a7c3226ac223acc79ad0e794da3877.tar.gz
samba-0ead434b84a7c3226ac223acc79ad0e794da3877.tar.xz
samba-0ead434b84a7c3226ac223acc79ad0e794da3877.zip
smbd: Store "struct deferred_open_record" instead of anonymous data on pml
The main point is to get a talloc parent that will go away when the request is cancelled Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'source3/smbd/process.c')
-rw-r--r--source3/smbd/process.c30
1 files changed, 11 insertions, 19 deletions
diff --git a/source3/smbd/process.c b/source3/smbd/process.c
index 8a1d1d6770..b1d522dbc3 100644
--- a/source3/smbd/process.c
+++ b/source3/smbd/process.c
@@ -52,7 +52,7 @@ struct pending_message_list {
bool encrypted;
bool processed;
DATA_BLOB buf;
- DATA_BLOB private_data;
+ struct deferred_open_record *open_rec;
};
static void construct_reply_common(struct smb_request *req, const char *inbuf,
@@ -635,7 +635,7 @@ static void smbd_deferred_open_timer(struct tevent_context *ev,
static bool push_queued_message(struct smb_request *req,
struct timeval request_time,
struct timeval end_time,
- char *private_data, size_t private_len)
+ struct deferred_open_record *open_rec)
{
int msg_len = smb_len(req->inbuf) + 4;
struct pending_message_list *msg;
@@ -661,14 +661,8 @@ static bool push_queued_message(struct smb_request *req,
msg->processed = false;
SMB_PERFCOUNT_DEFER_OP(&req->pcd, &msg->pcd);
- if (private_data) {
- msg->private_data = data_blob_talloc(msg, private_data,
- private_len);
- if (msg->private_data.data == NULL) {
- DEBUG(0,("push_message: malloc fail (3)\n"));
- TALLOC_FREE(msg);
- return False;
- }
+ if (open_rec) {
+ msg->open_rec = talloc_move(msg, &open_rec);
}
#if 0
@@ -828,14 +822,14 @@ static struct pending_message_list *get_deferred_open_message_smb(
bool get_deferred_open_message_state(struct smb_request *smbreq,
struct timeval *p_request_time,
- void **pp_state)
+ struct deferred_open_record **open_rec)
{
struct pending_message_list *pml;
if (smbreq->sconn->using_smb2) {
return get_deferred_open_message_state_smb2(smbreq->smb2req,
p_request_time,
- pp_state);
+ open_rec);
}
pml = get_deferred_open_message_smb(smbreq->sconn, smbreq->mid);
@@ -845,8 +839,8 @@ bool get_deferred_open_message_state(struct smb_request *smbreq,
if (p_request_time) {
*p_request_time = pml->request_time;
}
- if (pp_state) {
- *pp_state = (void *)pml->private_data.data;
+ if (open_rec != NULL) {
+ *open_rec = pml->open_rec;
}
return true;
}
@@ -860,7 +854,7 @@ bool push_deferred_open_message_smb(struct smb_request *req,
struct timeval request_time,
struct timeval timeout,
struct file_id id,
- char *private_data, size_t priv_len)
+ struct deferred_open_record *open_rec)
{
struct timeval end_time;
@@ -869,8 +863,7 @@ bool push_deferred_open_message_smb(struct smb_request *req,
request_time,
timeout,
id,
- private_data,
- priv_len);
+ open_rec);
}
if (req->unread_bytes) {
@@ -890,8 +883,7 @@ bool push_deferred_open_message_smb(struct smb_request *req,
(unsigned int)end_time.tv_sec,
(unsigned int)end_time.tv_usec));
- return push_queued_message(req, request_time, end_time,
- private_data, priv_len);
+ return push_queued_message(req, request_time, end_time, open_rec);
}
static void smbd_sig_term_handler(struct tevent_context *ev,