X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/2c17bb02e213012d5d98ebac506a67b23b2cf693..8cfd0f7b84730e10238219bd5b93677519ecbb16:/src/src/buildconfig.c diff --git a/src/src/buildconfig.c b/src/src/buildconfig.c index c90d940aa..4ed287414 100644 --- a/src/src/buildconfig.c +++ b/src/src/buildconfig.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2012 */ +/* Copyright (c) University of Cambridge 1995 - 2016 */ /* See the file NOTICE for conditions of use and distribution. */ @@ -105,8 +105,10 @@ time_t test_time_t = 0; size_t test_size_t = 0; ssize_t test_ssize_t = 0; unsigned long test_ulong_t = 0L; +unsigned int test_uint_t = 0; #endif long test_long_t = 0; +int test_int_t = 0; FILE *base; FILE *new; int last_initial = 'A'; @@ -190,12 +192,17 @@ fprintf(new, "#define SSIZE_T_FMT \"%%zd\"\n"); #else if (sizeof(test_size_t) > sizeof (test_ulong_t)) fprintf(new, "#define SIZE_T_FMT \"%%llu\"\n"); -else +else if (sizeof(test_size_t) > sizeof (test_uint_t)) fprintf(new, "#define SIZE_T_FMT \"%%lu\"\n"); +else + fprintf(new, "#define SIZE_T_FMT \"%%u\"\n"); + if (sizeof(test_ssize_t) > sizeof(test_long_t)) fprintf(new, "#define SSIZE_T_FMT \"%%lld\"\n"); -else +else if (sizeof(test_ssize_t) > sizeof(test_int_t)) fprintf(new, "#define SSIZE_T_FMT \"%%ld\"\n"); +else + fprintf(new, "#define SSIZE_T_FMT \"%%d\"\n"); #endif /* Now search the makefile for certain settings */ @@ -720,17 +727,31 @@ else if (isgroup) continue; } - /* WITH_CONTENT_SCAN is another special case: it must be set if either it or - WITH_OLD_DEMIME is set. */ + /* WITH_CONTENT_SCAN is another special case: it must be set if it or + EXPERIMENTAL_DCC is set. */ if (strcmp(name, "WITH_CONTENT_SCAN") == 0) { char *wcs = getenv("WITH_CONTENT_SCAN"); - char *wod = getenv("WITH_OLD_DEMIME"); char *dcc = getenv("EXPERIMENTAL_DCC"); - if (wcs != NULL || wod != NULL || dcc != NULL) - fprintf(new, "#define WITH_CONTENT_SCAN yes\n"); - else fprintf(new, "/* WITH_CONTENT_SCAN not set */\n"); + fprintf(new, wcs || dcc + ? "#define WITH_CONTENT_SCAN yes\n" + : "/* WITH_CONTENT_SCAN not set */\n"); + continue; + } + + /* DISABLE_DKIM is special; must be forced if no SUPPORT_TLS */ + if (strcmp(name, "DISABLE_DKIM") == 0) + { + char *d_dkim = getenv("DISABLE_DKIM"); + char *tls = getenv("SUPPORT_TLS"); + + if (d_dkim) + fprintf(new, "#define DISABLE_DKIM yes\n"); + else if (!tls) + fprintf(new, "#define DISABLE_DKIM yes /* forced by lack of TLS */\n"); + else + fprintf(new, "/* DISABLE_DKIM not set */\n"); continue; } @@ -804,7 +825,11 @@ else if (isgroup) strncpy(buffer, ss, sss-ss); buffer[sss-ss] = 0; /* For empty case */ } - else strcpy(buffer, ss); + else + { + strncpy(buffer, ss, sizeof(buffer)); + buffer[sizeof(buffer)-1] = 0; + } pp = buffer + (int)strlen(buffer); while (pp > buffer && isspace((unsigned char)pp[-1])) pp--; *pp = 0; @@ -847,16 +872,17 @@ else if (isgroup) } /* how many bits Exim, as a client, demands must be in D-H */ - /* as of GnuTLS 2.12.x, we ask for "normal" for D-H PK; before that, we - specify the number of bits. We've stuck with the historical value, but - it can be overriden. */ - else if ((strcmp(name, "EXIM_CLIENT_DH_MIN_BITS") == 0) || + /* 1024 is a historical figure; some sites actually use lower, so we + permit the value to be lowered "dangerously" low, but not "insanely" + low. Though actually, 1024 is becoming "dangerous". */ + else if ((strcmp(name, "EXIM_CLIENT_DH_MIN_MIN_BITS") == 0) || + (strcmp(name, "EXIM_CLIENT_DH_DEFAULT_MIN_BITS") == 0) || (strcmp(name, "EXIM_SERVER_DH_BITS_PRE2_12") == 0)) { long nv; char *end; nv = strtol(value, &end, 10); - if (end != value && *end == '\0' && nv >= 1000 && nv < 50000) + if (end != value && *end == '\0' && nv >= 512 && nv < 500000) { fprintf(new, "%s\n", value); }