s3: libsmbclient: Fix smbc_stat() to return ENOENT on a non-existent file.
authorJeremy Allison <jra@samba.org>
Mon, 17 Oct 2022 20:24:27 +0000 (13:24 -0700)
committerJeremy Allison <jra@samba.org>
Wed, 19 Oct 2022 00:13:56 +0000 (00:13 +0000)
Remove knownfail.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=15195

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Pavel Filipenský <pfilipensky@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Wed Oct 19 00:13:56 UTC 2022 on sn-devel-184

selftest/knownfail.d/libsmb_getatr [deleted file]
source3/libsmb/libsmb_file.c

diff --git a/selftest/knownfail.d/libsmb_getatr b/selftest/knownfail.d/libsmb_getatr
deleted file mode 100644 (file)
index d5fd1e9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-^samba4.libsmbclient.getatr.NT1.getatr\(nt4_dc_smb1_done\)
-^samba4.libsmbclient.getatr.SMB3.getatr\(nt4_dc\)
index fa301b9fa1872eb948f54e31d957331344db3a7d..98750754036fa5a951491f696f7b280c5ddff54b 100644 (file)
@@ -464,6 +464,7 @@ SMBC_getatr(SMBCCTX * context,
        struct timespec access_time_ts = {0};
        struct timespec write_time_ts = {0};
        struct timespec change_time_ts = {0};
+       struct timespec w_time_ts = {0};
        time_t write_time = 0;
        SMB_INO_T ino = 0;
        struct cli_credentials *creds = NULL;
@@ -506,6 +507,7 @@ SMBC_getatr(SMBCCTX * context,
        }
 
        if (!srv->no_pathinfo2) {
+               bool not_supported_error = false;
                status = cli_qpathinfo2(targetcli,
                                        targetpath,
                                        &create_time_ts,
@@ -518,11 +520,21 @@ SMBC_getatr(SMBCCTX * context,
                if (NT_STATUS_IS_OK(status)) {
                        goto setup_stat;
                }
+               if (NT_STATUS_EQUAL(status, NT_STATUS_INVALID_LEVEL) ||
+                   NT_STATUS_EQUAL(status, NT_STATUS_NOT_SUPPORTED)) {
+                       not_supported_error = true;
+               }
+               if (!not_supported_error) {
+                       /* "Normal error". Just return it to caller. */
+                       TALLOC_FREE(frame);
+                       return status;
+               }
         }
 
        srv->no_pathinfo2 = True;
 
        if (!srv->no_pathinfo3) {
+               bool not_supported_error = false;
                status = cli_qpathinfo3(targetcli,
                                        targetpath,
                                        &create_time_ts,
@@ -535,6 +547,15 @@ SMBC_getatr(SMBCCTX * context,
                if (NT_STATUS_IS_OK(status)) {
                        goto setup_stat;
                }
+               if (NT_STATUS_EQUAL(status, NT_STATUS_INVALID_LEVEL) ||
+                   NT_STATUS_EQUAL(status, NT_STATUS_NOT_SUPPORTED)) {
+                       not_supported_error = true;
+               }
+               if (!not_supported_error) {
+                       /* "Normal error". Just return it to caller. */
+                       TALLOC_FREE(frame);
+                       return status;
+               }
         }
 
        srv->no_pathinfo3 = True;
@@ -545,14 +566,11 @@ SMBC_getatr(SMBCCTX * context,
         }
 
        status = cli_getatr(targetcli, targetpath, &attr, &size, &write_time);
-       if (NT_STATUS_IS_OK(status)) {
-               struct timespec w_time_ts =
-                       convert_time_t_to_timespec(write_time);
-
-               access_time_ts = change_time_ts = write_time_ts = w_time_ts;
-
-               goto setup_stat;
+       if (!NT_STATUS_IS_OK(status)) {
+               goto all_failed;
        }
+       w_time_ts = convert_time_t_to_timespec(write_time);
+       access_time_ts = change_time_ts = write_time_ts = w_time_ts;
 
 setup_stat:
        setup_stat(sb,
@@ -573,7 +591,7 @@ all_failed:
        srv->no_pathinfo3 = False;
 
        TALLOC_FREE(frame);
-       return NT_STATUS_ACCESS_DENIED;
+       return status;
 }
 
 /*