summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Morey <peitolm@gentoo.org>2005-01-08 19:09:19 +0000
committerColin Morey <peitolm@gentoo.org>2005-01-08 19:09:19 +0000
commit61328d76a982a32e7558102b3984bbaf675c919d (patch)
tree6b85c14af8fcc1d6c5a973a350bc88668007a7f7 /mail-mta/exim/files
parentInitial commit. Thanks to Olivier Rolland in bug #72041. (diff)
downloadhistorical-61328d76a982a32e7558102b3984bbaf675c919d.tar.gz
historical-61328d76a982a32e7558102b3984bbaf675c919d.tar.bz2
historical-61328d76a982a32e7558102b3984bbaf675c919d.zip
Big year change in copyright, also a number of bug fixes, see changelog for more details
Diffstat (limited to 'mail-mta/exim/files')
-rw-r--r--mail-mta/exim/files/digest-exim-4.43-r22
-rw-r--r--mail-mta/exim/files/exim-4.43-r2-host_aton-buff.patch191
-rw-r--r--mail-mta/exim/files/exim-4.43-r2-localscan_dlopen.patch259
-rw-r--r--mail-mta/exim/files/exim.rc64
4 files changed, 454 insertions, 2 deletions
diff --git a/mail-mta/exim/files/digest-exim-4.43-r2 b/mail-mta/exim/files/digest-exim-4.43-r2
new file mode 100644
index 000000000000..5deaf298b99b
--- /dev/null
+++ b/mail-mta/exim/files/digest-exim-4.43-r2
@@ -0,0 +1,2 @@
+MD5 f8f646d4920660cb5579becd9265a3bf exim-4.43.tar.bz2 1388183
+MD5 5363ec73d6c3f9b5c8c87b246027cbf7 exiscan-acl-4.43-28.patch 440225
diff --git a/mail-mta/exim/files/exim-4.43-r2-host_aton-buff.patch b/mail-mta/exim/files/exim-4.43-r2-host_aton-buff.patch
new file mode 100644
index 000000000000..bf69b49c6ea6
--- /dev/null
+++ b/mail-mta/exim/files/exim-4.43-r2-host_aton-buff.patch
@@ -0,0 +1,191 @@
+*** src/lookups/dnsdb.c Tue Oct 5 09:32:08 2004
+- --- dnsdb.c Wed Dec 29 09:36:13 2004
+***************
+*** 125,131 ****
+ /* If the type is PTR, we have to construct the relevant magic lookup
+ key. This code is now in a separate function. */
+
+! if (type == T_PTR)
+ {
+ dns_build_reverse(keystring, buffer);
+ keystring = buffer;
+- --- 125,131 ----
+ /* If the type is PTR, we have to construct the relevant magic lookup
+ key. This code is now in a separate function. */
+
+! if (type == T_PTR && string_is_ip_address(keystring, NULL))
+ {
+ dns_build_reverse(keystring, buffer);
+ keystring = buffer;
+*** src/host.c Tue Oct 5 09:32:08 2004
+- --- host.c Wed Dec 29 09:43:17 2004
+***************
+*** 710,721 ****
+
+ if (*p == ':') p++;
+
+! /* Split the address into components separated by colons. */
+
+ while (*p != 0)
+ {
+ int len = Ustrcspn(p, ":");
+ if (len == 0) nulloffset = ci;
+ component[ci++] = p;
+ p += len;
+ if (*p == ':') p++;
+- --- 754,771 ----
+
+ if (*p == ':') p++;
+
+! /* Split the address into components separated by colons. The input address
+! is supposed to be checked for syntax. There was a case where this was
+! overlooked; to guard against that happening again, check here and crash if
+! there is a violation. */
+
+ while (*p != 0)
+ {
+ int len = Ustrcspn(p, ":");
+ if (len == 0) nulloffset = ci;
++ if (ci > 7) log_write(0, LOG_MAIN|LOG_PANIC_DIE,
++ "Internal error: invalid IPv6 address \"%s\" passed to host_aton()",
++ address);
+ component[ci++] = p;
+ p += len;
+ if (*p == ':') p++;
+*** src/auths/auth-spa.c Tue Oct 5 09:32:08 2004
+- --- auth-spa.c Wed Dec 29 10:55:58 2004
+***************
+*** 404,411 ****
+ *out = '\0';
+ }
+
+ int
+! spa_base64_to_bits (char *out, const char *in)
+ /* base 64 to raw bytes in quasi-big-endian order, returning count of bytes */
+ {
+ int len = 0;
+- --- 406,416 ----
+ *out = '\0';
+ }
+
++
++ /* The outlength parameter was added by PH, December 2004 */
++
+ int
+! spa_base64_to_bits (char *out, int outlength, const char *in)
+ /* base 64 to raw bytes in quasi-big-endian order, returning count of bytes */
+ {
+ int len = 0;
+***************
+*** 418,423 ****
+- --- 423,430 ----
+
+ do
+ {
++ if (len >= outlength) /* Added by PH */
++ return (-1); /* Added by PH */
+ digit1 = in[0];
+ if (DECODE64 (digit1) == BAD)
+ return (-1);
+***************
+*** 435,445 ****
+- --- 442,456 ----
+ ++len;
+ if (digit3 != '=')
+ {
++ if (len >= outlength) /* Added by PH */
++ return (-1); /* Added by PH */
+ *out++ =
+ ((DECODE64 (digit2) << 4) & 0xf0) | (DECODE64 (digit3) >> 2);
+ ++len;
+ if (digit4 != '=')
+ {
++ if (len >= outlength) /* Added by PH */
++ return (-1); /* Added by PH */
+ *out++ = ((DECODE64 (digit3) << 6) & 0xc0) | DECODE64 (digit4);
+ ++len;
+ }
+*** src/auths/auth-spa.h Tue Oct 5 09:32:08 2004
+- --- auth-spa.h Wed Dec 29 10:55:58 2004
+***************
+*** 9,14 ****
+- --- 11,19 ----
+ * All the code used here was torn by Marc Prud'hommeaux out of the
+ * Samba project (by Andrew Tridgell, Jeremy Allison, and others).
+ */
++
++ /* December 2004: The spa_base64_to_bits() function has no length checking in
++ it. I have added a check. PH */
+
+ /* It seems that some systems have existing but different definitions of some
+ of the following types. I received a complaint about "int16" causing
+***************
+*** 75,81 ****
+ #define spa_request_length(ptr) (((ptr)->buffer - (uint8x*)(ptr)) + (ptr)->bufIndex)
+
+ void spa_bits_to_base64 (unsigned char *, const unsigned char *, int);
+! int spa_base64_to_bits(char *, const char *);
+ void spa_build_auth_response (SPAAuthChallenge *challenge,
+ SPAAuthResponse *response, char *user, char *password);
+ void spa_build_auth_request (SPAAuthRequest *request, char *user,
+- --- 80,86 ----
+ #define spa_request_length(ptr) (((ptr)->buffer - (uint8x*)(ptr)) + (ptr)->bufIndex)
+
+ void spa_bits_to_base64 (unsigned char *, const unsigned char *, int);
+! int spa_base64_to_bits(char *, int, const char *);
+ void spa_build_auth_response (SPAAuthChallenge *challenge,
+ SPAAuthResponse *response, char *user, char *password);
+ void spa_build_auth_request (SPAAuthRequest *request, char *user,
+*** src/auths/spa.c Tue Oct 5 09:32:08 2004
+- --- spa.c Wed Dec 29 10:55:58 2004
+***************
+*** 133,139 ****
+ return FAIL;
+ }
+
+! if (spa_base64_to_bits((char *)(&request), (const char *)(data)) < 0)
+ {
+ DEBUG(D_auth) debug_printf("auth_spa_server(): bad base64 data in "
+ "request: %s\n", data);
+- --- 135,141 ----
+ return FAIL;
+ }
+
+! if (spa_base64_to_bits((char *)(&request), sizeof(request), (const char *)(data)) < 0)
+ {
+ DEBUG(D_auth) debug_printf("auth_spa_server(): bad base64 data in "
+ "request: %s\n", data);
+***************
+*** 153,159 ****
+ }
+
+ /* dump client response */
+! if (spa_base64_to_bits((char *)(&response), (const char *)(data)) < 0)
+ {
+ DEBUG(D_auth) debug_printf("auth_spa_server(): bad base64 data in "
+ "response: %s\n", data);
+- --- 155,161 ----
+ }
+
+ /* dump client response */
+! if (spa_base64_to_bits((char *)(&response), sizeof(response), (const char *)(data)) < 0)
+ {
+ DEBUG(D_auth) debug_printf("auth_spa_server(): bad base64 data in "
+ "response: %s\n", data);
+***************
+*** 319,325 ****
+ /* convert the challenge into the challenge struct */
+ DSPA("\n\n%s authenticator: challenge (%s)\n\n",
+ ablock->name, buffer + 4);
+! spa_base64_to_bits ((char *)(&challenge), (const char *)(buffer + 4));
+
+ spa_build_auth_response (&challenge, &response,
+ CS username, CS password);
+- --- 324,330 ----
+ /* convert the challenge into the challenge struct */
+ DSPA("\n\n%s authenticator: challenge (%s)\n\n",
+ ablock->name, buffer + 4);
+! spa_base64_to_bits ((char *)(&challenge), sizeof(challenge), (const char *)(buffer + 4));
+
+ spa_build_auth_response (&challenge, &response,
+ CS username, CS password);
diff --git a/mail-mta/exim/files/exim-4.43-r2-localscan_dlopen.patch b/mail-mta/exim/files/exim-4.43-r2-localscan_dlopen.patch
new file mode 100644
index 000000000000..146606a1fd0c
--- /dev/null
+++ b/mail-mta/exim/files/exim-4.43-r2-localscan_dlopen.patch
@@ -0,0 +1,259 @@
+diff -Naur exim-4.32/src/EDITME exim-4.32-dlopen/src/EDITME
+--- src/EDITME 2004-04-15 08:27:01.000000000 +0000
++++ src/EDITME 2004-05-06 16:15:47.000000000 +0000
+@@ -505,6 +505,21 @@
+
+
+ #------------------------------------------------------------------------------
++# On systems which support dynamic loading of shared libraries, Exim can
++# load a local_scan function specified in its config file instead of having
++# to be recompiled with the desired local_scan function. For a full
++# description of the API to this function, see the Exim specification.
++
++DLOPEN_LOCAL_SCAN=yes
++
++# If you set DLOPEN_LOCAL_SCAN, then you need to include -rdynamic in the
++# linker flags. Without it, the loaded .so won't be able to access any
++# functions from exim.
++
++LFLAGS=-rdynamic -ldl
++
++
++#------------------------------------------------------------------------------
+ # The default distribution of Exim contains only the plain text form of the
+ # documentation. Other forms are available separately. If you want to install
+ # the documentation in "info" format, first fetch the Texinfo documentation
+diff -Naur exim-4.32/src/config.h.defaults exim-4.32-dlopen/src/config.h.defaults
+--- src/config.h.defaults 2004-04-15 08:27:01.000000000 +0000
++++ src/config.h.defaults 2004-05-06 16:16:30.000000000 +0000
+@@ -20,6 +20,8 @@
+ #define AUTH_PLAINTEXT
+ #define AUTH_SPA
+
++#define DLOPEN_LOCAL_SCAN
++
+ #define BIN_DIRECTORY
+
+ #define CONFIGURE_FILE
+diff -Naur exim-4.32/src/globals.c exim-4.32-dlopen/src/globals.c
+--- src/globals.c 2004-04-15 08:27:01.000000000 +0000
++++ src/globals.c 2004-05-06 16:17:07.000000000 +0000
+@@ -109,6 +109,10 @@
+ uschar *tls_verify_hosts = NULL;
+ #endif
+
++#ifdef DLOPEN_LOCAL_SCAN
++uschar *local_scan_path = NULL;
++#endif
++
+
+ /* Input-reading functions for messages, so we can use special ones for
+ incoming TCP/IP. The defaults use stdin. We never need these for any
+diff -Naur exim-4.32/src/globals.h exim-4.32-dlopen/src/globals.h
+--- src/globals.h 2004-04-15 08:27:01.000000000 +0000
++++ src/globals.h 2004-05-06 16:17:50.000000000 +0000
+@@ -73,6 +73,9 @@
+ extern uschar *tls_verify_hosts; /* Mandatory client verification */
+ #endif
+
++#ifdef DLOPEN_LOCAL_SCAN
++extern uschar *local_scan_path; /* Path to local_scan() library */
++#endif
+
+ /* Input-reading functions for messages, so we can use special ones for
+ incoming TCP/IP. */
+diff -Naur exim-4.32/src/local_scan.c exim-4.32-dlopen/src/local_scan.c
+--- src/local_scan.c 2004-04-15 08:27:01.000000000 +0000
++++ src/local_scan.c 2004-05-06 16:21:57.000000000 +0000
+@@ -5,60 +5,131 @@
+ /* Copyright (c) University of Cambridge 1995 - 2004 */
+ /* See the file NOTICE for conditions of use and distribution. */
+
++#include "exim.h"
+
+-/******************************************************************************
+-This file contains a template local_scan() function that just returns ACCEPT.
+-If you want to implement your own version, you should copy this file to, say
+-Local/local_scan.c, and edit the copy. To use your version instead of the
+-default, you must set
+-
+-LOCAL_SCAN_SOURCE=Local/local_scan.c
+-
+-in your Local/Makefile. This makes it easy to copy your version for use with
+-subsequent Exim releases.
+-
+-For a full description of the API to this function, see the Exim specification.
+-******************************************************************************/
+-
+-
+-/* This is the only Exim header that you should include. The effect of
+-including any other Exim header is not defined, and may change from release to
+-release. Use only the documented interface! */
+-
+-#include "local_scan.h"
+-
+-
+-/* This is a "do-nothing" version of a local_scan() function. The arguments
+-are:
+-
+- fd The file descriptor of the open -D file, which contains the
+- body of the message. The file is open for reading and
+- writing, but modifying it is dangerous and not recommended.
+-
+- return_text A pointer to an unsigned char* variable which you can set in
+- order to return a text string. It is initialized to NULL.
+-
+-The return values of this function are:
+-
+- LOCAL_SCAN_ACCEPT
+- The message is to be accepted. The return_text argument is
+- saved in $local_scan_data.
+-
+- LOCAL_SCAN_REJECT
+- The message is to be rejected. The returned text is used
+- in the rejection message.
+-
+- LOCAL_SCAN_TEMPREJECT
+- This specifies a temporary rejection. The returned text
+- is used in the rejection message.
+-*/
++#ifdef DLOPEN_LOCAL_SCAN
++#include <dlfcn.h>
++static int (*local_scan_fn)(int fd, uschar **return_text) = NULL;
++static int load_local_scan_library(void);
++#endif
+
+ int
+ local_scan(int fd, uschar **return_text)
+ {
+ fd = fd; /* Keep picky compilers happy */
+ return_text = return_text;
+-return LOCAL_SCAN_ACCEPT;
++#ifdef DLOPEN_LOCAL_SCAN
++/* local_scan_path is defined AND not the empty string */
++if (local_scan_path && *local_scan_path)
++ {
++ if (!local_scan_fn)
++ {
++ if (!load_local_scan_library())
++ {
++ char *base_msg , *error_msg , *final_msg ;
++ int final_length = -1 ;
++
++ base_msg=US"Local configuration error - local_scan() library failure\n";
++ error_msg = dlerror() ;
++
++ final_length = strlen(base_msg) + strlen(error_msg) + 1 ;
++ final_msg = (char*)malloc( final_length*sizeof(char) ) ;
++ *final_msg = '\0' ;
++
++ strcat( final_msg , base_msg ) ;
++ strcat( final_msg , error_msg ) ;
++
++ *return_text = final_msg ;
++ return LOCAL_SCAN_TEMPREJECT;
++ }
++ }
++ return local_scan_fn(fd, return_text);
++ }
++else
++#endif
++ return LOCAL_SCAN_ACCEPT;
++}
++
++#ifdef DLOPEN_LOCAL_SCAN
++
++static int load_local_scan_library(void)
++{
++/* No point in keeping local_scan_lib since we'll never dlclose() anyway */
++void *local_scan_lib = NULL;
++int (*local_scan_version_fn)(void);
++int vers_maj;
++int vers_min;
++
++local_scan_lib = dlopen(local_scan_path, RTLD_NOW);
++if (!local_scan_lib)
++ {
++ log_write(0, LOG_MAIN|LOG_REJECT, "local_scan() library open failed - "
++ "message temporarily rejected");
++ return FALSE;
++ }
++
++local_scan_version_fn = dlsym(local_scan_lib, "local_scan_version_major");
++if (!local_scan_version_fn)
++ {
++ dlclose(local_scan_lib);
++ log_write(0, LOG_MAIN|LOG_REJECT, "local_scan() library doesn't contain "
++ "local_scan_version_major() function - message temporarily rejected");
++ return FALSE;
++ }
++
++/* The major number is increased when the ABI is changed in a non
++ backward compatible way. */
++vers_maj = local_scan_version_fn();
++
++local_scan_version_fn = dlsym(local_scan_lib, "local_scan_version_minor");
++if (!local_scan_version_fn)
++ {
++ dlclose(local_scan_lib);
++ log_write(0, LOG_MAIN|LOG_REJECT, "local_scan() library doesn't contain "
++ "local_scan_version_minor() function - message temporarily rejected");
++ return FALSE;
++ }
++
++/* The minor number is increased each time a new feature is added (in a
++ way that doesn't break backward compatibility) -- Marc */
++vers_min = local_scan_version_fn();
++
++
++if (vers_maj != LOCAL_SCAN_ABI_VERSION_MAJOR)
++ {
++ dlclose(local_scan_lib);
++ local_scan_lib = NULL;
++ log_write(0, LOG_MAIN|LOG_REJECT, "local_scan() has an incompatible major"
++ "version number, you need to recompile your module for this version"
++ "of exim (The module was compiled for version %d.%d and this exim provides"
++ "ABI version %d.%d)", vers_maj, vers_min, LOCAL_SCAN_ABI_VERSION_MAJOR,
++ LOCAL_SCAN_ABI_VERSION_MINOR);
++ return FALSE;
++ }
++else if (vers_min > LOCAL_SCAN_ABI_VERSION_MINOR)
++ {
++ dlclose(local_scan_lib);
++ local_scan_lib = NULL;
++ log_write(0, LOG_MAIN|LOG_REJECT, "local_scan() has an incompatible minor"
++ "version number, you need to recompile your module for this version"
++ "of exim (The module was compiled for version %d.%d and this exim provides"
++ "ABI version %d.%d)", vers_maj, vers_min, LOCAL_SCAN_ABI_VERSION_MAJOR,
++ LOCAL_SCAN_ABI_VERSION_MINOR);
++ return FALSE;
++ }
++
++local_scan_fn = dlsym(local_scan_lib, "local_scan");
++if (!local_scan_fn)
++ {
++ dlclose(local_scan_lib);
++ log_write(0, LOG_MAIN|LOG_REJECT, "local_scan() library doesn't contain "
++ "local_scan() function - message temporarily rejected");
++ return FALSE;
++ }
++
++return TRUE;
+ }
+
++#endif /* DLOPEN_LOCAL_SCAN */
++
+ /* End of local_scan.c */
+diff -Naur exim-4.32/src/readconf.c exim-4.32-dlopen/src/readconf.c
+--- src/readconf.c 2004-04-15 08:27:01.000000000 +0000
++++ src/readconf.c 2004-05-06 16:23:12.000000000 +0000
+@@ -223,6 +223,9 @@
+ { "local_from_prefix", opt_stringptr, &local_from_prefix },
+ { "local_from_suffix", opt_stringptr, &local_from_suffix },
+ { "local_interfaces", opt_stringptr, &local_interfaces },
++#ifdef DLOPEN_LOCAL_SCAN
++ { "local_scan_path", opt_stringptr, &local_scan_path },
++#endif
+ { "local_scan_timeout", opt_time, &local_scan_timeout },
+ { "local_sender_retain", opt_bool, &local_sender_retain },
+ { "localhost_number", opt_stringptr, &host_number_string },
diff --git a/mail-mta/exim/files/exim.rc6 b/mail-mta/exim/files/exim.rc6
index e858463a87e0..ac162940842a 100644
--- a/mail-mta/exim/files/exim.rc6
+++ b/mail-mta/exim/files/exim.rc6
@@ -1,7 +1,7 @@
#!/sbin/runscript
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/mail-mta/exim/files/exim.rc6,v 1.2 2004/07/14 22:31:04 agriffis Exp $
+# $Header: /var/cvsroot/gentoo-x86/mail-mta/exim/files/exim.rc6,v 1.3 2005/01/08 19:09:19 peitolm Exp $
depend() {
need logger net
@@ -16,6 +16,6 @@ start() {
stop() {
ebegin "Stopping exim"
- start-stop-daemon --stop --quiet --exec /usr/sbin/exim
+ start-stop-daemon --stop --quiet --pidfile /var/run/exim.pid --name exim
eend $?
}