-/* $Cambridge: exim/src/src/queue.c,v 1.4 2005/01/04 10:00:42 ph10 Exp $ */
+/* $Cambridge: exim/src/src/queue.c,v 1.13 2009/11/16 19:50:37 nm4 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
*************************************************/
-/* Copyright (c) University of Cambridge 1995 - 2005 */
+/* Copyright (c) University of Cambridge 1995 - 2009 */
/* See the file NOTICE for conditions of use and distribution. */
/* Functions that operate on the input queue. */
load_average = os_getloadavg();
if (load_average > deliver_queue_load_max)
{
- log_write(0, LOG_MAIN, "abandon queue run (load %.2f, max %.2f)",
+ log_write(L_queue_run, LOG_MAIN, "Abandon queue run: %s (load %.2f, max %.2f)",
+ log_detail,
(double)load_average/1000.0,
(double)deliver_queue_load_max/1000.0);
i = subcount; /* Don't process other directories */
if (queue_run_pipe == 0)
{
queue_run_pipe = dup(queue_run_pipe);
- close(0);
+ (void)close(0);
}
/* Before forking to deliver the message, ensure any open and cached
/* Close the writing end of the synchronizing pipe in this process,
then wait for the first level process to terminate. */
- close(pfd[pipe_write]);
+ (void)close(pfd[pipe_write]);
set_process_info("running queue: waiting for %s (%d)", f->text, pid);
while (wait(&status) != pid);
big_buffer[n-1] = 0;
tree_add_nonrecipient(big_buffer);
}
- fclose(jread);
+ (void)fclose(jread);
}
}
sprintf(CS big_buffer, "%s/input/%s/%s", spool_directory, message_subdir,
f->text);
if (Ustat(big_buffer, &statbuf) == 0)
- {
- int size = statbuf.st_size; /* Because might be a long */
- printf("*** spool format error: size=%d ***", size);
- }
+ printf("*** spool format error: size=" OFF_T_FMT " ***",
+ statbuf.st_size);
else printf("*** spool format error ***");
}
else printf("*** spool read error: %s ***", strerror(save_errno));
* Act on a specific message *
*************************************************/
-/* Actions that require a list of addresses make use of
-argv/argc/recipients_arg. Other actions do not. This function does its
-own authority checking.
+/* Actions that require a list of addresses make use of argv/argc/
+recipients_arg. Other actions do not. This function does its own
+authority checking.
Arguments:
id id of the message to work on
}
while((rc = read(fd, big_buffer, big_buffer_size)) > 0)
- write(fileno(stdout), big_buffer, rc);
+ (void)write(fileno(stdout), big_buffer, rc);
- close(fd);
+ (void)close(fd);
return TRUE;
}
printf("Spool format error for %s\n", spoolname);
if (action != MSG_REMOVE || !admin_user)
{
- close(deliver_datafile);
+ (void)close(deliver_datafile);
deliver_datafile = -1;
return FALSE;
}
if (!admin_user && (action != MSG_REMOVE || real_uid != originator_uid))
{
printf("Permission denied\n");
- close(deliver_datafile);
+ (void)close(deliver_datafile);
deliver_datafile = -1;
return FALSE;
}
/* Take the necessary action. */
-printf("Message %s ", id);
+if (action != MSG_SHOW_COPY) printf("Message %s ", id);
switch(action)
{
+ case MSG_SHOW_COPY:
+ deliver_in_buffer = store_malloc(DELIVER_IN_BUFFER_SIZE);
+ deliver_out_buffer = store_malloc(DELIVER_OUT_BUFFER_SIZE);
+ transport_write_message(NULL, 1, 0, 0, NULL, NULL, NULL, NULL, NULL, 0);
+ break;
+
+
case MSG_FREEZE:
if (deliver_freeze)
{
if (deliver_datafile >= 0) printf("has been removed\n");
else printf("has been removed or did not exist\n");
- if (removed)
+ if (removed)
{
log_write(0, LOG_MAIN, "removed by %s", username);
- log_write(0, LOG_MAIN, "Completed");
- }
+ log_write(0, LOG_MAIN, "Completed");
+ }
break;
/* Closing the datafile releases the lock and permits other processes
to operate on the message (if it still exists). */
-close(deliver_datafile);
+(void)close(deliver_datafile);
deliver_datafile = -1;
return yield;
}