X-Git-Url: https://vcs.fsf.org/?p=exim.git;a=blobdiff_plain;f=src%2Fsrc%2Fexim.c;h=0ed6c7ae571df48019eb242b21e7bbd8518b6c73;hp=249f819d0aaa091a7222330f668bc1314fb9e4ad;hb=f3dcf4a2e22328f9edfbc403986875307f4ca395;hpb=8523533c08c018ac4b750b0e0fab6cfe611e8a49 diff --git a/src/src/exim.c b/src/src/exim.c index 249f819d0..0ed6c7ae5 100644 --- a/src/src/exim.c +++ b/src/src/exim.c @@ -1,10 +1,10 @@ -/* $Cambridge: exim/src/src/exim.c,v 1.11 2004/12/16 15:11:47 tom Exp $ */ +/* $Cambridge: exim/src/src/exim.c,v 1.20 2005/05/31 11:10:50 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2004 */ +/* Copyright (c) University of Cambridge 1995 - 2005 */ /* See the file NOTICE for conditions of use and distribution. */ @@ -586,7 +586,8 @@ exit(rc); *************************************************/ /* Called to extract the port from the values given to -oMa and -oMi. -It also checks the syntax of the address. +It also checks the syntax of the address, and terminates it before the +port data when a port is extracted. Argument: address the address, with possible port on the end @@ -599,7 +600,7 @@ static int check_port(uschar *address) { int port = host_extract_port(address); -if (!string_is_ip_address(address, NULL)) +if (string_is_ip_address(address, NULL) == 0) { fprintf(stderr, "exim abandoned: \"%s\" is not an IP address\n", address); exit(EXIT_FAILURE); @@ -622,7 +623,7 @@ Arguments: flags flag bits for verify_address() exit_value to be set for failures -Returns: nothint +Returns: nothing */ static void @@ -829,6 +830,9 @@ fprintf(f, "Support for:"); #ifdef EXIM_PERL fprintf(f, " Perl"); #endif +#ifdef EXPAND_DLFUNC + fprintf(f, " Expand_dlfunc"); +#endif #ifdef USE_TCP_WRAPPERS fprintf(f, " TCPwrappers"); #endif @@ -854,6 +858,9 @@ fprintf(f, "Support for:"); #ifdef EXPERIMENTAL_BRIGHTMAIL fprintf(f, " Experimental_Brightmail"); #endif +#ifdef EXPERIMENTAL_DOMAINKEYS + fprintf(f, " Experimental_DomainKeys"); +#endif fprintf(f, "\n"); fprintf(f, "Lookups:"); @@ -1890,7 +1897,7 @@ for (i = 1; i < argc; i++) break; /* -d: Set debug level (see also -v below) or set the drop_cr option. - The latter is now a no-op, retained for compatibility only. If -dd is used, + The latter is now a no-op, retained for compatibility only. If -dd is used, debugging subprocesses of the daemon is disabled. */ case 'd': @@ -3231,8 +3238,8 @@ a debugging feature for finding out what arguments certain MUAs actually use. Don't attempt it if logging is disabled, or if listing variables or if verifying/testing addresses or expansions. */ -if ((log_extra_selector & LX_arguments) != 0 && really_exim - && !list_options && !checking) +if (((debug_selector & D_any) != 0 || (log_extra_selector & LX_arguments) != 0) + && really_exim && !list_options && !checking) { int i; uschar *p = big_buffer; @@ -3264,7 +3271,11 @@ if ((log_extra_selector & LX_arguments) != 0 && really_exim (p - big_buffer) - 4), printing, quote); while (*p) p++; } - log_write(0, LOG_MAIN, "%s", big_buffer); + + if ((log_extra_selector & LX_arguments) != 0) + log_write(0, LOG_MAIN, "%s", big_buffer); + else + debug_printf("%s\n", big_buffer); } /* Set the working directory to be the top-level spool directory. We don't rely @@ -3447,7 +3458,7 @@ barf. */ if (smtp_input) { union sockaddr_46 inetd_sock; - SOCKLEN_T size = sizeof(inetd_sock); + EXIM_SOCKLEN_T size = sizeof(inetd_sock); if (getpeername(0, (struct sockaddr *)(&inetd_sock), &size) == 0) { int family = ((struct sockaddr *)(&inetd_sock))->sa_family; @@ -4132,17 +4143,17 @@ call to find the ident for. */ if (host_checking) { - int x[4]; + int x[4]; int size; - + sender_ident = NULL; if (running_in_test_harness && sender_host_port != 0 && interface_address != NULL && interface_port != 0) verify_get_ident(1413); - + /* In case the given address is a non-canonical IPv6 address, canonicize it. The code works for both IPv4 and IPv6, as it happens. */ - + size = host_aton(sender_host_address, x); sender_host_address = store_get(48); /* large enough for full IPv6 */ (void)host_nmtoa(size, x, -1, sender_host_address, ':'); @@ -4601,26 +4612,26 @@ while (more) if (ftest_suffix != NULL) printf("Suffix = %s\n", ftest_suffix); chdir("/"); /* Get away from wherever the user is running this from */ - - /* Now we run either a system filter test, or a user filter test, or both. - In the latter case, headers added by the system filter will persist and be - available to the user filter. We need to copy the filter variables + + /* Now we run either a system filter test, or a user filter test, or both. + In the latter case, headers added by the system filter will persist and be + available to the user filter. We need to copy the filter variables explicitly. */ - + if ((filter_test & FTEST_SYSTEM) != 0) { if (!filter_runtest(filter_sfd, filter_test_sfile, TRUE, more)) exim_exit(EXIT_FAILURE); - } - + } + memcpy(filter_sn, filter_n, sizeof(filter_sn)); - + if ((filter_test & FTEST_USER) != 0) { if (!filter_runtest(filter_ufd, filter_test_ufile, FALSE, more)) exim_exit(EXIT_FAILURE); - } - + } + exim_exit(EXIT_SUCCESS); } @@ -4693,6 +4704,12 @@ while (more) close_unwanted(); /* Close unwanted file descriptors and TLS */ exim_nullstd(); /* Ensure std{in,out,err} exist */ + /* Occasionally in the test harness we don't have synchronous delivery + set (can happen with bounces). In that case, let the old process finish + before continuing, to keep the debug output the same. */ + + if (running_in_test_harness && !synchronous_delivery) millisleep(100); + /* Re-exec Exim if we need to regain privilege (note: in mua_wrapper mode, deliver_drop_privilege is forced TRUE). */