Branch '2.3-stable' - postfix/postfix-2.4.0-whoson.patch postfix/postfix.patch postfix/postfix.spec
Christoph Wickert
wickert at kolabsys.com
Tue May 31 23:53:06 CEST 2011
postfix/postfix-2.4.0-whoson.patch | 363 -------------------------------------
postfix/postfix.patch | 102 ----------
postfix/postfix.spec | 44 +---
3 files changed, 13 insertions(+), 496 deletions(-)
New commits:
commit b266b6f4190d11fc3ece2613f73fd2fdd789de2f
Author: Christoph Wickert <wickert at kolabsys.com>
Date: Tue May 31 19:16:33 2011 +0200
postfix: Update to 2.8.3
diff --git a/postfix/postfix-2.4.0-whoson.patch b/postfix/postfix-2.4.0-whoson.patch
deleted file mode 100644
index 0a71b44..0000000
--- a/postfix/postfix-2.4.0-whoson.patch
+++ /dev/null
@@ -1,363 +0,0 @@
-Index: src/util/Makefile.in
---- src/util/Makefile.in.orig 2007-03-17 18:51:33 +0100
-+++ src/util/Makefile.in 2007-03-29 11:54:06 +0200
-@@ -4,7 +4,7 @@
- attr_scan_plain.c auto_clnt.c base64_code.c basename.c binhash.c \
- chroot_uid.c cidr_match.c clean_env.c close_on_exec.c concatenate.c \
- ctable.c dict.c dict_alloc.c dict_cdb.c dict_cidr.c dict_db.c \
-- dict_dbm.c dict_debug.c dict_env.c dict_ht.c dict_ni.c dict_nis.c \
-+ dict_dbm.c dict_debug.c dict_env.c dict_ht.c dict_ni.c dict_nis.c dict_whoson.c \
- dict_nisplus.c dict_open.c dict_pcre.c dict_regexp.c dict_sdbm.c \
- dict_static.c dict_tcp.c dict_unix.c dir_forest.c doze.c dummy_read.c \
- dummy_write.c duplex_pipe.c environ.c events.c exec_command.c \
-@@ -36,7 +36,7 @@
- attr_scan_plain.o auto_clnt.o base64_code.o basename.o binhash.o \
- chroot_uid.o cidr_match.o clean_env.o close_on_exec.o concatenate.o \
- ctable.o dict.o dict_alloc.o dict_cdb.o dict_cidr.o dict_db.o \
-- dict_dbm.o dict_debug.o dict_env.o dict_ht.o dict_ni.o dict_nis.o \
-+ dict_dbm.o dict_debug.o dict_env.o dict_ht.o dict_ni.o dict_nis.o dict_whoson.o \
- dict_nisplus.o dict_open.o dict_pcre.o dict_regexp.o dict_sdbm.o \
- dict_static.o dict_tcp.o dict_unix.o dir_forest.o doze.o dummy_read.o \
- dummy_write.o duplex_pipe.o environ.o events.o exec_command.o \
-@@ -66,7 +66,7 @@
- HDRS = argv.h attr.h attr_clnt.h auto_clnt.h base64_code.h binhash.h \
- chroot_uid.h cidr_match.h clean_env.h connect.h ctable.h dict.h \
- dict_cdb.h dict_cidr.h dict_db.h dict_dbm.h dict_env.h dict_ht.h \
-- dict_ni.h dict_nis.h dict_nisplus.h dict_pcre.h dict_regexp.h \
-+ dict_ni.h dict_nis.h dict_whoson.h dict_nisplus.h dict_pcre.h dict_regexp.h \
- dict_sdbm.h dict_static.h dict_tcp.h dict_unix.h dir_forest.h \
- events.h exec_command.h find_inet.h fsspace.h fullname.h \
- get_domainname.h get_hostname.h hex_code.h hex_quote.h host_port.h \
-Index: src/util/dict_open.c
---- src/util/dict_open.c.orig 2006-06-26 14:59:19 +0200
-+++ src/util/dict_open.c 2007-03-29 11:54:06 +0200
-@@ -203,6 +203,7 @@
- #include <stringops.h>
- #include <split_at.h>
- #include <htable.h>
-+#include <dict_whoson.h>
-
- /*
- * lookup table for available map types.
-@@ -248,6 +249,7 @@
- #endif
- DICT_TYPE_STATIC, dict_static_open,
- DICT_TYPE_CIDR, dict_cidr_open,
-+ DICT_TYPE_WHOSON, dict_whoson_open,
- 0,
- };
-
-Index: src/util/dict_whoson.c
---- /dev/null 2007-03-29 11:53:30 +0200
-+++ src/util/dict_whoson.c 2007-03-29 11:54:06 +0200
-@@ -0,0 +1,269 @@
-+/*++
-+/* NAME
-+/* dict_whoson 3
-+/* SUMMARY
-+/* dictionary manager interface to whoson lookup tables
-+/* SYNOPSIS
-+/* #include <dict_whoson.h>
-+/*
-+/* DICT *dict_whoson_open(map, dummy, dict_flags)
-+/* const char *map;
-+/* int dummy;
-+/* int dict_flags;
-+/* DESCRIPTION
-+/* dict_whoson_open() make a WHOSON server accessible
-+/* via the generic dictionary operations described in
-+/* dict_open(3).
-+/* The \fIdummy\fR argument is not used. The only implemented
-+/* operation is dictionary lookup.
-+/*
-+/* Map names have the form host:port in case of a TCP
-+/* whoson server or /path/to/socket in case of a Unix domain
-+/* server.
-+/*
-+/* WHOSON protocol is designed to allow mail relay to
-+/* a given IP adress on a smtpd server without requiring
-+/* an SMTP authentication. Authentication has to be trusted
-+/* from another source (for example, a POP server)
-+/*
-+/* Keys have to be full IP addresses. If a value is found
-+/* for a key, lookup reply will be the constant string "OK",
-+/* the IP address key and the whoson server answer are logged.
-+/*
-+/* SEE ALSO
-+/* dict(3) generic dictionary manager
-+/* DIAGNOSTICS
-+/* Fatal errors: out of memory, unknown host or service name,
-+/* attempt to update or iterate over map.
-+/* Warnings: unable to connect to whoson server, connection
-+/* close, whoson server error.
-+/* BUGS
-+/* Only the lookup method is currently implemented.
-+/* LICENSE
-+/* .ad
-+/* .fi
-+/* The Secure Mailer license must be distributed with this software.
-+/* AUTHOR(S)
-+/* Wietse Venema
-+/* IBM T.J. Watson Research
-+/* P.O. Box 704
-+/* Yorktown Heights, NY 10598, USA
-+/*--*/
-+
-+/* System library. */
-+
-+#include "sys_defs.h"
-+#include <unistd.h>
-+#include <string.h>
-+
-+#include "msg.h"
-+#include "mymalloc.h"
-+#include "vstring.h"
-+#include "vstream.h"
-+#include "vstring_vstream.h"
-+#include "valid_hostname.h"
-+#include "connect.h"
-+#include "stringops.h"
-+#include "dict_whoson.h"
-+#include "dict.h"
-+
-+
-+typedef struct {
-+ DICT dict; /* generic members */
-+ VSTRING *input; /* raw I/O buffer */
-+ VSTRING *dummy; /* raw I/O buffer to skip empty lines */
-+ VSTREAM *fp; /* I/O stream */
-+} DICT_WHOSON;
-+
-+#define DICT_WHOSON_TMOUT 100
-+
-+/*
-+ * Does the server stop when the whoson server fails ?
-+ *
-+ * According the nature of the map, it should be a bad thing
-+ * exepted on a dedicaced SMTP after POP server.
-+ */
-+
-+#undef DICT_WHOSON_INSISTS
-+
-+#ifdef DICT_WHOSON_INSISTS
-+# define DICT_WHOSON_MAXTRY 10
-+# define DICT_WHOSON_ERROR DICT_ERR_RETRY
-+#else
-+# define DICT_WHOSON_MAXTRY 10
-+# define DICT_WHOSON_ERROR DICT_ERR_NONE
-+#endif
-+
-+
-+#define STR(x) vstring_str(x)
-+
-+/* dict_whoson_connect - connect to whoson server */
-+
-+static int dict_whoson_connect(DICT_WHOSON *dict_whoson)
-+{
-+ int fd;
-+ if (dict_whoson->dict.name[0] == '/') { /* unix domain socket */
-+ fd = unix_connect(dict_whoson->dict.name, BLOCKING, 0);
-+ } else {
-+ fd = inet_connect(dict_whoson->dict.name, BLOCKING, 0);
-+ }
-+ if (fd < 0) {
-+ msg_warn("connect to WHOSON map %s: %m", dict_whoson->dict.name);
-+ return -1;
-+ }
-+
-+ dict_whoson->fp = vstream_fdopen(fd, O_RDWR);
-+
-+ vstream_control(dict_whoson->fp,
-+ VSTREAM_CTL_TIMEOUT, DICT_WHOSON_TMOUT,
-+ VSTREAM_CTL_END);
-+
-+ dict_whoson->fp = vstream_fdopen(fd, O_RDWR);
-+
-+ if (dict_whoson->input == 0) {
-+ dict_whoson->input = vstring_alloc(10);
-+ dict_whoson->dummy = vstring_alloc(10);
-+ }
-+ return 0;
-+
-+}
-+
-+/* dict_whoson_disconnect - disconnect from whoson server */
-+
-+static void dict_whoson_disconnect(DICT_WHOSON *dict_whoson)
-+{
-+ (void) vstream_fclose(dict_whoson->fp);
-+ dict_whoson->fp = 0;
-+}
-+
-+/* dict_whoson_lookup - request whoson server */
-+
-+
-+static const char *dict_whoson_lookup(DICT *dict, const char *key)
-+{
-+ DICT_WHOSON *dict_whoson = (DICT_WHOSON *) dict;
-+ char *myname = "dict_whoson_lookup";
-+ char *reply;
-+ char *end_of_reply;
-+ char *dummy;
-+ int tries;
-+
-+#define RETURN(errval, result) { dict_errno = errval; return (result); }
-+
-+ if (msg_verbose)
-+ msg_info("%s: key %s", myname, key);
-+
-+ if (valid_hostaddr(key, 0) == 0) {
-+ if (msg_verbose)
-+ msg_info("%s: %s is not a host address, dont send it to whoson server",
-+ myname, key);
-+ RETURN(DICT_ERR_NONE, 0);
-+ }
-+
-+ for (tries = 0; /* see below */ ; /* see below */ ) {
-+
-+ /*
-+ * Connect to the server, or use an existing connection.
-+ */
-+ if (dict_whoson->fp != 0 || dict_whoson_connect(dict_whoson) == 0) {
-+
-+ vstream_fprintf(dict_whoson->fp, "QUERY %s\r\n\r\n", key);
-+ if (vstring_get_nonl(dict_whoson->input, dict_whoson->fp) > 0) {
-+
-+ reply = STR(dict_whoson->input);
-+
-+ /*
-+ * wait for an empty line
-+ */
-+ while(vstring_get_nonl(dict_whoson->dummy, dict_whoson->fp)>0) {
-+ dummy = STR(dict_whoson->dummy);
-+ if (dummy[0] == '\r') dummy ++;
-+ if (dummy[0] == '\0') break;
-+ }
-+
-+ end_of_reply=reply + strlen(reply);
-+ if (reply != end_of_reply && end_of_reply[-1] == '\r')
-+ end_of_reply[-1]='\0';
-+
-+ /*
-+ * Parse the answer
-+ */
-+
-+ if (reply[0] == '+') {
-+ /*
-+ * send the anwser in log file
-+ */
-+ msg_info("%s: user found '%.100s' for [%s] from %s", myname,
-+ reply+1, key, dict_whoson->dict.name);
-+
-+ RETURN(DICT_ERR_NONE, "OK");
-+
-+ } else if (reply[0] == '-') {
-+ if (msg_verbose) {
-+ msg_info("%s: user not found for [%s] from %s", myname,
-+ key, dict_whoson->dict.name);
-+ }
-+ RETURN(DICT_ERR_NONE, 0);
-+
-+ } else if (reply[0] == '*') {
-+ msg_warn("%s: read whoson map reply from %s: %.100s", myname,
-+ dict_whoson->dict.name, printable(reply, '?'));
-+ RETURN(DICT_WHOSON_ERROR, 0);
-+ } else {
-+ msg_warn("%s: read whoson map reply from %s: bad sequence",
-+ myname, dict_whoson->dict.name);
-+ dict_whoson_disconnect(dict_whoson);
-+ RETURN(DICT_WHOSON_ERROR, 0);
-+ }
-+ } else {
-+ msg_warn("%s: read whoson map reply from %s: unexpected EOF (%m)",
-+ myname, dict_whoson->dict.name);
-+ dict_whoson_disconnect(dict_whoson);
-+ }
-+
-+ }
-+
-+ /*
-+ * Try to connect a limited number of times before giving up.
-+ */
-+ if (++tries >= DICT_WHOSON_MAXTRY)
-+ RETURN(DICT_WHOSON_ERROR, 0);
-+
-+ /*
-+ * Sleep between attempts, instead of hammering the server.
-+ */
-+ sleep(1);
-+
-+ }
-+
-+}
-+
-+/* dict_whoson_close - close whoson MAP */
-+
-+static void dict_whoson_close(DICT *dict) {
-+ DICT_WHOSON *dict_whoson = (DICT_WHOSON *) dict;
-+
-+ if (dict_whoson->fp)
-+ (void) vstream_fclose(dict_whoson->fp);
-+ if (dict_whoson->input)
-+ vstring_free(dict_whoson->input);
-+ if (dict_whoson->dummy)
-+ vstring_free(dict_whoson->dummy);
-+ dict_free(dict);
-+}
-+
-+/* dict_whoson_open - open whoson MAP */
-+
-+DICT *dict_whoson_open(const char *map, int unused_flags, int dict_flags)
-+{
-+ DICT_WHOSON *dict_whoson;
-+ dict_errno = 0;
-+ dict_whoson = (DICT_WHOSON *) dict_alloc(DICT_TYPE_WHOSON, map,
-+ sizeof(*dict_whoson));
-+ dict_whoson->dict.lookup = dict_whoson_lookup;
-+ dict_whoson->input = dict_whoson->dummy = 0;
-+ dict_whoson->dict.flags = dict_flags & ~DICT_FLAG_FIXED;
-+ dict_whoson->dict.close = dict_whoson_close;
-+ dict_whoson->fp = 0;
-+ return (DICT_DEBUG(&dict_whoson->dict));
-+}
-Index: src/util/dict_whoson.h
---- /dev/null 2007-03-29 11:53:30 +0200
-+++ src/util/dict_whoson.h 2007-03-29 11:54:06 +0200
-@@ -0,0 +1,37 @@
-+#ifndef _DICT_WHOSON_H_INCLUDED_
-+#define _DICT_WHOSON_H_INCLUDED_
-+
-+/*++
-+/* NAME
-+/* dict_whoson 3h
-+/* SUMMARY
-+/* dictionary manager interface to whoson-based lookup tables
-+/* SYNOPSIS
-+/* #include <dict_whoson.h>
-+/* DESCRIPTION
-+/* .nf
-+
-+ /*
-+ * Utility library.
-+ */
-+#include <dict.h>
-+
-+ /*
-+ * External interface.
-+ */
-+#define DICT_TYPE_WHOSON "whoson"
-+
-+extern DICT *dict_whoson_open(const char *, int, int);
-+
-+/* LICENSE
-+/* .ad
-+/* .fi
-+/* The Secure Mailer license must be distributed with this software.
-+/* AUTHOR(S)
-+/* Wietse Venema
-+/* IBM T.J. Watson Research
-+/* P.O. Box 704
-+/* Yorktown Heights, NY 10598, USA
-+/*--*/
-+
-+#endif
diff --git a/postfix/postfix.patch b/postfix/postfix.patch
deleted file mode 100644
index 0f1aa57..0000000
--- a/postfix/postfix.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-Index: makedefs
---- makedefs.orig 2007-03-24 14:30:18 +0100
-+++ makedefs 2007-12-13 18:42:19 +0100
-@@ -130,6 +130,10 @@
- ;;
- FreeBSD.6*) SYSTYPE=FREEBSD6
- ;;
-+ FreeBSD.7*) SYSTYPE=FREEBSD7
-+ ;;
-+ FreeBSD.8*) SYSTYPE=FREEBSD8
-+ ;;
- OpenBSD.2*) SYSTYPE=OPENBSD2
- ;;
- OpenBSD.3*) SYSTYPE=OPENBSD3
-Index: src/util/file_limit.c
---- src/util/file_limit.c.orig 2003-10-22 20:48:36 +0200
-+++ src/util/file_limit.c 2007-12-13 18:41:59 +0100
-@@ -80,12 +80,21 @@
- void set_file_limit(off_t limit)
- {
- #ifdef USE_ULIMIT
-+#ifdef USE_SOFTLIMITONLY
-+#error "USE_ULIMIT and USE_SOFTLIMITONLY are mutual exclusive"
-+#endif
- if (ulimit(UL_SETFSIZE, limit / ULIMIT_BLOCK_SIZE) < 0)
- msg_fatal("ulimit: %m");
- #else
- struct rlimit rlim;
-
-+#ifdef USE_SOFTLIMITONLY
-+ if (getrlimit(RLIMIT_FSIZE, &rlim) < 0)
-+ rlim.rlim_max = RLIM_INFINITY;
-+ rlim.rlim_cur = limit;
-+#else
- rlim.rlim_cur = rlim.rlim_max = limit;
-+#endif
- if (setrlimit(RLIMIT_FSIZE, &rlim) < 0)
- msg_fatal("setrlimit: %m");
- #ifdef SIGXFSZ
-Index: src/util/msg_syslog.c
---- src/util/msg_syslog.c.orig 2006-06-15 20:07:16 +0200
-+++ src/util/msg_syslog.c 2007-12-13 18:41:59 +0100
-@@ -50,6 +50,11 @@
- #include <syslog.h>
- #include <string.h>
- #include <time.h>
-+#ifdef USE_SOFTLIMITONLY
-+#include <sys/time.h>
-+#include <sys/resource.h>
-+#include <signal.h>
-+#endif
-
- /* Application-specific. */
-
-@@ -144,6 +149,9 @@
-
- static void msg_syslog_print(int level, const char *text)
- {
-+#ifdef USE_SOFTLIMITONLY
-+ struct rlimit save, rlim;
-+#endif
- static int log_level[] = {
- LOG_INFO, LOG_WARNING, LOG_ERR, LOG_CRIT, LOG_CRIT,
- };
-@@ -154,6 +162,15 @@
- if (level < 0 || level >= (int) (sizeof(log_level) / sizeof(log_level[0])))
- msg_panic("msg_syslog_print: invalid severity level: %d", level);
-
-+#ifdef USE_SOFTLIMITONLY
-+ if (getrlimit(RLIMIT_FSIZE, &save) < 0) {
-+ save.rlim_cur = RLIM_INFINITY;
-+ save.rlim_max = RLIM_INFINITY;
-+ }
-+ rlim.rlim_cur = save.rlim_max;
-+ rlim.rlim_max = save.rlim_max;
-+ (void)setrlimit(RLIMIT_FSIZE, &rlim);
-+#endif
- if (level == MSG_INFO) {
- syslog(syslog_facility | log_level[level], "%.*s",
- (int) MSG_SYSLOG_RECLEN, text);
-@@ -161,6 +178,9 @@
- syslog(syslog_facility | log_level[level], "%s: %.*s",
- severity_name[level], (int) MSG_SYSLOG_RECLEN, text);
- }
-+#ifdef USE_SOFTLIMITONLY
-+ (void)setrlimit(RLIMIT_FSIZE, &save);
-+#endif
- }
-
- /* msg_syslog_init - initialize */
-Index: src/util/sys_defs.h
---- src/util/sys_defs.h.orig 2007-03-24 23:45:33 +0100
-+++ src/util/sys_defs.h 2007-12-13 18:42:42 +0100
-@@ -24,7 +24,7 @@
- * 4.4BSD and close derivatives.
- */
- #if defined(FREEBSD2) || defined(FREEBSD3) || defined(FREEBSD4) \
-- || defined(FREEBSD5) || defined(FREEBSD6) \
-+ || defined(FREEBSD5) || defined(FREEBSD6) || defined(FREEBSD7) || defined(FREEBSD8) \
- || defined(BSDI2) || defined(BSDI3) || defined(BSDI4) \
- || defined(OPENBSD2) || defined(OPENBSD3) || defined(OPENBSD4) \
- || defined(NETBSD1) || defined(NETBSD2) || defined(NETBSD3) \
diff --git a/postfix/postfix.spec b/postfix/postfix.spec
index 8fd4117..ba4428b 100644
--- a/postfix/postfix.spec
+++ b/postfix/postfix.spec
@@ -23,7 +23,6 @@
# package versions
%define V_pflogsumm 1.1.1
-%define V_whoson 2.4.0
# package information
Name: postfix
@@ -35,8 +34,8 @@ Distribution: OpenPKG Community
Class: BASE
Group: Mail
License: IPL
-Version: 2.4.6
-Release: 20080101_kolab2
+Version: 2.8.3
+Release: 20110531
# package options
%option with_fsl yes
@@ -45,7 +44,6 @@ Release: 20080101_kolab2
%option with_mysql no
%option with_pgsql no
%option with_ldap no
-%option with_whoson no
%option with_fdsetsize no
# list of sources
@@ -54,9 +52,7 @@ Source1: http://jimsun.linxnet.com/downloads/pflogsumm-%{V_pflogsumm}.tar.g
Source2: postfix.txt
Source3: fsl.postfix
Source4: rc.postfix
-Patch0: postfix.patch
Patch1: postfix.patch.pfls
-Patch2: ftp://ftp.openpkg.org/sources/CPY/postfix/postfix-%{V_whoson}-whoson.patch
# build information
Prefix: %{l_prefix}
@@ -89,10 +85,6 @@ PreReq: postgresql, openssl
BuildPreReq: openldap, openssl
PreReq: openldap, openssl
%endif
-%if "%{with_whoson}" == "yes"
-BuildPreReq: whoson
-PreReq: whoson
-%endif
AutoReq: no
AutoReqProv: no
Provides: MTA
@@ -113,7 +105,6 @@ Conflicts: exim, sendmail, ssmtp
o Optional MySQL dictionary support (see package options)
o Optional PostgreSQL dictionary support (see package options)
o Optional OpenLDAP dictionary support (see package options)
- o Optional WHOSON dictionary support (see package options)
%track
prog postfix = {
@@ -126,11 +117,6 @@ Conflicts: exim, sendmail, ssmtp
url = http://jimsun.linxnet.com/postfix_contrib.html
regex = pflogsumm-(__VER__)\.tar\.gz
}
- prog postfix:whoson = {
- version = %{V_whoson}
- url = ftp://ftp.openpkg.org/sources/CPY/postfix/
- regex = postfix-(__VER__)-whoson.patch
- }
%prep
# unpack distribution files
@@ -138,24 +124,14 @@ Conflicts: exim, sendmail, ssmtp
%setup -q -T -D -a 1
# apply OpenPKG patches
- %patch -p0
( cd pflogsumm-%{V_pflogsumm} && %{l_patch} -p0 -b <%{PATCH1} ) || exit $?
- # apply vendor WHOSON patch
-%if "%{with_whoson}" == "yes"
- %patch -p0 -P 2
-%endif
-
%build
# configure Postfix (hard-core part I)
%{l_shtool} subst \
-e 's/var_config_dir, /var_command_dir, /' \
src/postfix/postfix.c
%{l_shtool} subst \
- -e 's;config_directory/postfix-script;command_directory/postfix-script;' \
- -e 's;config_directory/post-install;command_directory/postfix-install;' \
- conf/postfix-script
- %{l_shtool} subst \
-e 's;/usr/include;%{l_prefix}/include;g' \
makedefs
@@ -258,11 +234,9 @@ Conflicts: exim, sendmail, ssmtp
main.cf master.cf main.cf.default; do
rm -f $RPM_BUILD_ROOT%{l_prefix}/etc/postfix/$cfg
done
- mv $RPM_BUILD_ROOT%{l_prefix}/etc/postfix/postfix-script \
- $RPM_BUILD_ROOT%{l_prefix}/sbin/postfix-script
- rm -f $RPM_BUILD_ROOT%{l_prefix}/etc/postfix/postfix-script*
- mv $RPM_BUILD_ROOT%{l_prefix}/etc/postfix/post-install \
- $RPM_BUILD_ROOT%{l_prefix}/sbin/postfix-install
+
+ # remove duplicate config files
+ rm -f $RPM_BUILD_ROOT%{l_prefix}/libexec/postfix/{main,master}.cf
# install default configuration
for name in `grep "^<file" %{SOURCE postfix.txt} | sed -e 's;^.*name=";;' -e 's;".*$;;'`; do
@@ -374,3 +348,11 @@ Conflicts: exim, sendmail, ssmtp
xargs rmdir >/dev/null 2>&1 || true
exit 0
+%changelog
+* Tue May 31 2011 Christoph Wickert <wickert at kolabsys.com> - 2.8.3-20110531
+- Update to 2.8.3
+- Move postfix-script and post(fix)-install to %%{l_prefix}/libexec/postfix
+
+* Tue May 03 2011 Christoph Wickert <wickert at kolabsys.com> - 2.8-2-20110503
+- Update to 2.8.2
+- Drop whoson support, not used in Kolab
More information about the commits
mailing list