X-Git-Url: https://git.exim.org/users/heiko/exim.git/blobdiff_plain/c988f1f4faa9f679f79beddf3c14676c5dcb8e28..4d146046d9a82339d26c6be230fe1480a72b8bee:/src/exim_monitor/em_queue.c diff --git a/src/exim_monitor/em_queue.c b/src/exim_monitor/em_queue.c index 45ca3513c..893e43898 100644 --- a/src/exim_monitor/em_queue.c +++ b/src/exim_monitor/em_queue.c @@ -1,10 +1,8 @@ -/* $Cambridge: exim/src/exim_monitor/em_queue.c,v 1.2 2005/01/04 10:00:42 ph10 Exp $ */ - /************************************************* * Exim Monitor * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2005 */ +/* Copyright (c) University of Cambridge 1995 - 2009 */ /* See the file NOTICE for conditions of use and distribution. */ @@ -124,6 +122,29 @@ store_free(p); } +/************************************************* +* Set up an ACL variable * +*************************************************/ + +/* The spool_read_header() function calls acl_var_create() when it reads in an +ACL variable. We know that in this case, the variable will be new, not re-used, +so this is a cut-down version, to save including the whole acl.c module (which +would need conditional compilation to cut most of it out). */ + +tree_node * +acl_var_create(uschar *name) +{ +tree_node *node, **root; +root = (name[0] == 'c')? &acl_var_c : &acl_var_m; +node = store_get(sizeof(tree_node) + Ustrlen(name)); +Ustrcpy(node->name, name); +node->data.ptr = NULL; +(void)tree_insertnode(root, node); +return node; +} + + + /************************************************* * Set up new queue item * *************************************************/ @@ -242,7 +263,8 @@ else sender_address = NULL; -sprintf(CS buffer, "%s/input/%s/%s-D", spool_directory, message_subdir, name); +snprintf(CS buffer, sizeof(buffer), "%s/input/%s/%s/%s-D", + spool_directory, queue_name, message_subdir, name); if (Ustat(buffer, &statdata) == 0) q->size = message_size + statdata.st_size - SPOOL_DATA_START_OFFSET + 1; @@ -250,7 +272,6 @@ if (Ustat(buffer, &statdata) == 0) been delivered, and removing visible names. */ if (recipients_list != NULL) - { for (i = 0; i < recipients_count; i++) { uschar *r = recipients_list[i].address; @@ -261,7 +282,6 @@ if (recipients_list != NULL) (void)find_dest(q, r, dest_add, FALSE); } } - } /* Recover the dynamic store used by spool_read_header(). */ @@ -497,7 +517,7 @@ for (i = 0; i < subdir_max; i++) name[SPOOL_NAME_LENGTH - 2] == '-' && name[SPOOL_NAME_LENGTH - 1] == 'H') { - uschar basename[SPOOL_NAME_LENGTH]; + uschar basename[SPOOL_NAME_LENGTH + 1]; stripchart_total[0]++; if (!eximon_initialized) { printf("."); fflush(stdout); } Ustrcpy(basename, name); @@ -596,11 +616,13 @@ uschar buffer[1024]; message_subdir[0] = p->dir_char; -sprintf(CS buffer, "%s/input/%s/%s-J", spool_directory, message_subdir, p->name); -jread = fopen(CS buffer, "r"); -if (jread == NULL) +snprintf(CS buffer, sizeof(buffer), "%s/input/%s/%s/%s-J", + spool_directory, queue_name, message_subdir, p->name); + +if (!(jread = fopen(CS buffer, "r"))) { - sprintf(CS buffer, "%s/input/%s/%s-H", spool_directory, message_subdir, p->name); + snprintf(CS buffer, sizeof(buffer), "%s/input/%s/%s/%s-H", + spool_directory, queue_name, message_subdir, p->name); if (Ustat(buffer, &statdata) < 0 || p->update_time == statdata.st_mtime) return; }