]> git.pld-linux.org Git - packages/exim.git/blame - exim-bug-1056.patch
- build fix
[packages/exim.git] / exim-bug-1056.patch
CommitLineData
4d9b939b
AM
1diff -urN exim-4.71/src/spam.c exim-4.71-new/src/spam.c
2--- exim-4.71/src/spam.c 2008-07-18 18:55:42.000000000 +0100
3+++ exim-4.71-new/src/spam.c 2009-12-17 12:37:14.000000000 +0000
4@@ -104,10 +104,8 @@
5
6 /* socket does not start with '/' -> network socket */
7 if (*spamd_address_work != '/') {
8- time_t now = time(NULL);
9 int num_servers = 0;
10- int current_server = 0;
11- int start_server = 0;
12+ int current_server;
13 uschar *address = NULL;
14 uschar *spamd_address_list_ptr = spamd_address_work;
15 uschar address_buffer[256];
16@@ -119,6 +117,7 @@
17 address_buffer,
18 sizeof(address_buffer))) != NULL) {
19
20+ /* Potential memory leak as we never free the store. */
21 spamd_address_container *this_spamd =
22 (spamd_address_container *)store_get(sizeof(spamd_address_container));
23
24@@ -143,9 +142,10 @@
25 return DEFER;
26 };
27
28- current_server = start_server = (int)now % num_servers;
29+ while ( num_servers > 0 ) {
30
31- while (1) {
32+ /* Randomly pick a server to try */
33+ current_server = random_number( num_servers );
34
35 debug_printf("trying server %s, port %u\n",
36 spamd_address_vector[current_server]->tcp_addr,
37@@ -173,16 +173,21 @@
38 spamd_address_vector[current_server]->tcp_addr,
39 spamd_address_vector[current_server]->tcp_port,
40 strerror(errno));
41- current_server++;
42- if (current_server >= num_servers)
43- current_server = 0;
44- if (current_server == start_server) {
45- log_write(0, LOG_MAIN|LOG_PANIC, "spam acl condition: all spamd servers failed");
46- (void)fclose(mbox_file);
47- (void)close(spamd_sock);
48- return DEFER;
49- };
50- };
51+
52+ (void)close(spamd_sock);
53+
54+ /* Remove the server from the list. XXX We should free the memory */
55+ num_servers--;
56+ int i;
57+ for( i = current_server; i < num_servers; i++ )
58+ spamd_address_vector[i] = spamd_address_vector[i+1];
59+ }
60+
61+ if ( num_servers == 0 ) {
62+ log_write(0, LOG_MAIN|LOG_PANIC, "spam acl condition: all spamd servers failed");
63+ (void)fclose(mbox_file);
64+ return DEFER;
65+ }
66
67 }
68 else {
This page took 0.380572 seconds and 4 git commands to generate.