diff options
-rw-r--r-- | source4/smb_server/handle.c | 25 | ||||
-rw-r--r-- | source4/smb_server/smb/request.c | 2 | ||||
-rw-r--r-- | source4/smb_server/smb2/tcon.c | 8 |
3 files changed, 22 insertions, 13 deletions
diff --git a/source4/smb_server/handle.c b/source4/smb_server/handle.c index c2fea9e91c..07b49bf79d 100644 --- a/source4/smb_server/handle.c +++ b/source4/smb_server/handle.c @@ -76,6 +76,12 @@ struct smbsrv_handle *smbsrv_smb_handle_find(struct smbsrv_tcon *smb_tcon, return smbsrv_handle_find(&smb_tcon->handles, fnum, request_time); } +struct smbsrv_handle *smbsrv_smb2_handle_find(struct smbsrv_tcon *smb_tcon, + uint64_t hid, struct timeval request_time) +{ + return smbsrv_handle_find(&smb_tcon->handles, hid, request_time); +} + /* destroy a connection structure */ @@ -102,16 +108,19 @@ static int smbsrv_handle_destructor(void *ptr) /* find first available handle slot */ -struct smbsrv_handle *smbsrv_handle_new(struct smbsrv_request *req) +struct smbsrv_handle *smbsrv_handle_new(struct smbsrv_session *session, + struct smbsrv_tcon *tcon, + TALLOC_CTX *mem_ctx, + struct timeval request_time) { - struct smbsrv_handles_context *handles_ctx = &req->tcon->handles; + struct smbsrv_handles_context *handles_ctx = &tcon->handles; struct smbsrv_handle *handle; int i; - handle = talloc_zero(req, struct smbsrv_handle); + handle = talloc_zero(mem_ctx, struct smbsrv_handle); if (!handle) return NULL; - handle->tcon = req->tcon; - handle->session = req->session; + handle->tcon = tcon; + handle->session = session; i = idr_get_new_above(handles_ctx->idtree_hid, handle, 1, handles_ctx->idtree_limit); if (i == -1) { @@ -122,12 +131,12 @@ struct smbsrv_handle *smbsrv_handle_new(struct smbsrv_request *req) handle->session_item.handle = handle; DLIST_ADD(handles_ctx->list, handle); - DLIST_ADD(handle->session->handles, &handle->session_item); + DLIST_ADD(session->handles, &handle->session_item); talloc_set_destructor(handle, smbsrv_handle_destructor); /* now fill in some statistics */ - handle->statistics.open_time = req->request_time; - handle->statistics.last_use_time = req->request_time; + handle->statistics.open_time = request_time; + handle->statistics.last_use_time = request_time; return handle; diff --git a/source4/smb_server/smb/request.c b/source4/smb_server/smb/request.c index 2896a44d29..a08ae46852 100644 --- a/source4/smb_server/smb/request.c +++ b/source4/smb_server/smb/request.c @@ -671,7 +671,7 @@ NTSTATUS smbsrv_handle_create_new(void *private_data, struct ntvfs_request *ntvf struct smbsrv_handle *handle; struct ntvfs_handle *h; - handle = smbsrv_handle_new(req); + handle = smbsrv_handle_new(req->session, req->tcon, req, req->request_time); if (!handle) return NT_STATUS_INSUFFICIENT_RESOURCES; h = talloc_zero(handle, struct ntvfs_handle); diff --git a/source4/smb_server/smb2/tcon.c b/source4/smb_server/smb2/tcon.c index 2c135e0add..bfb3904d47 100644 --- a/source4/smb_server/smb2/tcon.c +++ b/source4/smb_server/smb2/tcon.c @@ -59,7 +59,7 @@ struct ntvfs_handle *smb2srv_pull_handle(struct smb2srv_request *req, const uint tcon = smbsrv_smb2_tcon_find(req->session, tid, req->request_time); } - handle = smbsrv_smb_handle_find(tcon, hid, req->request_time); + handle = smbsrv_smb2_handle_find(tcon, hid, req->request_time); if (!handle) { return NULL; } @@ -83,12 +83,12 @@ void smb2srv_push_handle(uint8_t *base, uint_t offset, struct ntvfs_handle *ntvf static NTSTATUS smb2srv_handle_create_new(void *private_data, struct ntvfs_request *ntvfs, struct ntvfs_handle **_h) { - struct smbsrv_request *req = talloc_get_type(ntvfs->frontend_data.private_data, - struct smbsrv_request); + struct smb2srv_request *req = talloc_get_type(ntvfs->frontend_data.private_data, + struct smb2srv_request); struct smbsrv_handle *handle; struct ntvfs_handle *h; - handle = smbsrv_handle_new(req); + handle = smbsrv_handle_new(req->session, req->tcon, req, req->request_time); if (!handle) return NT_STATUS_INSUFFICIENT_RESOURCES; h = talloc_zero(handle, struct ntvfs_handle); |