diff options
author | Stefan Metzmacher <metze@samba.org> | 2006-07-11 18:15:42 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:10:02 -0500 |
commit | 3b36a857980b1f9fa5a6be0253e85c975f35c13f (patch) | |
tree | 3eadbd0a44cb67b6773e0bee0e81af688c097854 /source4/smb_server/smb/reply.c | |
parent | d89b4adf7abdc74f23960dee3f4961006ac12be6 (diff) | |
download | samba-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.c | 23 |
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); } /* |