[SCM] Samba Shared Repository - branch v4-12-stable updated

Karolin Seeger kseeger at samba.org
Thu Jan 14 08:33:34 UTC 2021


The branch, v4-12-stable has been updated
       via  34813fdbf9a VERSION: Disable GIT_SNAPSHOT for the 4.12.11 release.
       via  c146eae3b4f WHATSNEW: Add release notes for Samba 4.11.11.
       via  121fbf80523 vfs_fruit: fix close for fake_fd
       via  8a77dcd6935 vfs_fruit: check fake_fd in fruit_pread_meta_stream()
       via  00b37ef3cdf vfs_fruit: use "fake_fd" instead of "created"
       via  1bd5ffc109b vfs_streams_xattr: make use of vfs_fake_fd_close()
       via  cbdd15c13aa vfs_fruit: make use of vfs_fake_fd_close()
       via  83bd07f3806 s3:smbd: add vfs_fake_fd_close() helper
       via  6da2e77cf81 s3:lib: Create the cache path of user gencache recursively
       via  83e0a8cdd13 lib:util: Add directory_create_or_exists_recursive()
       via  6adf3619069 vfs_virusfilter: Allocate separate memory for config char*
       via  578c5805ac7 Do not create an empty DB when accessing a sam.ldb
       via  9b5dd480590 bootstrap: Cope with case changes in CentOS 8 repo names
       via  d24a1173c9a lib: Avoid declaring zero-length VLAs in various messaging functions
       via  86d4448396b vfs_zfsacl: add missing inherited flag on hidden "magic" everyone@ ACE
       via  eaa736faf67 vfs_zfsacl: reformatting
       via  20480f70ce0 s4/samba: call force_check_log_size() in standard_new_task()
       via  91f2f2dedb7 s4/samba: call force_check_log_size() in standard_accept_connection()
       via  4e6fdf5d8d9 s4/samba: call force_check_log_size() in prefork_reload_after_fork()
       via  b50ef6fa897 s4: call reopen_logs_internal() in the SIGHUP handler of the prefork process model
       via  1a6f2871036 s4: replace low-level SIGUP handler with a tevent handler
       via  7299ebb1215 s4: install tevent tracing hooks to trigger logfile rotation
       via  5b838f5075c s4: add samba server tevent trace helper stuff
       via  6c881025bfa debug: detect logrotation by checking inode number
       via  5cd1e3c5a4a debug: pass struct debug_class *config to do_one_check_log_size()
       via  f6bd782cb3b debug: pass struct debug_class *config to reopen_one_log()
       via  ccf971eef5c loadparm: setup debug subsystem setting max_log_size from config
       via  a30aaa499db s3: smbd: Quiet log messages from usershares for an unknown share.
       via  ecdddde3c53 vfs_glusterfs: print exact cmdline for disabling write-behind translator
       via  9bcd19c42ae manpages/vfs_glusterfs: Mention silent skipping of write-behind translator
       via  b3665f70109 vfs_shadow_copy2: Preserve all open flags assuming ROFS
       via  58eaf85bd92 s3: spoolss: Make parameters in call to user_ok_token() match all other uses.
       via  dcce5e5bf67 s3: smbd: Don't overwrite contents of fsp->aio_requests[0] with NULL via TALLOC_FREE().
       via  4873f377e75 interface: fix if_index is not parsed correctly
       via  a6782e76046 s3: modules: gluster. Fix the error I made in preventing talloc leaks from a function.
       via  8136ade13f8 libcli: smb2: Never print length if smb2_signing_key_valid() fails for crypto blob.
       via  9215dc9dc69 s3-vfs_glusterfs: always disable write-behind translator
       via  15c35524a27 VERSION: Bump version up to 4.12.11...
      from  e608cffa870 VERSION: Disable GIT_SNAPSHOT for the 4.12.10 release.

https://git.samba.org/?p=samba.git;a=shortlog;h=v4-12-stable


