X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/fd700877d5224452609c919113fd71d08ac1ccca..99ea1c866060c4ca655973128f06d41c8efe9a44:/src/src/expand.c diff --git a/src/src/expand.c b/src/src/expand.c index e00628f14..b91f0316a 100644 --- a/src/src/expand.c +++ b/src/src/expand.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/expand.c,v 1.65 2006/10/24 14:32:49 ph10 Exp $ */ +/* $Cambridge: exim/src/src/expand.c,v 1.68 2006/10/31 14:26:34 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -1157,11 +1157,12 @@ for (i = 0; i < 2; i++) ptr += ilen; /* For a non-raw header, put in the comma if needed, then add - back the newline we removed above. */ + back the newline we removed above, provided there was some text in + the header. */ - if (!want_raw) + if (!want_raw && ilen > 0) { - if (comma != 0 && ilen > 0) *ptr++ = ','; + if (comma != 0) *ptr++ = ','; *ptr++ = '\n'; } } @@ -1197,7 +1198,7 @@ fails. If decoding fails, it returns NULL. */ else { uschar *decoded, *error; - if (ptr > yield) ptr--; + if (ptr > yield && ptr[-1] == '\n') ptr--; if (ptr > yield && comma != 0 && ptr[-1] == ',') ptr--; *ptr = 0; decoded = rfc2047_decode2(yield, check_rfc2047_length, charset, '?', NULL, @@ -1688,7 +1689,9 @@ switch(cond_type) s = read_name(name, 256, s+1, US"_"); - /* Test for a header's existence */ + /* Test for a header's existence. If the name contains a closing brace + character, this may be a user error where the terminating colon has been + omitted. Set a flag to adjust a subsequent error message in this case. */ if (Ustrncmp(name, "h_", 2) == 0 || Ustrncmp(name, "rh_", 3) == 0 || @@ -1698,6 +1701,7 @@ switch(cond_type) Ustrncmp(name, "bheader_", 8) == 0) { s = read_header_name(name, 256, s); + if (Ustrchr(name, '}') != NULL) malformed_header = TRUE; if (yield != NULL) *yield = (find_header(name, TRUE, NULL, FALSE, NULL) != NULL) == testfor; } @@ -2972,7 +2976,7 @@ while (*s != 0) value = find_header(name, FALSE, &newsize, want_raw, charset); /* If we didn't find the header, and the header contains a closing brace - characters, this may be a user error where the terminating colon + character, this may be a user error where the terminating colon has been omitted. Set a flag to adjust the error message in this case. But there is no error here - nothing gets inserted. */ @@ -3832,6 +3836,14 @@ while (*s != 0) } } + /* Shut down the sending side of the socket. This helps some servers to + recognise that it is their turn to do some work. Just in case some + system doesn't have this function, make it conditional. */ + + #ifdef SHUT_WR + shutdown(fd, SHUT_WR); + #endif + /* Now we need to read from the socket, under a timeout. The function that reads a file can be used. */