From 7d8f3cdbfc741aa680f23018a434ae9409b69ef0 Mon Sep 17 00:00:00 2001 From: Sam Liddicott Date: Fri, 5 Dec 2008 09:04:55 +0000 Subject: Let ntvfs request transport close via ntvfs_request state [I can't swear that this covers all the smb2 cases, there are some reply functions that I can't trace properly] Add NTVFS_ASYNC_STATE_CLOSE bit to ntvfs_request->async_states->state so that the ntvfs layer can signify that the client transport should be closed, most useful for proxy servies, and most likely due to a forwarding transport having been closed. Signed-off-by: Sam Liddicott Signed-off-by: Stefan Metzmacher --- source4/ntvfs/ntvfs.h | 1 + 1 file changed, 1 insertion(+) (limited to 'source4/ntvfs') diff --git a/source4/ntvfs/ntvfs.h b/source4/ntvfs/ntvfs.h index 0d5738d9f0..fc04d976f4 100644 --- a/source4/ntvfs/ntvfs.h +++ b/source4/ntvfs/ntvfs.h @@ -226,6 +226,7 @@ struct ntvfs_context { /* a set of flags to control handling of request structures */ #define NTVFS_ASYNC_STATE_ASYNC (1<<1) /* the backend will answer this one later */ #define NTVFS_ASYNC_STATE_MAY_ASYNC (1<<2) /* the backend is allowed to answer async */ +#define NTVFS_ASYNC_STATE_CLOSE (1<<3) /* the backend session should be closed */ /* the ntvfs_async_state structure allows backend functions to delay replying to requests. To use this, the front end must -- cgit From 39e468f55859c01f7bdaab4086df371d3375099f Mon Sep 17 00:00:00 2001 From: Sam Liddicott Date: Fri, 5 Dec 2008 09:05:47 +0000 Subject: vfs_cifs - Use ntvfs request transport close to close downstream session When upstream session closes, close the downstream session Signed-off-by: Sam Liddicott Signed-off-by: Stefan Metzmacher --- source4/ntvfs/cifs/vfs_cifs.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'source4/ntvfs') diff --git a/source4/ntvfs/cifs/vfs_cifs.c b/source4/ntvfs/cifs/vfs_cifs.c index d133bbc480..e615401e51 100644 --- a/source4/ntvfs/cifs/vfs_cifs.c +++ b/source4/ntvfs/cifs/vfs_cifs.c @@ -63,7 +63,17 @@ struct async_info { void *parms; }; -#define SETUP_PID private->tree->session->pid = req->smbpid +#define CHECK_UPSTREAM_OPEN do { \ + if (! private->transport->socket->sock) { \ + req->async_states->state|=NTVFS_ASYNC_STATE_CLOSE; \ + return NT_STATUS_CONNECTION_DISCONNECTED; \ + } \ +} while(0) + +#define SETUP_PID do { \ + private->tree->session->pid = req->smbpid; \ + CHECK_UPSTREAM_OPEN; \ +} while(0) #define SETUP_FILE_HERE(f) do { \ f = ntvfs_handle_get_backend_data(io->generic.in.file.ntvfs, ntvfs); \ -- cgit