git://git.exim.org
/
users
/
heiko
/
exim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Exipick: handle tainted options in spool files
[users/heiko/exim.git]
/
src
/
exim_monitor
/
em_queue.c
diff --git
a/src/exim_monitor/em_queue.c
b/src/exim_monitor/em_queue.c
index 4bdc57ab93ccc4b3695c7043355328adf0bb61ec..d4c01a628c70dcd75c5f93e3be95cfc641a863c6 100644
(file)
--- a/
src/exim_monitor/em_queue.c
+++ b/
src/exim_monitor/em_queue.c
@@
-2,7
+2,7
@@
* Exim Monitor *
*************************************************/
* Exim Monitor *
*************************************************/
-/* Copyright (c) University of Cambridge 1995 - 20
09
*/
+/* Copyright (c) University of Cambridge 1995 - 20
18
*/
/* See the file NOTICE for conditions of use and distribution. */
/* See the file NOTICE for conditions of use and distribution. */
@@
-63,7
+63,8
@@
if it is dest_remove, remove if present and return NULL. The
address is lowercased to start with, unless it begins with
"*", which it does for error messages. */
address is lowercased to start with, unless it begins with
"*", which it does for error messages. */
-dest_item *find_dest(queue_item *q, uschar *name, int action, BOOL caseless)
+dest_item *
+find_dest(queue_item *q, uschar *name, int action, BOOL caseless)
{
dest_item *dd;
dest_item **d = &(q->destinations);
{
dest_item *dd;
dest_item **d = &(q->destinations);
@@
-108,7
+109,8
@@
return dd;
* Clean up a dead queue item *
*************************************************/
* Clean up a dead queue item *
*************************************************/
-static void clean_up(queue_item *p)
+static void
+clean_up(queue_item *p)
{
dest_item *dd = p->destinations;
while (dd != NULL)
{
dest_item *dd = p->destinations;
while (dd != NULL)
@@
-136,7
+138,7
@@
acl_var_create(uschar *name)
{
tree_node *node, **root;
root = (name[0] == 'c')? &acl_var_c : &acl_var_m;
{
tree_node *node, **root;
root = (name[0] == 'c')? &acl_var_c : &acl_var_m;
-node = store_get(sizeof(tree_node) + Ustrlen(name));
+node = store_get(sizeof(tree_node) + Ustrlen(name)
, FALSE
);
Ustrcpy(node->name, name);
node->data.ptr = NULL;
(void)tree_insertnode(root, node);
Ustrcpy(node->name, name);
node->data.ptr = NULL;
(void)tree_insertnode(root, node);
@@
-149,11
+151,12
@@
return node;
* Set up new queue item *
*************************************************/
* Set up new queue item *
*************************************************/
-static queue_item *set_up(uschar *name, int dir_char)
+static queue_item *
+set_up(uschar *name, int dir_char)
{
int i, rc, save_errno;
struct stat statdata;
{
int i, rc, save_errno;
struct stat statdata;
-
void *
reset_point;
+
rmark
reset_point;
uschar *p;
queue_item *q = (queue_item *)store_malloc(sizeof(queue_item));
uschar buffer[256];
uschar *p;
queue_item *q = (queue_item *)store_malloc(sizeof(queue_item));
uschar buffer[256];
@@
-162,7
+165,7
@@
uschar buffer[256];
q->next = q->prev = NULL;
q->destinations = NULL;
q->next = q->prev = NULL;
q->destinations = NULL;
-Ustr
cpy(q->name, name
);
+Ustr
ncpy(q->name, name, sizeof(q->name)
);
q->seen = TRUE;
q->frozen = FALSE;
q->dir_char = dir_char;
q->seen = TRUE;
q->frozen = FALSE;
q->dir_char = dir_char;
@@
-179,7
+182,7
@@
Before reading the header remember the position in the dynamic store so that
we can recover the store into which the header is read. All data read by
spool_read_header that is to be preserved is copied into malloc store. */
we can recover the store into which the header is read. All data read by
spool_read_header that is to be preserved is copied into malloc store. */
-reset_point = store_
get(0
);
+reset_point = store_
mark(
);
message_size = 0;
message_subdir[0] = dir_char;
sprintf(CS buffer, "%s-H", name);
message_size = 0;
message_subdir[0] = dir_char;
sprintf(CS buffer, "%s-H", name);
@@
-201,7
+204,7
@@
if it's there. */
else
{
else
{
- q->update_time = q->input_time = received_time;
+ q->update_time = q->input_time = received_time
.tv_sec
;
if ((p = strstric(sender_address+1, qualify_domain, FALSE)) != NULL &&
*(--p) == '@') *p = 0;
}
if ((p = strstric(sender_address+1, qualify_domain, FALSE)) != NULL &&
*(--p) == '@') *p = 0;
}
@@
-219,11
+222,11
@@
if (rc != spool_read_OK)
struct stat statbuf;
sprintf(CS big_buffer, "%s/input/%s", spool_directory, buffer);
if (Ustat(big_buffer, &statbuf) == 0)
struct stat statbuf;
sprintf(CS big_buffer, "%s/input/%s", spool_directory, buffer);
if (Ustat(big_buffer, &statbuf) == 0)
- msg = string_sprintf("*** Format error in spool file: size =
%d
***",
+ msg = string_sprintf("*** Format error in spool file: size =
" OFF_T_FMT "
***",
statbuf.st_size);
statbuf.st_size);
- else msg =
string_sprintf("*** Format error in spool file ***")
;
+ else msg =
US"*** Format error in spool file ***"
;
}
}
- else msg =
string_sprintf("*** Cannot read spool file ***")
;
+ else msg =
US"*** Cannot read spool file ***"
;
if (rc == spool_read_hdrerror)
{
if (rc == spool_read_hdrerror)
{
@@
-231,7
+234,7
@@
if (rc != spool_read_OK)
}
else
{
}
else
{
- deliver_freeze = FALSE;
+
f.
deliver_freeze = FALSE;
sender_address = msg;
recipients_count = 0;
}
sender_address = msg;
recipients_count = 0;
}
@@
-239,9
+242,9
@@
if (rc != spool_read_OK)
/* Now set up the remaining data. */
/* Now set up the remaining data. */
-q->frozen = deliver_freeze;
+q->frozen =
f.
deliver_freeze;
-if (sender_set_untrusted)
+if (
f.
sender_set_untrusted)
{
if (sender_address[0] == 0)
{
{
if (sender_address[0] == 0)
{
@@
-331,7
+334,8
@@
while (p != NULL)
-queue_item *find_queue(uschar *name, int action, int dir_char)
+queue_item *
+find_queue(uschar *name, int action, int dir_char)
{
int first = 0;
int last = queue_index_size - 1;
{
int first = 0;
int last = queue_index_size - 1;
@@
-610,7
+614,7
@@
static void update_recipients(queue_item *p)
{
int i;
FILE *jread;
{
int i;
FILE *jread;
-
void *
reset_point;
+
rmark
reset_point;
struct stat statdata;
uschar buffer[1024];
struct stat statdata;
uschar buffer[1024];
@@
-630,7
+634,7
@@
if (!(jread = fopen(CS buffer, "r")))
/* Get the contents of the header file; if any problem, just give up.
Arrange to recover the dynamic store afterwards. */
/* Get the contents of the header file; if any problem, just give up.
Arrange to recover the dynamic store afterwards. */
-reset_point = store_
get(0
);
+reset_point = store_
mark(
);
sprintf(CS buffer, "%s-H", p->name);
if (spool_read_header(buffer, FALSE, TRUE) != spool_read_OK)
{
sprintf(CS buffer, "%s-H", p->name);
if (spool_read_header(buffer, FALSE, TRUE) != spool_read_OK)
{