- Log -----------------------------------------------------------------
-----------------------------------------------------------------------

Summary of changes:
 .gitlab-ci.yml                                     |   2 +-
 VERSION                                            |   2 +-
 WHATSNEW.txt                                       |  93 +++++++++++++++-
 bootstrap/config.py                                |   3 +-
 bootstrap/generated-dists/centos8/bootstrap.sh     |   3 +-
 bootstrap/sha1sum.txt                              |   2 +-
 docs-xml/manpages/vfs_glusterfs.8.xml              |   9 ++
 lib/param/loadparm.c                               |   1 +
 lib/util/debug.c                                   |  63 +++++++----
 lib/util/samba_util.h                              |  14 +++
 lib/util/tests/test_util.c                         | 118 +++++++++++++++++++--
 lib/util/util.c                                    |  40 +++++++
 libcli/smb/smb2_signing.c                          |   9 +-
 source3/lib/gencache.c                             |   2 +-
 source3/lib/interface.c                            |   2 +-
 source3/lib/messages.c                             |   6 +-
 source3/modules/vfs_fruit.c                        |  34 +++---
 source3/modules/vfs_glusterfs.c                    |  47 +++++---
 source3/modules/vfs_shadow_copy2.c                 |   4 +-
 source3/modules/vfs_streams_xattr.c                |   4 +-
 source3/modules/vfs_virusfilter.c                  |  66 ++++++++++--
 source3/modules/vfs_zfsacl.c                       |   6 +-
 source3/param/loadparm.c                           |  10 ++
 source3/rpc_server/spoolss/srv_spoolss_nt.c        |   3 +-
 source3/smbd/close.c                               |  14 ++-
 source3/smbd/proto.h                               |   2 +
 source3/smbd/vfs.c                                 |   9 ++
 source3/wscript                                    |   3 +
 source4/dsdb/samdb/samdb.c                         |   3 +
 source4/smbd/process_prefork.c                     |  16 ++-
 source4/smbd/process_standard.c                    |   4 +
 source4/smbd/server.c                              |  46 ++++++++
 source4/smbd/server_util.c                         |  94 ++++++++++++++++
 .../winbindd_ads.h => source4/smbd/server_util.h   |  18 ++--
 source4/smbd/wscript_build                         |   9 +-
 35 files changed, 657 insertions(+), 104 deletions(-)
 create mode 100644 source4/smbd/server_util.c
 copy source3/winbindd/winbindd_ads.h => source4/smbd/server_util.h (67%)


Changeset truncated at 500 lines:

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 56adf10c7be..c706dac66bd 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -22,7 +22,7 @@ variables:
   # Set this to the contents of bootstrap/sha1sum.txt
   # which is generated by bootstrap/template.py --render
   #
-  SAMBA_CI_CONTAINER_TAG: 41319f2580c026f66b2750604a0eb15d6b6f7b50
+  SAMBA_CI_CONTAINER_TAG: 8bec130a6b741608616302662edee02fd39f3baf
   #
   # We use the ubuntu1804 image as default as
   # it matches what we have on sn-devel-184.
diff --git a/VERSION b/VERSION
index f1cc579dbc0..2cbc8277d97 100644
--- a/VERSION
+++ b/VERSION
@@ -25,7 +25,7 @@
 ########################################################
 SAMBA_VERSION_MAJOR=4
 SAMBA_VERSION_MINOR=12
-SAMBA_VERSION_RELEASE=10
+SAMBA_VERSION_RELEASE=11
 
 ########################################################
 # If a official release has a serious bug              #
