X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsrc%2Fexim.c;h=10526ba5f6c0c2745b49edc148c205fc145ba9c8;hb=46d2a5e6f6e7709d172903b13945d23fc0a2c888;hp=63ef40553acf18929c59f39ab7a72bb5b8a8326f;hpb=eb763a7aaf9ed36939193283153724eb2671c999;p=user%2Fhenk%2Fcode%2Fexim.git diff --git a/src/src/exim.c b/src/src/exim.c index 63ef40553..10526ba5f 100644 --- a/src/src/exim.c +++ b/src/src/exim.c @@ -345,11 +345,9 @@ Returns: nothing void millisleep(int msec) { -struct itimerval itval; -itval.it_interval.tv_sec = 0; -itval.it_interval.tv_usec = 0; -itval.it_value.tv_sec = msec/1000; -itval.it_value.tv_usec = (msec % 1000) * 1000; +struct itimerval itval = {.it_interval = {.tv_sec = 0, .tv_usec = 0}, + .it_value = {.tv_sec = msec/1000, + .tv_usec = (msec % 1000) * 1000}}; milliwait(&itval); } @@ -717,26 +715,26 @@ Returns: does not return */ void -exim_exit(int rc, const uschar * process) +exim_exit(int rc) { search_tidyup(); store_exit(); DEBUG(D_any) - debug_printf(">>>>>>>>>>>>>>>> Exim pid=%d %s%s%sterminating with rc=%d " - ">>>>>>>>>>>>>>>>\n", (int)getpid(), - process ? "(" : "", process, process ? ") " : "", rc); + debug_printf(">>>>>>>>>>>>>>>> Exim pid=%d (%s) terminating with rc=%d " + ">>>>>>>>>>>>>>>>\n", + (int)getpid(), process_purpose, rc); exit(rc); } void -exim_underbar_exit(int rc, const uschar * process) +exim_underbar_exit(int rc) { store_exit(); DEBUG(D_any) - debug_printf(">>>>>>>>>>>>>>>> Exim pid=%d %s%s%sterminating with rc=%d " - ">>>>>>>>>>>>>>>>\n", (int)getpid(), - process ? "(" : "", process, process ? ") " : "", rc); + debug_printf(">>>>>>>>>>>>>>>> Exim pid=%d (%s) terminating with rc=%d " + ">>>>>>>>>>>>>>>>\n", + (int)getpid(), process_purpose, rc); _exit(rc); } @@ -2747,6 +2745,13 @@ for (i = 1; i < argc; i++) case 'D': smtp_peer_options |= OPTION_DSN; break; + /* -MCd: for debug, set a process-purpose string */ + + case 'd': if (++i < argc) + process_purpose = string_copy_taint(argv[i], TRUE); + else badarg = TRUE; + break; + /* -MCG: set the queue name, to a non-default value */ case 'G': if (++i < argc) queue_name = string_copy_taint(argv[i], TRUE); @@ -4424,7 +4429,7 @@ if (test_retry_arg >= 0) if (test_retry_arg >= argc) { printf("-brt needs a domain or address argument\n"); - exim_exit(EXIT_FAILURE, US"main"); + exim_exit(EXIT_FAILURE); } s1 = argv[test_retry_arg++]; s2 = NULL; @@ -4529,7 +4534,7 @@ if (test_retry_arg >= 0) printf("\n"); } - exim_exit(EXIT_SUCCESS, US"main"); + exim_exit(EXIT_SUCCESS); } /* Handle a request to list one or more configuration options */ @@ -4556,14 +4561,14 @@ if (list_options) else fail = !readconf_print(argv[i], NULL, flag_n); } - exim_exit(fail ? EXIT_FAILURE : EXIT_SUCCESS, US"main"); + exim_exit(fail ? EXIT_FAILURE : EXIT_SUCCESS); } if (list_config) { set_process_info("listing config"); exim_exit(readconf_print(US"config", NULL, flag_n) - ? EXIT_SUCCESS : EXIT_FAILURE, US"main"); + ? EXIT_SUCCESS : EXIT_FAILURE); } @@ -4589,7 +4594,7 @@ if (msg_action_arg > 0 && msg_action != MSG_LOAD) if (prod_requires_admin && !f.admin_user) { fprintf(stderr, "exim: Permission denied\n"); - exim_exit(EXIT_FAILURE, US"main"); + exim_exit(EXIT_FAILURE); } set_process_info("delivering specified messages"); if (deliver_give_up) forced_delivery = f.deliver_force_thaw = TRUE; @@ -4601,20 +4606,20 @@ if (msg_action_arg > 0 && msg_action != MSG_LOAD) that runs into a later copy into the untainted global message_id[] */ if (i == argc - 1) (void)deliver_message(argv[i], forced_delivery, deliver_give_up); - else if ((pid = fork()) == 0) + else if ((pid = exim_fork(US"cmdline-delivery")) == 0) { (void)deliver_message(argv[i], forced_delivery, deliver_give_up); - exim_underbar_exit(EXIT_SUCCESS, US"cmdline-delivery"); + exim_underbar_exit(EXIT_SUCCESS); } else if (pid < 0) { fprintf(stderr, "failed to fork delivery process for %s: %s\n", argv[i], strerror(errno)); - exim_exit(EXIT_FAILURE, US"main"); + exim_exit(EXIT_FAILURE); } else wait(&status); } - exim_exit(EXIT_SUCCESS, US"main"); + exim_exit(EXIT_SUCCESS); } @@ -4633,7 +4638,7 @@ if (queue_interval == 0 && !f.daemon_listen) else set_process_info("running the queue (single queue run)"); queue_run(start_queue_run_id, stop_queue_run_id, FALSE); - exim_exit(EXIT_SUCCESS, US"main"); + exim_exit(EXIT_SUCCESS); } @@ -4803,10 +4808,10 @@ if (test_rewrite_arg >= 0) if (test_rewrite_arg >= argc) { printf("-brw needs an address argument\n"); - exim_exit(EXIT_FAILURE, US"main"); + exim_exit(EXIT_FAILURE); } rewrite_test(argv[test_rewrite_arg]); - exim_exit(EXIT_SUCCESS, US"main"); + exim_exit(EXIT_SUCCESS); } /* A locally-supplied message is considered to be coming from a local user @@ -4921,7 +4926,7 @@ if (verify_address_mode || f.address_test_mode) } route_tidyup(); - exim_exit(exit_value, US"main"); + exim_exit(exit_value); } /* Handle expansion checking. Either expand items on the command line, or read @@ -5007,7 +5012,7 @@ if (expansion_test) deliver_datafile = -1; } - exim_exit(EXIT_SUCCESS, US"main: expansion test"); + exim_exit(EXIT_SUCCESS); } @@ -5101,7 +5106,7 @@ if (host_checking) } smtp_log_no_mail(); } - exim_exit(EXIT_SUCCESS, US"main"); + exim_exit(EXIT_SUCCESS); } @@ -5264,7 +5269,7 @@ if (smtp_input) if (!smtp_start_session()) { mac_smtp_fflush(); - exim_exit(EXIT_SUCCESS, US"smtp_start toplevel"); + exim_exit(EXIT_SUCCESS); } } @@ -5379,14 +5384,14 @@ while (more) cancel_cutthrough_connection(TRUE, US"receive dropped"); if (more) goto moreloop; smtp_log_no_mail(); /* Log no mail if configured */ - exim_exit(EXIT_FAILURE, US"receive toplevel"); + exim_exit(EXIT_FAILURE); } } else { cancel_cutthrough_connection(TRUE, US"message setup dropped"); smtp_log_no_mail(); /* Log no mail if configured */ - exim_exit(rc ? EXIT_FAILURE : EXIT_SUCCESS, US"msg setup toplevel"); + exim_exit(rc ? EXIT_FAILURE : EXIT_SUCCESS); } } @@ -5436,7 +5441,7 @@ while (more) if (error_handling == ERRORS_STDERR) { fprintf(stderr, "exim: too many recipients\n"); - exim_exit(EXIT_FAILURE, US"main"); + exim_exit(EXIT_FAILURE); } else return @@ -5469,7 +5474,7 @@ while (more) { fprintf(stderr, "exim: bad recipient address \"%s\": %s\n", string_printing(list[i]), errmess); - exim_exit(EXIT_FAILURE, US"main"); + exim_exit(EXIT_FAILURE); } else { @@ -5540,7 +5545,7 @@ while (more) for real; when reading the headers of a message for filter testing, it is TRUE if the headers were terminated by '.' and FALSE otherwise. */ - if (message_id[0] == 0) exim_exit(EXIT_FAILURE, US"main"); + if (message_id[0] == 0) exim_exit(EXIT_FAILURE); } /* Non-SMTP message reception */ /* If this is a filter testing run, there are headers in store, but @@ -5585,7 +5590,7 @@ while (more) if (chdir("/")) /* Get away from wherever the user is running this from */ { DEBUG(D_receive) debug_printf("chdir(\"/\") failed\n"); - exim_exit(EXIT_FAILURE, US"main"); + exim_exit(EXIT_FAILURE); } /* Now we run either a system filter test, or a user filter test, or both. @@ -5595,15 +5600,15 @@ while (more) if ((filter_test & FTEST_SYSTEM) != 0) if (!filter_runtest(filter_sfd, filter_test_sfile, TRUE, more)) - exim_exit(EXIT_FAILURE, US"main"); + 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, US"main"); + exim_exit(EXIT_FAILURE); - exim_exit(EXIT_SUCCESS, US"main"); + exim_exit(EXIT_SUCCESS); } /* Else act on the result of message reception. We should not get here unless @@ -5685,7 +5690,7 @@ while (more) pid_t pid; search_tidyup(); - if ((pid = fork()) == 0) + if ((pid = exim_fork(US"local-accept-delivery")) == 0) { int rc; close_unwanted(); /* Close unwanted file descriptors and TLS */ @@ -5705,7 +5710,7 @@ while (more) rc = deliver_message(message_id, FALSE, FALSE); search_tidyup(); exim_underbar_exit(!mua_wrapper || rc == DELIVER_MUA_SUCCEEDED - ? EXIT_SUCCESS : EXIT_FAILURE, US"cmdline-delivery"); + ? EXIT_SUCCESS : EXIT_FAILURE); } if (pid < 0) @@ -5729,7 +5734,7 @@ while (more) log_write(0, LOG_MAIN|LOG_PANIC, "process %d crashed with signal %d while delivering %s", (int)pid, status & 0x00ff, message_id); - if (mua_wrapper && (status & 0xffff) != 0) exim_exit(EXIT_FAILURE, US"main"); + if (mua_wrapper && (status & 0xffff) != 0) exim_exit(EXIT_FAILURE); } } } @@ -5761,7 +5766,7 @@ moreloop: store_reset(reset_point); } -exim_exit(EXIT_SUCCESS, US"main"); /* Never returns */ +exim_exit(EXIT_SUCCESS); /* Never returns */ return 0; /* To stop compiler warning */ }