diff options
-rw-r--r-- | source3/rpc_server/srv_pipe_hnd.c | 6 | ||||
-rw-r--r-- | source3/smbd/nttrans.c | 15 | ||||
-rw-r--r-- | source3/smbd/pipes.c | 16 |
3 files changed, 16 insertions, 21 deletions
diff --git a/source3/rpc_server/srv_pipe_hnd.c b/source3/rpc_server/srv_pipe_hnd.c index aaa355790d..822d50aa54 100644 --- a/source3/rpc_server/srv_pipe_hnd.c +++ b/source3/rpc_server/srv_pipe_hnd.c @@ -925,6 +925,12 @@ NTSTATUS np_open(struct smb_request *smb_req, struct connection_struct *conn, struct files_struct *fsp; struct pipes_struct *p; + /* See if it is one we want to handle. */ + + if (!is_known_pipename(name)) { + return NT_STATUS_OBJECT_NAME_NOT_FOUND; + } + status = file_new(smb_req, conn, &fsp); if (!NT_STATUS_IS_OK(status)) { DEBUG(0, ("file_new failed: %s\n", nt_errstr(status))); diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c index b78c946388..30841686fb 100644 --- a/source3/smbd/nttrans.c +++ b/source3/smbd/nttrans.c @@ -276,21 +276,16 @@ static void nt_open_pipe(char *fname, connection_struct *conn, DEBUG(4,("nt_open_pipe: Opening pipe %s.\n", fname)); - /* See if it is one we want to handle. */ - - if (!is_known_pipename(fname)) { - reply_botherror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND, - ERRDOS, ERRbadpipe); - return; - } - /* Strip \\ off the name. */ fname++; - DEBUG(3,("nt_open_pipe: Known pipe %s opening.\n", fname)); - status = np_open(req, conn, fname, &fsp); if (!NT_STATUS_IS_OK(status)) { + if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_NOT_FOUND)) { + reply_botherror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND, + ERRDOS, ERRbadpipe); + return; + } reply_nterror(req, status); return; } diff --git a/source3/smbd/pipes.c b/source3/smbd/pipes.c index 25a1fe2e63..d971e9dc62 100644 --- a/source3/smbd/pipes.c +++ b/source3/smbd/pipes.c @@ -66,13 +66,6 @@ void reply_open_pipe_and_X(connection_struct *conn, struct smb_request *req) DEBUG(4,("Opening pipe %s.\n", pipe_name)); - /* See if it is one we want to handle. */ - if (!is_known_pipename(pipe_name)) { - reply_botherror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND, - ERRDOS, ERRbadpipe); - return; - } - /* Strip \PIPE\ off the name. */ fname = pipe_name + PIPELEN; @@ -86,12 +79,13 @@ void reply_open_pipe_and_X(connection_struct *conn, struct smb_request *req) } #endif - /* Known pipes arrive with DIR attribs. Remove it so a regular file */ - /* can be opened and add it in after the open. */ - DEBUG(3,("Known pipe %s opening.\n",fname)); - status = np_open(req, conn, fname, &fsp); if (!NT_STATUS_IS_OK(status)) { + if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_NOT_FOUND)) { + reply_botherror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND, + ERRDOS, ERRbadpipe); + return; + } reply_nterror(req, status); return; } |