summaryrefslogtreecommitdiff
path: root/source4/smb_server/smb/reply.c
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2006-07-11 18:15:42 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:10:02 -0500
commit3b36a857980b1f9fa5a6be0253e85c975f35c13f (patch)
tree3eadbd0a44cb67b6773e0bee0e81af688c097854 /source4/smb_server/smb/reply.c
parentd89b4adf7abdc74f23960dee3f4961006ac12be6 (diff)
downloadsamba-3b36a857980b1f9fa5a6be0253e85c975f35c13f.tar.gz
samba-3b36a857980b1f9fa5a6be0253e85c975f35c13f.tar.bz2
samba-3b36a857980b1f9fa5a6be0253e85c975f35c13f.zip
r16950: remove the smb mid from the ntvfs layer and keep a list of pending
requests on the smbsrv_connection, to be able to match then on ntcancel metze (This used to be commit 04f0d3d03179b6060fd013b867d13caa92ec6460)
Diffstat (limited to 'source4/smb_server/smb/reply.c')
-rw-r--r--source4/smb_server/smb/reply.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/source4/smb_server/smb/reply.c b/source4/smb_server/smb/reply.c
index 75830ae73a..c79ad15ea8 100644
--- a/source4/smb_server/smb/reply.c
+++ b/source4/smb_server/smb/reply.c
@@ -633,7 +633,6 @@ void smbsrv_reply_readbraw(struct smbsrv_request *req)
req->ntvfs = ntvfs_request_create(req->tcon->ntvfs, req,
req->session->session_info,
SVAL(req->in.hdr,HDR_PID),
- SVAL(req->in.hdr,HDR_MID),
req->request_time,
req, NULL, 0);
if (!req->ntvfs) {
@@ -2197,10 +2196,24 @@ void smbsrv_reply_ntcreate_and_X(struct smbsrv_request *req)
****************************************************************************/
void smbsrv_reply_ntcancel(struct smbsrv_request *req)
{
- /* NOTE: this request does not generate a reply */
- SMBSRV_SETUP_NTVFS_REQUEST(NULL,0);
- ntvfs_cancel(req->ntvfs);
- talloc_free(req);
+ struct smbsrv_request *r;
+ uint16_t mid = SVAL(req->in.hdr,HDR_MID);
+ uint16_t pid = SVAL(req->in.hdr,HDR_PID);
+
+ for (r = req->smb_conn->requests; r; r = r->next) {
+ if (mid != SVAL(r->in.hdr,HDR_MID)) continue;
+ /* do we really need to check the PID? */
+ if (pid != SVAL(r->in.hdr,HDR_PID)) continue;
+
+ SMBSRV_CHECK(ntvfs_cancel(r->ntvfs));
+
+ /* NOTE: this request does not generate a reply */
+ talloc_free(req);
+ return;
+ }
+
+ /* TODO: workout the correct error code */
+ smbsrv_send_error(req, NT_STATUS_FOOBAR);
}
/*