From f9d04f08f7ca18e099843180edea967dd831df91 Mon Sep 17 00:00:00 2001 From: Jeremy Harris Date: Sun, 12 May 2013 22:31:36 +0100 Subject: [PATCH] Add compile-time checks for various tables being in alphabetical order. This is gross hackery and somewhat fragile. A better method would actuallyt compile the 'C' involved and check programmatically. --- src/Makefile | 5 +++- src/scripts/source_checks | 50 +++++++++++++++++++++++++++++++++++++++ src/src/acl.c | 9 +++++-- 3 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 src/scripts/source_checks 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 -- 2.30.2