[SCM] The rsync repository. - branch master updated

Rsync CVS commit messages rsync-cvs at lists.samba.org
Wed Jul 1 02:33:57 UTC 2020


The branch, master has been updated
       via  feb2fff8 Put the optimizations into their own list.
       via  7d30490e Simplify the daemon parameter definitions
       via  317beebe Avoid crash of transfer logging w/default log format.
       via  7a413c97 Avoid strdup redefinition warning.
      from  5be73632 Avoid bloating the src-dir scan.

https://git.samba.org/?p=rsync.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit feb2fff894fff1509fd132bbe80f123d28fcea72
Author: Wayne Davison <wayne at opencoder.net>
Date:   Tue Jun 30 19:11:28 2020 -0700

    Put the optimizations into their own list.

commit 7d30490ef4ff30746e09d3919c304d6f0bce2d42
Author: Wayne Davison <wayne at opencoder.net>
Date:   Tue Jun 30 18:16:55 2020 -0700

    Simplify the daemon parameter definitions
    
    The code now derives all the struct defines, default value assignments,
    parser-param defines, and lp_foo() accessor functions from a single list
    of daemon parameters.

commit 317beebef8b0f60eb36255b35cbea71c84f6ac38
Author: Wayne Davison <wayne at opencoder.net>
Date:   Tue Jun 30 12:02:48 2020 -0700

    Avoid crash of transfer logging w/default log format.

commit 7a413c972246250a8fc8302548489c031de3b0c1
Author: Wayne Davison <wayne at opencoder.net>
Date:   Tue Jun 30 08:27:20 2020 -0700

    Avoid strdup redefinition warning.

-----------------------------------------------------------------------

Summary of changes:
 .gitignore          |   1 +
 Makefile.in         |   9 +-
 NEWS.md             |   8 ++
 daemon-parm.awk     | 114 +++++++++++++++
 daemon-parm.txt     |  65 +++++++++
 loadparm.c          | 398 ++++------------------------------------------------
 options.c           |  36 ++---
 rsync.1.md          |   3 -
 rsync.h             |   1 +
 testsuite/rsync.fns |   6 +-
 10 files changed, 245 insertions(+), 396 deletions(-)
 create mode 100755 daemon-parm.awk
 create mode 100644 daemon-parm.txt


Changeset truncated at 500 lines:

diff --git a/.gitignore b/.gitignore
index 5817ccd5..b8e90ca4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,6 +21,7 @@ aclocal.m4
 /help-rsync*.h
 /default-cvsignore.h
 /default-dont-compress.h
+/daemon-parm.h
 /.md2man-works
 /autom4te*.cache
 /confdefs.h
diff --git a/Makefile.in b/Makefile.in
index f5c788db..672fcc47 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -101,7 +101,7 @@ $(CHECK_OBJS): $(HEADERS)
 tls.o xattrs.o: lib/sysxattrs.h
 options.o: latest-year.h help-rsync.h help-rsyncd.h
 exclude.o: default-cvsignore.h
-loadparm.o: default-dont-compress.h
+loadparm.o: default-dont-compress.h daemon-parm.h
 
 flist.o: rounding.h
 
@@ -111,6 +111,9 @@ default-cvsignore.h default-dont-compress.h: rsync.1.md define-from-md.awk
 help-rsync.h help-rsyncd.h: rsync.1.md help-from-md.awk
 	$(AWK) -f $(srcdir)/help-from-md.awk -v hfile=$@ $(srcdir)/rsync.1.md
 
+daemon-parm.h: daemon-parm.txt daemon-parm.awk
+	$(AWK) -f $(srcdir)/daemon-parm.awk $(srcdir)/daemon-parm.txt
+
 rounding.h: rounding.c rsync.h proto.h
 	@for r in 0 1 3; do \
 	    if $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o rounding -DEXTRA_ROUNDING=$$r -I. $(srcdir)/rounding.c >rounding.out 2>&1; then \
@@ -228,8 +231,8 @@ proto: proto.h-tstamp
 proto.h: proto.h-tstamp
 	@if test -f proto.h; then :; else cp -p $(srcdir)/proto.h .; fi
 