diff --git a/WHATSNEW.txt b/WHATSNEW.txt
index 69007c592f5..a5de41e2c75 100644
--- a/WHATSNEW.txt
+++ b/WHATSNEW.txt
@@ -1,3 +1,90 @@
+                   ===============================
+                   Release Notes for Samba 4.12.11
+                          January 14, 2021
+                   ===============================
+
+
+This is the latest stable release of the Samba 4.12 release series.
+
+
+Changes since 4.12.10
+---------------------
+
+o  Jeremy Allison <jra at samba.org>
+   * BUG 14210: libcli: smb2: Never print length if smb2_signing_key_valid()
+     fails for crypto blob.
+   * BUG 14486: s3: modules: gluster. Fix the error I made in preventing talloc
+     leaks from a function.
+   * BUG 14515: s3: smbd: Don't overwrite contents of fsp->aio_requests[0] with
+     NULL via TALLOC_FREE().
+   * BUG 14568: s3: spoolss: Make parameters in call to user_ok_token() match
+     all other uses.
+   * BUG 14590: s3: smbd: Quiet log messages from usershares for an unknown
+     share.
+
+o  Dimitry Andric <dimitry at andric.com>
+   * BUG 14605: lib: Avoid declaring zero-length VLAs in various messaging
+     functions.
+
+o  Andrew Bartlett <abartlet at samba.org>
+   * BUG 14579: Do not create an empty DB when accessing a sam.ldb.
+
+o  Ralph Boehme <slow at samba.org>
+   * BUG 14248: samba process does not honor "max log size".
+   * BUG 14587: vfs_zfsacl: add missing inherited flag on hidden "magic"
+     everyone@ ACE.
+   * BUG 14596: vfs_fruit may close wrong backend fd.
+   * BUG 14596: TODO
+
+o  Günther Deschner <gd at samba.org>
+   * BUG 14486: s3-vfs_glusterfs: always disable write-behind translator.
+
+o  Arne Kreddig <arne at kreddig.net>
+   * BUG 14606: vfs_virusfilter: Allocate separate memory for config char*.
+
+o  Stefan Metzmacher <metze at samba.org>
+   * BUG 14596: vfs_fruit may close wrong backend fd.
+
+o  Anoop C S <anoopcs at samba.org>
+   * BUG 14486: manpages/vfs_glusterfs: Mention silent skipping of write-behind
+     translator.
+   * BUG 14573: vfs_shadow_copy2: Preserve all open flags assuming ROFS.
+
+o  Andreas Schneider <asn at samba.org>
+   * BUG 14601: s3:lib: Create the cache path of user gencache recursively.
+
+o  Martin Schwenke <martin at meltin.net>
+   * BUG 14594: Be more flexible with repository names in CentOS 8 test
+     environments.
+
+o  Jones Syue <jonessyue at qnap.com>
+   * BUG 14514: interface: Fix if_index is not parsed correctly.
+
+
+#######################################
+Reporting bugs & Development Discussion
+#######################################
+
+Please discuss this release on the samba-technical mailing list or by
+joining the #samba-technical IRC channel on irc.freenode.net.
+
+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.12.10
                           November 05, 2020
