[SCM] Samba Shared Repository - branch v4-15-stable updated
Jule Anger
janger at samba.org
Wed Jan 19 15:08:20 UTC 2022
The branch, v4-15-stable has been updated
via bd9db127ff4 VERSION: Disable GIT_SNAPSHOT for the 4.15.4 release.
via 6700eeac21d WHATSNEW: Add release notes for Samba 4.15.4.
via 2a59fd316f7 auth/ntlmssp: make sure we return INVALID_PARAMETER for NTLMv2_RESPONSE parsing errors
via af3c6b570f2 s4:torture/smb2: add smb2.session.ntlmssp_bug14932 test
via a4bf80d8203 libcli/auth: let NTLMv2_RESPONSE_verify_netlogon_creds ignore invalid netapp requests
via aa9889230fe libcli/auth: let NTLMv2_RESPONSE_verify_netlogon_creds ignore BUFFER_TOO_SMALL
via 3ffd53f9e76 s4:torture/rpc: add test for invalid av_pair content in LogonSamLogonEx
via 058c8a5278d auth/credentials: cli_credentials_set_ntlm_response() pass session_keys
via 6d158512e8d s3:smbd: handle --build-options without parsing smb.conf
via a4281c9ea7f s3:libsmb: fix signing regression SMBC_server_internal()
via a9c32e69546 s4:selftest: run libsmbclient.noanon_list against maptoguest
via 025749c3773 s4:torture/libsmbclient: add libsmbclient.noanon_list test
via dfabc5da386 selftest/Samba3: enable SMB1 for maptoguest
via 5a2227d704c s3: smbd: Add missing pop_sec_ctx() in error code path of close_directory()
via 6c28c948a49 ctdb-protocol: Allow rfc5952 "[2001:db8::1]:80" ipv6 notation
via 671dee2bd7d s3:smbd: Fix dereferencing null pointer "fsp"
via 680f68a072c s3:modules: VFS CAP symlinkat always fails
via 76e7fdb70c6 s3:modules: Fix the horrible vfs_crossrename module
via 4a6e8bc5e29 s3: smbclient: In do_host_query(), if we need SMB1, ensure we select NT1 as the client max protocol" before continuing.
via 4907ecaaf4e s3: selftest: Add two tests that show we try and send an SMB1 request over an SMB2 connection to list servers if "-mSMB3" is selected.
via a43ad2777e3 s3: includes: Make the comments describing itime consistent. Always use "invented" time.
via 85941fe0cd1 s3: lib: In create_clock_itime(), use timespec_current() -> clock_gettime(CLOCK_REALTIME..).
via b48e5c61aaf s3: smbd: Create and use a common function for generating a fileid - create_clock_itime().
via 263aeea95d8 lib: util: Add a function nt_time_to_unix_timespec_raw().
via 032df88d61d tests: Add 2 tests for unique fileid's with top bit set (generated from itime) for files and directories.
via 96cd0ab567e VERSION: Bump version up to Samba 4.15.4...
from 0c85a0adaa5 VERSION: Disable GIT_SNAPSHOT for the 4.15.3 release.
https://git.samba.org/?p=samba.git;a=shortlog;h=v4-15-stable
- Log -----------------------------------------------------------------
-----------------------------------------------------------------------
Summary of changes:
VERSION | 2 +-
WHATSNEW.txt | 68 ++++++-
auth/credentials/credentials.h | 6 +-
auth/credentials/credentials_internal.h | 2 +
auth/credentials/credentials_ntlm.c | 65 ++++++-
auth/ntlmssp/ntlmssp_server.c | 8 +
ctdb/protocol/protocol_util.c | 13 ++
lib/util/time.c | 30 +++
lib/util/time.h | 2 +
libcli/auth/smbencrypt.c | 89 ++++++++-
selftest/knownfail.d/smb1-tests | 10 +-
selftest/target/Samba3.pm | 1 +
source3/client/client.c | 1 +
source3/include/includes.h | 4 +-
source3/include/proto.h | 1 +
source3/lib/system.c | 52 +++++
source3/libsmb/libsmb_server.c | 2 +-
source3/modules/vfs_cap.c | 2 +-
source3/modules/vfs_crossrename.c | 2 +-
.../script/tests/test_smbclient_list_servers.sh | 45 +++++
source3/selftest/tests.py | 20 ++
source3/smbd/close.c | 2 +
source3/smbd/dosmode.c | 3 +-
source3/smbd/open.c | 6 +-
source3/smbd/server.c | 9 +-
source4/selftest/tests.py | 17 ++
source4/torture/libsmbclient/libsmbclient.c | 50 +++++
source4/torture/rpc/schannel.c | 209 +++++++++++++++++++++
source4/torture/smb2/create.c | 205 ++++++++++++++++++++
source4/torture/smb2/session.c | 51 +++++
source4/torture/smb2/smb2.c | 1 +
31 files changed, 938 insertions(+), 40 deletions(-)
create mode 100755 source3/script/tests/test_smbclient_list_servers.sh
Changeset truncated at 500 lines:
diff --git a/VERSION b/VERSION
index a1b01a89332..ad5995baf95 100644
--- a/VERSION
+++ b/VERSION
@@ -25,7 +25,7 @@
########################################################
SAMBA_VERSION_MAJOR=4
SAMBA_VERSION_MINOR=15
-SAMBA_VERSION_RELEASE=3
+SAMBA_VERSION_RELEASE=4
########################################################
# If a official release has a serious bug #
diff --git a/WHATSNEW.txt b/WHATSNEW.txt
index 05eb72be9e0..9cb58de2a61 100644
--- a/WHATSNEW.txt
+++ b/WHATSNEW.txt
@@ -1,3 +1,68 @@
+ ==============================
+ Release Notes for Samba 4.15.4
+ January 19, 2022
+ ==============================
+
+
+This is the latest stable release of the Samba 4.15 release series.
+
+
+Changes since 4.15.3
+--------------------
+
+o Jeremy Allison <jra at samba.org>
+ * BUG 14928: Duplicate SMB file_ids leading to Windows client cache
+ poisoning.
+ * BUG 14939: smbclient -L doesn't set "client max protocol" to NT1 before
+ calling the "Reconnecting with SMB1 for workgroup listing" path.
+ * BUG 14944: Missing pop_sec_ctx() in error path inside close_directory().
+
+o Pavel Filipenský <pfilipen at redhat.com>
+ * BUG 14940: Cross device copy of the crossrename module always fails.
+ * BUG 14941: symlinkat function from VFS cap module always fails with an
+ error.
+ * BUG 14942: Fix possible fsp pointer deference.
+
+o Volker Lendecke <vl at samba.org>
+ * BUG 14934: kill_tcp_connections does not work.
+
+o Stefan Metzmacher <metze at samba.org>
+ * BUG 14932: Failed to parse NTLMv2_RESPONSE length 95 - Buffer Size Error -
+ NT_STATUS_BUFFER_TOO_SMALL.
+ * BUG 14935: Can't connect to Windows shares not requiring authentication
+ using KDE/Gnome.
+
+o Andreas Schneider <asn at samba.org>
+ * BUG 14945: "smbd --build-options" no longer works without an smb.conf file.
+
+o Jones Syue <jonessyue at qnap.com>
+ * BUG 14928: Duplicate SMB file_ids leading to Windows client cache
+ poisoning.
+
+
+#######################################
+Reporting bugs & Development Discussion
+#######################################
+
+Please discuss this release on the samba-technical mailing list or by
+joining the #samba-technical IRC channel on irc.libera.chat or the
+#samba-technical:matrix.org matrix channel.
+
+If you do report problems then please try to send high quality
+feedback. If you don't provide vital information to help us track down
+the problem then you will probably be ignored. All bug reports should
+be filed under the Samba 4.1 and newer product in the project's Bugzilla
+database (https://bugzilla.samba.org/).
+
+
+======================================================================
+== Our Code, Our Bugs, Our Responsibility.
+== The Samba Team
+======================================================================
+
+
+Release notes for older releases follow:
+----------------------------------------
==============================
Release Notes for Samba 4.15.3
December 08, 2021
@@ -115,8 +180,7 @@ database (https://bugzilla.samba.org/).
======================================================================
-Release notes for older releases follow:
-----------------------------------------
+----------------------------------------------------------------------
==============================
Release Notes for Samba 4.15.2
November 9, 2021
diff --git a/auth/credentials/credentials.h b/auth/credentials/credentials.h
index 4057565ad34..551b1611826 100644
--- a/auth/credentials/credentials.h
+++ b/auth/credentials/credentials.h
@@ -230,8 +230,10 @@ bool cli_credentials_set_nt_hash(struct cli_credentials *cred,
bool cli_credentials_set_old_nt_hash(struct cli_credentials *cred,
const struct samr_Password *nt_hash);
bool cli_credentials_set_ntlm_response(struct cli_credentials *cred,
- const DATA_BLOB *lm_response,
- const DATA_BLOB *nt_response,
+ const DATA_BLOB *lm_response,
+ const DATA_BLOB *lm_session_key,
+ const DATA_BLOB *nt_response,
+ const DATA_BLOB *nt_session_key,
enum credentials_obtained obtained);
int cli_credentials_set_keytab_name(struct cli_credentials *cred,
struct loadparm_context *lp_ctx,
diff --git a/auth/credentials/credentials_internal.h b/auth/credentials/credentials_internal.h
index afbda1a4b48..3b1581acb11 100644
--- a/auth/credentials/credentials_internal.h
+++ b/auth/credentials/credentials_internal.h
@@ -70,7 +70,9 @@ struct cli_credentials {
/* Allows NTLM pass-though authentication */
DATA_BLOB lm_response;
+ DATA_BLOB lm_session_key;
DATA_BLOB nt_response;
+ DATA_BLOB nt_session_key;
struct ccache_container *ccache;
struct gssapi_creds_container *client_gss_creds;
diff --git a/auth/credentials/credentials_ntlm.c b/auth/credentials/credentials_ntlm.c
index 49505f64315..1c17148e647 100644
--- a/auth/credentials/credentials_ntlm.c
+++ b/auth/credentials/credentials_ntlm.c
@@ -69,6 +69,14 @@ _PUBLIC_ NTSTATUS cli_credentials_get_ntlm_response(struct cli_credentials *cred
return NT_STATUS_NO_MEMORY;
}
}
+ if (cred->nt_session_key.length != 0) {
+ session_key = data_blob_dup_talloc(frame,
+ cred->nt_session_key);
+ if (session_key.data == NULL) {
+ TALLOC_FREE(frame);
+ return NT_STATUS_NO_MEMORY;
+ }
+ }
if (cred->lm_response.length != 0) {
lm_response = data_blob_dup_talloc(frame,
cred->lm_response);
@@ -77,6 +85,14 @@ _PUBLIC_ NTSTATUS cli_credentials_get_ntlm_response(struct cli_credentials *cred
return NT_STATUS_NO_MEMORY;
}
}
+ if (cred->lm_session_key.length != 0) {
+ lm_session_key = data_blob_dup_talloc(frame,
+ cred->lm_session_key);
+ if (lm_session_key.data == NULL) {
+ TALLOC_FREE(frame);
+ return NT_STATUS_NO_MEMORY;
+ }
+ }
if (cred->lm_response.data == NULL) {
*flags = *flags & ~CLI_CRED_LANMAN_AUTH;
@@ -483,19 +499,54 @@ _PUBLIC_ bool cli_credentials_set_old_nt_hash(struct cli_credentials *cred,
}
_PUBLIC_ bool cli_credentials_set_ntlm_response(struct cli_credentials *cred,
- const DATA_BLOB *lm_response,
- const DATA_BLOB *nt_response,
+ const DATA_BLOB *lm_response,
+ const DATA_BLOB *lm_session_key,
+ const DATA_BLOB *nt_response,
+ const DATA_BLOB *nt_session_key,
enum credentials_obtained obtained)
{
if (obtained >= cred->password_obtained) {
cli_credentials_set_password(cred, NULL, obtained);
- if (nt_response) {
- cred->nt_response = data_blob_talloc(cred, nt_response->data, nt_response->length);
- talloc_steal(cred, cred->nt_response.data);
+
+ data_blob_clear_free(&cred->lm_response);
+ data_blob_clear_free(&cred->lm_session_key);
+ data_blob_clear_free(&cred->nt_response);
+ data_blob_clear_free(&cred->nt_session_key);
+
+ if (lm_response != NULL && lm_response->length != 0) {
+ cred->lm_response = data_blob_talloc(cred,
+ lm_response->data,
+ lm_response->length);
+ if (cred->lm_response.data == NULL) {
+ return false;
+ }
}
- if (nt_response) {
- cred->lm_response = data_blob_talloc(cred, lm_response->data, lm_response->length);
+ if (lm_session_key != NULL && lm_session_key->length != 0) {
+ cred->lm_session_key = data_blob_talloc(cred,
+ lm_session_key->data,
+ lm_session_key->length);
+ if (cred->lm_session_key.data == NULL) {
+ return false;
+ }
}
+
+ if (nt_response != NULL && nt_response->length != 0) {
+ cred->nt_response = data_blob_talloc(cred,
+ nt_response->data,
+ nt_response->length);
+ if (cred->nt_response.data == NULL) {
+ return false;
+ }
+ }
+ if (nt_session_key != NULL && nt_session_key->length != 0) {
+ cred->nt_session_key = data_blob_talloc(cred,
+ nt_session_key->data,
+ nt_session_key->length);
+ if (cred->nt_session_key.data == NULL) {
+ return false;
+ }
+ }
+
return true;
}
diff --git a/auth/ntlmssp/ntlmssp_server.c b/auth/ntlmssp/ntlmssp_server.c
index 939aa0ef4aa..ce78af1d32d 100644
--- a/auth/ntlmssp/ntlmssp_server.c
+++ b/auth/ntlmssp/ntlmssp_server.c
@@ -532,6 +532,14 @@ static NTSTATUS ntlmssp_server_preauth(struct gensec_security *gensec_security,
(ndr_pull_flags_fn_t)ndr_pull_NTLMv2_RESPONSE);
if (!NDR_ERR_CODE_IS_SUCCESS(err)) {
nt_status = ndr_map_error2ntstatus(err);
+ if (NT_STATUS_EQUAL(nt_status, NT_STATUS_BUFFER_TOO_SMALL)) {
+ /*
+ * Note that invalid blobs should result in
+ * INVALID_PARAMETER, as demonstrated by
+ * smb2.session.ntlmssp_bug14932
+ */
+ nt_status = NT_STATUS_INVALID_PARAMETER;
+ }
DEBUG(1,("%s: failed to parse NTLMv2_RESPONSE of length %zu for "
"user=[%s] domain=[%s] workstation=[%s] - %s %s\n",
__func__, ntlmssp_state->nt_resp.length,
diff --git a/ctdb/protocol/protocol_util.c b/ctdb/protocol/protocol_util.c
index 2d0a6f33038..3eea95a274e 100644
--- a/ctdb/protocol/protocol_util.c
+++ b/ctdb/protocol/protocol_util.c
@@ -240,6 +240,19 @@ static int ip_from_string(const char *str, ctdb_sock_addr *addr)
uint8_t ipv4_mapped_prefix[12] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff
};
+ size_t len = strlen(str);
+ char s[64];
+
+ len = strlcpy(s, str, sizeof(s));
+ if (len >= sizeof(s)) {
+ return EINVAL;
+ }
+
+ if ((len >= 2) && (s[0] == '[') && (s[len-1] == ']')) {
+ s[len-1] = '\0';
+ str = s+1;
+ p = strrchr(str, ':');
+ }
ret = ipv6_from_string(str, &addr->ip6);
if (ret != 0) {
diff --git a/lib/util/time.c b/lib/util/time.c
index cec91c14791..5839e80a15b 100644
--- a/lib/util/time.c
+++ b/lib/util/time.c
@@ -867,6 +867,36 @@ _PUBLIC_ int get_time_zone(time_t t)
return tm_diff(&tm_utc,tm);
}
+/*
+ * Raw convert an NTTIME to a unix timespec.
+ */
+
+struct timespec nt_time_to_unix_timespec_raw(
+ NTTIME nt)
+{
+ int64_t d;
+ struct timespec ret;
+
+ d = (int64_t)nt;
+ /* d is now in 100ns units, since jan 1st 1601".
+ Save off the ns fraction. */
+
+ /*
+ * Take the last seven decimal digits and multiply by 100.
+ * to convert from 100ns units to 1ns units.
+ */
+ ret.tv_nsec = (long) ((d % (1000 * 1000 * 10)) * 100);
+
+ /* Convert to seconds */
+ d /= 1000*1000*10;
+
+ /* Now adjust by 369 years to make the secs since 1970 */
+ d -= TIME_FIXUP_CONSTANT_INT;
+
+ ret.tv_sec = (time_t)d;
+ return ret;
+}
+
struct timespec nt_time_to_unix_timespec(NTTIME nt)
{
int64_t d;
diff --git a/lib/util/time.h b/lib/util/time.h
index 72347b39b99..bdb67de5431 100644
--- a/lib/util/time.h
+++ b/lib/util/time.h
@@ -343,6 +343,8 @@ bool nt_time_equal(NTTIME *t1, NTTIME *t2);
void interpret_dos_date(uint32_t date,int *year,int *month,int *day,int *hour,int *minute,int *second);
+struct timespec nt_time_to_unix_timespec_raw(NTTIME nt);
+
struct timespec nt_time_to_unix_timespec(NTTIME nt);
time_t convert_timespec_to_time_t(struct timespec ts);
diff --git a/libcli/auth/smbencrypt.c b/libcli/auth/smbencrypt.c
index 468374699f7..fe20fe4e2a3 100644
--- a/libcli/auth/smbencrypt.c
+++ b/libcli/auth/smbencrypt.c
@@ -675,6 +675,69 @@ NTSTATUS NTLMv2_RESPONSE_verify_netlogon_creds(const char *account_name,
return NT_STATUS_OK;
}
+ if (response.length == 95) {
+ /*
+ * ndr_pull_NTLMv2_RESPONSE() fails on this strange blob,
+ * because the AvPairs content is not valid
+ * as AvLen of the first pair is 33032 (0x8108).
+ *
+ * I saw a single machine sending the following 3 times
+ * in a row, but I'm not sure if everything is static.
+ *
+ * Note this is NTLMv2_CLIENT_CHALLENGE only, not
+ * the full NTLMv2_RESPONSE (which has Response of 16 bytes
+ * before the NTLMv2_CLIENT_CHALLENGE).
+ *
+ * Note this code only prevents
+ * ndr_pull_error(Buffer Size Error): Pull bytes 39016
+ * debug message for a known case, the actual
+ * bug is also handled below in a generic way to
+ * map NT_STATUS_BUFFER_TOO_SMALL to NT_STATUS_OK.
+ *
+ * See https://bugzilla.samba.org/show_bug.cgi?id=14932
+ */
+ static const char *netapp_magic =
+ "\x01\x01\x00\x00\x00\x00\x00\x00"
+ "\x3f\x3f\x3f\x3f\x3f\x3f\x3f\x3f"
+ "\xb8\x82\x3a\xf1\xb3\xdd\x08\x15"
+ "\x00\x00\x00\x00\x11\xa2\x08\x81"
+ "\x50\x38\x22\x78\x2b\x94\x47\xfe"
+ "\x54\x94\x7b\xff\x17\x27\x5a\xb4"
+ "\xf4\x18\xba\xdc\x2c\x38\xfd\x5b"
+ "\xfb\x0e\xc1\x85\x1e\xcc\x92\xbb"
+ "\x9b\xb1\xc4\xd5\x53\x14\xff\x8c"
+ "\x76\x49\xf5\x45\x90\x19\xa2";
+ /*
+ * First we check the initial bytes
+ * and the 0x3F timestamp.
+ */
+ cmp = memcmp(response.data + 16,
+ netapp_magic,
+ 16);
+ if (cmp == 0) {
+ /*
+ * Then check everything after the
+ * client challenge
+ */
+ cmp = memcmp(response.data + 40,
+ netapp_magic + 24,
+ response.length - 40);
+ if (cmp == 0) {
+ DBG_DEBUG("Invalid NETAPP NTLMv2_RESPONSE "
+ "for user[%s\\%s] against "
+ "SEC_CHAN(%u)[%s/%s] "
+ "in workgroup[%s]\n",
+ account_domain,
+ account_name,
+ creds->secure_channel_type,
+ creds->computer_name,
+ creds->account_name,
+ workgroup);
+ return NT_STATUS_OK;
+ }
+ }
+ }
+
frame = talloc_stackframe();
err = ndr_pull_struct_blob(&response, frame, &v2_resp,
@@ -682,11 +745,27 @@ NTSTATUS NTLMv2_RESPONSE_verify_netlogon_creds(const char *account_name,
if (!NDR_ERR_CODE_IS_SUCCESS(err)) {
NTSTATUS status;
status = ndr_map_error2ntstatus(err);
- DEBUG(2,("Failed to parse NTLMv2_RESPONSE "
- "length %u - %s - %s\n",
- (unsigned)response.length,
- ndr_map_error2string(err),
- nt_errstr(status)));
+ if (NT_STATUS_EQUAL(status, NT_STATUS_BUFFER_TOO_SMALL)) {
+ /*
+ * We are supposed to ignore invalid buffers,
+ * see https://bugzilla.samba.org/show_bug.cgi?id=14932
+ */
+ status = NT_STATUS_OK;
+ }
+ DEBUG(2,("%s: Failed to parse NTLMv2_RESPONSE length=%u "
+ "for user[%s\\%s] against SEC_CHAN(%u)[%s/%s] "
+ "in workgroup[%s] - %s %s %s\n",
+ __func__,
+ (unsigned)response.length,
+ account_domain,
+ account_name,
+ creds->secure_channel_type,
+ creds->computer_name,
+ creds->account_name,
+ workgroup,
+ ndr_map_error2string(err),
+ NT_STATUS_IS_OK(status) ? "(ignoring) =>" : "=>",
+ nt_errstr(status)));
dump_data(2, response.data, response.length);
TALLOC_FREE(frame);
return status;
diff --git a/selftest/knownfail.d/smb1-tests b/selftest/knownfail.d/smb1-tests
index 4790ef0f46c..28a74863c6a 100644
--- a/selftest/knownfail.d/smb1-tests
+++ b/selftest/knownfail.d/smb1-tests
@@ -1,9 +1,7 @@
-^samba3.blackbox.smbclient_ntlm.plain.*NT1.smbclient anonymous.badpassword.NT1NEW.guest\(maptoguest\)
-^samba3.blackbox.smbclient_ntlm.plain.*NT1.smbclient baduser.badpassword.NT1NEW.guest\(maptoguest\)
-^samba3.blackbox.smbclient_ntlm.plain.*NT1.smbclient username.password.NT1OLD\((ad_member|fl2000dc|maptoguest|nt4_member)\)
-^samba3.blackbox.smbclient_ntlm.plain.*NT1.smbclient username.password.NT1NEW\((ad_member|fl2000dc|maptoguest|nt4_member)\)
-^samba3.blackbox.smbclient_ntlm.plain.*NT1.smbclient anonymous.nopassword.NT1OLD\((ad_member|fl2000dc|maptoguest|nt4_member)\)
-^samba3.blackbox.smbclient_ntlm.plain.*NT1.smbclient anonymous.nopassword.NT1NEW\((ad_member|fl2000dc|maptoguest|nt4_member)\)
+^samba3.blackbox.smbclient_ntlm.plain.*NT1.smbclient username.password.NT1OLD\((ad_member|fl2000dc|nt4_member)\)
+^samba3.blackbox.smbclient_ntlm.plain.*NT1.smbclient username.password.NT1NEW\((ad_member|fl2000dc|nt4_member)\)
+^samba3.blackbox.smbclient_ntlm.plain.*NT1.smbclient anonymous.nopassword.NT1OLD\((ad_member|fl2000dc|nt4_member)\)
+^samba3.blackbox.smbclient_ntlm.plain.*NT1.smbclient anonymous.nopassword.NT1NEW\((ad_member|fl2000dc|nt4_member)\)
^samba3.blackbox.smbclient_s3.NT1.(plain|sign).member_creds.smbclient -L.*\((ad_member|nt4_member)\)
^samba3.blackbox.smbclient_s3.NT1.(plain|sign).member_creds.smbclient -L LOCALADMEMBER -I.*\((ad_member|nt4_member)\)
^samba3.blackbox.smbclient_s3.NT1.(plain|sign).member_creds.noninteractive smbclient does not prompt\((ad_member|nt4_member)\)
diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm
index d1ac5c16c26..84903b87d3e 100755
--- a/selftest/target/Samba3.pm
+++ b/selftest/target/Samba3.pm
@@ -2091,6 +2091,7 @@ sub setup_maptoguest
my $options = "
map to guest = bad user
ntlm auth = yes
+server min protocol = LANMAN1
[force_user_error_inject]
path = $share_dir
diff --git a/source3/client/client.c b/source3/client/client.c
index 98425048f4b..a8e11044b39 100644
--- a/source3/client/client.c
+++ b/source3/client/client.c
@@ -6169,6 +6169,7 @@ static int do_host_query(const char *query_host)
cli_shutdown(cli);
d_printf("Reconnecting with SMB1 for workgroup listing.\n");
+ lp_set_cmdline("client max protocol", "NT1");
status = cli_cm_open(talloc_tos(), NULL,
query_host,
"IPC$",
diff --git a/source3/include/includes.h b/source3/include/includes.h
index 6fc2ee25d95..c3d3d351e41 100644
--- a/source3/include/includes.h
+++ b/source3/include/includes.h
@@ -205,10 +205,10 @@ struct stat_ex {
struct timespec st_ex_ctime;
struct timespec st_ex_btime; /* birthtime */
/*
- * Immutable original birth time aka instantiation time. Set when a file
+ * Immutable original birth time aka invented time. Set when a file
* is created, never changes thereafter. May not be set by the client.
*/
- struct timespec st_ex_itime; /* instantiation time */
+ struct timespec st_ex_itime; /* invented time */
blksize_t st_ex_blksize;
blkcnt_t st_ex_blocks;
diff --git a/source3/include/proto.h b/source3/include/proto.h
index a96c2c8d110..20d026f83b3 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -175,6 +175,7 @@ void update_stat_ex_create_time(struct stat_ex *dst, struct timespec create_time
void update_stat_ex_file_id(struct stat_ex *dst, uint64_t file_id);
void update_stat_ex_from_saved_stat(struct stat_ex *dst,
const struct stat_ex *src);
+void create_clock_itime(struct stat_ex *dst);
int sys_stat(const char *fname, SMB_STRUCT_STAT *sbuf,
bool fake_dir_create_times);
int sys_fstat(int fd, SMB_STRUCT_STAT *sbuf,
diff --git a/source3/lib/system.c b/source3/lib/system.c
index a14fc51ca63..83dc79101c9 100644
--
Samba Shared Repository
More information about the samba-cvs
mailing list