]> git.pld-linux.org Git - packages/exim.git/blob - exim-bug-1056.patch
- build fix
[packages/exim.git] / exim-bug-1056.patch
1 diff -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.040758 seconds and 3 git commands to generate.