In 4.86-RC4 setting the DISABLE_PRDR compile-time option results in
inability to compile. There are also a number of complaints from my
compiler which might be of interest. At this point in the RC process,
given that I'm not driving things, I'm keeping myself to _just_ fixing
the two compilation errors.
First the patch which I'm going to commit:
----------------------------8< cut here >8------------------------------
--- acl.c.old 2015-07-12 19:06:24.683723864 -0400
+++ acl.c 2015-07-12 19:15:16.613686692 -0400
@@ -3372,7 +3372,11 @@ for (; cb != NULL; cb = cb->next)
break;
case CONTROL_CUTTHROUGH_DELIVERY:
+#ifndef DISABLE_PRDR
if (prdr_requested)
+#else
+ if (0)
+#endif
/* Too hard to think about for now. We might in future cutthrough
the case where both sides handle prdr and this-node prdr acl
is "accept" */
--- smtp_in.c.old 2015-07-12 19:17:46.360676653 -0400
+++ smtp_in.c 2015-07-12 19:19:38.245668910 -0400
@@ -1515,7 +1515,9 @@ sender_verified_list = NULL; /* N
memset(sender_address_cache, 0, sizeof(sender_address_cache));
memset(sender_domain_cache, 0, sizeof(sender_domain_cache));
+#ifndef DISABLE_PRDR
prdr_requested = FALSE;
+#endif
/* Reset the DSN flags */
dsn_ret = 0;
----------------------------8< cut here >8------------------------------
Installing on FreeBSD 10.1/amd64 with CLang as the compiler;
% cc --version
FreeBSD clang version 3.4.1 (tags/RELEASE_34/dot1-final 208032) 20140512
Target: x86_64-unknown-freebsd10.1
Thread model: posix
----------------------------8< cut here >8------------------------------
clang acl.c
acl.c:3375:6: error: use of undeclared identifier 'prdr_requested'
if (prdr_requested)
^
acl.c:3531:19: warning: passing 'const uschar **' (aka 'const unsigned char **') to parameter of type 'uschar **'
(aka 'unsigned char **') discards qualifiers in nested pointer types [-Wincompatible-pointer-types-discards-qualifiers]
rc = demime(&arg);
^~~~
./functions.h:140:32: note: passing argument to parameter here
extern int demime(uschar **);
^
1 warning and 1 error generated.
*** Error code 1
----------------------------8< cut here >8------------------------------
My persisted (from 4.84) Local/Makefile for this box contains:
DISABLE_PRDR=yes
DISABLE_OCSP=yes
Fixing that error, then:
----------------------------8< cut here >8------------------------------
clang deliver.c
deliver.c:3964:28: warning: expression result unused [-Wunused-value]
!tp->expand_multi_domain || (deliver_set_expansions(next), 1),
~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
clang dns.c
dns.c:998:7: warning: add explicit braces to avoid dangling else [-Wdangling-else]
else if (namesuff - 4 > name && strcmpic(namesuff - 4, US".ip6.arpa") == 0)
^
1 warning generated.
clang exim.c
exim.c:2248:43: warning: passing 'uschar **' (aka 'unsigned char **') to parameter of type 'const uschar **'
(aka 'const unsigned char **') discards qualifiers in nested pointer types [-Wincompatible-pointer-types-discards-qualifiers]
while((filename = string_nextinlist(&list, &sep, big_buffer,
^~~~~
./functions.h:424:49: note: passing argument to parameter here
extern uschar *string_nextinlist(const uschar **, int *, uschar *, int);
^
exim.c:3413:46: warning: add explicit braces to avoid dangling else [-Wdangling-else]
if (++i < argc) log_oneline = argv[i]; else
^
exim.c:5379:11: warning: add explicit braces to avoid dangling else [-Wdangling-else]
else
^
3 warnings generated.
clang expand.c
expand.c:6658:3: warning: add explicit braces to avoid dangling else [-Wdangling-else]
else
^
1 warning generated.
clang parse.c
parse.c:556:5: warning: add explicit braces to avoid dangling else [-Wdangling-else]
else
^
1 warning generated.
clang readconf.c
readconf.c:3757:7: warning: add explicit braces to avoid dangling else [-Wdangling-else]
else
^
1 warning generated.
clang smtp_in.c
smtp_in.c:1518:1: error: use of undeclared identifier 'prdr_requested'
prdr_requested = FALSE;
^
smtp_in.c:3016:5: warning: add explicit braces to avoid dangling else [-Wdangling-else]
else
^
1 warning and 1 error generated.
----------------------------8< cut here >8------------------------------
----------------------------8< cut here >8------------------------------
clang tls.c
In file included from tls.c:120:
./tls-openssl.c:423:17: warning: implicit declaration of function 'X509_check_host' is invalid in C99
[-Wimplicit-function-declaration]
if ((rc = X509_check_host(cert, name, 0,
^
./tls-openssl.c:711:13: warning: passing 'char [26]' to parameter of type 'uschar *' (aka 'unsigned char *') converts between
pointers to integer types with different sign [-Wpointer-sign]
tls_error("Unable to create ec curve", host, NULL);
^~~~~~~~~~~~~~~~~~~~~~~~~~~
./tls-openssl.c:200:20: note: passing argument to parameter 'prefix' here
tls_error(uschar * prefix, const host_item * host, uschar * msg)
^
In file included from tls.c:121:
In file included from ./tlscert-openssl.c:18:
/usr/local/include/openssl/x509v3.h:729:10: warning: 'X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS' macro redefined
# define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4
^
./tls-openssl.c:413:11: note: previous definition is here
# define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0
^
In file included from tls.c:121:
In file included from ./tlscert-openssl.c:18:
/usr/local/include/openssl/x509v3.h:733:10: warning: 'X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS' macro redefined
# define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10
^
./tls-openssl.c:416:11: note: previous definition is here
# define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0
^
In file included from tls.c:121:
./tlscert-openssl.c:167:14: warning: if statement has empty body [-Wempty-body]
if (mod_tz);
^
./tlscert-openssl.c:167:14: note: put the semicolon on a separate line to silence this warning
tls.c:277:40: warning: '&&' within '||' [-Wlogical-op-parentheses]
|| Ustrncmp(ele, match, len) == 0 && ele[len] == '='
~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
tls.c:277:40: note: place parentheses around the '&&' expression to silence this warning
|| Ustrncmp(ele, match, len) == 0 && ele[len] == '='
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
6 warnings generated.
clang malware.c
malware.c:889:28: warning: using the result of an assignment as a condition without parentheses [-Wparentheses]
for (p[bread] = '\0'; q = Ustrchr(p, '\n'); p = q+1)
~~^~~~~~~~~~~~~~~~~~
malware.c:889:28: note: place parentheses around the assignment to silence this warning
for (p[bread] = '\0'; q = Ustrchr(p, '\n'); p = q+1)
^
( )
malware.c:889:28: note: use '==' to turn this assignment into an equality comparison
for (p[bread] = '\0'; q = Ustrchr(p, '\n'); p = q+1)
^
==
malware.c:1005:67: warning: comparison of unsigned expression < 0 is always false [-Wtautological-compare]
if ((bread = recv_line(sock, tmpbuf, sizeof(tmpbuf), tmo)) < 0)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~
malware.c:1808:12: warning: enumeration value 'AVA_DONE' not handled in switch [-Wswitch]
switch (avast_stage)
^
3 warnings generated.
clang spam.c
spam.c:300:5: warning: using the result of an assignment as a condition without parentheses [-Wparentheses]
s = string_nextinlist(&sublist, &sublist_sep, NULL, 0);
~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
spam.c:300:5: note: place parentheses around the assignment to silence this warning
s = string_nextinlist(&sublist, &sublist_sep, NULL, 0);
^
( )
spam.c:300:5: note: use '==' to turn this assignment into an equality comparison
s = string_nextinlist(&sublist, &sublist_sep, NULL, 0);
^
==
1 warning generated.
clang demime.c
demime.c:32:35: warning: passing 'uschar **' (aka 'unsigned char **') to parameter of type 'const uschar **'
(aka 'const unsigned char **') discards qualifiers in nested pointer types [-Wincompatible-pointer-types-discards-qualifiers]
if ((option = string_nextinlist(&list, &sep,
^~~~~
./functions.h:424:49: note: passing argument to parameter here
extern uschar *string_nextinlist(const uschar **, int *, uschar *, int);
^
demime.c:95:32: warning: passing 'uschar **' (aka 'unsigned char **') to parameter of type 'const uschar **'
(aka 'const unsigned char **') discards qualifiers in nested pointer types [-Wincompatible-pointer-types-discards-qualifiers]
option = string_nextinlist(&list, &sep,
^~~~~
./functions.h:424:49: note: passing argument to parameter here
extern uschar *string_nextinlist(const uschar **, int *, uschar *, int);
^
2 warnings generated.
----------------------------8< cut here >8------------------------------