Re: [exim] Exim 4.80.1 security release - details

Top Page
Delete this message
Reply to this message
Author: Chris Gerhard
Date:  
To: exim-users
Subject: Re: [exim] Exim 4.80.1 security release - details

While on the subject of building on OpenIndiana. If you build with the
Sun compiler you get the following warnings:

cc acl.c
"acl.c", line 1478: initializer will be sign-extended: -1
"acl.c", line 1479: initializer will be sign-extended: -1
"acl.c", line 1480: initializer will be sign-extended: -1
"acl.c", line 1481: initializer will be sign-extended: -1
cc: acomp failed for acl.c
*** Error code 1
The following command caused the error:
cc -c -errwarn=%all -I. -I/usr/include/pcre -I/usr/include/pcre acl.c
make: Fatal error: Command failed for target `acl.o'
Current working directory /var/tmp/exim-4.80.1/build-SunOS5-5.11-i386
*** Error code 1
The following command caused the error:
cd build-${build:-`/bin/sh scripts/os-type`-`/bin/sh
scripts/arch-type`}; make SHELL=/bin/sh
make: Fatal error: Command failed for target `all'

Obviously I had the -errwarn=%all flag to turn warnings into errors.

The fix is to explicitly cast the values to be unsigned. Here are the diffs:

*** src/acl.c.orig      Sat Oct 27 17:37:04 2012
--- src/acl.c   Sat Oct 27 17:48:05 2012
***************
*** 1475,1484 ****
     unsigned alt_opt_sep;               /* >0 Non-/ option separator 
(custom parser) */
     } verify_type_t;
   static verify_type_t verify_type_list[] = {
!     { US"reverse_host_lookup",        VERIFY_REV_HOST_LKUP,   ~0,     
TRUE, 0 },
!     { US"certificate",                VERIFY_CERT,            ~0,     
TRUE, 0 },
!     { US"helo",                       VERIFY_HELO,            ~0,     
TRUE, 0 },
!     { US"csa",                        VERIFY_CSA,             ~0,     
FALSE, 0 },
       { US"header_syntax",      VERIFY_HDR_SYNTAX,      
(1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP), TRUE, 0 },
       { US"not_blind",          VERIFY_NOT_BLIND,       
(1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP), TRUE, 0 },
       { US"header_sender",      VERIFY_HDR_SNDR,        
(1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP), FALSE, 0 },
--- 1475,1484 ----
     unsigned alt_opt_sep;               /* >0 Non-/ option separator 
(custom parser) */
     } verify_type_t;
   static verify_type_t verify_type_list[] = {
!     { US"reverse_host_lookup",        VERIFY_REV_HOST_LKUP,   
~(unsigned)0,   TRUE, 0 },
!     { US"certificate",                VERIFY_CERT,            
~(unsigned)0,   TRUE, 0 },
!     { US"helo",                       VERIFY_HELO,            
~(unsigned)0,   TRUE, 0 },
!     { US"csa",                        VERIFY_CSA,             
~(unsigned)0,   FALSE, 0 },
       { US"header_syntax",      VERIFY_HDR_SYNTAX,      
(1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP), TRUE, 0 },
       { US"not_blind",          VERIFY_NOT_BLIND,       
(1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP), TRUE, 0 },
       { US"header_sender",      VERIFY_HDR_SNDR,        
(1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP), FALSE, 0 },




Meanwhile on Solaris 11 for a warning free build you need the above plus:

*** src/child.c.orig    Sat Oct 27 17:48:56 2012
--- src/child.c    Sat Oct 27 18:17:33 2012
***************
*** 155,161 ****
--- 155,163 ----


_exit(EX_EXECFAILED);

+ #ifndef __SunOS_5_11
return NULL; /* To keep compilers happy */
+ #endif
}


*** src/exim.h.orig    Sat Oct 27 17:56:39 2012
--- src/exim.h    Sat Oct 27 18:00:11 2012
***************
*** 397,403 ****
   here. */


#ifndef ICONV_ARG2_TYPE
! #ifdef _SunOS
#define ICONV_ARG2_TYPE char **
#else
#define ICONV_ARG2_TYPE const char **
--- 397,403 ----
here. */

   #ifndef ICONV_ARG2_TYPE
! #ifdef sun
   #define ICONV_ARG2_TYPE char **
   #else
   #define ICONV_ARG2_TYPE const char **
*** src/tls-openssl.c.orig    Sat Oct 27 18:12:56 2012
--- src/tls-openssl.c    Sat Oct 27 18:11:53 2012
***************
*** 1729,1735 ****


   struct exim_openssl_option {
     uschar *name;
!   long    value;
   };
   /* We could use a macro to expand, but we need the ifdef and not all the
   options document which version they were introduced in.  Policylet: 
include
--- 1729,1735 ----


   struct exim_openssl_option {
     uschar *name;
!   unsigned long    value;
   };
   /* We could use a macro to expand, but we need the ifdef and not all the
   options document which version they were introduced in.  Policylet: 
include




--chris