-proto.h-tstamp: $(srcdir)/*.c $(srcdir)/lib/compat.c config.h
-	$(AWK) -f $(srcdir)/mkproto.awk $(srcdir)/*.c $(srcdir)/lib/compat.c
+proto.h-tstamp: $(srcdir)/*.c $(srcdir)/lib/compat.c config.h daemon-parm.h
+	$(AWK) -f $(srcdir)/mkproto.awk $(srcdir)/*.c $(srcdir)/lib/compat.c daemon-parm.h
 
 .PHONY: man
 man: rsync.1 rsync-ssl.1 rsyncd.conf.5
diff --git a/NEWS.md b/NEWS.md
index 8d35e252..2b192b38 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -8,6 +8,9 @@ Protocol: 31 (unchanged)
 
 ### BUG FIXES:
 
+ - Avoid a crash when a daemon module enables `transfer logging` without
+   setting a `log format` value.
+
  - Fixed installing rsync-ssl script from an alternate build dir.
 
  - Fixed the updating of configure.sh from an alternate build dir.
@@ -40,6 +43,8 @@ Protocol: 31 (unchanged)
    die when out of memory.  This eliminated some caller-side check-and-die
    code and added some missing sanity-checking of allocations.
 
+ - Put optimizations into their own list in the `--version` output.
+
  - Improved the man page a bit more.
 
 ### PACKAGING RELATED:
@@ -58,6 +63,9 @@ Protocol: 31 (unchanged)
  - Moved the version number out of configure.ac into its own version.h file so
    that we don't need to reconfigure just because the version number changes.
 
+ - Moved the daemon parameter list into daemon-parm.txt so that an awk script
+   can create the interrelated structs and accessors that loadparm.c needs.
+
 ------------------------------------------------------------------------------
 <a name="3.2.1"></a>
 
diff --git a/daemon-parm.awk b/daemon-parm.awk
new file mode 100755
index 00000000..efc15474
--- /dev/null
+++ b/daemon-parm.awk
@@ -0,0 +1,114 @@
+#!/usr/bin/awk -f
+
+# The caller must pass arg: daemon-parm.txt
+# The resulting code is output into daemon-parm.h
+
+BEGIN {
+    heading = "/* DO NOT EDIT THIS FILE!  It is auto-generated from a list of values in " ARGV[1] "! */"
+    sect = psect = defines = accessors = prior_ptype = ""
+    values = "\nstatic const all_vars Defaults = {\n    { /* Globals: */\n"
+    params = "\nstatic struct parm_struct parm_table[] = {"
+    exp_line = "\n/********** EXP **********/\n"
+    tdstruct = "typedef struct {"
+}
+
+/^\s*$/ { next }
+/^#/ { next }
+
+/^Globals:/ {
+    if (defines != "") {
+	print "The Globals section must come first!"
+	defines = ""
+	exit
+    }
+    defines = tdstruct
+    exps = exp_values = exp_line
+    sect = "GLOBAL"
+    psect = ", P_GLOBAL, &Vars.g."
+    next
+}
+
+/^Locals:/ {
+    if (sect == "") {
+	print "The Locals section must come after the Globals!"
+	exit
+    }
+    defines = defines exps "} global_vars;\n\n" tdstruct
+    values = values exp_values "\n    }, { /* Locals: */\n"
+    exps = exp_values = exp_line
+    sect = "LOCAL"
+    psect = ", P_LOCAL, &Vars.l."
+    next
+}
+
+/^(STRING|PATH|INTEGER|ENUM|BOOL)/ {
+    ptype = $1
+    name = $2
+    $1 = $2 = ""
+    sub(/^[ \t]+/, "")
+
+    if (ptype != prior_ptype) {
+	defines = defines "\n/********** " ptype " **********/\n"
+	values = values "\n/********** " ptype " **********/\n"
+	params = params "\n"
+	accessors = accessors "\n"
+	prior_ptype = ptype
+    }
+
+    if (ptype == "STRING" || ptype == "PATH") {
+	atype = "STRING"
+	vtype = "char*"
+    } else if (ptype == "BOOL") {
+	atype = vtype = "BOOL"
+    } else {
+	atype = "INTEGER"
+	vtype = "int"
+    }
+
+    # We have 2 variables that don't match their conf string. Oh well...
+    if (name == "bind_address")
+	spname = "address"
+    else if (name == "rsync_port")
+	spname = "port"
+    else {
+	spname = name
+	gsub(/_/, " ", spname)
+	gsub(/-/, "", name)
+    }
+
+    if (ptype == "ENUM")
+	enum = "enum_" name
+    else
+	enum = "NULL"
+
+    defines = defines "\t" vtype " " name ";\n"
+    values = values "\t" $0 ", /* " name " */\n"
+    params = params " {\"" spname "\", P_" ptype psect name ", " enum ", 0},\n"
+    accessors = accessors "FN_" sect "_" atype "(lp_" name ", " name ")\n"
+
+    if (vtype == "char*") {
+	exps = exps "\tBOOL " name "_EXP;\n"
+	exp_values = exp_values "\tFalse, /* " name "_EXP */\n"
+    }
+
+    next
+}
+
+/./ {
+    print "Extraneous line:" $0
+    defines = ""
+    exit
+}
+
+END {
+    if (sect != "" && defines != "") {
+	defines = defines exps "} local_vars;\n\n"
+	defines = defines tdstruct "\n\tglobal_vars g;\n\tlocal_vars l;\n} all_vars;\n"
+	values = values exp_values "\n    }\n};\n\nstatic all_vars Vars;\n"
+	params = params "\n {NULL, P_BOOL, P_NONE, NULL, NULL, 0}\n};\n"
+	print heading "\n\n" defines values params accessors > "daemon-parm.h"
+    } else {
+	print "Failed to parse the data in " ARGV[1]
+	exit 1
+    }
+}
diff --git a/daemon-parm.txt b/daemon-parm.txt
new file mode 100644
index 00000000..36ae5115
--- /dev/null
+++ b/daemon-parm.txt
@@ -0,0 +1,65 @@
+Globals: ================================================================
+
+STRING	bind_address		NULL
+STRING	daemon_chroot		NULL
+STRING	daemon_gid		NULL
+STRING	daemon_uid		NULL
+STRING	motd_file		NULL
+STRING	pid_file		NULL
+STRING	socket_options		NULL
+
+INTEGER	listen_backlog		5
+INTEGER	rsync_port		0
+
+BOOL	proxy_protocol		False
+
+Locals: =================================================================
+
+STRING	auth_users		NULL
+STRING	charset			NULL
+STRING	comment			NULL
+STRING	dont_compress		DEFAULT_DONT_COMPRESS
+STRING	early_exec		NULL
+STRING	exclude			NULL
+STRING	exclude_from		NULL
+STRING	filter			NULL
+STRING	gid			NULL
+STRING	hosts_allow		NULL
+STRING	hosts_deny		NULL
+STRING	include			NULL
+STRING	include_from		NULL
+STRING	incoming_chmod		NULL
+STRING	lock_file		DEFAULT_LOCK_FILE
+STRING	log_file		NULL
+STRING	log_format		"%o %h [%a] %m (%u) %f %l"
+STRING	name			NULL
+STRING	outgoing_chmod		NULL
+STRING	post-xfer_exec		NULL
+STRING	pre-xfer_exec		NULL
+STRING	refuse_options		NULL
+STRING	secrets_file		NULL
+STRING	syslog_tag		"rsyncd"
+STRING	uid			NULL
+
+PATH	path			NULL
+PATH	temp_dir		NULL
+
+INTEGER	max_connections		0
+INTEGER	max_verbosity		1
+INTEGER	timeout			0
+
+ENUM	syslog_facility		LOG_DAEMON
+
+BOOL	fake_super		False
+BOOL	forward_lookup		True
+BOOL	ignore_errors		False
+BOOL	ignore_nonreadable	False
+BOOL	list			True
+BOOL	munge_symlinks		(BOOL)-1
+BOOL	numeric_ids		(BOOL)-1
+BOOL	read_only		True
+BOOL	reverse_lookup		True
+BOOL	strict_modes		True
+BOOL	transfer_logging	False
+BOOL	use_chroot		True
+BOOL	write_only		False
diff --git a/loadparm.c b/loadparm.c
index 819888c5..5e532da2 100644
--- a/loadparm.c
+++ b/loadparm.c
@@ -87,234 +87,6 @@ struct parm_struct {
 #define LP_SNUM_OK(i) ((i) >= 0 && (i) < (int)section_list.count)
 #define SECTION_PTR(s, p) (((char*)(s)) + (ptrdiff_t)(((char*)(p))-(char*)&Vars.l))
 
-/* This structure describes global (ie., server-wide) parameters. */
-typedef struct {
-	char *bind_address;
-	char *daemon_chroot;
-	char *daemon_gid;
-	char *daemon_uid;
-	char *motd_file;
-	char *pid_file;
-	char *socket_options;
-
-	/* Each _EXP var tracks if the associated char* var has been expanded yet or not. */
-	BOOL bind_address_EXP;
-	BOOL daemon_chroot_EXP;
-	BOOL daemon_gid_EXP;
-	BOOL daemon_uid_EXP;
-	BOOL motd_file_EXP;
-	BOOL pid_file_EXP;
-	BOOL socket_options_EXP;
-
-	int listen_backlog;
-	int rsync_port;
-
-	BOOL proxy_protocol;
-} global_vars;
-
-/* This structure describes a single section.  Their order must match the
- * initializers below, which you can accomplish by keeping each sub-section
- * sorted.  (e.g. in vim, just visually select each subsection and use !sort.)
- * NOTE: the char* variables MUST all remain at the start of the struct! */
-typedef struct {
-	char *auth_users;
-	char *charset;
-	char *comment;
-	char *dont_compress;
-	char *early_exec;
-	char *exclude;
-	char *exclude_from;
-	char *filter;
-	char *gid;
-	char *hosts_allow;
-	char *hosts_deny;
-	char *include;
-	char *include_from;
-	char *incoming_chmod;
-	char *lock_file;
-	char *log_file;
-	char *log_format;
-	char *name;
-	char *outgoing_chmod;
-	char *path;
-	char *postxfer_exec;
-	char *prexfer_exec;
-	char *refuse_options;
-	char *secrets_file;
-	char *syslog_tag;
-	char *temp_dir;
-	char *uid;
-
-	/* Each _EXP var tracks if the associated char* var has been expanded yet or not. */
-	BOOL auth_users_EXP;
-	BOOL charset_EXP;
-	BOOL comment_EXP;
-	BOOL dont_compress_EXP;
-	BOOL early_exec_EXP;
-	BOOL exclude_EXP;
-	BOOL exclude_from_EXP;
-	BOOL filter_EXP;
-	BOOL gid_EXP;
-	BOOL hosts_allow_EXP;
-	BOOL hosts_deny_EXP;
-	BOOL include_EXP;
-	BOOL include_from_EXP;
-	BOOL incoming_chmod_EXP;
-	BOOL lock_file_EXP;
-	BOOL log_file_EXP;
-	BOOL log_format_EXP;
-	BOOL name_EXP;
-	BOOL outgoing_chmod_EXP;
-	BOOL path_EXP;
-	BOOL postxfer_exec_EXP;
-	BOOL prexfer_exec_EXP;
-	BOOL refuse_options_EXP;
-	BOOL secrets_file_EXP;
-	BOOL syslog_tag_EXP;
-	BOOL temp_dir_EXP;
-	BOOL uid_EXP;
-
-	int max_connections;
-	int max_verbosity;
-	int syslog_facility;
-	int timeout;
-
-	BOOL fake_super;
-	BOOL forward_lookup;
-	BOOL ignore_errors;
-	BOOL ignore_nonreadable;
-	BOOL list;
-	BOOL munge_symlinks;
-	BOOL numeric_ids;
-	BOOL read_only;
-	BOOL reverse_lookup;
-	BOOL strict_modes;
-	BOOL transfer_logging;
-	BOOL use_chroot;
-	BOOL write_only;
-} local_vars;
-
-/* This structure describes the global variables (g) as well as the globally
- * specified values of the local variables (l), which are used when modules
- * don't specify their own values. */
-typedef struct {
-	global_vars g;
-	local_vars l;
-} all_vars;
-
-/* The application defaults for all the variables.  "Defaults" is
- * used to re-initialize "Vars" before each config-file read.
- *
- * In order to keep these sorted in the same way as the structure
- * above, use the variable name in the leading comment, including a
- * trailing ';' (to avoid a sorting problem with trailing digits). */
-static const all_vars Defaults = {
- /* ==== global_vars ==== */
- {
- /* bind_address; */		NULL,
- /* daemon_chroot; */		NULL,
- /* daemon_gid; */		NULL,
- /* daemon_uid; */		NULL,
- /* motd_file; */		NULL,
- /* pid_file; */		NULL,
- /* socket_options; */		NULL,
-
- /* bind_address_EXP; */	False,
- /* daemon_chroot_EXP; */	False,
- /* daemon_gid_EXP; */		False,
- /* daemon_uid_EXP; */		False,
- /* motd_file_EXP; */		False,
- /* pid_file_EXP; */		False,
- /* socket_options_EXP; */	False,
-
- /* listen_backlog; */		5,
- /* rsync_port; */		0,
-
- /* proxy_protocol; */		False,
- },
-
- /* ==== local_vars ==== */
- {
- /* auth_users; */		NULL,
- /* charset; */ 		NULL,
- /* comment; */ 		NULL,
- /* dont_compress; */		DEFAULT_DONT_COMPRESS,
- /* early_exec; */		NULL,
- /* exclude; */ 		NULL,
- /* exclude_from; */		NULL,
- /* filter; */			NULL,
- /* gid; */			NULL,
- /* hosts_allow; */		NULL,
- /* hosts_deny; */		NULL,
- /* include; */			NULL,
- /* include_from; */		NULL,
- /* incoming_chmod; */		NULL,
- /* lock_file; */		DEFAULT_LOCK_FILE,
- /* log_file; */		NULL,
- /* log_format; */		"%o %h [%a] %m (%u) %f %l",
- /* name; */			NULL,
- /* outgoing_chmod; */		NULL,
- /* path; */			NULL,
- /* postxfer_exec; */		NULL,
- /* prexfer_exec; */		NULL,
- /* refuse_options; */		NULL,
- /* secrets_file; */		NULL,
- /* syslog_tag; */		"rsyncd",
- /* temp_dir; */ 		NULL,
- /* uid; */			NULL,
-
- /* auth_users_EXP; */		False,
- /* charset_EXP; */		False,
- /* comment_EXP; */		False,
- /* dont_compress_EXP; */	False,
- /* early_exec_EXP; */		False,
- /* exclude_EXP; */		False,
- /* exclude_from_EXP; */	False,
- /* filter_EXP; */		False,
- /* gid_EXP; */			False,
- /* hosts_allow_EXP; */		False,
- /* hosts_deny_EXP; */		False,
- /* include_EXP; */		False,
- /* include_from_EXP; */	False,
- /* incoming_chmod_EXP; */	False,
- /* lock_file_EXP; */		False,
- /* log_file_EXP; */		False,
- /* log_format_EXP; */		False,
- /* name_EXP; */		False,
- /* outgoing_chmod_EXP; */	False,
- /* path_EXP; */		False,
- /* postxfer_exec_EXP; */	False,
- /* prexfer_exec_EXP; */	False,
- /* refuse_options_EXP; */	False,
- /* secrets_file_EXP; */	False,
- /* syslog_tag_EXP; */		False,
- /* temp_dir_EXP; */		False,
- /* uid_EXP; */			False,
-
- /* max_connections; */		0,
- /* max_verbosity; */		1,
- /* syslog_facility; */		LOG_DAEMON,
- /* timeout; */			0,
-
- /* fake_super; */		False,
- /* forward_lookup; */		True,
- /* ignore_errors; */		False,
- /* ignore_nonreadable; */	False,
- /* list; */			True,
- /* munge_symlinks; */		(BOOL)-1,
- /* numeric_ids; */		(BOOL)-1,
- /* read_only; */		True,
- /* reverse_lookup; */		True,
- /* strict_modes; */		True,
- /* transfer_logging; */	False,
- /* use_chroot; */		True,
- /* write_only; */		False,


-- 
The rsync repository.



More information about the rsync-cvs mailing list