summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Makefile5
-rw-r--r--src/scripts/source_checks50
-rw-r--r--src/src/acl.c9
3 files changed, 61 insertions, 3 deletions
diff --git a/src/Makefile b/src/Makefile
index a18c3d728..ec573b5d6 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -45,12 +45,15 @@ build-directory:
$(SHELL) -c "test -d $$builddir -a -r $$builddir/version.c || \
(mkdir $$builddir; cd $$builddir; $(SHELL) ../scripts/MakeLinks)";
+checks:
+ $(SHELL) scripts/source_checks
+
# The "configure" target ensures that the build directory exists, then arranges
# to build the main makefile from inside the build directory, by calling the
# Configure-Makefile script. This does its own dependency checking because of
# the optional files.
-configure: build-directory
+configure: checks build-directory
@cd build-$(buildname); \
build=$(build) $(SHELL) ../scripts/Configure-Makefile
diff --git a/src/scripts/source_checks b/src/scripts/source_checks
new file mode 100644
index 000000000..79f9c3555
--- /dev/null
+++ b/src/scripts/source_checks
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+cd src;
+
+# Tables with struct items
+while read file table
+do
+ : $file $table
+ < $file \
+ perl -e '$/= undef; while (<>) { print $1 if /(?<='$table'\[\])\s*=\s*{\n(([^}].*\n)+)/m }' \
+ | awk '/{ (US)?"/ {print $2}' \
+ | awk -F\" '{print $2}' \
+ | LANG=C sort -c \
+ || exit 1
+done <<-END
+ readconf.c optionlist_config
+ globals.c optionlist_auths
+ globals.c debug_options
+ globals.c header_names
+ globals.c log_options
+ expand.c item_table
+ transport.c optionlist_transports
+ route.c optionlist_routers
+ transports/appendfile.c appendfile_transport_options
+ transports/autoreply.c autoreply_transport_options
+ transports/lmtp.c lmtp_transport_options
+ transports/pipe.c pipe_transport_options
+ transports/smtp.c smtp_transport_options
+ expand.c var_table
+END
+
+# Tables with just string items
+while read file table
+do
+ : $file $table
+ < $file \
+ perl -e '$/= undef; while (<>) { print $1 if /(?<='$table'\[\])\s*=\s*{\s?(([^}]*)+)}/m }' \
+ | awk -F\" '/"/ {print $2}' \
+ | LANG=C sort -c \
+ || exit 1
+
+done <<-END
+ expand.c item_table
+ expand.c op_table_underscore
+ expand.c op_table_main
+ expand.c cond_table
+ acl.c verbs
+ acl.c conditions
+END
+
diff --git a/src/src/acl.c b/src/src/acl.c
index 1d5e0590d..4f64e0a53 100644
--- a/src/src/acl.c
+++ b/src/src/acl.c
@@ -21,8 +21,13 @@ enum { ACL_ACCEPT, ACL_DEFER, ACL_DENY, ACL_DISCARD, ACL_DROP, ACL_REQUIRE,
/* ACL verbs */
-static uschar *verbs[] =
- { US"accept", US"defer", US"deny", US"discard", US"drop", US"require",
+static uschar *verbs[] = {
+ US"accept",
+ US"defer",
+ US"deny",
+ US"discard",
+ US"drop",
+ US"require",
US"warn" };
/* For each verb, the conditions for which "message" or "log_message" are used