@@ -90,8 +177,8 @@ database (https://bugzilla.samba.org/).
 ======================================================================
 
 
-Release notes for older releases follow:
-----------------------------------------
+----------------------------------------------------------------------
+
 
                    ==============================
                    Release Notes for Samba 4.12.9
@@ -547,7 +634,7 @@ o  Andrew Bartlett <abartlet at samba.org>
 o  Gary Lockyer <gary at catalyst.net.nz>
    * BUG 14364: CVE-2020-10730: NULL de-reference in AD DC LDAP server when ASQ
      and VLV combined, ldb: Bump version to 2.1.4.
-   
+
 
 #######################################
 Reporting bugs & Development Discussion
diff --git a/bootstrap/config.py b/bootstrap/config.py
index bcada1dc628..5ead9f74501 100644
--- a/bootstrap/config.py
+++ b/bootstrap/config.py
@@ -226,7 +226,8 @@ set -xueo pipefail
 yum update -y
 yum install -y dnf-plugins-core
 yum install -y epel-release
-yum config-manager --set-enabled PowerTools -y
+yum config-manager --set-enabled PowerTools -y || \
+    yum config-manager --set-enabled powertools -y
 yum update -y
 
 yum install -y \
diff --git a/bootstrap/generated-dists/centos8/bootstrap.sh b/bootstrap/generated-dists/centos8/bootstrap.sh
index 22484b3f6ad..e6fab86e446 100755
--- a/bootstrap/generated-dists/centos8/bootstrap.sh
+++ b/bootstrap/generated-dists/centos8/bootstrap.sh
@@ -10,7 +10,8 @@ set -xueo pipefail
 yum update -y
 yum install -y dnf-plugins-core
 yum install -y epel-release
-yum config-manager --set-enabled PowerTools -y
+yum config-manager --set-enabled PowerTools -y || \
+    yum config-manager --set-enabled powertools -y
 yum update -y
 
 yum install -y \
diff --git a/bootstrap/sha1sum.txt b/bootstrap/sha1sum.txt
index 62c2245564e..5328cff1cd3 100644
--- a/bootstrap/sha1sum.txt
+++ b/bootstrap/sha1sum.txt
@@ -1 +1 @@
-41319f2580c026f66b2750604a0eb15d6b6f7b50
+8bec130a6b741608616302662edee02fd39f3baf
diff --git a/docs-xml/manpages/vfs_glusterfs.8.xml b/docs-xml/manpages/vfs_glusterfs.8.xml
index 7a4da1af919..d25135e14ac 100644
--- a/docs-xml/manpages/vfs_glusterfs.8.xml
+++ b/docs-xml/manpages/vfs_glusterfs.8.xml
@@ -179,7 +179,16 @@
                 translator and refuse to connect if detected.
                 Please disable the write-behind translator for the GlusterFS
                 volume to allow the plugin to connect to the volume.
+                The write-behind translator can easily be disabled via calling
+                <programlisting>
+                        gluster volume set <volumename> performance.write-behind off
+                </programlisting> on the commandline.
 	</para>
+        <para>
+                With GlusterFS versions >= 9, we silently bypass write-behind
+                translator during initial connect and failure is avoided.
+        </para>
+
 </refsect1>
 
 
diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 63291283905..8bca0ee632a 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -3159,6 +3159,7 @@ static bool lpcfg_update(struct loadparm_context *lp_ctx)
 	settings.debug_pid = lp_ctx->globals->debug_pid;
 	settings.debug_uid = lp_ctx->globals->debug_uid;
 	settings.debug_class = lp_ctx->globals->debug_class;
+	settings.max_log_size = lp_ctx->globals->max_log_size;
 	debug_set_settings(&settings, lp_ctx->globals->logging,
 			   lp_ctx->globals->syslog,
 			   lp_ctx->globals->syslog_only);
diff --git a/lib/util/debug.c b/lib/util/debug.c
index 1650551a766..692e97e3390 100644
--- a/lib/util/debug.c
+++ b/lib/util/debug.c
@@ -113,6 +113,8 @@ struct debug_class {
 	 */
 	char *logfile;
 	int fd;
+	/* inode number of the logfile to detect logfile rotation */
+	ino_t ino;
 };
 
 static const char *default_classname_table[] = {
@@ -1082,14 +1084,17 @@ static void debug_callback_log(const char *msg, int msg_level)
  Fix from dgibson at linuxcare.com.
 **************************************************************************/
 
-static bool reopen_one_log(int *fd, const char *logfile)
+static bool reopen_one_log(struct debug_class *config)
 {
-	int old_fd = *fd;
+	int old_fd = config->fd;
+	const char *logfile = config->logfile;
+	struct stat st;
 	int new_fd;
+	int ret;
 
 	if (logfile == NULL) {
 		debug_close_fd(old_fd);
-		*fd = -1;
+		config->fd = -1;
 		return true;
 	}
 
@@ -1104,8 +1109,18 @@ static bool reopen_one_log(int *fd, const char *logfile)
 
 	debug_close_fd(old_fd);
 	smb_set_close_on_exec(new_fd);
-	*fd = new_fd;
+	config->fd = new_fd;
 
+	ret = fstat(new_fd, &st);
+	if (ret != 0) {
+		log_overflow = true;
+		DBG_ERR("Unable to fstat() new log file '%s': %s\n",
+			logfile, strerror(errno));
+		log_overflow = false;
+		return false;
+	}
+
+	config->ino = st.st_ino;
 	return true;
 }
 
@@ -1164,8 +1179,7 @@ bool reopen_logs_internal(void)
 	state.reopening_logs = true;
 
 	for (i = DBGC_ALL; i < debug_num_classes; i++) {
-		ok = reopen_one_log(&dbgc_config[i].fd,
-				    dbgc_config[i].logfile);
+		ok = reopen_one_log(&dbgc_config[i]);
 		if (!ok) {
 			break;
 		}
@@ -1249,51 +1263,62 @@ bool need_to_check_log_size(void)
  Check to see if the log has grown to be too big.
  **************************************************************************/
 
-static void do_one_check_log_size(off_t maxlog, int *_fd, const char *logfile)
+static void do_one_check_log_size(off_t maxlog, struct debug_class *config)
 {
-	char name[strlen(logfile) + 5];
+	char name[strlen(config->logfile) + 5];
 	struct stat st;
-	int fd = *_fd;
 	int ret;
+	bool reopen = false;
 	bool ok;
 
 	if (maxlog == 0) {
 		return;
 	}
 
-	ret = fstat(fd, &st);
+	ret = stat(config->logfile, &st);
 	if (ret != 0) {
 		return;
 	}
-	if (st.st_size < maxlog ) {
+	if (st.st_size >= maxlog ) {
+		reopen = true;
+	}
+
+	if (st.st_ino != config->ino) {
+		reopen = true;
+	}
+
+	if (!reopen) {
 		return;
 	}
 
 	/* reopen_logs_internal() modifies *_fd */
 	(void)reopen_logs_internal();
-	fd = *_fd;
 
-	if (fd <= 2) {
+	if (config->fd <= 2) {
 		return;
 	}
-	ret = fstat(fd, &st);
+	ret = fstat(config->fd, &st);
 	if (ret != 0) {
+		config->ino = (ino_t)0;
 		return;
 	}
+
+	config->ino = st.st_ino;
+
 	if (st.st_size < maxlog) {
 		return;
 	}
 
-	snprintf(name, sizeof(name), "%s.old", logfile);
+	snprintf(name, sizeof(name), "%s.old", config->logfile);
 
-	(void)rename(logfile, name);
+	(void)rename(config->logfile, name);
 
 	ok = reopen_logs_internal();
 	if (ok) {
 		return;
 	}
 	/* We failed to reopen a log - continue using the old name. */
-	(void)rename(name, logfile);
+	(void)rename(name, config->logfile);
 }
 
 static void do_check_log_size(off_t maxlog)
@@ -1307,9 +1332,7 @@ static void do_check_log_size(off_t maxlog)
 		if (dbgc_config[i].logfile == NULL) {
 			continue;
 		}
-		do_one_check_log_size(maxlog,
-				      &dbgc_config[i].fd,
-				      dbgc_config[i].logfile);
+		do_one_check_log_size(maxlog, &dbgc_config[i]);
 	}
 }
 
diff --git a/lib/util/samba_util.h b/lib/util/samba_util.h
index f0aa42e7271..d32765bf6d1 100644
--- a/lib/util/samba_util.h
+++ b/lib/util/samba_util.h
@@ -451,6 +451,20 @@ _PUBLIC_ bool file_check_permissions(const char *fname,
  */
 _PUBLIC_ bool directory_create_or_exist(const char *dname, mode_t dir_perms);
 
+/**
+ * @brief Try to create a specified directory and the parent directory if they
+ *        don't exist.
+ *
+ * @param[in]  dname     The directory path to create.
+ *
+ * @param[in]  dir_perms The permission of the directories.
+ *
+ * @return true on success, false otherwise.
+ */
+_PUBLIC_ bool directory_create_or_exists_recursive(
+		const char *dname,
+		mode_t dir_perms);
+
 _PUBLIC_ bool directory_create_or_exist_strict(const char *dname,
 					       uid_t uid,
 					       mode_t dir_perms);
diff --git a/lib/util/tests/test_util.c b/lib/util/tests/test_util.c
index eebba39e70c..a893e6175c2 100644
--- a/lib/util/tests/test_util.c
+++ b/lib/util/tests/test_util.c
@@ -4,6 +4,7 @@
  *  Unit test for util.c
  *
  *  Copyright (C) Christof Schmitt 2020
+ *  Copyright (C) Andreas Schneider 2020
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -19,13 +20,22 @@
  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "lib/util/util.c"
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <setjmp.h>
 #include <cmocka.h>
 
+#include "lib/replace/replace.h"
+#include "system/dir.h"
+
+#include "lib/util/util.c"
+
 struct test_paths {
 	char testdir[PATH_MAX];
 	char none[PATH_MAX];
 	char dir[PATH_MAX];
+	char dir_recursive[PATH_MAX];
 	mode_t dir_mode;
 	char file[PATH_MAX];
 	mode_t file_mode;
@@ -59,6 +69,12 @@ static int group_setup(void **state)
 	ret = mkdir(paths->dir, paths->dir_mode);
 	assert_return_code(ret, errno);
 
+	strlcpy(paths->dir_recursive, testdir, sizeof(paths->dir));
+	strlcat(paths->dir_recursive, "/dir_recursive", sizeof(paths->dir));
+	paths->dir_mode = 0750;
+	ret = mkdir(paths->dir_recursive, paths->dir_mode);
+	assert_return_code(ret, errno);
+
 	strlcpy(paths->file, testdir, sizeof(paths->file));
 	strlcat(paths->file, "/file", sizeof(paths->file));
 	paths->file_mode = 0640;
@@ -89,16 +105,79 @@ static int group_setup(void **state)
 	return 0;
 }
 
+static int torture_rmdirs(const char *path)
+{
+	DIR *d;
+	struct dirent *dp;
+	struct stat sb;
+	char *fname;
+
+	if ((d = opendir(path)) != NULL) {
+		while(stat(path, &sb) == 0) {
+			/* if we can remove the directory we're done */
+			if (rmdir(path) == 0) {
+				break;
+			}
+			switch (errno) {
+				case ENOTEMPTY:
+				case EEXIST:
+				case EBADF:
+					break; /* continue */
+				default:
+					closedir(d);
+					return 0;
+			}
+
+			while ((dp = readdir(d)) != NULL) {
+				size_t len;
+				/* skip '.' and '..' */
+				if (dp->d_name[0] == '.' &&
+						(dp->d_name[1] == '\0' ||
+						 (dp->d_name[1] == '.' && dp->d_name[2] == '\0'))) {
+					continue;
+				}
+
+				len = strlen(path) + strlen(dp->d_name) + 2;
+				fname = malloc(len);
+				if (fname == NULL) {
+					closedir(d);
+					return -1;
+				}
+				snprintf(fname, len, "%s/%s", path, dp->d_name);
+
+				/* stat the file */
+				if (lstat(fname, &sb) != -1) {
+					if (S_ISDIR(sb.st_mode) && !S_ISLNK(sb.st_mode)) {
+						if (rmdir(fname) < 0) { /* can't be deleted */
+							if (errno == EACCES) {
+								closedir(d);
+								SAFE_FREE(fname);
+								return -1;
+							}
+							torture_rmdirs(fname);
+						}
+					} else {
+						unlink(fname);
+					}
+				} /* lstat */
+				SAFE_FREE(fname);
+			} /* readdir */
+
+			rewinddir(d);
+		}
+	} else {
+		return -1;
+	}
+


-- 
Samba Shared Repository



More information about the samba-cvs mailing list