[SCM] Samba Shared Repository - branch v4-17-test updated
Jule Anger
janger at samba.org
Wed Oct 19 11:53:01 UTC 2022
The branch, v4-17-test has been updated
via 142a771d854 s3: libsmbclient: Fix smbc_stat() to return ENOENT on a non-existent file.
via 09ec2b13e7c s4: torture: libsmbclient: Add a torture test to ensure smbc_stat() returns ENOENT on a non-existent file.
from 7540755de6a s4:messaging: let imessaging_client_init() use imessaging_init_discard_incoming()
https://git.samba.org/?p=samba.git;a=shortlog;h=v4-17-test
- Log -----------------------------------------------------------------
commit 142a771d85463216075913695d84530c6cb4ff9e
Author: Jeremy Allison <jra at samba.org>
Date: Mon Oct 17 13:24:27 2022 -0700
s3: libsmbclient: Fix smbc_stat() to return ENOENT on a non-existent file.
Remove knownfail.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15195
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Pavel Filipenský <pfilipensky at samba.org>
Autobuild-User(master): Jeremy Allison <jra at samba.org>
Autobuild-Date(master): Wed Oct 19 00:13:56 UTC 2022 on sn-devel-184
(cherry picked from commit fd0c01da1c744ae6fd9d8675616d8b6d3531e469)
Autobuild-User(v4-17-test): Jule Anger <janger at samba.org>
Autobuild-Date(v4-17-test): Wed Oct 19 11:52:24 UTC 2022 on sn-devel-184
commit 09ec2b13e7cccb0beeac6c87a9acd6ea5537d8ed
Author: Jeremy Allison <jra at samba.org>
Date: Mon Oct 17 13:14:41 2022 -0700
s4: torture: libsmbclient: Add a torture test to ensure smbc_stat() returns ENOENT on a non-existent file.
Add knownfail.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15195
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Pavel Filipenský <pfilipensky at samba.org>
(cherry picked from commit 9eda432836bfff3d3d4a365a08a5ecb54f0f2e34)
-----------------------------------------------------------------------
Summary of changes:
source3/libsmb/libsmb_file.c | 34 ++++++++++++----
source4/torture/libsmbclient/libsmbclient.c | 63 +++++++++++++++++++++++++++++
2 files changed, 89 insertions(+), 8 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/libsmb/libsmb_file.c b/source3/libsmb/libsmb_file.c
index fa301b9fa18..98750754036 100644
--- a/source3/libsmb/libsmb_file.c
+++ b/source3/libsmb/libsmb_file.c
@@ -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;
}
/*
diff --git a/source4/torture/libsmbclient/libsmbclient.c b/source4/torture/libsmbclient/libsmbclient.c
index 82f64c38b69..d335cad3a4e 100644
--- a/source4/torture/libsmbclient/libsmbclient.c
+++ b/source4/torture/libsmbclient/libsmbclient.c
@@ -1412,6 +1412,67 @@ static bool torture_libsmbclient_rename(struct torture_context *tctx)
return success;
}
+static bool torture_libsmbclient_getatr(struct torture_context *tctx)
+{
+ const char *smburl = torture_setting_string(tctx, "smburl", NULL);
+ SMBCCTX *ctx = NULL;
+ char *getatr_name = NULL;
+ struct stat st = {0};
+ bool ok;
+ int ret = 0;
+ int err = 0;
+
+ if (smburl == NULL) {
+ torture_fail(tctx,
+ "option --option=torture:smburl="
+ "smb://user:password@server missing\n");
+ }
+
+ ok = torture_libsmbclient_init_context(tctx, &ctx);
+ torture_assert(tctx, ok, "Failed to init context");
+ smbc_set_context(ctx);
+
+ getatr_name = talloc_asprintf(tctx,
+ "%s/noexist",
+ smburl);
+ if (getatr_name == NULL) {
+ torture_result(tctx,
+ TORTURE_FAIL,
+ __location__": %s",
+ "talloc fail\n");
+ return false;
+ }
+ /* Ensure the file doesn't exist. */
+ smbc_unlink(getatr_name);
+ /*
+ * smbc_stat() internally uses SMBC_getatr().
+ * Make sure doing getatr on a non-existent file gives
+ * an error of -1, errno = ENOENT.
+ */
+
+ ret = smbc_stat(getatr_name, &st);
+ if (ret == -1) {
+ err = errno;
+ }
+ torture_assert_int_equal(tctx,
+ ret,
+ -1,
+ talloc_asprintf(tctx,
+ "smbc_stat on '%s' should "
+ "get -1, got %d\n",
+ getatr_name,
+ ret));
+ torture_assert_int_equal(tctx,
+ err,
+ ENOENT,
+ talloc_asprintf(tctx,
+ "smbc_stat on '%s' should "
+ "get errno = ENOENT, got %s\n",
+ getatr_name,
+ strerror(err)));
+ return true;
+}
+
NTSTATUS torture_libsmbclient_init(TALLOC_CTX *ctx)
{
struct torture_suite *suite;
@@ -1438,6 +1499,8 @@ NTSTATUS torture_libsmbclient_init(TALLOC_CTX *ctx)
torture_suite_add_simple_test(suite,
"rename",
torture_libsmbclient_rename);
+ torture_suite_add_simple_test(suite, "getatr",
+ torture_libsmbclient_getatr);
suite->description = talloc_strdup(suite, "libsmbclient interface tests");
--
Samba Shared Repository
More information about the samba-cvs
mailing list