[exim-dev] 4.86-rc4 issues / notes

Góra strony
Delete this message
Reply to this message
Autor: Phil Pennock
Data:  
Dla: exim-dev
Temat: [exim-dev] 4.86-rc4 issues / notes
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------------------------------