Allow us to pass RAW-CHKPATH with FILE_FLAG_POSIX_SEMANTICS set or with
authorJeremy Allison <jra@samba.org>
Tue, 24 Nov 2009 22:05:56 +0000 (14:05 -0800)
committerJeremy Allison <jra@samba.org>
Tue, 24 Nov 2009 22:05:56 +0000 (14:05 -0800)
wide links = no.
Jeremy.

source3/smbd/filename.c
source3/smbd/vfs.c

index 16e36312bbf78fa472f36ab6e9f6a05f55310086..88ee42ce08f6345ed40aafcb59c06476d3ec0a98 100644 (file)
@@ -791,7 +791,8 @@ NTSTATUS check_name(connection_struct *conn, const char *name)
                }
        }
 
-       if (!lp_widelinks(SNUM(conn)) || !lp_symlinks(SNUM(conn))) {
+       if (!lp_widelinks(SNUM(conn)) || !lp_symlinks(SNUM(conn)) ||
+                       conn->case_sensitive) {
                NTSTATUS status = check_reduced_name(conn,name);
                if (!NT_STATUS_IS_OK(status)) {
                        DEBUG(5,("check_name: name %s failed with %s\n",name,
index 1510bfcdd537440298f319a1619475ef5355829a..2ce61eed30ccbabcf9a2b004c371088fc22d376c 100644 (file)
@@ -862,7 +862,7 @@ NTSTATUS check_reduced_name(connection_struct *conn, const char *fname)
                                DEBUG(3,("check_reduced_name: Component not a "
                                         "directory in getting realpath for "
                                         "%s\n", fname));
-                               return map_nt_error_from_unix(errno);
+                               return NT_STATUS_OBJECT_PATH_NOT_FOUND;
                        case ENOENT:
                        {
                                TALLOC_CTX *ctx = talloc_tos();
@@ -893,10 +893,18 @@ NTSTATUS check_reduced_name(connection_struct *conn, const char *fname)
                                resolved_name = SMB_VFS_REALPATH(conn,tmp_fname,resolved_name_buf);
 #endif
                                if (!resolved_name) {
+                                       NTSTATUS status = map_nt_error_from_unix(errno);
+
+                                       if (errno == ENOENT || errno == ENOTDIR) {
+                                               status = NT_STATUS_OBJECT_PATH_NOT_FOUND;
+                                       }
+
                                        DEBUG(3,("check_reduce_named: "
                                                 "couldn't get realpath for "
-                                                "%s\n", fname));
-                                       return map_nt_error_from_unix(errno);
+                                                "%s (%s)\n",
+                                               fname,
+                                               nt_errstr(status)));
+                                       return status;
                                }
                                tmp_fname = talloc_asprintf(ctx,
                                                "%s/%s",