diff options
-rw-r--r-- | source3/smbd/filename.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c index dd1e0de20f..a36b7ff282 100644 --- a/source3/smbd/filename.c +++ b/source3/smbd/filename.c @@ -391,15 +391,24 @@ NTSTATUS unix_convert(connection_struct *conn, * Windows applications depend on the difference between * these two errors. */ - if (errno == ENOENT) { + + /* ENOENT and ENOTDIR both map to NT_STATUS_OBJECT_PATH_NOT_FOUND + in the filename walk. */ + + if (errno == ENOENT || errno == ENOTDIR) { return NT_STATUS_OBJECT_PATH_NOT_FOUND; } return map_nt_error_from_unix(errno); } - if (errno == ENOTDIR) { - /* Name exists but is not a directory. */ - return map_nt_error_from_unix(ENOTDIR); + /* ENOENT is the only valid error here. */ + if (errno != ENOENT) { + /* ENOENT and ENOTDIR both map to NT_STATUS_OBJECT_PATH_NOT_FOUND + in the filename walk. */ + if (errno == ENOTDIR) { + return NT_STATUS_OBJECT_PATH_NOT_FOUND; + } + return map_nt_error_from_unix(errno); } /* |