diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..02d184b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+SOURCES/mailman-2.1.29.tgz
diff --git a/.mailman.metadata b/.mailman.metadata
new file mode 100644
index 0000000..72eede2
--- /dev/null
+++ b/.mailman.metadata
@@ -0,0 +1 @@
+40fe97974a6f0805a01d55c6944565f238778238 SOURCES/mailman-2.1.29.tgz
diff --git a/SOURCES/httpd-mailman.conf b/SOURCES/httpd-mailman.conf
new file mode 100644
index 0000000..58dbc90
--- /dev/null
+++ b/SOURCES/httpd-mailman.conf
@@ -0,0 +1,24 @@
+#
+#  httpd configuration settings for use with mailman.
+#
+
+ScriptAlias /mailman/ @MMDIR@/cgi-bin/
+<Directory @MMDIR@/cgi-bin/>
+    AllowOverride None
+    Options ExecCGI
+    Require all granted
+</Directory>
+
+
+Alias /pipermail/ @VARMMDIR@/archives/public/
+<Directory @VARMMDIR@/archives/public>
+    Options MultiViews FollowSymLinks
+    AllowOverride None
+    Require all granted
+    AddDefaultCharset Off
+</Directory>
+
+# Uncomment the following line, replacing www.example.com with your server's
+# name, to redirect queries to /mailman to the listinfo page (recommended).
+
+# RedirectMatch ^/mailman[/]*$ http://www.example.com/mailman/listinfo
diff --git a/SOURCES/mailman-2.1-build.patch b/SOURCES/mailman-2.1-build.patch
new file mode 100644
index 0000000..3c5d99d
--- /dev/null
+++ b/SOURCES/mailman-2.1-build.patch
@@ -0,0 +1,715 @@
+diff --git a/Mailman/Archiver/Makefile.in b/Mailman/Archiver/Makefile.in
+index 65e46cb..dc3a1c6 100644
+--- a/Mailman/Archiver/Makefile.in
++++ b/Mailman/Archiver/Makefile.in
+@@ -28,7 +28,6 @@ exec_prefix=	@exec_prefix@
+ DESTDIR=
+ 
+ CC=		@CC@
+-CHMOD=  	@CHMOD@
+ INSTALL=	@INSTALL@
+ 
+ DEFS=   	@DEFS@
+@@ -47,7 +46,7 @@ pipermail.py
+ # Modes for directories and executables created by the install
+ # process.  Default to group-writable directories but
+ # user-only-writable for executables.
+-DIRMODE=	775
++DIRMODE=	2775
+ EXEMODE=	755
+ FILEMODE=	644
+ INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
+@@ -63,8 +62,6 @@ install:
+ 	    $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
+ 	done
+ 
+-finish:
+-
+ clean:
+ 
+ distclean:
+diff --git a/Mailman/Bouncers/Makefile.in b/Mailman/Bouncers/Makefile.in
+index 8865a9f..8878cd9 100644
+--- a/Mailman/Bouncers/Makefile.in
++++ b/Mailman/Bouncers/Makefile.in
+@@ -28,7 +28,6 @@ exec_prefix=	@exec_prefix@
+ DESTDIR=
+ 
+ CC=		@CC@
+-CHMOD=  	@CHMOD@
+ INSTALL=	@INSTALL@
+ 
+ DEFS=   	@DEFS@
+@@ -45,7 +44,7 @@ MODULES=	*.py
+ # Modes for directories and executables created by the install
+ # process.  Default to group-writable directories but
+ # user-only-writable for executables.
+-DIRMODE=	775
++DIRMODE=	2775
+ EXEMODE=	755
+ FILEMODE=	644
+ INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
+@@ -61,8 +60,6 @@ install:
+ 	    $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
+ 	done
+ 
+-finish:
+-
+ clean:
+ 
+ distclean:
+diff --git a/Mailman/Cgi/Makefile.in b/Mailman/Cgi/Makefile.in
+index 47929e9..e20c07e 100644
+--- a/Mailman/Cgi/Makefile.in
++++ b/Mailman/Cgi/Makefile.in
+@@ -28,7 +28,6 @@ exec_prefix=	@exec_prefix@
+ DESTDIR=
+ 
+ CC=		@CC@
+-CHMOD=  	@CHMOD@
+ INSTALL=	@INSTALL@
+ 
+ DEFS=   	@DEFS@
+@@ -47,7 +46,7 @@ CGI_MODULES=	*.py
+ # Modes for directories and executables created by the install
+ # process.  Default to group-writable directories but
+ # user-only-writable for executables.
+-DIRMODE=	775
++DIRMODE=	2775
+ EXEMODE=	755
+ FILEMODE=	644
+ INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
+@@ -63,8 +62,6 @@ install:
+ 	    $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(CGIDIR); \
+         done
+ 
+-finish:
+-
+ clean:
+ 
+ distclean:
+diff --git a/Mailman/Commands/Makefile.in b/Mailman/Commands/Makefile.in
+index 645d78b..12bbc1b 100644
+--- a/Mailman/Commands/Makefile.in
++++ b/Mailman/Commands/Makefile.in
+@@ -28,7 +28,6 @@ exec_prefix=	@exec_prefix@
+ DESTDIR=
+ 
+ CC=		@CC@
+-CHMOD=  	@CHMOD@
+ INSTALL=	@INSTALL@
+ 
+ DEFS=   	@DEFS@
+@@ -45,7 +44,7 @@ MODULES=	*.py
+ # Modes for directories and executables created by the install
+ # process.  Default to group-writable directories but
+ # user-only-writable for executables.
+-DIRMODE=	775
++DIRMODE=	2775
+ EXEMODE=	755
+ FILEMODE=	644
+ INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
+@@ -61,8 +60,6 @@ install:
+ 	    $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
+ 	done
+ 
+-finish:
+-
+ clean:
+ 
+ distclean:
+diff --git a/Mailman/Gui/Makefile.in b/Mailman/Gui/Makefile.in
+index 000441e..9273b8a 100644
+--- a/Mailman/Gui/Makefile.in
++++ b/Mailman/Gui/Makefile.in
+@@ -28,7 +28,6 @@ exec_prefix=	@exec_prefix@
+ DESTDIR=
+ 
+ CC=		@CC@
+-CHMOD=  	@CHMOD@
+ INSTALL=	@INSTALL@
+ 
+ DEFS=   	@DEFS@
+@@ -45,7 +44,7 @@ MODULES=	*.py
+ # Modes for directories and executables created by the install
+ # process.  Default to group-writable directories but
+ # user-only-writable for executables.
+-DIRMODE=	775
++DIRMODE=	2775
+ EXEMODE=	755
+ FILEMODE=	644
+ INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
+@@ -61,8 +60,6 @@ install:
+ 	    $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
+ 	done
+ 
+-finish:
+-
+ clean:
+ 
+ distclean:
+diff --git a/Mailman/Handlers/Makefile.in b/Mailman/Handlers/Makefile.in
+index 71e5576..56ee2eb 100644
+--- a/Mailman/Handlers/Makefile.in
++++ b/Mailman/Handlers/Makefile.in
+@@ -28,7 +28,6 @@ exec_prefix=	@exec_prefix@
+ DESTDIR=
+ 
+ CC=		@CC@
+-CHMOD=  	@CHMOD@
+ INSTALL=	@INSTALL@
+ 
+ DEFS=   	@DEFS@
+@@ -45,7 +44,7 @@ MODULES=	*.py
+ # Modes for directories and executables created by the install
+ # process.  Default to group-writable directories but
+ # user-only-writable for executables.
+-DIRMODE=	775
++DIRMODE=	2775
+ EXEMODE=	755
+ FILEMODE=	644
+ INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
+@@ -61,8 +60,6 @@ install:
+ 	    $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
+ 	done
+ 
+-finish:
+-
+ clean:
+ 
+ distclean:
+diff --git a/Mailman/Logging/Makefile.in b/Mailman/Logging/Makefile.in
+index e185775..ad5c128 100644
+--- a/Mailman/Logging/Makefile.in
++++ b/Mailman/Logging/Makefile.in
+@@ -28,7 +28,6 @@ exec_prefix=	@exec_prefix@
+ DESTDIR=
+ 
+ CC=		@CC@
+-CHMOD=  	@CHMOD@
+ INSTALL=	@INSTALL@
+ 
+ DEFS=   	@DEFS@
+@@ -45,7 +44,7 @@ MODULES=	*.py
+ # Modes for directories and executables created by the install
+ # process.  Default to group-writable directories but
+ # user-only-writable for executables.
+-DIRMODE=	775
++DIRMODE=	2775
+ EXEMODE=	755
+ FILEMODE=	644
+ INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
+@@ -61,8 +60,6 @@ install:
+ 	    $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
+ 	done
+ 
+-finish:
+-
+ clean:
+ 
+ distclean:
+diff --git a/Mailman/MTA/Makefile.in b/Mailman/MTA/Makefile.in
+index 0338806..e1de296 100644
+--- a/Mailman/MTA/Makefile.in
++++ b/Mailman/MTA/Makefile.in
+@@ -28,7 +28,6 @@ exec_prefix=	@exec_prefix@
+ DESTDIR=
+ 
+ CC=		@CC@
+-CHMOD=  	@CHMOD@
+ INSTALL=	@INSTALL@
+ 
+ DEFS=   	@DEFS@
+@@ -45,7 +44,7 @@ MODULES=	*.py
+ # Modes for directories and executables created by the install
+ # process.  Default to group-writable directories but
+ # user-only-writable for executables.
+-DIRMODE=	775
++DIRMODE=	2775
+ EXEMODE=	755
+ FILEMODE=	644
+ INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
+@@ -61,8 +60,6 @@ install:
+ 	    $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
+ 	done
+ 
+-finish:
+-
+ clean:
+ 
+ distclean:
+diff --git a/Mailman/Makefile.in b/Mailman/Makefile.in
+index 93c7efd..45439f0 100644
+--- a/Mailman/Makefile.in
++++ b/Mailman/Makefile.in
+@@ -20,8 +20,6 @@
+ 
+ # Variables set by configure
+ 
+-VERSION=	@VERSION@
+-
+ VPATH=		@srcdir@
+ srcdir= 	@srcdir@
+ bindir= 	@bindir@
+@@ -30,7 +28,6 @@ exec_prefix=	@exec_prefix@
+ DESTDIR=
+ 
+ CC=		@CC@
+-CHMOD=  	@CHMOD@
+ INSTALL=	@INSTALL@
+ 
+ DEFS=   	@DEFS@
+@@ -48,7 +45,7 @@ SUBDIRS=	Cgi Logging Archiver Handlers Bouncers Queue MTA Gui Commands
+ # Modes for directories and executables created by the install
+ # process.  Default to group-writable directories but
+ # user-only-writable for executables.
+-DIRMODE=	775
++DIRMODE=	2775
+ EXEMODE=	755
+ FILEMODE=	644
+ INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
+@@ -79,12 +76,6 @@ install: install-here
+ 	    (cd $$d; $(MAKE) DESTDIR=$(DESTDIR) install); \
+ 	done
+ 
+-finish:
+-	@for d in $(SUBDIRS); \
+-	do \
+-	    (cd $$d; $(MAKE) DESTDIR=$(DESTDIR) finish); \
+-	done
+-
+ clean:
+ 	for d in $(SUBDIRS); \
+ 	do \
+diff --git a/Mailman/Queue/Makefile.in b/Mailman/Queue/Makefile.in
+index 179f3d9..e0e97ad 100644
+--- a/Mailman/Queue/Makefile.in
++++ b/Mailman/Queue/Makefile.in
+@@ -28,7 +28,6 @@ exec_prefix=	@exec_prefix@
+ DESTDIR=
+ 
+ CC=		@CC@
+-CHMOD=  	@CHMOD@
+ INSTALL=	@INSTALL@
+ 
+ DEFS=   	@DEFS@
+@@ -45,7 +44,7 @@ MODULES=	*.py
+ # Modes for directories and executables created by the install
+ # process.  Default to group-writable directories but
+ # user-only-writable for executables.
+-DIRMODE=	775
++DIRMODE=	2775
+ EXEMODE=	755
+ FILEMODE=	644
+ INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
+@@ -61,8 +60,6 @@ install:
+ 	    $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
+ 	done
+ 
+-finish:
+-
+ clean:
+ 
+ distclean:
+diff --git a/Makefile.in b/Makefile.in
+index 40e04f5..eb40844 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -61,11 +61,10 @@ SUBDIRS=	bin cron misc Mailman scripts src templates messages tests
+ # Modes for directories and executables created by the install
+ # process.  Default to group-writable directories but
+ # user-only-writable for executables.
+-DIRMODE=	775
++DIRMODE=	2775
+ EXEMODE=	755
+ FILEMODE=	644
+ INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
+-DIRSETGID=	chmod g+s
+ 
+ DATE = $(shell python -c 'import time; print time.strftime("%d-%b-%Y"),')
+ LANGPACK = README-I18N.en templates messages
+@@ -85,14 +84,24 @@ install: doinstall update
+ 
+ doinstall: $(SUBDIRS)
+ 	@echo "Creating architecture independent directories..."
++	dir=$(DESTDIR)$(prefix); \
++	if test ! -d $$dir; then \
++		echo "Creating directory hierarchy $$dir"; \
++		$(INSTALL) -d -m $(DIRMODE) $$dir; \
++	else true; \
++	fi;
++	dir=$(DESTDIR)$(var_prefix); \
++	if test ! -d $$dir; then \
++		echo "Creating directory hierarchy $$dir"; \
++		$(INSTALL) -d -m $(DIRMODE) $$dir; \
++	else true; \
++	fi;
+ 	@for d in $(VAR_DIRS); \
+ 	do \
+ 	    dir=$(DESTDIR)$(var_prefix)/$$d; \
+ 	    if test ! -d $$dir; then \
+ 		echo "Creating directory hierarchy $$dir"; \
+-		$(srcdir)/mkinstalldirs $$dir; \
+-		chmod $(DIRMODE) $$dir; \
+-		$(DIRSETGID) $$dir; \
++		$(INSTALL) -d -m $(DIRMODE) $$dir; \
+ 	    else true; \
+ 	    fi; \
+ 	done
+@@ -102,9 +111,7 @@ doinstall: $(SUBDIRS)
+ 	    dir=$(DESTDIR)$(prefix)/$$d; \
+ 	    if test ! -d $$dir; then \
+ 		echo "Creating directory hierarchy $$dir"; \
+-		$(srcdir)/mkinstalldirs $$dir; \
+-		chmod $(DIRMODE) $$dir; \
+-		$(DIRSETGID) $$dir; \
++		$(INSTALL) -d -m $(DIRMODE) $$dir; \
+ 	    else true; \
+ 	    fi; \
+ 	done
+@@ -114,9 +121,7 @@ doinstall: $(SUBDIRS)
+ 	    dir=$(DESTDIR)$(exec_prefix)/$$d; \
+ 	    if test ! -d $$dir; then \
+ 		echo "Creating directory hierarchy $$dir"; \
+-		$(srcdir)/mkinstalldirs $$dir; \
+-		chmod $(DIRMODE) $$dir; \
+-		$(DIRSETGID) $$dir; \
++		$(INSTALL) -d -m $(DIRMODE) $$dir; \
+ 	    else true; \
+ 	    fi; \
+ 	done
+diff --git a/bin/Makefile.in b/bin/Makefile.in
+index 22c24b0..d795333 100644
+--- a/bin/Makefile.in
++++ b/bin/Makefile.in
+@@ -28,7 +28,6 @@ exec_prefix=	@exec_prefix@
+ DESTDIR=
+ 
+ CC=		@CC@
+-CHMOD=  	@CHMOD@
+ INSTALL=	@INSTALL@
+ 
+ DEFS=   	@DEFS@
+@@ -56,7 +55,7 @@ BUILDDIR=	../build/bin
+ # Modes for directories and executables created by the install
+ # process.  Default to group-writable directories but
+ # user-only-writable for executables.
+-DIRMODE=	775
++DIRMODE=	2775
+ EXEMODE=	755
+ FILEMODE=	644
+ INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
+@@ -72,8 +71,6 @@ install:
+ 	    $(INSTALL) -m $(EXEMODE) $(BUILDDIR)/$$f $(DESTDIR)$(SCRIPTSDIR); \
+ 	done
+ 
+-finish:
+-
+ clean:
+ 
+ distclean:
+diff --git a/cron/Makefile.in b/cron/Makefile.in
+index 2a7c8fd..c14d119 100644
+--- a/cron/Makefile.in
++++ b/cron/Makefile.in
+@@ -28,7 +28,6 @@ exec_prefix=	@exec_prefix@
+ DESTDIR=
+ 
+ CC=		@CC@
+-CHMOD=  	@CHMOD@
+ INSTALL=	@INSTALL@
+ 
+ DEFS=   	@DEFS@
+@@ -68,8 +67,6 @@ install:
+ 	    $(INSTALL) -m $(EXEMODE) $(BUILDDIR)/$$f $(DESTDIR)$(CRONDIR); \
+ 	done
+ 
+-finish:
+-
+ clean:
+ 
+ distclean:
+diff --git a/messages/Makefile.in b/messages/Makefile.in
+index 2bbec3f..0b8b7d6 100644
+--- a/messages/Makefile.in
++++ b/messages/Makefile.in
+@@ -32,7 +32,6 @@ exec_prefix=	@exec_prefix@
+ DESTDIR=
+ 
+ CC=		@CC@
+-CHMOD=  	@CHMOD@
+ INSTALL=	@INSTALL@
+ 
+ DEFS=   	@DEFS@
+@@ -43,7 +42,6 @@ OPT=		@OPT@
+ CFLAGS=		$(OPT) $(DEFS)
+ PACKAGEDIR= 	$(prefix)/messages
+ SHELL=		/bin/sh
+-DIRSETGID=	chmod g+s
+ MSGFMT= 	@PYTHON@ ../build/bin/msgfmt.py
+ MSGMERGE=	msgmerge
+ 
+@@ -60,7 +58,7 @@ TARGETS=	$(MOFILES)
+ # Modes for directories and executables created by the install
+ # process.  Default to group-writable directories but
+ # user-only-writable for executables.
+-DIRMODE=	775
++DIRMODE=	2775
+ EXEMODE=	755
+ FILEMODE=	644
+ INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
+@@ -90,9 +88,8 @@ doinstall: mofiles
+ 	do \
+ 	    dir=$(DESTDIR)$(prefix)/$$d; \
+ 	    echo "Creating language directory $$dir"; \
+-	    $(srcdir)/../mkinstalldirs $$dir; \
+-	    chmod $(DIRMODE) $$dir; \
+-	    $(DIRSETGID) $$dir; \
++	    $(INSTALL) -d -m $(DIRMODE) `dirname $$dir`; \
++	    $(INSTALL) -d -m $(DIRMODE) $$dir; \
+ 	done
+ 	@for d in $(LANGUAGES); \
+ 	do \
+@@ -113,8 +110,6 @@ doinstall: mofiles
+ 
+ mofiles: $(MOFILES)
+ 
+-finish:
+-
+ clean:
+ 	-rm -f */LC_MESSAGES/mailman.mo
+ 
+diff --git a/misc/Makefile.in b/misc/Makefile.in
+index 5125cd8..af99c04 100644
+--- a/misc/Makefile.in
++++ b/misc/Makefile.in
+@@ -30,7 +30,6 @@ var_prefix=	@VAR_PREFIX@
+ DESTDIR=
+ 
+ CC=		@CC@
+-CHMOD=  	@CHMOD@
+ INSTALL=	@INSTALL@
+ PYTHON=		@PYTHON@
+ 
+@@ -62,7 +61,7 @@ PACKAGES= $(EMAILPKG) $(JACODECSPKG) $(KOCODECSPKG)
+ # Modes for directories and executables created by the install
+ # process.  Default to group-writable directories but
+ # user-only-writable for executables.
+-DIRMODE=	775
++DIRMODE=	2775
+ EXEMODE=	755
+ FILEMODE=	644
+ DATAMODE=	664
+@@ -101,8 +100,6 @@ install-packages:
+ 	    (cd $(PKGDIR)/$$p ; umask 02 ; PYTHONPATH=$(PYTHONLIBDIR) $(PYTHON) $(SETUPCMD)); \
+ 	done
+ 
+-finish:
+-
+ clean:
+ 
+ distclean:
+diff --git a/scripts/Makefile.in b/scripts/Makefile.in
+index 49b82ec..cea250c 100644
+--- a/scripts/Makefile.in
++++ b/scripts/Makefile.in
+@@ -28,7 +28,6 @@ exec_prefix=	@exec_prefix@
+ DESTDIR=
+ 
+ CC=		@CC@
+-CHMOD=  	@CHMOD@
+ INSTALL=	@INSTALL@
+ 
+ DEFS=   	@DEFS@
+@@ -49,7 +48,7 @@ SCRIPTS=	bounces confirm driver join leave owner post request
+ # Modes for directories and executables created by the install
+ # process.  Default to group-writable directories but
+ # user-only-writable for executables.
+-DIRMODE=	775
++DIRMODE=	2775
+ EXEMODE=	755
+ FILEMODE=	644
+ INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
+@@ -68,8 +67,6 @@ install:
+ 	$(INSTALL) -m $(FILEMODE) $(srcdir)/join    $(DESTDIR)$(SCRIPTSDIR)/subscribe
+ 	$(INSTALL) -m $(FILEMODE) $(srcdir)/leave   $(DESTDIR)$(SCRIPTSDIR)/unsubscribe
+ 
+-finish:
+-
+ clean:
+ 
+ distclean:
+diff --git a/src/Makefile.in b/src/Makefile.in
+index ce52356..7ed820b 100644
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -28,7 +28,6 @@ bindir= 	@bindir@
+ DESTDIR=
+ 
+ CC=		@CC@
+-CHMOD=  	@CHMOD@
+ INSTALL=	@INSTALL@
+ PYTHON=  	@PYTHON@
+ 
+@@ -65,10 +64,9 @@ COMMON_FLAGS=	-DPREFIX="\"$(prefix)\"" \
+ # Modes for directories and executables created by the install
+ # process.  Default to group-writable directories but
+ # user-only-writable for executables.
+-DIRMODE=	775
+-EXEMODE=	755
++DIRMODE=	2775
++EXEMODE=	2755
+ INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
+-DIRSETGID=	chmod g+s
+ 
+ # Fixed definitions
+ 
+@@ -112,20 +110,10 @@ install: all
+ 	do \
+ 	    exe=$(DESTDIR)$(CGIDIR)/$$f$(CGIEXT); \
+ 	    $(INSTALL_PROGRAM) $$f $$exe; \
+-	    $(DIRSETGID) $$exe; \
+ 	done
+ 	for f in $(MAIL_PROGS); \
+ 	do \
+ 	    $(INSTALL_PROGRAM) $$f $(DESTDIR)$(MAILDIR); \
+-	    $(DIRSETGID) $(DESTDIR)$(MAILDIR)/$$f; \
+-	done
+-
+-finish:
+-	-for f in $(SUID_CGI_PROGS); \
+-	do \
+-	    exe=$(DESTDIR)$(CGIDIR)/$$f$(CGIEXT); \
+-	    chown $(MAILMAN_USER) $$exe; \
+-	    chmod u+s $$exe; \
+ 	done
+ 
+ clean:
+diff --git a/templates/Makefile.in b/templates/Makefile.in
+index 3dfee3a..b23d7c1 100644
+--- a/templates/Makefile.in
++++ b/templates/Makefile.in
+@@ -28,7 +28,6 @@ exec_prefix=	@exec_prefix@
+ DESTDIR=
+ 
+ CC=		@CC@
+-CHMOD=  	@CHMOD@
+ INSTALL=	@INSTALL@
+ TRUE=		@TRUE@
+ 
+@@ -48,7 +47,7 @@ LANGUAGES=	ar ast ca cs da de el en es et eu fi fr gl he hr hu ia it ja \
+ # Modes for directories and executables created by the install
+ # process.  Default to group-writable directories but
+ # user-only-writable for executables.
+-DIRMODE=	775
++DIRMODE=	2775
+ EXEMODE=	755
+ FILEMODE=	644
+ INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
+@@ -61,15 +60,13 @@ all:
+ install:
+ 	for d in $(LANGUAGES); \
+ 	do \
+-	    $(srcdir)/../mkinstalldirs $(DESTDIR)$(TEMPLATEDIR)/$$d; \
++	    $(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$(TEMPLATEDIR)/$$d; \
+ 	    for f in $(srcdir)/$$d/*.html $(srcdir)/$$d/*.txt; \
+ 	    do \
+ 	    	$(INSTALL) -m $(FILEMODE) $$f $(DESTDIR)$(TEMPLATEDIR)/$$d; \
+ 	    done; \
+ 	done
+ 
+-finish:
+-
+ clean:
+ 
+ distclean:
+diff --git a/tests/Makefile.in b/tests/Makefile.in
+index 26d6e31..ca92425 100644
+--- a/tests/Makefile.in
++++ b/tests/Makefile.in
+@@ -28,7 +28,6 @@ exec_prefix=	@exec_prefix@
+ DESTDIR=
+ 
+ CC=		@CC@
+-CHMOD=  	@CHMOD@
+ INSTALL=	@INSTALL@
+ 
+ DEFS=   	@DEFS@
+@@ -46,7 +45,7 @@ EXECS=  	$(srcdir)/onebounce.py $(srcdir)/fblast.py
+ # Modes for directories and executables created by the install
+ # process.  Default to group-writable directories but
+ # user-only-writable for executables.
+-DIRMODE=	775
++DIRMODE=	2775
+ EXEMODE=	755
+ FILEMODE=	644
+ INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
+@@ -71,8 +70,6 @@ install:
+ 	    (cd $$d; $(MAKE) DESTDIR=$(DESTDIR) install); \
+ 	done
+ 
+-finish:
+-
+ clean:
+ 
+ distclean:
+diff --git a/tests/bounces/Makefile.in b/tests/bounces/Makefile.in
+index 5798097..f7014cb 100644
+--- a/tests/bounces/Makefile.in
++++ b/tests/bounces/Makefile.in
+@@ -28,7 +28,6 @@ exec_prefix=	@exec_prefix@
+ DESTDIR=
+ 
+ CC=		@CC@
+-CHMOD=  	@CHMOD@
+ INSTALL=	@INSTALL@
+ 
+ DEFS=   	@DEFS@
+@@ -46,7 +45,7 @@ BOUNCE_FILES=	$(srcdir)/*.txt
+ # Modes for directories and executables created by the install
+ # process.  Default to group-writable directories but
+ # user-only-writable for executables.
+-DIRMODE=	775
++DIRMODE=	2775
+ EXEMODE=	755
+ FILEMODE=	644
+ INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
+@@ -60,8 +59,6 @@ install:
+ 	    $(INSTALL) -m $(FILEMODE) $$f $(DESTDIR)$(BOUNCEDIR); \
+ 	done
+ 
+-finish:
+-
+ clean:
+ 
+ distclean:
+diff --git a/tests/msgs/Makefile.in b/tests/msgs/Makefile.in
+index 736d721..edef5ae 100644
+--- a/tests/msgs/Makefile.in
++++ b/tests/msgs/Makefile.in
+@@ -28,7 +28,6 @@ exec_prefix=	@exec_prefix@
+ DESTDIR=
+ 
+ CC=		@CC@
+-CHMOD=  	@CHMOD@
+ INSTALL=	@INSTALL@
+ 
+ DEFS=   	@DEFS@
+@@ -46,7 +45,7 @@ MSG_FILES=	$(srcdir)/*.txt
+ # Modes for directories and executables created by the install
+ # process.  Default to group-writable directories but
+ # user-only-writable for executables.
+-DIRMODE=	775
++DIRMODE=	2775
+ EXEMODE=	755
+ FILEMODE=	644
+ INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
+@@ -60,8 +59,6 @@ install:
+ 	    $(INSTALL) -m $(FILEMODE) $$f $(DESTDIR)$(MSGSDIR); \
+ 	done
+ 
+-finish:
+-
+ clean:
+ 
+ distclean:
diff --git a/SOURCES/mailman-2.1-mailmanctl-status.patch b/SOURCES/mailman-2.1-mailmanctl-status.patch
new file mode 100644
index 0000000..c2bfbf8
--- /dev/null
+++ b/SOURCES/mailman-2.1-mailmanctl-status.patch
@@ -0,0 +1,109 @@
+diff --git a/bin/mailmanctl b/bin/mailmanctl
+index fa14a2c..e291df1 100644
+--- a/bin/mailmanctl
++++ b/bin/mailmanctl
+@@ -36,7 +36,7 @@ in the file data/master-qrunner.pid but you normally don't need to use this
+ pid directly.  The `start', `stop', `restart', and `reopen' commands handle
+ everything for you.
+ 
+-Usage: %(PROGRAM)s [options] [ start | stop | restart | reopen ]
++Usage: %(PROGRAM)s [options] [ start | stop | restart | reopen | status ]
+ 
+ Options:
+ 
+@@ -90,6 +90,9 @@ Commands:
+ 
+     reopen  - This will close all log files, causing them to be re-opened the
+               next time a message is written to them
++
++    status  - This returns a string indicating the status of the master
++              qrunner
+ """
+ 
+ import sys
+@@ -190,6 +193,52 @@ def qrunner_state():
+         return 0
+     return 1
+ 
++def mailman_status():
++    # return status, pid
++    #
++    # These status values match the /etc/init.d status values
++    # (at least on Red Hat), try to return equivalent status if possible
++    # status is 0 if running,
++    # status is 1 if dead but pid file exists
++    # status is 2 if dead but subsys locked
++    # status is 3 if stopped (pid returned will be 0)
++    #
++    #
++    # We want any user to be able to query the status and this presents
++    # few interesting permission problems and is why we don't use
++    # qrunner_state(). The pidfile is only readable by the mailman owner
++    # and group, however the lockfile is world readable. So we will
++    # get the master pid from the lockfile. We try to determine if the
++    # master process exists by sending it a signal. If we don't have
++    # permission to signal the process, but the process exists we'll
++    # get a EPERM error, if the process does not exist then we'll get
++    # a ESRCH error.
++
++    try:
++        hostname, pid, tempfile = get_lock_data()
++    except IOError, e:
++        if e.errno == errno.ENOENT:
++            # Lock file didn't exist, can't be running
++            return 3, 0
++        else:
++            raise
++    if hostname <> socket.gethostname():
++        # not running on this host
++        return 3, 0
++    # Find out if the process exists by calling kill with a signal 0.
++    try:
++        os.kill(pid, 0)
++    except OSError, e:
++        if e.errno == errno.ESRCH:
++            # process does not exist
++            return 1, pid
++        elif e.errno == errno.EPERM:
++            # we don't have permission signal the process but it exists
++            return 0, pid
++        else:
++            raise
++    return 0, pid
++
+ 
+ def acquire_lock_1(force):
+     # Be sure we can acquire the master qrunner lock.  If not, it means some
+@@ -338,13 +387,15 @@ def main():
+         command = COMMASPACE.join(args)
+         usage(1, C_('Bad command: %(command)s'))
+ 
++    command = args[0].lower()
++
+     if checkprivs:
+         check_privs()
+     else:
+-        print C_('Warning!  You may encounter permission problems.')
++        if command != 'status':
++	    print C_('Warning!  You may encounter permission problems.')
+ 
+     # Handle the commands
+-    command = args[0].lower()
+     if command == 'stop':
+         # Sent the master qrunner process a SIGINT, which is equivalent to
+         # giving cron/qrunner a ctrl-c or KeyboardInterrupt.  This will
+@@ -363,6 +414,14 @@ def main():
+         if not quiet:
+             print C_('Re-opening all log files')
+         kill_watcher(signal.SIGHUP)
++    elif command == 'status':
++        status, pid = mailman_status()
++        if not quiet:
++            if status == 0:
++                print C_("mailman (pid %(pid)d) is running...")
++            else:
++                print C_("mailman is stopped")
++        sys.exit(status)
+     elif command == 'start':
+         # First, complain loudly if there's no site list.
+         check_for_site_list()
diff --git a/SOURCES/mailman-2.1.11-cron.patch b/SOURCES/mailman-2.1.11-cron.patch
new file mode 100644
index 0000000..5585a0e
--- /dev/null
+++ b/SOURCES/mailman-2.1.11-cron.patch
@@ -0,0 +1,132 @@
+diff --git a/cron/bumpdigests b/cron/bumpdigests
+index 57cc45e..4002731 100755
+--- a/cron/bumpdigests
++++ b/cron/bumpdigests
+@@ -1,4 +1,4 @@
+-#! @PYTHON@
++#! @PYTHON@ -S
+ #
+ # Copyright (C) 1998-2018 by the Free Software Foundation, Inc.
+ #
+diff --git a/cron/checkdbs b/cron/checkdbs
+index e776f15..c4d8179 100755
+--- a/cron/checkdbs
++++ b/cron/checkdbs
+@@ -1,4 +1,4 @@
+-#! @PYTHON@
++#! @PYTHON@ -S
+ #
+ # Copyright (C) 1998-2018 by the Free Software Foundation, Inc.
+ #
+diff --git a/cron/crontab.in.in b/cron/crontab.in.in
+index 540dfc1..45c5022 100644
+--- a/cron/crontab.in.in
++++ b/cron/crontab.in.in
+@@ -1,27 +1,50 @@
++#
++# -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- 
++# ------------------  EDIT THE CORRECT FILE  -------------------------
++# 
++# This file is copied to /etc/cron.d/mailman from
++# @prefix@/cron/crontab.in when the mailman service is started via its
++# init.d script and the file /etc/cron.d/mailman is removed when the
++# service is stopped.  Therefore any edits made directly to
++# /etc/cron.d/mailman will be lost anytime the mailman service
++# restarts.
++#
++# To make changes edit the master copy @prefix@/cron/crontab.in and then
++# restart the service to pick up the changes (/sbin/service mailman restart).
++#
++# The reason this is done this way is because the mailman cron jobs
++# should only be invoked if the mailman service is enabled and not
++# just as a consequence of installing the rpm as was the case
++# previously. The file /etc/cron.d/mailman cannot simply be linked to
++# the master copy in @prefix@/cron because for security reasons cron
++# will not process crontab files that are links or writeable by
++# anybody else but root, thus the file must be copied into /etc/cron.d
++# with the right ownership and permissions.
++#
+ # At 8AM every day, mail reminders to admins as to pending requests.
+ # They are less likely to ignore these reminders if they're mailed
+ # early in the morning, but of course, this is local time... ;)
+-0 8 * * * @PYTHON@ -S @prefix@/cron/checkdbs
++0 8 * * * @MAILMAN_USER@ @prefix@/cron/checkdbs
+ #
+ # At 9AM, send notifications to disabled members that are due to be
+ # reminded to re-enable their accounts.
+-0 9 * * * @PYTHON@ -S @prefix@/cron/disabled
++0 9 * * * @MAILMAN_USER@ @prefix@/cron/disabled
+ #
+ # Noon, mail digests for lists that do periodic as well as threshhold delivery.
+-0 12 * * * @PYTHON@ -S @prefix@/cron/senddigests
++0 12 * * * @MAILMAN_USER@ @prefix@/cron/senddigests
+ #
+ # 5 AM on the first of each month, mail out password reminders.
+-0 5 1 * * @PYTHON@ -S @prefix@/cron/mailpasswds
++0 5 1 * * @MAILMAN_USER@ @prefix@/cron/mailpasswds
+ #
+ # Every 5 mins, try to gate news to mail.  You can comment this one out
+ # if you don't want to allow gating, or don't have any going on right now,
+ # or want to exclusively use a callback strategy instead of polling.
+-0,5,10,15,20,25,30,35,40,45,50,55 * * * * @PYTHON@ -S @prefix@/cron/gate_news
++0,5,10,15,20,25,30,35,40,45,50,55 * * * * @MAILMAN_USER@ @prefix@/cron/gate_news
+ #
+ # At 3:27am every night, regenerate the gzip'd archive file.  Only
+ # turn this on if the internal archiver is used and
+ # GZIP_ARCHIVE_TXT_FILES is false in mm_cfg.py
+-27 3 * * * @PYTHON@ -S @prefix@/cron/nightly_gzip
++27 3 * * * @MAILMAN_USER@ @prefix@/cron/nightly_gzip
+ #
+ # At 4:30AM daily, cull old entries from the 'bad' and 'shunt' queues.
+-30 4 * * * @PYTHON@ -S @prefix@/cron/cull_bad_shunt
++30 4 * * * @MAILMAN_USER@ @prefix@/cron/cull_bad_shunt
+diff --git a/cron/disabled b/cron/disabled
+index ac62582..971563d 100755
+--- a/cron/disabled
++++ b/cron/disabled
+@@ -1,4 +1,4 @@
+-#! @PYTHON@
++#! @PYTHON@ -S
+ #
+ # Copyright (C) 2001-2018 by the Free Software Foundation, Inc.
+ #
+diff --git a/cron/gate_news b/cron/gate_news
+index c66c09e..247c834 100755
+--- a/cron/gate_news
++++ b/cron/gate_news
+@@ -1,4 +1,4 @@
+-#! @PYTHON@
++#! @PYTHON@ -S
+ #
+ # Copyright (C) 1998-2018 by the Free Software Foundation, Inc.
+ #
+diff --git a/cron/mailpasswds b/cron/mailpasswds
+index da64376..5d8d792 100755
+--- a/cron/mailpasswds
++++ b/cron/mailpasswds
+@@ -1,4 +1,4 @@
+-#! @PYTHON@
++#! @PYTHON@ -S
+ #
+ # Copyright (C) 1998-2018 by the Free Software Foundation, Inc.
+ #
+diff --git a/cron/nightly_gzip b/cron/nightly_gzip
+index de493d0..8af0351 100755
+--- a/cron/nightly_gzip
++++ b/cron/nightly_gzip
+@@ -1,4 +1,4 @@
+-#! @PYTHON@
++#! @PYTHON@ -S
+ # 
+ # Copyright (C) 1998-2018 by the Free Software Foundation, Inc.
+ #
+diff --git a/cron/senddigests b/cron/senddigests
+index edf27a2..c64adc1 100755
+--- a/cron/senddigests
++++ b/cron/senddigests
+@@ -1,4 +1,4 @@
+-#! @PYTHON@
++#! @PYTHON@ -S
+ #
+ # Copyright (C) 1998-2018 by the Free Software Foundation, Inc.
+ #
diff --git a/SOURCES/mailman-2.1.12-multimail.patch b/SOURCES/mailman-2.1.12-multimail.patch
new file mode 100644
index 0000000..5264a77
--- /dev/null
+++ b/SOURCES/mailman-2.1.12-multimail.patch
@@ -0,0 +1,387 @@
+diff -ruN mailman-2.1.12-a/configure.in mailman-2.1.12-b/configure.in
+--- mailman-2.1.12-a/configure.in	2009-02-23 22:23:35.000000000 +0100
++++ mailman-2.1.12-b/configure.in	2009-07-28 12:19:47.000000000 +0200
+@@ -249,26 +249,101 @@
+ fi
+ 
+ # new macro for finding group names
+-AC_DEFUN([MM_FIND_GROUP_NAME], [
++# returns a comma separated list of quoted group names
++# the list is returned in the same order as specified with any duplicates removed
++# the filter flag must be "yes" or "no", e.g. this is permcheck
++#         "no"  ==> none existing groups are not filtered out
++#         "yes" ==> only those groups that are in the group database are included
++#                   in the list
++AC_DEFUN(MM_FIND_GROUP_LIST, [
+ # $1 == variable name
+-# $2 == user id to check for
++# $2 == white space separated list of groups to check,
++#       list may contain mix of id's and names
++# $3 == filter, if == 'yes' then remove any non-existing groups
+ AC_SUBST($1)
+ changequote(,)
+ if test -z "$$1"
+ then
+     cat > conftest.py <<EOF
+ import grp
+-gid = ''
++group_names = []
++seen = {}
++filter = "$3"
++
+ for group in "$2".split():
+     try:
++        gid = int(group)
++        try:
++            gname = grp.getgrgid(gid)[0]
++        except KeyError:
++            gname = ''
++    except ValueError:
+         try:
+-            gname = grp.getgrgid(int(group))[0]
+-            break
+-        except ValueError:
+             gname = grp.getgrnam(group)[0]
++        except KeyError:
++            if filter == "yes":
++                gname = ''
++            else:
++                gname = group
++    if gname:
++        if gname not in seen:
++            seen[gname] = 1
++            group_names.append(gname)
++
++if group_names:
++    val = '"' + '", "'.join(group_names) + '"'
++    #val = "'"+val+"'"
++else:
++    val = ''
++
++fp = open("conftest.out", "w")
++fp.write("%s\n" % val)
++fp.close()
++EOF
++    $PYTHON conftest.py
++    $1=`cat conftest.out`
++fi
++changequote([, ])
++rm -f conftest.out conftest.py])
++
++
++# new macro for finding group names
++AC_DEFUN(MM_FIND_GROUP_NAME, [
++# Given a list of tokens, either a name or a number (gid)
++# return the first one in the list that is found in the 
++# group database. The return value is always a name, possibly
++# translated from a gid. If permcheck is "no" then the group
++# database is not checked, instead the first token in the list
++# which is a name is returned (e.g. the default value). If permcheck
++# is no and only gid's are in the list then the null string is returned.
++# $1 == variable name
++# $2 == group id to check for
++# $3 == permcheck, either "yes" or "no"
++AC_SUBST($1)
++changequote(,)
++if test -z "$$1"
++then
++    cat > conftest.py <<EOF
++import grp
++gname=''
++if "$3" == "yes":
++    for group in "$2".split():
++        try:
++            try:
++                gname = grp.getgrgid(int(group))[0]
++                break
++            except ValueError:
++                gname = grp.getgrnam(group)[0]
++                break
++        except KeyError:
++            gname = ''
++else:
++    for group in "$2".split():
++        try:
++            int(group)
++        except ValueError:
++            gname = group
+             break
+-    except KeyError:
+-        gname = ''
+ fp = open("conftest.out", "w")
+ fp.write("%s\n" % gname)
+ fp.close()
+@@ -282,25 +357,41 @@
+ 
+ # new macro for finding UIDs
+ AC_DEFUN([MM_FIND_USER_NAME], [
++# Given a list of tokens, either a name or a number (uid)
++# return the first one in the list that is found in the 
++# password database. The return value is always a name, possibly
++# translated from a uid. If permcheck is "no" then the password
++# database is not checked, instead the first token in the list
++# which is a name is returned (e.g. the default value). If permcheck
++# is no and only uid's are in the list then the null string is returned.
+ # $1 == variable name
+ # $2 == user id to check for
++# $3 == permcheck, either "yes" or "no"
+ AC_SUBST($1)
+ changequote(,)
+ if test -z "$$1"
+ then
+     cat > conftest.py <<EOF
+ import pwd
+-uid = ''
+-for user in "$2".split():
+-    try:
++uname=''
++if "$3" == "yes":
++    for user in "$2".split():
+         try:
+-            uname = pwd.getpwuid(int(user))[0]
+-            break
++            try:
++                uname = pwd.getpwuid(int(user))[0]
++                break
++            except ValueError:
++                uname = pwd.getpwnam(user)[0]
++                break
++        except KeyError:
++            uname = ''
++else:
++    for user in "$2".split():
++        try:
++            int(user)
+         except ValueError:
+-            uname = pwd.getpwnam(user)[0]
++            uname = user
+             break
+-    except KeyError:
+-        uname = ''
+ fp = open("conftest.out", "w")
+ fp.write("%s\n" % uname)
+ fp.close()
+@@ -326,7 +417,7 @@
+ # User `mailman' must exist
+ AC_SUBST(MAILMAN_USER)
+ AC_MSG_CHECKING(for user name \"$USERNAME\")
+-MM_FIND_USER_NAME(MAILMAN_USER, $USERNAME)
++MM_FIND_USER_NAME(MAILMAN_USER, $USERNAME, $with_permcheck)
+ if test -z "$MAILMAN_USER"
+ then
+   if test "$with_permcheck" = "yes"
+@@ -357,7 +448,7 @@
+ # Target group must exist
+ AC_SUBST(MAILMAN_GROUP)
+ AC_MSG_CHECKING(for group name \"$GROUPNAME\")
+-MM_FIND_GROUP_NAME(MAILMAN_GROUP, $GROUPNAME)
++MM_FIND_GROUP_NAME(MAILMAN_GROUP, $GROUPNAME, $with_permcheck)
+ if test -z "$MAILMAN_GROUP"
+ then
+   if test "$with_permcheck" = "yes"
+@@ -380,11 +471,11 @@
+ prefix = "$prefixcheck"
+ groupname = "$GROUPNAME"
+ mailmangroup = "$MAILMAN_GROUP"
+-try:
+-    mailmangid = grp.getgrnam(mailmangroup)[2]
+-except KeyError:
+-    mailmangid = -1
+ problems = []
++try: mailmangid = grp.getgrnam(mailmangroup)[2]
++except KeyError:
++    problems.append("group doesn't exist: " + mailmangroup)
++    mailmangid = 41
+ try: statdata = os.stat(prefix)
+ except OSError:
+     problems.append("Directory doesn't exist: " + prefix)
+@@ -434,7 +525,7 @@
+ then
+     with_mail_gid="mailman other mail daemon"
+ fi
+-MM_FIND_GROUP_NAME(MAIL_GROUP, $with_mail_gid)
++MM_FIND_GROUP_LIST(MAIL_GROUP, $with_mail_gid, $with_permcheck)
+ if test -z "$MAIL_GROUP"
+ then
+   if test "$with_permcheck" = "yes"
+@@ -461,7 +552,7 @@
+     with_cgi_gid="www www-data nobody"
+ fi
+ 
+-MM_FIND_GROUP_NAME(CGI_GROUP, $with_cgi_gid)
++MM_FIND_GROUP_LIST(CGI_GROUP, $with_cgi_gid, $with_permcheck)
+ if test -z "$CGI_GROUP"
+ then
+   if test "$with_permcheck" = "yes"
+diff -ruN mailman-2.1.12-a/src/cgi-wrapper.c mailman-2.1.12-b/src/cgi-wrapper.c
+--- mailman-2.1.12-a/src/cgi-wrapper.c	2009-02-23 22:23:35.000000000 +0100
++++ mailman-2.1.12-b/src/cgi-wrapper.c	2009-07-28 12:19:47.000000000 +0200
+@@ -28,11 +28,11 @@
+ /* Group name that CGI scripts run as.  See your web server's documentation
+  * for details.
+  */
+-#define LEGAL_PARENT_GROUP CGI_GROUP
++#define LEGAL_PARENT_GROUPS CGI_GROUP
+ 
+ const char* logident = LOG_IDENT;
+ char* script = SCRIPTNAME;
+-const char* parentgroup = LEGAL_PARENT_GROUP;
++const char* parentgroups[] = {LEGAL_PARENT_GROUPS};
+ 
+ 
+ int
+@@ -42,7 +42,7 @@
+         char* fake_argv[3];
+ 
+         running_as_cgi = 1;
+-        check_caller(logident, parentgroup);
++	check_caller(logident, parentgroups, sizeof(parentgroups) / sizeof(parentgroups[0]));
+ 
+         /* For these CGI programs, we can ignore argc and argv since they
+          * don't contain anything useful.  `script' will always be the driver
+diff -ruN mailman-2.1.12-a/src/common.c mailman-2.1.12-b/src/common.c
+--- mailman-2.1.12-a/src/common.c	2009-02-23 22:23:35.000000000 +0100
++++ mailman-2.1.12-b/src/common.c	2009-07-28 12:19:47.000000000 +0200
+@@ -117,13 +117,14 @@
+ /* Is the parent process allowed to call us?
+  */
+ void
+-check_caller(const char* ident, const char* parentgroup)
++check_caller(const char* ident, const char** parentgroups, size_t numgroups)
+ {
+         GID_T mygid = getgid();
+         struct group *mygroup = getgrgid(mygid);
+         char* option;
+         char* server;
+         char* wrapper;
++	int i;
+ 
+         if (running_as_cgi) {
+                 option = "--with-cgi-gid";
+@@ -136,28 +137,46 @@
+                 wrapper = "mail";
+         }
+ 
+-        if (!mygroup)
+-                fatal(ident, GROUP_NAME_NOT_FOUND,
+-                      "Failure to find group name for GID %d.  Mailman\n"
+-                      "expected the %s wrapper to be executed as group\n"
+-                      "\"%s\", but the system's %s server executed the\n"
+-                      "wrapper as GID %d for which the name could not be\n"
+-                      "found.  Try adding GID %d to your system as \"%s\",\n"
+-                      "or tweak your %s server to run the wrapper as group\n"
+-                      "\"%s\".",
+-                      mygid, wrapper, parentgroup, server, mygid, mygid,
+-                      parentgroup, server, parentgroup);
++  	if (!mygroup)
++		fatal(ident, GROUP_ID_NOT_FOUND,
++		      "Failure to lookup via getgrgid() the group info for group id %d that this Mailman %s wrapper is executing under.\n"
++		      "This is probably due to an incorrectly configured system and is not a Mailman problem",
++		      mygid, wrapper);
++
++	for (i = 0; i < numgroups; i++) {
++		if (strcmp(parentgroups[i], mygroup->gr_name) == 0) break;
++	}
++
++        if (i >= numgroups) {
++		char *groupset = NULL;
++		size_t size = 0;
++
++		for (i = 0; i < numgroups; i++) {
++			size += strlen(parentgroups[i]) + 2;
++		}
++
++		groupset = malloc(size);
++
++		if (groupset) {
++			groupset[0] = 0;
++			for (i = 0; i < numgroups; i++) {
++				strcat(groupset, parentgroups[i]);
++				if (i < numgroups-1) strcat(groupset, ", ");
++			}
++		}
+ 
+-        if (strcmp(parentgroup, mygroup->gr_name))
+                 fatal(ident, GROUP_MISMATCH,
+-                      "Group mismatch error.  Mailman expected the %s\n"
+-                      "wrapper script to be executed as group \"%s\", but\n"
+-                      "the system's %s server executed the %s script as\n"
+-                      "group \"%s\".  Try tweaking the %s server to run the\n"
+-                      "script as group \"%s\", or re-run configure, \n"
+-                      "providing the command line option `%s=%s'.",
+-                      wrapper, parentgroup, server, wrapper, mygroup->gr_name,
+-                      server, parentgroup, option, mygroup->gr_name);
++		      "Group mismatch error. Mailman expected the %s wrapper script to be\n"
++		      "executed as one of the following groups:\n"
++		      "[%s],\n"
++		      "but the system's %s server executed the %s script as group: \"%s\".\n"
++		      "Try tweaking the %s server to run the script as one of these groups:\n"
++		      "[%s],\n"
++		      "or re-run configure providing the command line option:\n"
++		      "'%s=%s'.",
++		      wrapper, groupset, server, wrapper, mygroup->gr_name,
++		      server, groupset, option, mygroup->gr_name);
++	}
+ }
+ 
+ 
+diff -ruN mailman-2.1.12-a/src/common.h mailman-2.1.12-b/src/common.h
+--- mailman-2.1.12-a/src/common.h	2009-02-23 22:23:35.000000000 +0100
++++ mailman-2.1.12-b/src/common.h	2009-07-28 12:19:47.000000000 +0200
+@@ -33,7 +33,7 @@
+ #define GID_T GETGROUPS_T
+ 
+ extern void fatal(const char*, int, char*, ...);
+-extern void check_caller(const char*, const char*);
++extern void check_caller(const char* ident, const char**, size_t);
+ extern int run_script(const char*, int, char**, char**);
+ 
+ /* Global variable used as a flag. */
+@@ -51,7 +51,7 @@
+ #define MAIL_USAGE_ERROR 5
+ #define MAIL_ILLEGAL_COMMAND 6
+ #define ADDALIAS_USAGE_ERROR 7
+-#define GROUP_NAME_NOT_FOUND 8
++#define GROUP_ID_NOT_FOUND 8
+ 
+ 
+ /*
+diff -ruN mailman-2.1.12-a/src/mail-wrapper.c mailman-2.1.12-b/src/mail-wrapper.c
+--- mailman-2.1.12-a/src/mail-wrapper.c	2009-02-23 22:23:35.000000000 +0100
++++ mailman-2.1.12-b/src/mail-wrapper.c	2009-07-28 12:19:47.000000000 +0200
+@@ -23,9 +23,9 @@
+ /* Group name that your mail programs run as.  See your mail server's
+  * documentation for details.
+  */
+-#define LEGAL_PARENT_GROUP MAIL_GROUP
++#define LEGAL_PARENT_GROUPS MAIL_GROUP
+ 
+-const char* parentgroup = LEGAL_PARENT_GROUP;
++const char* parentgroups[] = {LEGAL_PARENT_GROUPS};
+ const char* logident = "Mailman mail-wrapper";
+ 
+ 
+@@ -74,7 +74,7 @@
+                 fatal(logident, MAIL_ILLEGAL_COMMAND,
+                       "Illegal command: %s", argv[1]);
+ 
+-        check_caller(logident, parentgroup);
++        check_caller(logident, parentgroups, sizeof(parentgroups) / sizeof(parentgroups[0]));
+ 
+         /* If we got here, everything must be OK */
+         status = run_script(argv[1], argc, argv, env);
+diff -ruN mailman-2.1.12-a/src/Makefile.in mailman-2.1.12-b/src/Makefile.in
+--- mailman-2.1.12-a/src/Makefile.in	2009-02-23 22:23:35.000000000 +0100
++++ mailman-2.1.12-b/src/Makefile.in	2009-07-28 12:19:47.000000000 +0200
+@@ -49,9 +49,9 @@
+ 
+ SHELL=		/bin/sh
+ 
+-MAIL_FLAGS=	-DMAIL_GROUP="\"$(MAIL_GROUP)\""
++MAIL_FLAGS=	-DMAIL_GROUP='$(MAIL_GROUP)'
+ 
+-CGI_FLAGS=	-DCGI_GROUP="\"$(CGI_GROUP)\""
++CGI_FLAGS=	-DCGI_GROUP='$(CGI_GROUP)'
+ 
+ HELPFUL=	-DHELPFUL
+ 
diff --git a/SOURCES/mailman-2.1.13-FHS.patch b/SOURCES/mailman-2.1.13-FHS.patch
new file mode 100644
index 0000000..bb05f9f
--- /dev/null
+++ b/SOURCES/mailman-2.1.13-FHS.patch
@@ -0,0 +1,243 @@
+diff --git a/Mailman/Defaults.py.in b/Mailman/Defaults.py.in
+index fb3f4f3..7dde965 100644
+--- a/Mailman/Defaults.py.in
++++ b/Mailman/Defaults.py.in
+@@ -1431,20 +1431,22 @@ AuthListPoster = 6    # List poster (Approved: <pw> header in posts only)
+ 
+ # Useful directories
+ LIST_DATA_DIR   = os.path.join(VAR_PREFIX, 'lists')
+-LOG_DIR         = os.path.join(VAR_PREFIX, 'logs')
+-LOCK_DIR        = os.path.join(VAR_PREFIX, 'locks')
++LOG_DIR         = '@LOG_DIR@'
++LOCK_DIR        = '@LOCK_DIR@'
++CONFIG_DIR      = '@CONFIG_DIR@'
+ DATA_DIR        = os.path.join(VAR_PREFIX, 'data')
++PID_DIR         = '@PID_DIR@'
+ SPAM_DIR        = os.path.join(VAR_PREFIX, 'spam')
+ WRAPPER_DIR     = os.path.join(EXEC_PREFIX, 'mail')
+ BIN_DIR         = os.path.join(PREFIX, 'bin')
+ SCRIPTS_DIR     = os.path.join(PREFIX, 'scripts')
+-TEMPLATE_DIR    = os.path.join(PREFIX, 'templates')
++TEMPLATE_DIR    = '@TEMPLATE_DIR@'
+ MESSAGES_DIR    = os.path.join(PREFIX, 'messages')
+ PUBLIC_ARCHIVE_FILE_DIR  = os.path.join(VAR_PREFIX, 'archives', 'public')
+ PRIVATE_ARCHIVE_FILE_DIR = os.path.join(VAR_PREFIX, 'archives', 'private')
+ 
+ # Directories used by the qrunner subsystem
+-QUEUE_DIR       = os.path.join(VAR_PREFIX, 'qfiles')
++QUEUE_DIR       = '@QUEUE_DIR@'
+ INQUEUE_DIR     = os.path.join(QUEUE_DIR, 'in')
+ OUTQUEUE_DIR    = os.path.join(QUEUE_DIR, 'out')
+ CMDQUEUE_DIR    = os.path.join(QUEUE_DIR, 'commands')
+@@ -1458,9 +1460,9 @@ RETRYQUEUE_DIR  = os.path.join(QUEUE_DIR, 'retry')
+ MAILDIR_DIR     = os.path.join(QUEUE_DIR, 'maildir')
+ 
+ # Other useful files
+-PIDFILE = os.path.join(DATA_DIR, 'master-qrunner.pid')
+-SITE_PW_FILE = os.path.join(DATA_DIR, 'adm.pw')
+-LISTCREATOR_PW_FILE = os.path.join(DATA_DIR, 'creator.pw')
++PIDFILE = os.path.join(PID_DIR, 'master-qrunner.pid')
++SITE_PW_FILE = os.path.join(CONFIG_DIR, 'adm.pw')
++LISTCREATOR_PW_FILE = os.path.join(CONFIG_DIR, 'creator.pw')
+ 
+ # Import a bunch of version numbers
+ from Version import *
+diff --git a/Mailman/MTA/Postfix.py b/Mailman/MTA/Postfix.py
+index 801ddc0..8506b9b 100644
+--- a/Mailman/MTA/Postfix.py
++++ b/Mailman/MTA/Postfix.py
+@@ -32,8 +32,8 @@ from Mailman.MTA.Utils import makealiases
+ from Mailman.Logging.Syslog import syslog
+ 
+ LOCKFILE = os.path.join(mm_cfg.LOCK_DIR, 'creator')
+-ALIASFILE = os.path.join(mm_cfg.DATA_DIR, 'aliases')
+-VIRTFILE = os.path.join(mm_cfg.DATA_DIR, 'virtual-mailman')
++ALIASFILE = os.path.join(mm_cfg.CONFIG_DIR, 'aliases')
++VIRTFILE = os.path.join(mm_cfg.CONFIG_DIR, 'virtual-mailman')
+ # Desired mode for aliases(.db) and virtual-mailman(.db) for both creation
+ # and check_perms.
+ targetmode = S_IFREG | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH
+diff --git a/Makefile.in b/Makefile.in
+index eb40844..289aeee 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -28,6 +28,12 @@ bindir=		@bindir@
+ prefix=		@prefix@
+ exec_prefix=	@exec_prefix@
+ var_prefix=	@VAR_PREFIX@
++configdir=	@CONFIG_DIR@
++lockdir=	@LOCK_DIR@
++logdir=		@LOG_DIR@
++piddir=		@PID_DIR@
++queuedir=	@QUEUE_DIR@
++templatedir=	@TEMPLATE_DIR@
+ DESTDIR=
+ 
+ CC=		@CC@
+@@ -41,8 +47,11 @@ DEFS=		@DEFS@
+ OPT=		@OPT@
+ CFLAGS=		@CFLAGS@ $(OPT) $(DEFS)
+ 
++FHS_DIRS= \
++	${configdir} ${lockdir} ${logdir} ${piddir} ${queuedir} ${templatedir}
++
+ VAR_DIRS= \
+-	logs archives lists locks data spam qfiles \
++	archives lists data spam \
+ 	archives/private archives/public
+ 
+ ARCH_INDEP_DIRS= \
+@@ -105,6 +114,15 @@ doinstall: $(SUBDIRS)
+ 	    else true; \
+ 	    fi; \
+ 	done
++	@for d in $(FHS_DIRS); \
++	do \
++	    dir=$(DESTDIR)/$$d; \
++	    if test ! -d $$dir; then \
++		echo "Creating directory $$dir"; \
++		$(INSTALL) -d -m $(DIRMODE) $$dir; \
++	    else true; \
++	    fi; \
++	done
+ 	chmod o-r $(DESTDIR)$(var_prefix)/archives/private
+ 	@for d in $(ARCH_INDEP_DIRS); \
+ 	do \
+diff --git a/bin/check_perms b/bin/check_perms
+index 137ebfb..1f45f84 100755
+--- a/bin/check_perms
++++ b/bin/check_perms
+@@ -183,7 +183,8 @@ def checkall():
+         print C_('checking mode for %(prefix)s')
+     dirs = {}
+     for d in (mm_cfg.PREFIX, mm_cfg.EXEC_PREFIX, mm_cfg.VAR_PREFIX,
+-              mm_cfg.LOG_DIR):
++              mm_cfg.CONFIG_DIR, mm_cfg.DATA_DIR, mm_cfg.LOCK_DIR,
++              mm_cfg.LOG_DIR, mm_cfg.QUEUE_DIR, mm_cfg.PID_DIR):
+         dirs[d] = True
+     for d in dirs.keys():
+         try:
+diff --git a/configure.in b/configure.in
+index f2eb1c0..c01129c 100644
+--- a/configure.in
++++ b/configure.in
+@@ -305,6 +305,72 @@ else
+     prefixcheck=$VAR_PREFIX
+ fi
+ 
++# Get the configuration file directory
++AC_SUBST(CONFIG_DIR)
++AC_MSG_CHECKING(for --with-config-dir)
++AC_ARG_WITH(config-dir, dnl
++[  --with-config-dir    specify directory for configuration data other than [VAR_]PREFIX/data])
++case "$with_config_dir" in
++    yes|no|"") CONFIG_DIR="$VAR_PREFIX/data";;
++    *)         CONFIG_DIR=$with_config_dir;;
++esac
++AC_MSG_RESULT($CONFIG_DIR)
++
++# Get the lock directory
++AC_SUBST(LOCK_DIR)
++AC_MSG_CHECKING(for --with-lock-dir)
++AC_ARG_WITH(lock-dir, dnl
++[  --with-lock-dir    specify directory for lock files other than [VAR_]PREFIX/locks])
++case "$with_lock_dir" in
++    yes|no|"") LOCK_DIR="$VAR_PREFIX/locks";;
++    *)         LOCK_DIR=$with_lock_dir;;
++esac
++AC_MSG_RESULT($LOCK_DIR)
++
++# Get the log directory
++AC_SUBST(LOG_DIR)
++AC_MSG_CHECKING(for --with-log-dir)
++AC_ARG_WITH(log-dir, dnl
++[  --with-log-dir    specify directory for log files other than [VAR_]PREFIX/logs])
++case "$with_log_dir" in
++    yes|no|"") LOG_DIR="$VAR_PREFIX/logs";;
++    *)         LOG_DIR=$with_log_dir;;
++esac
++AC_MSG_RESULT($LOG_DIR)
++
++# Get the pid directory
++AC_SUBST(PID_DIR)
++AC_MSG_CHECKING(for --with-pid-dir)
++AC_ARG_WITH(pid-dir, dnl
++[  --with-pid-dir    specify directory for the pid file other than [VAR_]PREFIX/data])
++case "$with_pid_dir" in
++    yes|no|"") PID_DIR="$VAR_PREFIX/data";;
++    *)         PID_DIR=$with_pid_dir;;
++esac
++AC_MSG_RESULT($PID_DIR)
++
++# Get the queue directory
++AC_SUBST(QUEUE_DIR)
++AC_MSG_CHECKING(for --with-queue-dir)
++AC_ARG_WITH(queue-dir, dnl
++[  --with-queue-dir    specify directory for queue files other than [VAR_]PREFIX/qfiles])
++case "$with_queue_dir" in
++    yes|no|"") QUEUE_DIR="$VAR_PREFIX/qfiles";;
++    *)         QUEUE_DIR=$with_queue_dir;;
++esac
++AC_MSG_RESULT($QUEUE_DIR)
++
++# Get the template directory
++AC_SUBST(TEMPLATE_DIR)
++AC_MSG_CHECKING(for --with-template-dir)
++AC_ARG_WITH(template-dir, dnl
++[  --with-template-dir    specify directory for template files other than [VAR_]PREFIX/templates])
++case "$with_template_dir" in
++    yes|no|"") TEMPLATE_DIR="$VAR_PREFIX/templates";;
++    *)         TEMPLATE_DIR=$with_template_dir;;
++esac
++AC_MSG_RESULT($TEMPLATE_DIR)
++
+ # new macro for finding group names
+ # returns a comma separated list of quoted group names
+ # the list is returned in the same order as specified with any duplicates removed
+diff --git a/misc/Makefile.in b/misc/Makefile.in
+index af99c04..df50a06 100644
+--- a/misc/Makefile.in
++++ b/misc/Makefile.in
+@@ -27,6 +27,12 @@ bindir= 	@bindir@
+ prefix=   	@prefix@
+ exec_prefix=	@exec_prefix@
+ var_prefix=	@VAR_PREFIX@
++configdir=	@CONFIG_DIR@
++lockdir=	@LOCK_DIR@
++logdir=		@LOG_DIR@
++piddir=		@PID_DIR@
++queuedir=	@QUEUE_DIR@
++MAILMAN_GROUP=  @MAILMAN_GROUP@
+ DESTDIR=
+ 
+ CC=		@CC@
+@@ -87,7 +93,7 @@ install-other:
+ 	    $(INSTALL) -m $(FILEMODE) paths.py $$dir; \
+ 	done
+ 	$(INSTALL) -m $(EXEMODE) mailman $(DESTDIR)$(SCRIPTSDIR)
+-	$(INSTALL) -m $(FILEMODE) sitelist.cfg $(DESTDIR)$(DATADIR)
++	$(INSTALL) -m $(FILEMODE) sitelist.cfg $(DESTDIR)$(configdir)
+ 
+ install-packages:
+ 	if [ -z "$(EMAILPKG)" -a -d $(DESTDIR)$(PYTHONLIBDIR)/email ] ; \
+diff --git a/templates/Makefile.in b/templates/Makefile.in
+index b23d7c1..16930a2 100644
+--- a/templates/Makefile.in
++++ b/templates/Makefile.in
+@@ -25,6 +25,7 @@ srcdir= 	@srcdir@
+ bindir= 	@bindir@
+ prefix=   	@prefix@
+ exec_prefix=	@exec_prefix@
++template_dir=   @TEMPLATE_DIR@
+ DESTDIR=
+ 
+ CC=		@CC@
+@@ -37,7 +38,7 @@ DEFS=   	@DEFS@
+ 
+ OPT=		@OPT@
+ CFLAGS=		$(OPT) $(DEFS)
+-TEMPLATEDIR= 	$(prefix)/templates
++TEMPLATEDIR= 	$(template_dir)
+ 
+ SHELL=		/bin/sh
+ 
diff --git a/SOURCES/mailman-2.1.13-archive-reply.patch b/SOURCES/mailman-2.1.13-archive-reply.patch
new file mode 100644
index 0000000..7e1779b
--- /dev/null
+++ b/SOURCES/mailman-2.1.13-archive-reply.patch
@@ -0,0 +1,21 @@
+diff -up mailman-2.1.13/templates/en/article.html.archive-reply mailman-2.1.13/templates/en/article.html
+--- mailman-2.1.13/templates/en/article.html.archive-reply	2009-12-22 19:00:43.000000000 +0100
++++ mailman-2.1.13/templates/en/article.html	2010-03-25 13:50:02.000000000 +0100
+@@ -4,7 +4,7 @@
+    <TITLE> %(title)s
+    </TITLE>
+    <LINK REL="Index" HREF="index.html" >
+-   <LINK REL="made" HREF="mailto:%(email_url)s?Subject=%(subject_url)s&In-Reply-To=%(in_reply_to_url)s">
++   <LINK REL="made" HREF="mailto:%(email_url)s?Subject=Re:%%20%(subject_url)s&In-Reply-To=%(in_reply_to_url)s">
+    <META NAME="robots" CONTENT="index,nofollow">
+    <style type="text/css">
+        pre {
+@@ -18,7 +18,7 @@
+  <BODY BGCOLOR="#ffffff">
+    <H1>%(subject_html)s</H1>
+     <B>%(author_html)s</B> 
+-    <A HREF="mailto:%(email_url)s?Subject=%(subject_url)s&In-Reply-To=%(in_reply_to_url)s"
++    <A HREF="mailto:%(email_url)s?Subject=Re:%%20%(subject_url)s&In-Reply-To=%(in_reply_to_url)s"
+        TITLE="%(subject_html)s">%(email_html)s
+        </A><BR>
+     <I>%(datestr_html)s</I>
diff --git a/SOURCES/mailman-2.1.13-env-python.patch b/SOURCES/mailman-2.1.13-env-python.patch
new file mode 100644
index 0000000..cbac746
--- /dev/null
+++ b/SOURCES/mailman-2.1.13-env-python.patch
@@ -0,0 +1,25 @@
+diff --git a/tests/onebounce.py b/tests/onebounce.py
+index 846c4fa..85f3b98 100755
+--- a/tests/onebounce.py
++++ b/tests/onebounce.py
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#! /usr/bin/python
+ 
+ # Copyright (C) 2002-2018 by the Free Software Foundation, Inc.
+ #
+diff --git a/configure.in b/configure.in
+index eee7f3a..2250ade 100644
+--- a/configure.in
++++ b/configure.in
+@@ -892,6 +892,10 @@ cron/gate_news \
+ cron/mailpasswds \
+ cron/nightly_gzip \
+ cron/senddigests \
++contrib/check_perms_grsecurity.py \
++contrib/qmail-to-mailman.py \
++contrib/rotatelogs.py \
++contrib/sitemapgen
+ ])
+ 
+ dnl Please make sure to leave a space at the end of the last entry.
diff --git a/SOURCES/mailman-2.1.15-check_perms.patch b/SOURCES/mailman-2.1.15-check_perms.patch
new file mode 100644
index 0000000..3baa92f
--- /dev/null
+++ b/SOURCES/mailman-2.1.15-check_perms.patch
@@ -0,0 +1,22 @@
+diff --git a/bin/check_perms b/bin/check_perms
+index 5ef3306..d50518a 100755
+--- a/bin/check_perms
++++ b/bin/check_perms
+@@ -70,7 +70,7 @@ class State:
+ 
+ STATE = State()
+ 
+-DIRPERMS = S_ISGID | S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH
++DIRPERMS = S_IRWXU | S_IRGRP | S_IROTH | S_IXOTH
+ QFILEPERMS = S_ISGID | S_IRWXU | S_IRWXG
+ PYFILEPERMS = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
+ ARTICLEFILEPERMS = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP
+@@ -195,7 +195,7 @@ def checkall():
+             continue
+         if (mode & DIRPERMS) <> DIRPERMS:
+             STATE.ERRORS += 1
+-            print C_('directory must be at least 02775: %(d)s'),
++            print C_('directory must be at least 0755: %(d)s'),
+             if STATE.FIX:
+                 print C_('(fixing)')
+                 os.chmod(d, mode | DIRPERMS)
diff --git a/SOURCES/mailman-2.1.9-unicode.patch b/SOURCES/mailman-2.1.9-unicode.patch
new file mode 100644
index 0000000..c84dc3e
--- /dev/null
+++ b/SOURCES/mailman-2.1.9-unicode.patch
@@ -0,0 +1,48 @@
+diff -ruN mailman-2.1.12-a/Mailman/Archiver/pipermail.py mailman-2.1.12-b/Mailman/Archiver/pipermail.py
+--- mailman-2.1.12-a/Mailman/Archiver/pipermail.py	2009-02-23 22:23:35.000000000 +0100
++++ mailman-2.1.12-b/Mailman/Archiver/pipermail.py	2009-07-28 12:19:53.000000000 +0200
+@@ -45,24 +45,27 @@
+ 
+ def fixAuthor(author):
+     "Canonicalize a name into Last, First format"
+-    # If there's a comma, guess that it's already in "Last, First" format
+-    if ',' in author:
++    try:
++        # If there's a comma, guess that it's already in "Last, First" format
++        if ',' in author:
++            return author
++        L = author.split()
++        i = len(L) - 1
++        if i == 0:
++            return author # The string's one word--forget it
++        if author.upper() == author or author.lower() == author:
++            # Damn, the name is all upper- or lower-case.
++            while i > 0 and L[i-1].lower() in smallNameParts:
++                i = i - 1
++        else:
++            # Mixed case; assume that small parts of the last name will be
++            # in lowercase, and check them against the list.
++            while i>0 and (L[i-1][0] in lowercase or
++                           L[i-1].lower() in smallNameParts):
++                i = i - 1
++        author = SPACE.join(L[-1:] + L[i:-1]) + ', ' + SPACE.join(L[:i])
++    except UnicodeDecodeError:
+         return author
+-    L = author.split()
+-    i = len(L) - 1
+-    if i == 0:
+-        return author # The string's one word--forget it
+-    if author.upper() == author or author.lower() == author:
+-        # Damn, the name is all upper- or lower-case.
+-        while i > 0 and L[i-1].lower() in smallNameParts:
+-            i = i - 1
+-    else:
+-        # Mixed case; assume that small parts of the last name will be
+-        # in lowercase, and check them against the list.
+-        while i>0 and (L[i-1][0] in lowercase or
+-                       L[i-1].lower() in smallNameParts):
+-            i = i - 1
+-    author = SPACE.join(L[-1:] + L[i:-1]) + ', ' + SPACE.join(L[:i])
+     return author
+ 
+ # Abstract class for databases
diff --git a/SOURCES/mailman-crontab-edit b/SOURCES/mailman-crontab-edit
new file mode 100755
index 0000000..d99b24d
--- /dev/null
+++ b/SOURCES/mailman-crontab-edit
@@ -0,0 +1,47 @@
+#!/usr/bin/python2
+
+# This script inserts the mailman user name into the crontab entries after
+# the 5 time/date fields so that it can be installed under /etc/cron.d
+#
+# usage: mailman-crontab-edit [-s src_file] [-u mailman_user] [-d dst_file]
+# src_file defaults to stdin
+# mailman_user defaults to mailman
+# dst_file defaults to stdout
+
+import sys, re, getopt
+
+srcFile = None
+dstFile = None
+mmUser = None
+
+opts, args = getopt.getopt(sys.argv[1:], "s:d:u:")
+for o, a in opts:
+    if o == "-s":
+        srcFile = a
+    if o == "-d":
+        dstFile = a
+    if o == "-u":
+        mmUser = a
+
+if srcFile:
+    inFD = open(srcFile)
+else:
+    inFD = sys.stdin
+
+if dstFile:
+    outFD = open(dstFile, mode='w')
+else:
+    outFD = sys.stdout
+
+if not mmUser:
+    mmUser = "mailman"
+
+comment_re = re.compile(r'^\s*#')
+time_date_re = re.compile(r'(^\s*(\S+\s+){5,5})')
+
+for line in inFD:
+    if not comment_re.search(line):
+        match = time_date_re.search(line)
+        if match:
+            line = time_date_re.sub(r'\1 %s ' % mmUser, line)
+    print >>outFD, line,
diff --git a/SOURCES/mailman-migrate-fhs b/SOURCES/mailman-migrate-fhs
new file mode 100755
index 0000000..2d9e37e
--- /dev/null
+++ b/SOURCES/mailman-migrate-fhs
@@ -0,0 +1,293 @@
+#!/usr/bin/python2
+
+import sys
+import os
+import re
+import shutil
+import getopt
+from stat import *
+
+#------------------------------------------------------------------------------
+
+# Command Line Args
+doit = True
+verbose = False
+quiet = False
+warn = False
+force = False
+print_mapping = False
+remove_files = False
+remove_installation = False
+
+# Scan Results
+existing_files = {}
+non_existing_files = {}
+
+# Directory and File mappings
+
+# This is the complete directory map, it includes both data files
+# and run-time files
+dir_map = {
+    '/var/mailman'				: '/var/lib/mailman',
+    '/var/mailman/Mailman'			: '/usr/lib/mailman/Mailman',
+    '/var/mailman/archives'			: '/var/lib/mailman/archives',
+    '/var/mailman/bin'				: '/usr/lib/mailman/bin',
+    '/var/mailman/cgi-bin'			: '/usr/lib/mailman/cgi-bin',
+    '/var/mailman/cron'				: '/usr/lib/mailman/cron',
+    '/var/mailman/data'				: '/var/lib/mailman/data',
+    '/var/mailman/lists'			: '/var/lib/mailman/lists',
+    '/var/mailman/locks'			: '/var/lock/mailman',
+    '/var/mailman/logs'				: '/var/log/mailman',
+    '/var/mailman/mail'				: '/usr/lib/mailman/mail',
+    '/var/mailman/messages'			: '/usr/lib/mailman/messages',
+    '/var/mailman/pythonlib'			: '/usr/lib/mailman/pythonlib',
+    '/var/mailman/qfiles'			: '/var/spool/mailman',
+    '/var/spool/mailman/qfiles'			: '/var/spool/mailman',
+    '/var/mailman/scripts'			: '/usr/lib/mailman/scripts',
+    '/var/mailman/spam'				: '/var/lib/mailman/spam',
+    '/var/mailman/templates'			: '/usr/lib/mailman/templates',
+    '/var/mailman/tests'			: '/usr/lib/mailman/tests'
+}
+
+# These are directories that contain data files the user may
+# want to preserve from an old installation and should be copied
+# into the new directory location.
+data_dir_map = {
+    '/var/mailman/archives'			: '/var/lib/mailman/archives',
+    '/var/mailman/data'				: '/var/lib/mailman/data',
+    '/var/mailman/lists'			: '/var/lib/mailman/lists',
+    '/var/mailman/logs'				: '/var/log/mailman',
+    '/var/mailman/qfiles'			: '/var/spool/mailman',
+    '/var/spool/mailman/qfiles'			: '/var/spool/mailman',
+    '/var/mailman/spam'				: '/var/lib/mailman/spam',
+}
+
+# These are mappings for individual files. They represent files that
+# cannot be mapped via their parent dirctories, they must be treated
+# individually.
+file_map = {
+    '/var/mailman/data/adm.pw'			: '/etc/mailman/adm.pw',
+    '/var/mailman/data/creator.pw'		: '/etc/mailman/creator.pw',
+    '/var/mailman/data/aliases'			: '/etc/mailman/aliases',
+    '/var/mailman/data/virtual-mailman'		: '/etc/mailman/virtual-mailman',
+    '/var/mailman/data/sitelist.cfg'		: '/etc/mailman/sitelist.cfg',
+    '/var/mailman/data/master-qrunner.pid'	: '/var/run/mailman/master-qrunner.pid'
+}
+
+#------------------------------------------------------------------------------
+
+def DumpMapping():
+    '''Print out the directory and file mappings'''
+    print "Directory Mapping:"
+    for key in dir_map.keys():
+        print "%s --> %s" %(key, dir_map[key])
+
+    print "\nFile Mapping:"
+    for key in file_map.keys():
+        print "%s --> %s" %(key, file_map[key])
+
+def RecordFile(src, dst):
+    '''If the src files (old) exists record this as a potential
+    file operation. File operations are grouped into two sets,
+    those where the dst (new) files exists and those where it does not
+    exist. This is done to prevent overwriting files'''
+    
+    global existing_files, non_existing_files
+
+    if not os.path.exists(src):
+        return
+
+    if existing_files.has_key(src):
+        if warn:
+            print "WARNING: src file already seen (%s) and has dst match: (%s)" % (src, dst)
+        return
+
+    if non_existing_files.has_key(src):
+        if warn:
+            print "WARNING: src file already seen (%s) does not have dst match" % (src)
+        return
+
+    if os.path.exists(dst):
+        existing_files[src] = dst
+    else:
+        non_existing_files[src] = dst
+
+def GetCopyFiles(old_root, new_root):
+    '''Recursively generate a list of src files (old) in the old_root
+    and pair each of them with their new dst path name'''
+    
+    prefix_re = re.compile("^(%s)/*(.*)" % re.escape(old_root))
+    dst_files_existing = []
+    dst_files_non_existing = []
+    for root, dirs, files in os.walk(old_root):
+        match = prefix_re.match(root)
+        subdir = match.group(2)
+        for name in files:
+            oldpath = os.path.join(root, name)
+            newpath = os.path.join(new_root, subdir, name)
+            RecordFile(oldpath, newpath)
+
+def CopyFile(src_path, dst_path):
+    '''Copy file, preserve its mode and ownership. If the dst directory
+    does not exist, create it preserving the mode and ownership of the
+    src direcotry'''
+    
+    if not doit:
+        print "cp %s %s" % (src_path, dst_path)
+        return
+    
+    src_dir = os.path.dirname(src_path)
+    dst_dir = os.path.dirname(dst_path)
+
+    if not os.path.isdir(dst_dir):
+        if os.path.exists(dst_dir):
+            print "ERROR: dst dir exists, but is not directory (%s)" % dst_dir
+            return
+        st = os.stat(src_dir)
+        os.makedirs(dst_dir, st[ST_MODE])
+        os.chown(dst_dir, st[ST_UID], st[ST_GID])
+    
+    shutil.copy2(src_path, dst_path)
+    st = os.stat(src_path)
+    os.chown(dst_path, st[ST_UID], st[ST_GID])
+
+def RemoveFile(path):
+    '''Remove the file'''
+    
+    if not os.path.exists(path):
+        if warn:
+            print "WARNING: attempt to remove non-existent file (%s)" % path
+        return
+
+    if not os.path.isfile(path):
+        if warn:
+            print "WARNING: attempt to remove non-plain file (%s)" % path
+        return
+
+    if not doit:
+        print "rm %s" % (path)
+        return
+
+    os.unlink(path)
+    
+def RemoveDirs(top):
+    '''Delete everything reachable from the directory named in 'top',
+    assuming there are no symbolic links.
+    CAUTION:  This is dangerous!  For example, if top == '/', it
+    could delete all your disk files.'''
+    for root, dirs, files in os.walk(top, topdown=False):
+        for name in files:
+            path = os.path.join(root, name)
+            if not doit:
+                print "rm %s" % (path)
+            else:
+                os.remove(path)
+        for name in dirs:
+            path = os.path.join(root, name)
+            if not doit:
+                print "rmdir %s" % (path)
+            else:
+                os.rmdir(path)
+
+def Usage():
+    print """
+This script will help you copy mailman data files from the old
+directory structure to the new FHS directory structure.
+
+Mailman should not be running when you perform this!
+/sbin/service mailman stop
+
+This script is conservative, by default it will not overwrite
+any file in the new directory on the assumption it is most recent
+and most correct. If you want to force overwrites use -f.
+
+Files are copied to the new directories, if you want to remove the
+old data files use -r. Hint: copy first and test, once everything is
+working remove the old files with -r. If you want to remove the entire
+old installation use -R
+
+migrate [-f] [-n] [-q] [-v] [-w] [-m] [-r] [-R]
+-n don't execute, but show what would be done
+-f force destination overwrites
+-m print mapping
+-r remove old data files
+-R remove entire old installation
+-q be quiet
+-v be verbose
+-w print warnings
+-h help
+"""
+
+#------------------------------------------------------------------------------
+
+try:
+    opts, args = getopt.getopt(sys.argv[1:], "nfvmqwhrR")
+    for o, a in opts:
+        if o == "-n":
+            doit = False
+        elif o == "-f":
+            force = True
+        elif o == "-v":
+            verbose = True
+        elif o == "-m":
+            print_mapping = True
+        elif o == "-q":
+            quiet = True
+        elif o == "-w":
+            warn = True
+        elif o == "-r":
+            remove_files = True
+        elif o == "-R":
+            remove_installation = True
+        elif o == "-h":
+            Usage()
+            sys.exit(1)
+except getopt.GetoptError, err:
+    print err
+    Usage()
+    sys.exit(1)
+
+
+if print_mapping:
+    DumpMapping()
+    sys.exit(0)
+
+# Generate file list
+for src_dir in data_dir_map.keys():
+    GetCopyFiles(src_dir, dir_map[src_dir])
+
+for src_file in file_map.keys():
+    RecordFile(src_file, file_map[src_file])
+
+
+# Copy files
+for src in non_existing_files:
+    dst = non_existing_files[src]
+    CopyFile(src, dst)
+
+if force:
+    for src in existing_files:
+        dst = existing_files[src]
+        CopyFile(src, dst)
+else:
+    if len(existing_files) > 0 and not quiet:
+        print "\nThe following files already exist in the destination, they will NOT be copied"
+        print "To force overwriting invoke with -f\n"
+        for src in existing_files:
+            dst = existing_files[src]
+            print "# cp %s %s" %(src, dst)
+
+# Remove old files
+if remove_files:
+    for src in existing_files:
+        RemoveFile(src)
+    for src in non_existing_files:
+        RemoveFile(src)
+
+if remove_installation:
+    for old_dir in dir_map.keys():
+        RemoveDirs(old_dir)
+
+
+sys.exit(0)    
+
diff --git a/SOURCES/mailman-python-compile.patch b/SOURCES/mailman-python-compile.patch
new file mode 100644
index 0000000..15e752a
--- /dev/null
+++ b/SOURCES/mailman-python-compile.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile.in b/Makefile.in
+index dc2fc59..45988b4 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -129,7 +129,7 @@ doinstall: $(SUBDIRS)
+ 	do \
+ 	    (cd $$d; $(MAKE) DESTDIR=$(DESTDIR) install); \
+ 	done
+-	$(PYTHON) -c 'from compileall import *; compile_dir("$(DESTDIR)$(prefix)/Mailman", ddir="$(prefix)/Mailman")'
++	$(PYTHON) -c 'from compileall import *; compile_dir("$(DESTDIR)$(prefix)/Mailman", 20, "$(prefix)", 1)'
+ 
+ # Only run bin/update if we aren't installing in DESTDIR, as this
+ # means there are probably no lists to deal with, and it wouldn't
diff --git a/SOURCES/mailman-specify_python_version.patch b/SOURCES/mailman-specify_python_version.patch
new file mode 100644
index 0000000..09d57e3
--- /dev/null
+++ b/SOURCES/mailman-specify_python_version.patch
@@ -0,0 +1,70 @@
+diff --git a/contrib/courier-to-mailman.py b/contrib/courier-to-mailman.py
+index 922401f..572b47d 100644
+--- a/contrib/courier-to-mailman.py
++++ b/contrib/courier-to-mailman.py
+@@ -1,4 +1,4 @@
+-#! /usr/bin/python
++#! /usr/bin/python2
+ 
+ # Configuration variables - Change these for your site if necessary.
+ #
+diff --git a/tests/onebounce.py b/tests/onebounce.py
+index 85f3b98..b54d075 100755
+--- a/tests/onebounce.py
++++ b/tests/onebounce.py
+@@ -1,4 +1,4 @@
+-#! /usr/bin/python
++#! /usr/bin/python2
+ 
+ # Copyright (C) 2002-2018 by the Free Software Foundation, Inc.
+ #
+diff --git a/bin/msgfmt.py b/bin/msgfmt.py
+index 8a2d4e6..27a40bf 100755
+--- a/bin/msgfmt.py
++++ b/bin/msgfmt.py
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2
+ # -*- coding: iso-8859-1 -*-
+ # Written by Martin v. L�wis <loewis@informatik.hu-berlin.de>
+ 
+diff --git a/Mailman/Archiver/pipermail.py b/Mailman/Archiver/pipermail.py
+index cfca480..3d6a9d6 100644
+--- a/Mailman/Archiver/pipermail.py
++++ b/Mailman/Archiver/pipermail.py
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#! /usr/bin/python2
+ 
+ from __future__ import nested_scopes
+ 
+diff --git a/Mailman/Archiver/pipermail.py.unicode b/Mailman/Archiver/pipermail.py.unicode
+index 62fb92e..a663829 100644
+--- a/Mailman/Archiver/pipermail.py.unicode
++++ b/Mailman/Archiver/pipermail.py.unicode
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#! /usr/bin/python2
+ 
+ from __future__ import nested_scopes
+ 
+diff --git a/Mailman/Post.py b/Mailman/Post.py
+index 7f86696..b4dcfb0 100644
+--- a/Mailman/Post.py
++++ b/Mailman/Post.py
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#! /usr/bin/python2
+ #
+ # Copyright (C) 2001-2018 by the Free Software Foundation, Inc.
+ #
+diff --git a/tests/fblast.py b/tests/fblast.py
+index 092e420..905401d 100644
+--- a/tests/fblast.py
++++ b/tests/fblast.py
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#! /usr/bin/python2
+ """Throw email at Mailman as fast as you can.
+ 
+ This is not a unit test, it's a functional test, so you can't run it within
diff --git a/SOURCES/mailman-tmpfiles.conf b/SOURCES/mailman-tmpfiles.conf
new file mode 100644
index 0000000..778868f
--- /dev/null
+++ b/SOURCES/mailman-tmpfiles.conf
@@ -0,0 +1,2 @@
+d /var/lock/mailman 0775 root mailman
+d /var/run/mailman 0775 root mailman
diff --git a/SOURCES/mailman-update-cfg b/SOURCES/mailman-update-cfg
new file mode 100755
index 0000000..a649f93
--- /dev/null
+++ b/SOURCES/mailman-update-cfg
@@ -0,0 +1,13 @@
+#!/usr/bin/python2
+
+# This script is needed, when SELinux is enabled:
+# mailman_mail_t context cannot write to the directory
+# @mmdir@/Mailman so when you change mm_cfg.py, 
+# mailman cannot create the .pyc
+#
+# This script is called in the init script, which is run in unconfined_t
+# so the .pyc is created and the AVC denial is avoided. (bz#481446)
+
+import py_compile
+
+py_compile.compile("@mmdir@/Mailman/mm_cfg.py")
diff --git a/SOURCES/mailman.INSTALL.REDHAT.in b/SOURCES/mailman.INSTALL.REDHAT.in
new file mode 100644
index 0000000..0d148a6
--- /dev/null
+++ b/SOURCES/mailman.INSTALL.REDHAT.in
@@ -0,0 +1,476 @@
+This file contains instructions for how to complete the installation
+of mailman after you have installed the Red Hat mailman RPM. There are
+certain items you will need to manually configure as the RPM is not
+capable of doing every installation and confirguration task.
+
+First, you should note that the RPM has installed mailman in the
+following directory:
+@prefix@
+You may want to examine this directory to find additional mailman
+documentation, or other mailman files.
+
+IMPORTANT NOTE FOR USERS UPGRADING FROM A PREVIOUS RED HAT MAILMAN
+INSTALLATION OR THOSE FAMILAR WITH "STANDARD MAILMAN INSTALLATIONS"
+
+    Earlier Red Hat mailman rpms installed all of the mailman files under
+    /var/mailman. This did not conform to the Filesystem Hierarchy
+    Standard (FHS) and created security violations when SELinux is
+    enabled. As of mailman-2.1.5-21 the following directory and file
+    changes occurred:
+
+    variable data (e.g. lists) is in @VAR_PREFIX@, library code,
+    executables, and scripts are located in @prefix@, lock files are in
+    @LOCK_DIR@, the pid file is in @PID_DIR@, qfiles are in @QUEUE_DIR@,
+    and configuration files have been moved to the new @CONFIG_DIR@.
+
+    If you previously had mailman installed and have edited files in
+    /var/mailman (e.g. configuration) you will need to move those changes
+    to their new locations.
+
+    A script has been provided to aid in the task of migrating your
+    mailman datafiles, it is contrib/migrate-fhs, run with -h for help
+    information.
+
+    The mapping of old locations to new locations is as follows:
+
+    Directory Mapping:
+    /var/mailman				--> /var/lib/mailman
+    /var/mailman/Mailman			--> /usr/lib/mailman/Mailman
+    /var/mailman/archives			--> /var/lib/mailman/archives
+    /var/mailman/bin				--> /usr/lib/mailman/bin
+    /var/mailman/cgi-bin			--> /usr/lib/mailman/cgi-bin
+    /var/mailman/cron				--> /usr/lib/mailman/cron
+    /var/mailman/data				--> /var/lib/mailman/data
+    /var/mailman/lists				--> /var/lib/mailman/lists
+    /var/mailman/locks				--> /var/lock/mailman
+    /var/mailman/logs				--> /var/log/mailman
+    /var/mailman/mail				--> /usr/lib/mailman/mail
+    /var/mailman/messages			--> /usr/lib/mailman/messages
+    /var/mailman/pythonlib			--> /usr/lib/mailman/pythonlib
+    /var/mailman/qfiles				--> /var/spool/mailman
+    /var/spool/mailman/qfiles			--> /var/spool/mailman
+    /var/mailman/scripts			--> /usr/lib/mailman/scripts
+    /var/mailman/spam				--> /var/lib/mailman/spam
+    /var/mailman/templates			--> /usr/lib/mailman/templates
+    /var/mailman/tests				--> /usr/lib/mailman/tests
+
+    File Mapping:
+    /var/mailman/data/adm.pw			--> /etc/mailman/adm.pw
+    /var/mailman/data/creator.pw		--> /etc/mailman/creator.pw
+    /var/mailman/data/aliases			--> /etc/mailman/aliases
+    /var/mailman/data/virtual-mailman		--> /etc/mailman/virtual-mailman
+    /var/mailman/data/sitelist.cfg		--> /etc/mailman/sitelist.cfg
+    /var/mailman/data/master-qrunner.pid	--> /var/run/mailman/master-qrunner.pid
+
+    Discussion of directory and file relocation:
+
+    Two new directories were created and three existing directories which
+    were hardcoded are now configurable.
+
+    PID_DIR is used to hold the process id and is new because FHS wants
+    pid files to be located in /var/run. The FHS says when there is only a
+    single pid file it should be located in /var/run/<name>.pid, and when
+    there are multiple pid's files they should be located together in a
+    subdirectory, /var/run/<name>/. Currently mailman only has a single
+    pid file, but it does have multiple processes (qrunners). Also SELinux
+    security policy is easier to write if processes are segregated into
+    individual subdirectories. Therefore we elected to place the mailman
+    pid file in its own subdirectory, there is some debate if this is 100%
+    FHS compliant because there is only currently a single pid file, but
+    this gives us greater future flexibility and is in the spirit of FHS.
+
+    CONFIG_DIR is used to hold the site configuration files. FHS wants
+    configuration files stored in /etc/mailman. Previously configuration
+    files were mixed in with data files in DATA_DIR and with the run-time
+    code (e.g. Mailman/mm_cfg.py). CONFIG_DIR continues to exist but is
+    now restricted to data files (e.g. python pickle files). The password
+    files, alias files, and .cfg (e.g. sitelist.cfg) files have been moved
+    to CONFIG_DIR. mm_cfg.py which is the primary mailman configuration
+    file was presented a bit of a dilemma. In theory it should be located
+    in /etc/mailman, however it is executable code which argues it should
+    be located with the other executable files, it has traditionally lived
+    in $PREFIX/Mailman and experienced mailman admins will expect to find
+    it there. Modifying all the mm_cfg import statements and paths.py was
+    believed to be too invasive a change, and technically its part of the
+    "Mailman" package and moving it would take it out of the package
+    (although currently I don't think that presents any known
+    issues). Instead a compromise approach was adopted, mm_cfg.py is
+    symbolically linked into the /etc/mailman directory pointing to
+    $PREFIX/Mailman/mm_cfg.py. Thus mm_cfg.py "appears" in the
+    configuration directory but retains its traditional location, this was
+    deemed a reasonable compromise for the mailman 2.1.x timeframe.
+
+    sitelist.cfg has a symbolic link in its old location in the DATA_DIR
+    pointing to its new location in the CONFIG_DIR.
+
+    New Directories (can be specified as parameter to configure):
+
+    CONFIG_DIR:	default=$VAR_PREFIX/data		FHS=/etc/mailman
+    PID_DIR		default=$VAR_PREFIX/data	FHS=/var/run/mailman
+
+    Existing directories that can now be specified as parameter to configure:
+
+    LOCK_DIR:	default=$VAR_PREFIX/locks	FHS=/var/lock/mailman
+    LOG_DIR:	default=$VAR_PREFIX/logs	FHS=/var/log/mailman
+    QUEUE_DIR	default=$VAR_PREFIX/qfiles	FHS=/var/spool/mailman
+
+You can find addition documentation in the
+@DOC_DIR@/README.* files and/or
+@prefix@/README.* files.
+
+Mailman is an open source project and full documentation, current
+sources, patches, etc. can be found at the following official mailman
+web sites:
+
+http://www.gnu.org/software/mailman/mailman.html
+http://www.list.org
+
+1. Final installation instructions:
+
+    Congratulations!  You've installed the Mailman software.  To get
+    everything running you need to hook Mailman up to both your web
+    server and your mail system.
+
+    - If you plan on running your MTA and web server on different
+      machines, sharing Mailman installations via NFS, be sure that
+      the clocks on those two machines are synchronized closely.  You
+      might take a look at the file Mailman/LockFile.py; the constant
+      CLOCK_SLOP helps the locking mechanism compensate for clock skew
+      in this type of environment.
+
+    - Configure your web server. The RPM has made the assumption you
+      are running the apache web server (httpd). The RPM has installed
+      a mailman config file (@HTTPD_CONF_FILE@) in @HTTPD_CONF_DIR@.
+      You should edit the file to set your domain, see the
+      instructions in the config file.
+
+      Now restart your web server so the new settings take effect:
+
+      % /sbin/service httpd restart
+
+    - Create the site password using:
+
+      % @prefix@/bin/mmsitepass <your-site-password>
+
+      This password can be used anywhere that individual user or
+      mailing list administrator passwords are required, giving the
+      mailman site administrator the ability to adjust these things
+      when necessary.
+
+      You may also want to create a password for the site-wide "list
+      creator" role (someone other than the site administrator who as
+      privileges to create and remove lists through the web).  Use the
+      -c option to mmsitepass to set this.
+
+    - Set the values for DEFAULT_EMAIL_HOST and DEFAULT_URL_HOST in
+      @prefix@/Mailman/mm_cfg.py file if the fqdn of the host you are
+      running mailman on is not the email and url host you need to use.
+
+    - Update Mailman list files to new verson by running:
+      @prefix@/bin/update
+
+      Users upgrading from previous releases of this package may need
+      to move their data or adjust the configuration files to point to
+      the locations where their data is.
+
+    - Create a "site-wide" mailing list (Note: this must be done
+      before starting the mailman daemon). This is the one that
+      password reminders will appear to come from.  Usually this
+      should be the "mailman" mailing list, but if you need to change
+      this, be sure to change the MAILMAN_SITE_LIST variable in
+      mm_cfg.py (see below).
+
+      % @prefix@/bin/newlist mailman
+
+      Follow the prompts, and see the README file for more
+      information.
+
+    - Start the Mailman qrunner daemon
+
+      As of mailman version 2.1 mailman requires a service (daemon) to be
+      run for mailman to operate. RedHat does not ship RPM's that enable
+      services as part of package installation. You will need to enable
+      the mailman service if you want mailman to run.
+
+      To enable the mailman service after package installation you may run
+      the "serviceconf" GUI tool, or you may do the following on the
+      command line as root.
+
+      /sbin/service mailman start
+
+      To have the mailman service automatically start at certain run
+      levels (replace the runlevel below with your desired run levels, for
+      example to start mailman at run levels 3 and 5 runlevel would be 35:
+
+      /sbin/chkconfig --level runlevel mailman on
+
+    - You should then subscribe yourself to the mailman list.
+
+
+2. Customize Mailman
+
+    You should do these steps using the account you installed Mailman
+    under in section 2 above.
+
+    - The file @prefix@/Mailman/Defaults.py contains a number of
+      defaults for your installation.  If any of these are incorrect,
+      override them in @prefix@/Mailman/mm_cfg.py.
+
+      DO NOT EDIT Defaults.py!
+
+      Note: If you have upgraded your mailman installation RPM will
+      save a copy of your previous version of mm_cfg.py in
+      mm_cfg.py.rpmsave.
+
+      See the comments in Defaults.py for details.  Once a list is
+      created, editing many of these variables will have no effect.
+      At that point, you'll need to configure your lists through the
+      web admin interface or through the command line script
+      @prefix@/bin/withlist or @prefix@/bin/config_list.
+
+      Note: Do *not* change HOME_DIR or MAILMAN_DIR.  These are set
+      automatically by the configure script when the RPM was created.
+
+    - Create the site password using:
+
+      % @prefix@/bin/mmsitepass <your-site-password>
+
+      This password can be used anywhere that individual user or
+      mailing list administrator passwords are required, giving the
+      mailman site administrator the ability to adjust these things
+      when necessary.
+
+      You may also want to create a password for the site-wide "list
+      creator" role (someone other than the site administrator who as
+      privileges to create and remove lists through the web).  Use the
+      -c option to mmsitepass to set this.
+
+
+3. Troubleshooting
+
+    If you encounter problems with running Mailman, first check the
+    "Common Problems" section, below.  If your problem is not covered
+    there, check both the FAQ file and the online FAQ Wizard.
+    Check for errors in the mailman log files which can be found in
+
+    @LOG_DIR@
+
+    Mailman logs errors to this file:
+
+    @LOG_DIR@/error
+
+    If you encounter an error, send an error report to
+    mailman-users@python.org.  Include a description of what you're
+    doing to cause the problem, and the relevant lines from your
+    syslog.  Also include information on your operating system, which
+    version of Python you're using, and which version of Mailman
+    you're installing.
+
+
+4. Common Problems
+
+    Problem:  All Mailman web pages give a 404 File not found error.
+
+    Solution: Your web server has not been set up properly for handling
+              Mailman's cgi commands.  Make sure you've:
+
+              1) Configured the web server to give permissions to
+                 @prefix@/cgi-bin
+              2) Restarted the web server properly.
+
+              Consult your web server's documentation for instructions
+              on how to do these things.
+
+
+    Problem:  All Mailman web pages give an "Internal Server Error".
+
+    Solution: The likely problem is that you are using the wrong GID or
+              UID for CGI scripts.  Check your syslog.  If you see, for
+              example, a line like:
+
+                  Attempt to exec script with invalid gid 51, expected 99
+
+              You need to reinstall Mailman, and specify $CGI_GID to be 51,
+              as described in the installation instructions.
+
+
+    Problem:  I send mail to the list, and get back mail saying the
+              list is not found!
+
+    Solution: You probably didn't add the necessary aliases to the system
+              alias database, given to you when you ran the newlist
+              command.  If you did add them, you likely did not update
+              the alias database, or your system requires you to run
+              newaliases explicitly.  Refer to section 5 above for
+              more information.
+
+
+    Problem:  I send mail to the list, and get back mail saying,
+              "unknown mailer error".
+
+    Solution: The likely problem is that you are using the wrong GID or
+              UID for mail.  Check your syslog.  If you see, for
+              example, a line like:
+
+                  Attempt to exec script with invalid gid 51, expected 99
+
+              You need to reinstall Mailman, and specify $MAIL_GID to
+              be 51, as described in the installation
+              instructions. see notes on Postfix below, as by default
+              it will create these problems on installation.
+
+
+    Problem:  I use Postfix for my MTA and the mail wrapper programs
+              are logging complaints about the wrong GID.
+
+    Solution: Create a separate aliases file for Postfix in its
+              main.cf config file under the variable "alias_maps". Put
+              the file somewhere in Mailman's home directory, or
+              somewhere else where the user mailman has write access
+              to it; *as user mailman* call Postfix's "postalias" on the
+              alias file.
+
+              % postalias <the alias file>
+
+              Also as user mailman, run
+
+              % python -c'import os; print os.getgid()'
+
+              This should print out the group id that Mailman should
+              be configured to expect when the mail wrapper programs
+              are run.  Call it "thegid".  Rebuild Mailman with
+
+              % ./configure --with-mail-gid=thegid
+
+              See also the "Using the Postfix mail server" section of
+              the mailman installation manual for more information on
+              connecting Postfix and Mailman.  The manual is available
+              in several formats at /usr/share/doc/mailman-*/admin/www.
+
+
+    Problem:  I send mail to the list, and get back mail saying,
+              "sh: mailman not available for sendmail programs"
+
+    Solution: Your system uses sendmail restricted shell (smrsh).  You
+              need to configure smrsh by creating a symbolic link from
+              the mail wrapper (@prefix@/mail/mailman) to the directory
+              identifying executables allowed to run under smrsh.
+
+              Some common names for this directory are
+              /var/admin/sm.bin, /usr/admin/sm.bin or /etc/smrsh.
+
+              Note that on Debian Linux, the system makes
+              /usr/lib/sm.bin, which is wrong, you will need to create
+              the directory /usr/admin/sm.bin and add the link there.
+              Note further any aliases newaliases spits out will need
+              to be adjusted to point to the secure link to the
+              wrapper.
+
+
+    Problem:  I messed up when I called configure.  How do I clean
+              things up and re-install?
+
+    Solution: % make clean
+              % ./configure --with-the-right-options
+              % make install
+
+
+-------------------- Other Useful Information -----------------
+
+RPM Preserves User Modified Files
+---------------------------------
+
+The rpm during installation will preserve changes you have made to
+configuration files and templates from a previous installation. This
+is almost always what is desired. However you may want to check for
+the existence of files with either the .rpmsave or the .rpmnew
+extension and verify if any of these backup files created during the
+RPM install exist and if you are indeed using the version of the file
+you desire.
+
+Note: The installation directory for non-data files changed from
+@VAR_PREFIX@ to @prefix@ in mailman-2.1.5-20. Configuration files and
+templates that were user modified in a previous installation will need
+to manually move those changes from the earlier @VAR_PREFIX@ to the
+new @prefix@ installation directory.
+
+Here are a few commands that will aid you in this process:
+
+List any rpm backup files in the mailman installation directory:
+
+% find @prefix@ @VAR_PREFIX@ -name '*.rpm*'
+
+List any configuration files NOT in the mailman installation directory
+you might miss with the above command which also have the potental for
+backup copies. Given this short list you'll have to look for a
+matching backup file.
+
+% rpm -qc mailman | egrep -v '@prefix@|@VAR_PREFIX@'
+
+When rpm preserves a user modified file it installs the newest version
+of the file by appending the .rpmnew extension to the file name thus
+preserving the file but making the latest version avialable. If rpm
+replaces a user modified file the file being replaced is renamed to
+have the .rpmsave extension. RPM only performs these backup operations
+if the file is marked as being a configuration file in the rpm spec
+file, it is not performed in general on all files in the package.
+
+
+Mailman Cron Jobs:
+------------------
+
+Mailman relies on the cron daemon to schedule periodic actions. These
+are contained in a crontab file. Previous versions of the mailman RPM
+from Red Hat created the cron jobs by running the crontab(1) command
+during the RPM installation phase. The cron jobs are now handled
+slightly differently. Rather than invoking crontab which loaded the
+cron jobs into a private cron file a mailman crontab file is installed
+into /etc/cron.d. The crontab file and the commands it runs were
+modified from the upstream distribution so these commands would run
+under the correct SELinux security profile.
+
+Previously the cron jobs were installed when the RPM was
+installed. This was less than optimal because the act of having the
+mailman RPM installed on a system should not cause the cron jobs to
+run. A better solution is to only run the mailman cron jobs if the
+mailman service is enabled. This is accomplished by installing the
+mailman crontab file in /etc/cron.d when the mailman service is
+started by mailman init.d script (e.g. either at boot time or via
+/sbin/service). When the mailman service is stopped the crontab file
+is removed from /etc/cron.d. The crontab file is copied from
+@prefix@/cron/crontab.in to /etc/cron.d/mailman. Thus if you edit the
+cron jobs you will need to edit the master copy in @prefix@/cron
+otherwise your edits will be lost the next time the mailman service is
+started or restarted. To pick up any changes made to the crontab file
+edit the master copy in @prefix@/cron and then use /sbin/service to
+restart mailman (e.g. /sbin/service mailman restart). Some may wonder
+why the crontab file in /etc/cron.d is not symbolically linked to the
+master copy when the service starts and unlinked when it stops. The
+reason is because newer versions of cron will refuse for security
+reasons to run any crontabs which are links to other files or
+writeable by anybody else except root.
+
+Choosing your MTA (sendmail or postfix) on Red Hat Systems:
+-----------------------------------------------------------
+
+Red Hat ships two different MTA's, sendmail and postfix. Because the
+sendmail and postfix rpms's share file names when installed the
+conflict is accomodated by utilizing the "alternatives" mechanism
+which manages a set of links. When one of the MTA's is selected via
+/usr/sbin/alternatives links are established which point to the
+correct files for that MTA. There are two ways to select your MTA:
+The system-switch-mail package contains a GUI front end to the
+alternatives mechanism and /usr/bin/system-switch-mail is an easy way
+to select your MTA, or you can invoke alternatives directly like this:
+
+% /usr/sbin/alternatives --config mta
+
+Note: Selecting your preferred MTA is distinct from configuring the
+MTA, you will need to consult the documentation for the MTA you
+selected for information on how to configure it.
+
+
+Local Variables:
+mode: indented-text
+indent-tabs-mode: nil
+End:
diff --git a/SOURCES/mailman.logrotate b/SOURCES/mailman.logrotate
new file mode 100644
index 0000000..b06ade3
--- /dev/null
+++ b/SOURCES/mailman.logrotate
@@ -0,0 +1,8 @@
+@LOG_DIR@/bounce @LOG_DIR@/digest @LOG_DIR@/error @LOG_DIR@/post @LOG_DIR@/smtp @LOG_DIR@/smtp-failure @LOG_DIR@/qrunner @LOG_DIR@/locks @LOG_DIR@/fromusenet @LOG_DIR@/subscribe @LOG_DIR@/vette {
+    missingok
+    sharedscripts
+    su root root
+    postrotate
+        @MMDIR@/bin/mailmanctl reopen >/dev/null 2>&1 || true
+    endscript
+}
diff --git a/SOURCES/mailman.service b/SOURCES/mailman.service
new file mode 100644
index 0000000..712e1b8
--- /dev/null
+++ b/SOURCES/mailman.service
@@ -0,0 +1,20 @@
+[Unit]
+Description=GNU Mailing List Manager
+After=syslog.target network.target
+
+[Service]
+ExecStartPre=/usr/lib/mailman/bin/mailman-update-cfg
+ExecStartPre=/usr/bin/install -m644 -o root -g root /usr/lib/mailman/cron/crontab.in /etc/cron.d/mailman
+ExecStartPre=/bin/touch /var/log/mailman/error
+ExecStartPre=/bin/chown mailman:mailman /var/log/mailman/error
+ExecStartPre=/bin/chmod 660 /var/log/mailman/error
+ExecStart=/usr/lib/mailman/bin/mailmanctl -s start
+ExecReload=/usr/lib/mailman/bin/mailmanctl restart
+ExecStop=/usr/lib/mailman/bin/mailman-update-cfg
+ExecStop=/usr/lib/mailman/bin/mailmanctl stop
+ExecStop=/bin/sh -c 'echo -e "# DO NOT EDIT THIS FILE!\n#\n# Contents of this file managed by /etc/init.d/mailman\n# Master copy is /usr/lib/mailman/cron/crontab.in" > /etc/cron.d/mailman'
+Type=forking
+
+[Install]
+WantedBy=multi-user.target
+
diff --git a/SOURCES/mm_cfg.py b/SOURCES/mm_cfg.py
new file mode 100644
index 0000000..6d1f286
--- /dev/null
+++ b/SOURCES/mm_cfg.py
@@ -0,0 +1,100 @@
+# -*- python -*-
+
+# Copyright (C) 1998,1999,2000,2001,2002 by the Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software 
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+"""This module contains your site-specific settings.
+
+From a brand new distribution it should be copied to mm_cfg.py.  If you
+already have an mm_cfg.py, be careful to add in only the new settings you
+want.  Mailman's installation procedure will never overwrite your mm_cfg.py
+file.
+
+The complete set of distributed defaults, with documentation, are in the file
+Defaults.py.  In mm_cfg.py, override only those you want to change, after the
+
+  from Defaults import *
+
+line (see below).
+
+Note that these are just default settings; many can be overridden via the
+administrator and user interfaces on a per-list or per-user basis.
+
+"""
+
+###############################################
+# Here's where we get the distributed defaults.
+
+from Defaults import *
+import pwd, grp
+
+##################################################
+# Put YOUR site-specific settings below this line.
+
+#ATTENTION: when you use SELinux, mailman might not
+#be able to recompile the configuration file 
+#due to policy settings. If this is the case,
+#please run (as root) the supplied "mailman-update-cfg" script
+
+##############################################################
+#    Here's where we override shipped defaults with settings #
+#    suitable for the RPM package.                           #
+MAILMAN_UID = pwd.getpwnam('mailman')[2]
+MAILMAN_GID = grp.getgrnam('mailman')[2]
+
+##############################################################
+#    Set URL and email domain names                          #
+# 
+# Mailman needs to know about (at least) two fully-qualified domain
+# names (fqdn)
+#
+# 1) the hostname used in your urls (DEFAULT_URL_HOST)
+# 2) the hostname used in email addresses for your domain (DEFAULT_EMAIL_HOST)
+#
+# For example, if people visit your Mailman system with
+# "http://www.dom.ain/mailman" then your url fqdn is "www.dom.ain",
+# and if people send mail to your system via "yourlist@dom.ain" then
+# your email fqdn is "dom.ain".  DEFAULT_URL_HOST controls the former,
+# and DEFAULT_EMAIL_HOST controls the latter.  Mailman also needs to
+# know how to map from one to the other (this is especially important
+# if you're running with virtual domains).  You use
+# "add_virtualhost(urlfqdn, emailfqdn)" to add new mappings.
+
+# Default to using the FQDN of machine mailman is running on.
+# If this is not correct for your installation delete the following 5
+# lines that acquire the FQDN and manually edit the hosts instead.
+
+from socket import *
+try:
+    fqdn = getfqdn()
+except:
+    fqdn = 'mm_cfg_has_unknown_host_domains'
+
+DEFAULT_URL_HOST   = fqdn
+DEFAULT_EMAIL_HOST = fqdn
+
+# Because we've overriden the virtual hosts above add_virtualhost
+# MUST be called after they have been defined.
+
+add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
+
+
+##############################################################
+# Put YOUR site-specific configuration below, in mm_cfg.py . #
+# See Defaults.py for explanations of the values.	     #
+
+# Note - if you're looking for something that is imported from mm_cfg, but you
+# didn't find it above, it's probably in Defaults.py.
diff --git a/SPECS/mailman.spec b/SPECS/mailman.spec
new file mode 100644
index 0000000..7e318af
--- /dev/null
+++ b/SPECS/mailman.spec
@@ -0,0 +1,1252 @@
+# Turn off the brp-python-bytecompile script
+%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
+Summary: Mailing list manager with built in Web access
+Name: mailman
+Version: 2.1.29
+Release: 4%{?dist}
+Epoch: 3
+Group: Applications/Internet
+Source0: ftp://ftp.gnu.org/pub/gnu/mailman/mailman-%{version}.tgz
+#Source0: http://prdownloads.sourceforge.net/mailman/mailman-%{version}.tgz
+Source1: mm_cfg.py
+Source3: httpd-mailman.conf
+Source4: mailman.logrotate
+Source5: mailman.INSTALL.REDHAT.in
+Source6: mailman-crontab-edit
+Source7: mailman-migrate-fhs
+Source8: mailman-update-cfg
+Source9: mailman-tmpfiles.conf
+Source10: mailman.service
+
+Patch1: mailman-2.1.12-multimail.patch
+Patch2: mailman-2.1-build.patch
+Patch3: mailman-2.1-mailmanctl-status.patch
+Patch4: mailman-2.1.11-cron.patch
+Patch5: mailman-2.1.13-FHS.patch
+Patch6: mailman-python-compile.patch
+Patch7: mailman-2.1.13-archive-reply.patch
+Patch13: mailman-2.1.9-unicode.patch
+Patch21: mailman-2.1.13-env-python.patch
+Patch22: mailman-2.1.15-check_perms.patch
+Patch24: mailman-specify_python_version.patch
+
+
+License: GPLv2+
+URL: http://www.list.org/
+Requires(pre): shadow-utils
+Requires: cronie, httpd, python2, coreutils, python2-dns
+Requires(post): systemd
+Requires(post): systemd-sysv
+Requires(preun): systemd
+Requires(postun): systemd
+BuildRequires: automake
+BuildRequires: python2-devel
+BuildRequires: systemd-units
+BuildRequires: python2-dns
+
+%global contentdir /usr/share/httpd
+
+# Installation directories
+# rpmlint will give an error about hardcoded library path,
+# but this is necessary, because there are python executables inside,
+# which the user can run in their scripts. 
+# see rhbz#226117 for more information
+%global mmdir /usr/lib/%{name}
+%global varmmdir /var/lib/%{name}
+%global docdir %{?_pkgdocdir}%{!?_pkgdocdir:%{_docdir}/%{name}-%{version}}
+%global configdir /etc/%{name}
+%global datadir %{varmmdir}/data
+%global archivesdir %{varmmdir}/archives
+%global lockdir /var/lock/%{name}
+%global logdir /var/log/%{name}
+%global piddir /var/run/%{name}
+%global queuedir /var/spool/%{name}
+%global templatedir %{configdir}/templates
+%global httpdconfdir /etc/httpd/conf.d
+%global restart_flag /var/run/%{name}-restart-after-rpm-install
+%global mmbuilddir %{_builddir}/%{name}-%{version}
+
+%global httpdconffile %{name}.conf
+# Now, the user and group the CGIs will expect to be run under.  This should
+# match the user and group the web server is configured to run as.  The scripts
+# will error out if they are invoked by any other user.
+%global cgiuser    apache
+%global cgigroup   apache
+
+# Now, the user and group the scripts will actually execute as.
+%global mmuser       mailman
+%global mmuserid     41
+%global mmgroup      mailman
+%global mmgroupid    41
+
+# Directory/File modes & permissions
+%global dirmode 2775
+%global exemode 2755
+
+# Now, the groups your mail spoolers run as.  Sendmail uses 'mail'(12)
+# and postfix used to use 'nobody', but now uses 'postfix'
+%global mailgroup  "mail postfix mailman nobody daemon"
+
+# The mail wrapper program
+%global mail_wrapper mailman
+
+%description
+Mailman is software to help manage email discussion lists, much like
+Majordomo and Smartmail. Unlike most similar products, Mailman gives
+each mailing list a webpage, and allows users to subscribe,
+unsubscribe, etc. over the Web. Even the list manager can administer
+his or her list entirely from the Web. Mailman also integrates most
+things people want to do with mailing lists, including archiving, mail
+<-> news gateways, and so on.
+
+Documentation can be found in: %{docdir}
+
+When the package has finished installing, you will need to perform some
+additional installation steps, these are described in:
+%{docdir}/INSTALL.REDHAT
+
+%prep
+%setup -q -n mailman-%{version}
+%patch1 -p1 -b .multimail
+%patch2 -p1 -b .permissions
+%patch3 -p1 -b .status
+%patch4 -p1 -b .cron
+%patch5 -p1 -b .FHS
+%patch6 -p1 -b .python-compile
+%patch7 -p1 -b .archive-in-reply-to
+%patch13 -p1 -b .unicode
+%patch21 -p1
+%patch22 -p1
+%patch24 -p1 -b .python_version
+
+#cp $RPM_SOURCE_DIR/mailman.INSTALL.REDHAT.in INSTALL.REDHAT.in
+cp %{SOURCE5} INSTALL.REDHAT.in
+rm -f contrib/redhat_fhs.patch
+mv contrib/sitemapgen contrib/sitemapgen.in
+
+%build
+
+CFLAGS="$RPM_OPT_FLAGS -fPIE -DPIE"; export CFLAGS
+# Full relro
+export LDFLAGS="$LDFLAGS -pie -Wl,-z,relro -Wl,-z,now"
+
+rm -f configure
+aclocal
+autoconf
+# rpmlint will give an error about hardcoded library path,
+# but this is necessary, because there are python executables inside,
+# which the user can run in their scripts. 
+# see rhbz#226117 for more information
+./configure \
+        --libdir=/usr/lib \
+        --prefix=%{mmdir} \
+        --with-var-prefix=%{varmmdir} \
+        --with-config-dir=%{configdir} \
+        --with-lock-dir=%{lockdir} \
+        --with-log-dir=%{logdir} \
+        --with-pid-dir=%{piddir} \
+        --with-queue-dir=%{queuedir} \
+        --with-template-dir=%{templatedir} \
+        --with-python=%{__python2} \
+        --with-mail-gid=%{mailgroup} \
+        --with-cgi-id=%{cgiuser} \
+        --with-cgi-gid=%{cgigroup} \
+        --with-mailhost=localhost.localdomain \
+        --with-urlhost=localhost.localdomain \
+        --without-permcheck
+
+function SubstituteParameters()
+{
+sed -e 's|@VAR_PREFIX@|%{varmmdir}|g' \
+    -e 's|@VARMMDIR@|%{varmmdir}|g' \
+    -e 's|@prefix@|%{mmdir}|g' \
+    -e 's|@MMDIR@|%{mmdir}|g' \
+    -e 's|@CONFIG_DIR@|%{configdir}|g' \
+    -e 's|@DATA_DIR@|%{datadir}|g' \
+    -e 's|@LOCK_DIR@|%{lockdir}|g' \
+    -e 's|@LOG_DIR@|%{logdir}|g' \
+    -e 's|@PID_DIR@|%{piddir}|g' \
+    -e 's|@QUEUE_DIR@|%{queuedir}|g' \
+    -e 's|@DOC_DIR@|%{docdir}|g' \
+    -e 's|@HTTPD_CONF_DIR@|%{httpdconfdir}|g' \
+    -e 's|@HTTPD_CONF_FILE@|%{httpdconffile}|g' \
+    $1 > $2
+}
+
+SubstituteParameters "INSTALL.REDHAT.in" "INSTALL.REDHAT"
+SubstituteParameters "%{SOURCE1}" "Mailman/mm_cfg.py.dist"
+SubstituteParameters "%{SOURCE3}" "httpd-mailman.conf"
+SubstituteParameters "%{SOURCE4}" "mailman.logrotate"
+
+rm -f contrib/*.in
+
+make
+
+%install
+# Normal install.
+make DESTDIR=%{buildroot} install
+#make install prefix=%{buildroot}%{mmdir} var_prefix=%{buildroot}%{varmmdir}
+
+# Install the mailman cron.d script
+mkdir -p %{buildroot}/etc/cron.d
+cat > %{buildroot}/etc/cron.d/%{name} <<EOF
+# DO NOT EDIT THIS FILE!
+#
+# Contents of this file managed by /etc/init.d/%{name}
+# Master copy is %{mmdir}/cron/crontab.in
+# Consult that file for documentation
+EOF
+
+# Copy the icons into the web server's icons directory.
+mkdir -p %{buildroot}%{contentdir}/icons
+cp %{buildroot}/%{mmdir}/icons/* %{buildroot}%{contentdir}/icons
+
+# Create a link to the wrapper in /etc/smrsh to allow sendmail to run it.
+# The link should be relative in order to make it work in chroot
+mkdir -p %{buildroot}/etc/smrsh
+ln -s ../..%{mmdir}/mail/%{mail_wrapper} %{buildroot}/etc/smrsh
+
+# sitelist.cfg used to live in the DATA_DIR, now as part of the 
+# FHS reoraganization it lives in the CONFIG_DIR. Most of the
+# documentation refers to it in its DATA_DIR location and experienced
+# admins will expect to find it there, so create a link in DATA_DIR to
+# point to it in CONFIG_DIR so people aren't confused.
+ln -s %{configdir}/sitelist.cfg %{buildroot}%{datadir}
+
+# Install a logrotate control file.
+mkdir -p %{buildroot}/etc/logrotate.d
+install -m644 %{mmbuilddir}/mailman.logrotate %{buildroot}/etc/logrotate.d/%{name}
+
+# Install the httpd configuration file.
+install -m755 -d %{buildroot}%{httpdconfdir}
+install -m644 %{mmbuilddir}/httpd-mailman.conf %{buildroot}%{httpdconfdir}/%{httpdconffile}
+
+# Install the documentation files
+install -m755 -d %{buildroot}%{docdir}
+install -m644 %{mmbuilddir}/INSTALL.REDHAT   %{buildroot}%{docdir}
+install -m644 %{mmbuilddir}/ACKNOWLEDGMENTS  %{buildroot}%{docdir}
+install -m644 %{mmbuilddir}/FAQ              %{buildroot}%{docdir}
+install -m644 %{mmbuilddir}/NEWS             %{buildroot}%{docdir}
+install -m644 %{mmbuilddir}/README           %{buildroot}%{docdir}
+install -m644 %{mmbuilddir}/README.CONTRIB   %{buildroot}%{docdir}
+install -m644 %{mmbuilddir}/README-I18N.en   %{buildroot}%{docdir}
+install -m644 %{mmbuilddir}/README.NETSCAPE  %{buildroot}%{docdir}
+install -m644 %{mmbuilddir}/README.USERAGENT %{buildroot}%{docdir}
+install -m644 %{mmbuilddir}/STYLEGUIDE.txt   %{buildroot}%{docdir}
+install -m644 %{mmbuilddir}/UPGRADING        %{buildroot}%{docdir}
+
+cp -r %{mmbuilddir}/contrib %{buildroot}%{docdir}
+install -m644 %{SOURCE7} %{buildroot}%{docdir}/contrib/migrate-fhs
+install -m755 -d %{buildroot}%{docdir}/admin
+cp -r %{mmbuilddir}/doc %{buildroot}%{docdir}/admin
+
+#install the script for updating the config (bz#484328)
+mkdir -p %{buildroot}%{mmdir}/bin/
+install -m755 %{SOURCE8} %{buildroot}%{mmdir}/bin/
+# set library path in mailman-update-cfg script.
+sed -i 's,@mmdir@,%{mmdir},g' %{buildroot}%{mmdir}/bin/mailman-update-cfg
+
+# remove dir/files from %{buildroot} that we aren't shipping
+rm -rf %{buildroot}%{varmmdir}/icons
+
+# The file fblast confuses /usr/lib/rpm/find-requires because its an executable
+# script file that does not have the interpreter as the first line, its not
+# executable by itself so turn off its execute permissions
+chmod 0644 %{buildroot}/%{mmdir}/tests/fblast.py
+
+# Security issues...
+#chmod 0755 %{buildroot}/%{mmdir}/pythonlib/japanese/c/_japanese_codecs.so
+#chmod 0755 %{buildroot}/%{mmdir}/pythonlib/korean/c/hangul.so
+#chmod 0755 %{buildroot}/%{mmdir}/pythonlib/korean/c/_koco.so
+
+# Directories...
+mkdir -p %{buildroot}/%{lockdir}
+mkdir -p %{buildroot}/%{logdir}
+mkdir -p %{buildroot}/%{piddir}
+mkdir -p %{buildroot}/%{queuedir}
+mkdir -p %{buildroot}/%{_prefix}/lib/tmpfiles.d
+
+install -m 644 -p %{SOURCE9} %{buildroot}%{_prefix}/lib/tmpfiles.d/mailman.conf
+
+# Systemd service file
+mkdir -p %{buildroot}%{_unitdir}
+install -m644 %{SOURCE10} %{buildroot}%{_unitdir}
+
+# Move mm_cfg.py to /etc/mailman and create symlink to it
+mkdir -p %{buildroot}%{configdir}
+mv %{buildroot}%{mmdir}/Mailman/mm_cfg.py %{buildroot}%{configdir}
+ln -s %{configdir}/mm_cfg.py %{buildroot}%{mmdir}/Mailman/
+
+# Put README file into old templates directory to inform admins
+# about change
+cat > %{buildroot}%{mmdir}/templates/README <<EOF
+Templates have been moved to %{templatedir}.
+EOF
+
+# byte-compile %{mmdir}
+#py_byte_compile %{__python} %{buildroot}%{mmdir}
+find %{buildroot}%{mmdir} -type f -a -name "*.py" -print0 | xargs -0 %{__python2} -c 'import py_compile, sys; [py_compile.compile(f, dfile=f.partition("$RPM_BUILD_ROOT")[2]) for f in sys.argv[1:]]' || :
+find %{buildroot}%{mmdir} -type f -a -name "*.py" -print0 | xargs -0 %{__python2} -O -c 'import py_compile, sys; [py_compile.compile(f, dfile=f.partition("$RPM_BUILD_ROOT")[2]) for f in sys.argv[1:]]' || :
+
+# Change permissions of directories to keep rpmlint silent
+find %{buildroot}/%{mmdir} -type d -exec chmod 755 {} \;
+find %{buildroot}/%{templatedir} -type d -exec chmod 755 {} \;
+# There is no need for setgid bit in all files in those directories except cgi-bin
+chmod %{buildroot}/%{mmdir} -s -R
+# cgi-bin contains ELF executables which have to have setgid
+chmod g+s %{buildroot}/%{mmdir}/cgi-bin/*
+chmod g+s %{buildroot}/%{mmdir}/mail/mailman
+# no need for setgid in configdir
+chmod %{buildroot}/%{configdir} -s -R
+
+%pre
+
+# Make sure the user "mailman" exists on this system and has the correct values
+if grep -q "^mailman:" /etc/group 2> /dev/null ; then
+  /usr/sbin/groupmod -g %{mmgroupid} -n %{mmgroup} %{mmgroup} 2> /dev/null || :
+else
+  /usr/sbin/groupadd -g %{mmgroupid} %{mmgroup} 2> /dev/null || :
+fi
+if grep -q "^mailman:" /etc/passwd 2> /dev/null ; then
+  /usr/sbin/usermod -s /sbin/nologin -c "GNU Mailing List Manager" -d %{mmdir} -u %{mmuserid} -g %{mmgroupid}       %{mmuser} 2> /dev/null || :
+else
+  /usr/sbin/useradd -s /sbin/nologin -c "GNU Mailing List Manager" -d %{mmdir} -u %{mmuserid} -g %{mmgroupid} -M -r %{mmuser} 2> /dev/null || :
+fi
+
+# Mailman should never be running during an install, but a package upgrade
+# shouldn't silently stop the service, so if mailman was running
+# we'll leave a temp file in the lock directory as a flag so in
+# the post install phase we can restart it.
+#
+# rpmlint will complain here about "dangerous use of rm"
+# but this is OK because we are only rm-ing our temporary file
+if [ -d %{lockdir} ]; then
+  rm -f %{restart_flag}
+  /sbin/systemctl status %{name}>/dev/null 2>&1
+  if [ $? -eq 0 ]; then
+      touch %{restart_flag}
+      /sbin/systemctl stop %{name} >/dev/null 2>&1
+  fi
+fi
+
+# Remove older rpm-state dir
+if [ -d %{_localstatedir}/lib/rpm-state/mailman ]; then
+  rm -rf %{_localstatedir}/lib/rpm-state/mailman
+fi
+
+# Move mm_cfg.py to different location to be able to copy it to /etc/mailman
+# later in post. This is needed, otherwise RPM would remove it.
+mkdir -p %{_localstatedir}/lib/rpm-state/mailman/
+if [ -L %{configdir}/mm_cfg.py -a ! -L %{mmdir}/Mailman/mm_cfg.py -a -d %{configdir} ]; then
+  mv %{mmdir}/Mailman/mm_cfg.py %{_localstatedir}/lib/rpm-state/mailman/mm_cfg.py
+fi
+
+# Move templates dir to different location to be able to copy it to
+# /etc/mailman later in post. This is needed, otherwise RPM would remove it.
+if [ ! -d %{templatedir} -a -d %{mmdir}/templates ]; then
+  mv %{mmdir}/templates %{_localstatedir}/lib/rpm-state/mailman/
+fi
+
+# rpm should not abort if last command run had non-zero exit status, exit cleanly
+exit 0
+
+%post
+# We no longer use crontab, but previous versions of the spec file did, so clean up
+if [ -f /var/spool/cron/%{mmuser} ]; then
+  crontab -u %{mmuser} -r
+fi
+
+# Restart mailman if it had been running before installation
+if [ -e %{restart_flag} ]; then
+  rm %{restart_flag}
+  /sbin/systemctl start %{name} >/dev/null 2>&1
+fi
+
+# Move mm_cfg.py from /usr/lib/mailman/Mailman to /etc/mailman and create
+# symlink to it (#905845).
+if [ -f %{_localstatedir}/lib/rpm-state/mailman/mm_cfg.py ]; then
+  cp -p %{_localstatedir}/lib/rpm-state/mailman/mm_cfg.py %{configdir}/mm_cfg.py
+fi
+
+# Move mmdir/templates to /etc/mailman/templates
+if [ -d %{_localstatedir}/lib/rpm-state/mailman/templates ]; then
+  cp -pr %{_localstatedir}/lib/rpm-state/mailman/templates/* %{templatedir}
+  rm -rf %{_localstatedir}/lib/rpm-state/mailman/templates/
+fi
+
+if [ -d %{_localstatedir}/lib/rpm-state/mailman ]; then
+  rm -rf %{_localstatedir}/lib/rpm-state/mailman
+fi
+
+# systemd
+%systemd_post mailman.service
+
+# rpm should not abort if last command run had non-zero exit status, exit cleanly
+exit 0
+
+%preun
+
+# if [ $1 = 0 ]' checks that this is the actual deinstallation of
+# the package, as opposed to just removing the old package on upgrade.
+
+%systemd_preun mailman.service
+# rpm should not abort if last command run had non-zero exit status, exit cleanly
+exit 0
+
+%postun
+if [ $1 = 0 ]; then
+  crontab -u %{mmuser} -r 2>/dev/null
+fi
+
+# systemd
+%systemd_postun_with_restart mailman.service
+
+# rpm should not abort if last command run had non-zero exit status, exit cleanly
+exit 0
+
+%triggerun -- mailman < 3:2.1.14-9
+%{_bindir}/systemd-sysv-convert --save mailman >/dev/null 2>&1 ||:
+/bin/systemctl enable mailman.service >/dev/null 2>&1
+/sbin/chkconfig --del mailman >/dev/null 2>&1 || :
+/bin/systemctl try-restart mailman.service >/dev/null 2>&1 || :
+
+
+%files
+%defattr(-,root,%{mmgroup})
+%dir %{mmdir}
+%dir %{mmdir}/Mailman
+%{mmdir}/templates
+%{mmdir}/bin
+%dir %{mmdir}/cgi-bin/
+%attr(2755, root, %{mmgroup}) %{mmdir}/cgi-bin/*
+%dir %{mmdir}/cron
+%{mmdir}/icons
+%dir %{mmdir}/mail
+%attr(2755, root, %{mmgroup}) %{mmdir}/mail/mailman
+%{mmdir}/messages
+%{mmdir}/pythonlib
+%{mmdir}/scripts
+# rpmlint will complain here about config files being in /usr
+# but these are both data files -parts of mailman's web UI-
+# and config files - user can change them to match the design
+# and/or content of their web pages
+%config(noreplace) %{templatedir}
+%{mmdir}/tests
+%dir %{varmmdir}
+%{varmmdir}/data
+%{varmmdir}/lists
+%{varmmdir}/spam
+%dir %{archivesdir}
+%{archivesdir}/public
+# fix for security issue #459530
+%attr(2770,%{cgiuser},%{mmgroup}) %{archivesdir}/private
+#cron dir minus one file which is listed later
+%{mmdir}/cron/bumpdigests
+%{mmdir}/cron/checkdbs
+%{mmdir}/cron/cull_bad_shunt
+%{mmdir}/cron/disabled
+%{mmdir}/cron/gate_news
+%{mmdir}/cron/mailpasswds
+%{mmdir}/cron/nightly_gzip
+%{mmdir}/cron/paths.py
+%{mmdir}/cron/paths.pyc
+%{mmdir}/cron/paths.pyo
+%{mmdir}/cron/senddigests
+#Mailman dir minus one file which is listed later
+%{mmdir}/Mailman/Archiver
+%{mmdir}/Mailman/Autoresponder.py
+%{mmdir}/Mailman/Autoresponder.pyc
+%{mmdir}/Mailman/Autoresponder.pyo
+%{mmdir}/Mailman/Bouncer.py
+%{mmdir}/Mailman/Bouncer.pyc
+%{mmdir}/Mailman/Bouncer.pyo
+%{mmdir}/Mailman/Bouncers
+%{mmdir}/Mailman/Cgi
+%{mmdir}/Mailman/Commands
+%{mmdir}/Mailman/CSRFcheck.py
+%{mmdir}/Mailman/CSRFcheck.pyc
+%{mmdir}/Mailman/CSRFcheck.pyo
+%{mmdir}/Mailman/Defaults.py
+%{mmdir}/Mailman/Defaults.pyc
+%{mmdir}/Mailman/Defaults.pyo
+%{mmdir}/Mailman/Deliverer.py
+%{mmdir}/Mailman/Deliverer.pyc
+%{mmdir}/Mailman/Deliverer.pyo
+%{mmdir}/Mailman/Digester.py
+%{mmdir}/Mailman/Digester.pyc
+%{mmdir}/Mailman/Digester.pyo
+%{mmdir}/Mailman/Errors.py
+%{mmdir}/Mailman/Errors.pyc
+%{mmdir}/Mailman/Errors.pyo
+%{mmdir}/Mailman/GatewayManager.py
+%{mmdir}/Mailman/GatewayManager.pyc
+%{mmdir}/Mailman/GatewayManager.pyo
+#%%{mmdir}/Mailman/Generator.py
+#%%{mmdir}/Mailman/Generator.pyc
+#%%{mmdir}/Mailman/Generator.pyo
+%{mmdir}/Mailman/Gui
+%{mmdir}/Mailman/Handlers
+%{mmdir}/Mailman/htmlformat.py
+%{mmdir}/Mailman/htmlformat.pyc
+%{mmdir}/Mailman/htmlformat.pyo
+%{mmdir}/Mailman/HTMLFormatter.py
+%{mmdir}/Mailman/HTMLFormatter.pyc
+%{mmdir}/Mailman/HTMLFormatter.pyo
+%{mmdir}/Mailman/i18n.py
+%{mmdir}/Mailman/i18n.pyc
+%{mmdir}/Mailman/i18n.pyo
+%{mmdir}/Mailman/__init__.py
+%{mmdir}/Mailman/__init__.pyc
+%{mmdir}/Mailman/__init__.pyo
+%{mmdir}/Mailman/ListAdmin.py
+%{mmdir}/Mailman/ListAdmin.pyc
+%{mmdir}/Mailman/ListAdmin.pyo
+%{mmdir}/Mailman/LockFile.py
+%{mmdir}/Mailman/LockFile.pyc
+%{mmdir}/Mailman/LockFile.pyo
+%{mmdir}/Mailman/Logging
+%{mmdir}/Mailman/Mailbox.py
+%{mmdir}/Mailman/Mailbox.pyc
+%{mmdir}/Mailman/Mailbox.pyo
+%{mmdir}/Mailman/MailList.py
+%{mmdir}/Mailman/MailList.pyc
+%{mmdir}/Mailman/MailList.pyo
+%{mmdir}/Mailman/MemberAdaptor.py
+%{mmdir}/Mailman/MemberAdaptor.pyc
+%{mmdir}/Mailman/MemberAdaptor.pyo
+%{mmdir}/Mailman/Message.py
+%{mmdir}/Mailman/Message.pyc
+%{mmdir}/Mailman/Message.pyo
+%{mmdir}/Mailman/mm_cfg.py.dist
+%{mmdir}/Mailman/MTA
+%{mmdir}/Mailman/OldStyleMemberships.py
+%{mmdir}/Mailman/OldStyleMemberships.pyc
+%{mmdir}/Mailman/OldStyleMemberships.pyo
+%{mmdir}/Mailman/Pending.py
+%{mmdir}/Mailman/Pending.pyc
+%{mmdir}/Mailman/Pending.pyo
+%{mmdir}/Mailman/Post.py
+%{mmdir}/Mailman/Post.pyc
+%{mmdir}/Mailman/Post.pyo
+%{mmdir}/Mailman/Queue
+%{mmdir}/Mailman/SafeDict.py
+%{mmdir}/Mailman/SafeDict.pyc
+%{mmdir}/Mailman/SafeDict.pyo
+%{mmdir}/Mailman/SecurityManager.py
+%{mmdir}/Mailman/SecurityManager.pyc
+%{mmdir}/Mailman/SecurityManager.pyo
+%{mmdir}/Mailman/Site.py
+%{mmdir}/Mailman/Site.pyc
+%{mmdir}/Mailman/Site.pyo
+%{mmdir}/Mailman/TopicMgr.py
+%{mmdir}/Mailman/TopicMgr.pyc
+%{mmdir}/Mailman/TopicMgr.pyo
+%{mmdir}/Mailman/UserDesc.py
+%{mmdir}/Mailman/UserDesc.pyc
+%{mmdir}/Mailman/UserDesc.pyo
+%{mmdir}/Mailman/Utils.py
+%{mmdir}/Mailman/Utils.pyc
+%{mmdir}/Mailman/Utils.pyo
+%{mmdir}/Mailman/Version.py
+%{mmdir}/Mailman/Version.pyc
+%{mmdir}/Mailman/Version.pyo
+%{mmdir}/Mailman/versions.py
+%{mmdir}/Mailman/versions.pyc
+%{mmdir}/Mailman/versions.pyo
+%{_unitdir}/mailman.service
+%doc %{docdir}
+%dir %attr(0755,root,root) %{contentdir}/icons
+%attr(0644,root,root) %{contentdir}/icons/*
+%attr(0644, root, %{mmgroup}) %config(noreplace) %verify(not md5 size mtime) %{configdir}/mm_cfg.py
+%attr(0644, root, %{mmgroup}) %config(noreplace) %verify(not md5 size mtime) %{mmdir}/Mailman/mm_cfg.py
+%verify(not md5 size mtime) %{mmdir}/Mailman/mm_cfg.py?
+%config(noreplace) %{httpdconfdir}/%{httpdconffile}
+%config(noreplace) /etc/logrotate.d/%{name}
+/etc/smrsh/%{mail_wrapper}
+%dir %attr(755,root,%{mmgroup}) %{configdir}
+%attr(0644, root, %{mmgroup}) %config(noreplace) %verify(not md5 size mtime) %{configdir}/sitelist.cfg
+%attr(775,root,%{mmgroup}) %{logdir}
+%{_prefix}/lib/tmpfiles.d/mailman.conf
+%attr(2775,root,%{mmgroup}) %{queuedir}
+%attr(0644,root,root) %config(noreplace) %verify(not md5 size mtime) /etc/cron.d/mailman
+%attr(0644,root,%{mmgroup}) %config(noreplace) %{mmdir}/cron/crontab.in
+%attr(0755,root,root) %{mmdir}/bin/mailman-update-cfg
+%dir %attr(775,root,%{mmgroup}) %{piddir}
+%dir %attr(775,root,%{mmgroup}) %{lockdir}
+
+%changelog
+* Mon Oct  8 2018 Pavel Zhukov <pzhukov@redhat.com> - 3:2.1.29-4
+- Resolves: #1636432 - Delete env python shebangs
+
+* Thu Sep 13 2018 Pavel Zhukov <pzhukov@redhat.com> - 3:2.1.29-3
+- Related: #1628242 - Specify python version
+
+* Tue Jul 31 2018 Pavel Zhukov <pzhukov@redhat.com> - 3:2.1.29-2
+- Do not require initscripts
+
+* Mon Jul 30 2018 Pavel Zhukov <pzhukov@redhat.com> - 3:2.1.29-1
+- New release 2.1.29
+
+* Mon Jul  2 2018 Pavel Zhukov <pzhukov@redhat.com> - 3:2.1.21-11
+- Resolves: #1596460 - Add fix for CVE-2018-0618
+
+* Thu Apr 26 2018 Pavel Zhukov <pzhukov@redhat.com> - 3:2.1.21-10
+- Replace __python with __python2 for stream-2.1
+
+* Wed Apr 25 2018 Pavel Zhukov <pzhukov@redhat.com> - 3:2.1.21-8
+- Specify python2 for shebang
+
+* Wed Mar  7 2018 Pavel Zhukov <pzhukov@redhat.com> - 3:2.1.21-6
+- Resolves: 1545975  - Fix XSS in webui. Use proper patch
+
+* Wed Feb 21 2018 Pavel Zhukov <landgraf@fedoproject.org> - 3:2.1.21-5
+- Fix XSS in webui (#1545975)
+
+* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 3:2.1.21-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
+* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 3:2.1.21-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 3:2.1.21-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Wed Mar 02 2016 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.21-1
+- update to new upstream version 2.1.21 (#1304360)
+
+* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 3:2.1.20-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Fri Jul 24 2015 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.20-3
+- move tmpfiles.d configuration to /usr/lib and fix its permissions (#1183579)
+
+* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3:2.1.20-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
+* Wed Apr 01 2015 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.20-1
+- update to new upstream versino 2.1.20 (#1207900)
+
+* Mon Mar 02 2015 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.19-1
+- update to new upstream version 2.1.19 (#1187894)
+
+* Tue Feb 17 2015 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.18.1-4
+- require python-dns
+
+* Sun Aug 17 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3:2.1.18.1-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
+
+* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3:2.1.18.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Mon May 12 2014 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.18.1-1
+- update to new upstream version 2.1.18-1 (#1089971)
+
+* Thu Jan 02 2014 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.17-3
+- fix #1043677 - fix setgid for /usr/lib/mailman/mail/mailman
+
+* Wed Dec 18 2013 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.17-2
+- fix #1043677 - fix setgid for cgi binaries
+
+* Tue Dec 03 2013 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.17-1
+- update to new upstream version 2.1.17 (#1034083)
+- remove patches patching unused init script
+
+* Fri Oct 18 2013 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.16-1
+- update to new upstream version 2.1.16 (#984536)
+
+* Wed Jul 31 2013 Ville Skyttä <ville.skytta@iki.fi> - 3:2.1.15-15
+- Install docs to %%{_pkgdocdir} where available.
+
+* Tue Jul 23 2013 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.15-14
+- build with full relro support
+
+* Thu Apr 04 2013 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.15-13
+- move mailman-update-cfg to /usr/lib/mailman/bin
+
+* Tue Apr 02 2013 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.15-12
+- fix #947191 - change contentdir to /usr/share/httpd
+
+* Thu Mar 14 2013 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.15-11
+- do not use py_byte_compile, remove python3-devel dependency
+
+* Thu Mar 14 2013 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.15-10
+- fix #921421 - fix /var/spool/mailman/ permissions
+- fix #921423 - move mm_cfg.py to /etc/mailman
+- move templates from /usr/lib/mailman to /etc/mailman
+
+* Thu Feb 14 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3:2.1.15-9
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
+
+* Tue Jan 22 2013 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.15-8
+- fix #838580 - check if directories are 0755, there is no need to need
+  02775 on all Mailman directories
+
+* Thu Dec 06 2012 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.15-7
+- remove fuzz=3 and rebase patches
+
+* Wed Nov 21 2012 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.15-6
+- clean up spec file
+
+* Wed Oct 24 2012 Václav Pavlín <vpavlin@redhat.com> - 3:2.1.15-5
+- Scriptlets replaced with new systemd macros (#850198)
+
+* Tue Aug 21 2012 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.15-4
+- fix ownership of unowned directories
+
+* Thu Aug 16 2012 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.15-3
+- Python executables does not need setgid
+
+* Thu Jul 19 2012 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.15-2
+- do not set setgid bit on directories where it is not needed
+
+* Mon Jun 18 2012 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.15-1
+- fix #822096 - update to version 2.1.15
+- fixed httpd config file to work with httpd-2.4
+
+* Wed Jan 11 2012 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.14-13
+- fix #751581 - changed systemd service file to create error log with proper
+  permissions, changed logrotate conf to swifth to proper username/group
+
+* Wed Jan 11 2012 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.14-12
+- fix #773188 - fix typo in reset_pw.py causing it to not work
+
+* Thu Dec 15 2011 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.14-11
+- fix #754898 - decode subjects
+
+* Wed Oct 12 2011 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.14-10
+- fix #745411 - remove Indexes from httpd config
+
+* Wed Jul 13 2011 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.14-9
+- fix #719371 - added native systemd unit file
+
+* Wed May 18 2011 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.14-8
+- fix #701539 - fixed permissions of all directories in mailman dir
+
+* Mon May 09 2011 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.14-7
+- fix #701539 - fixed cgi-bin permissions
+
+* Tue Apr 05 2011 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.14-6
+- fix #688435 - set proper permissions for private archive
+- fix badly rebased LC_CTYPE patch which caused newlist to fail with traceback
+
+* Wed Feb 23 2011 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.14-5
+- fix #679644 - fixed CVE-2011-0707: three XSS flaws due improper
+  escaping of the full name of the member
+
+* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3:2.1.14-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
+* Mon Dec 06 2010 Jan Kaluza <jkaluza@redhat.com> - 3:2.1.14-3
+- fix #656619 - use tmpfiles.d to create directories in /var/run and /var/lock
+
+* Wed Sep 29 2010 jkeating - 3:2.1.14-2
+- Rebuilt for gcc bug 634757
+
+* Tue Sep 21 2010 Jan Kaluza <jkaluza@redhat.com> 3:2.1.14-1
+- fix #632542 - updated to new upstream version
+
+* Wed Sep 15 2010 Jan Kaluza <jkaluza@redhat.com> 3:2.1.13-6
+- fix #631881 - CVE-2010-3089: Multiple security flaws leading
+  to cross-site scripting (XSS) attacks
+
+* Wed Aug 11 2010 David Malcolm <dmalcolm@redhat.com> - 3:2.1.13-5
+- recompiling .py files against Python 2.7 (rhbz#623334)
+
+* Tue Jul 13 2010 Jan Kaluza <jkaluza@redhat.com> 3:2.1.13-4
+- #459530 - fix permissions of archives/private directory
+
+* Tue May 25 2010 Daniel Novotny <dnovotny@redhat.com> 3:2.1.13-3
+- #595715 - Fix instances of #!/usr/bin/env python in mailman
+
+* Tue Apr 20 2010 Daniel Novotny <dnovotny@redhat.com> 3:2.1.13-2
+- fix #583966 - mailman-update-cfg script should use %%{mmdir}, not %%{_libdir}
+
+* Thu Mar 25 2010 Daniel Novotny <dnovotny@redhat.com> 3:2.1.13-1
+- update to 2.1.13, de-fuzz patches
+
+* Wed Jan 13 2010 Daniel Novotny <dnovotny@redhat.com> 3:2.1.12-14
+- revert _libdir change, because it disturbs scripts invocation 
+  (see #226117 discussion)
+
+* Tue Dec 22 2009 Daniel Novotny <dnovotny@redhat.com> 3:2.1.12-13
+- the service is now not on by default (change for merge review, #226117)
+
+* Wed Oct 14 2009 Daniel Novotny <dnovotny@redhat.com> 3:2.1.12-12
+- fix the last patch (bz#528492), no space between "coding" and ":"
+
+* Tue Oct 13 2009 Daniel Novotny <dnovotny@redhat.com> 3:2.1.12-11
+- fix French translation, "coding" keyword must be untranslated (bz#528492)
+
+* Wed Oct 07 2009 Daniel Novotny <dnovotny@redhat.com> 3:2.1.12-10
+- init script cleanup and fixes for LSB compliance (bz#524016)
+
+* Tue Jul 28 2009 Daniel Novotny <dnovotny@redhat.com> 3:2.1.12-9
+- regenerated patches so patch fuzz 3 is not needed (bz#513207)
+- mm_cfg.pyc and .pyo are now %%verify(not md5 size mtime) (bz#512794)
+
+* Sat Jul 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3:2.1.12-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
+
+* Wed Jul 22 2009 Daniel Novotny <dnovotny@redhat.com> 3:2.1.12-7
+- fix bz#512798 -  Mailman path in /usr/bin/mailman-update-cfg 
+  is incorrect on x86_64.
+- added explanation comment in mailman-update-cfg, to justify
+  why this script is needed
+
+* Wed Jul 08 2009 Daniel Novotny <dnovotny@redhat.com> 3:2.1.12-6
+- fix bz#509689 -  please remove execute perms
+
+* Tue Jul 07 2009 Daniel Novotny <dnovotny@redhat.com> 3:2.1.12-5
+- hardcoded library path removed
+- mixed use of spaces and tabs fixed
+- added --libdir to configure
+- fixed URL to tarball
+- permissions of source files changed to 0644
+- got rid of "file listed twice" warnings: listing the files explicitly
+- all this were cleanups for merge review (#226117)  
+
+* Thu Apr 02 2009 Daniel Novotny <dnovotny@redhat.com> 3:2.1.12-4
+- fix bz#481446 (Recompile of mailman's config causes SElinux denials)
+
+* Tue Mar 31 2009 Daniel Novotny <dnovotny@redhat.com> 3:2.1.12-3
+- fix bz#447784 (List-Archive URL for private archives broken)
+
+* Mon Mar 30 2009 Daniel Novotny <dnovotny@redhat.com> 3:2.1.12-2
+- "AddDefaultCharset Off" in httpd configuration (#463115)
+
+* Wed Mar 11 2009 Daniel Novotny <dnovotny@redhat.com> 3:2.1.12-1
+- upgrade to 2.1.12, drop upstreamed patches, rebase other patches
+
+* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3:2.1.11-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
+
+* Thu Feb 12 2009 Daniel Novotny <dnovotny@redhat.com> 3:2.1.11-6
+- added a script to recompile the config file b/c of selinux policy
+  (bz#484328)
+
+* Sun Nov 30 2008 Ignacio Vazquez-Abrams <ivazqueznet+rpm@gmail.com> - 3:2.1.11-5
+- Rebuild for Python 2.6
+
+* Wed Oct 29 2008 Daniel Novotny <dnovotny@redhat.com> 3:2.1.11-4
+  fix #460820 - msg_footer gets its trailing spaces trimmed
+
+* Thu Jul 31 2008 Tomas Smetana <tsmetana@redhat.com> - 3:2.1.11-3
+- fix #457388 - don't call "/usr/bin/python" from /etc/cron.d/mailman
+- fix #457389 - cron complains about bad username
+
+* Wed Jul 23 2008 Tomas Smetana <tsmetana@redhat.com> - 3:2.1.11-2
+- temporary fix for --fuzz=0
+
+* Tue Jul 22 2008 Tomas Smetana <tsmetana@redhat.com> - 3:2.1.11-1
+- new upstream version
+- fix #246978 - FHS compliant initscript
+
+* Mon May 12 2008 Tomas Smetana <tsmetana@redhat.com> - 3:2.1.10-1
+- new upstream version
+
+* Tue Feb 05 2008 Tomas Smetana <tsmetana@redhat.com> - 3:2.1.9-10
+- patch for CVE-2008-0564; XSS triggerable by list administrator
+
+* Thu Jan 10 2008 Tomas Smetana <tsmetana@redhat.com> - 3:2.1.9-9
+- fix #393911 - mail is not added to the archive
+
+* Tue Oct 16 2007 Tomas Smetana <tsmetana@redhat.com> - 3:2.1.9-8
+- fix #333011 - withlist crashes with NameError
+- fix #350461 - init script prevents proper SELinux domain transitions
+- fix #303061 - broken multipart mail headers
+
+* Wed Aug 22 2007 Tomas Smetana <tsmetana@redhat.com> - 3:2.1.9-7
+- fix #242678 wrong init script
+- fix #247160 INSTALL.REDHAT references non-existent README.POSTFIX file,
+  patch by Todd Zullinger
+- fix #132495 jp character encoding is not UTF8, patch by Todd Zullinger
+- update license, add dist to release
+
+* Thu May 24 2007 Tomas Smetana <tsmetana@redhat.com> - 3:2.1.9-6
+- fix #237315 - permissions for .so files
+- fix forgotten '_(' in check_perms
+- cleanup spec file
+
+* Mon Jan 29 2007 Harald Hoyer <harald@redhat.com> - 3:2.1.9-5
+- mailman-2.1.9-LC_CTYPE.patch added (bug #132495)
+- Resolves: rhbz#132495
+
+* Tue Jan 23 2007 Florian La Roche <laroche@redhat.com>
+- add fix from rhbz#219054: usage output mentions "status" option
+
+* Thu Oct 05 2006 David Woodhouse <dwmw2@redhat.com> - 3:2.1.9-3
+- fix broken In-Reply-To: header in mailto: URL in archives (#123768)
+
+* Sun Oct 01 2006 Jesse Keating <jkeating@redhat.com> - 3:2.1.9-2
+- rebuilt for unwind info generation, broken in gcc-4.1.1-21
+
+* Mon Sep 25 2006 Harald Hoyer <harald@redhat.com> - 3:2.1.9-1
+- updated to mailman-2.1.9 which fixes bug #206607
+
+* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 3:2.1.8-3.1
+- rebuild
+
+* Tue Jun 27 2006 Florian La Roche <laroche@redhat.com> - 3:2.1.8-3
+- quieten postun of crontab removal
+
+* Mon Jun 12 2006 Harald Hoyer <harald@redhat.com> - 3:2.1.8-2
+- more build requirements
+
+* Mon May 08 2006 Harald Hoyer <harald@redhat.com> - 3:2.1.8-1
+- version 2.1.8
+
+* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - 3:2.1.7-1.2
+- bump again for double-long bug on ppc(64)
+
+* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 3:2.1.7-1.1
+- rebuilt for new gcc4.1 snapshot and glibc changes
+
+* Tue Jan 10 2006 Harald Hoyer <harald@redhat.com> - 3:2.1.7-1
+- version 2.1.7
+
+* Fri Dec 16 2005 Jesse Keating <jkeating@redhat.com>
+- rebuilt for new gcj
+
+* Wed Dec 14 2005 Harald Hoyer <harald@redhat.com> - 3:2.1.5-36.fc4.1
+- fix for bug #173139 (CVE-2005-3573 Mailman Denial of Service)
+
+* Fri Dec 09 2005 Jesse Keating <jkeating@redhat.com>
+- rebuilt
+
+* Thu Nov 10 2005 Harald Hoyer <harald@redhat.com> - 3:2.1.6-2
+- added help to the initscript (bug #162724)
+
+* Wed Jun  8 2005 John Dennis <jdennis@redhat.com> - 3:2.1.6-1.fc4
+- initial port of 2.1.6
+  remove mailman-2.1.5-moderator-request.patch, present in new release
+  remove mailman-2.1-CAN-2005-0202.patch,       present in new release
+  remove mailman-2.1-CAN-2004-1177.patch,       present in new release
+
+* Thu Apr 28 2005 John Dennis <jdennis@redhat.com> - 3:2.1.5-36.fc4
+- fix bug #156159 insecure location of restart flag file
+
+* Mon Mar  7 2005 John Dennis <jdennis@redhat.com> 3:2.1.5-35.fc4
+- bump rev for gcc4 build
+
+* Wed Mar  2 2005 John Dennis <jdennis@redhat.com> - 3:2.1.5-34.fc4
+- fix bug #150065, provide migration script for new FHS installation
+
+* Fri Feb 25 2005 John Dennis <jdennis@redhat.com> - 3:2.1.5-33.fc4
+- fix bug #147833, CAN-2004-1177
+
+* Mon Feb 14 2005 John Dennis <jdennis@redhat.com> - 3:2.1.5-31.fc4
+- fix bug #132750, add daemon to mail-gid so courier mail server will work.
+- fix bug #143008, wrong location of mailmanctl in logrotate
+- fix bug #142605, init script doesn't use /var/lock/subsys
+
+* Tue Feb  8 2005 John Dennis <jdennis@redhat.com> - 3:2.1.5-30.fc4
+- fix release tag
+
+* Tue Feb  8 2005 John Dennis <jdennis@redhat.com> - 3:2.1.5-29
+- fix security vulnerability CAN-2005-0202, errata RHSA-2005:137, bug #147344
+
+* Tue Nov  9 2004 John Dennis <jdennis@redhat.com> 3:2.1.5-28
+- fix bug #137863, buildroot path in .pyc files
+
+* Sat Oct 16 2004 John Dennis <jdennis@redhat.com> 3:2.1.5-26
+- fix typo in install documentation
+- fix error in templates/Makefile.in, bad install args, fixes bug #136001,
+  thank you to Kaj J. Niemi for spotting this.
+
+* Thu Oct 14 2004 John Dennis <jdennis@redhat.com> 3:2.1.5-24
+- more FHS changes, matches with new SELinux security policy
+
+* Wed Sep 29 2004 John Dennis <jdennis@redhat.com> 3:2.1.5-21
+- move list data dir to /var/lib/mailman to conform to FHS
+  move lock dir to /var/lock/mailman to conform to FHS
+  move config dir (VAR_PREFIX/data) to /etc/mailman to conform to FHS
+  Thanks to Matt Domsch for pointing this out.
+
+* Tue Sep 28 2004 John Dennis <jdennis@redhat.com> 3:2.1.5-20
+- fix bug #132732, security policy violations,
+- bump release verison
+  move non-data installation files from /var/mailman to /usr/lib/mailman,
+  update documentation
+
+* Fri Sep 10 2004 John Dennis <jdennis@redhat.com> 3:2.1.5-19
+- add il18n start/stop strings to init.d script
+
+* Fri Sep 10 2004 John Dennis <jdennis@redhat.com> 3:2.1.5-18
+- fix bug #89250, add condrestart
+  also fix status return values in mailmanctl and init.d script
+
+* Tue Sep  7 2004 John Dennis <jdennis@redhat.com> 3:2.1.5-17
+- fix bug #120930, add contents of contrib to doc area
+
+* Tue Sep  7 2004 John Dennis <jdennis@redhat.com> 3:2.1.5-16
+- fix bug #121220, httpd config file tweaks
+  add doc to INSTALL.REDHAT for selecting MTA
+
+* Fri Sep  3 2004 John Dennis <jdennis@redhat.com> 3:2.1.5-15
+- fix bug #117615, don't overwrite user modified templates on install
+  made template directory "config noreplace"
+
+* Thu Sep  2 2004 John Dennis <jdennis@redhat.com> 3:2.1.5-14
+- add comments into the crontab files so users know the /etc/cron.d
+  file is volitile and will edit the right file.
+  Also make the master crontab file "config noreplace" so edits are preserved.
+
+* Wed Sep  1 2004 John Dennis <jdennis@redhat.com> 3:2.1.5-13
+- fix bug #124208, enable mailman cron jobs from init.d rather than during installation
+
+* Tue Aug 31 2004 John Dennis <jdennis@redhat.com> 3:2.1.5-12
+- fix bug #129920, cron jobs execute under wrong SELinux policy
+
+* Mon Aug 30 2004 John Dennis <jdennis@redhat.com> 3:2.1.5-11
+- remove all editing of aliases file in %%pre and %%post, fixes #bug 125651
+
+* Mon Aug  9 2004 John Dennis <jdennis@redhat.com> 3:2.1.5-10
+- fix bug #129492 and bug #120912
+  stop using crontab to setup mailman's cron jobs,
+  instead install cron script in /etc/cron.d
+
+* Mon Aug  9 2004 John Dennis <jdennis@redhat.com> 3:2.1.5-9
+- apply patch to elminate "-1 LISTNAME moderator request(s) waiting" messages
+  problem desciption here:
+  http://www.python.org/cgi-bin/faqw-mm.py?req=show&file=faq03.038.htp
+
+* Tue Jun 15 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Wed Jun  9 2004 John Dennis <jdennis@redhat.com> - 3:2.1.5-7
+- bump rev for rebuild
+
+* Wed Jun  9 2004 John Dennis <jdennis@redhat.com> - 3:2.1.5-6
+- fix bug in pre scriplet, last command had been "service mailman stop"
+  which should have been harmless if mailman was not installed except
+  that it left the exit status from the script as non-zero and rpm
+  aborted the install.
+
+* Wed Jun  9 2004 John Dennis <jdennis@redhat.com> - 3:2.1.5-5
+- add status reporting to init.d control script
+  stop mailman during an installation
+  restart mailman if it had been running prior to installation
+
+* Mon Jun  7 2004 John Dennis <jdennis@redhat.com> - 3:2.1.5-4
+- back python prereq down to 2.2, should be sufficient
+
+* Thu May 20 2004 John Dennis <jdennis@redhat.com> 3:2.1.5-3
+- make python prereq be at least 2.3
+
+* Tue May 18 2004 Jeremy Katz <katzj@redhat.com> 3:2.1.5-2
+- rebuild 
+
+* Mon May 17 2004 John Dennis <jdennis@redhat.com> 3:2.1.5-1
+- bring up to latest 2.1.5 upstream release
+  From Barry Warsaw: Mailman 2.1.5, a bug fix release that also
+  contains new support for the Turkish language, and a few minor new
+  features. Mailman 2.1.5 is a significant upgrade which should
+  improve disk i/o performance, administrative overhead for discarding
+  held spams, and the behavior of bouncing member disables.  This
+  version also contains a fix for an exploit that could allow 3rd
+  parties to retrieve member passwords.  It is thus highly recommended
+  that all existing sitesupgrade to the latest version
+
+* Tue May 04 2004 Warren Togami <wtogami@redhat.com> 3:2.1.4-4
+- #105638 fix bytecompile and rpm -V
+- postun /etc/postfix/aliases fix
+- clean uninstall (no more empty dirs)
+- #115378 RedirectMatch syntax fix
+
+* Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Fri Jan  9 2004 John Dennis <jdennis@finch.boston.redhat.com> 3:2.1.4-1
+- upgrade to new upstream release 2.1.4
+- fixes bugs 106349,112851,105367,91463
+
+* Wed Jun 04 2003 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Wed May  7 2003 John Dennis <jdennis@finch.boston.redhat.com>
+- bring up to next upstream release 2.1.2
+
+* Sun May 04 2003 Florian La Roche <Florian.LaRoche@redhat.de>
+- fix typo in post script: mmusr -> mmuser
+
+* Thu Apr 24 2003 John Dennis <jdennis@finch.boston.redhat.com>
+- fix bug 72004, 74483, 74484, 87856 - improper log rotation
+- fix bug 88083 - mailman user/group needed to exist during build
+- fix bug 88144 - wrong %%file attributes on mm_cfg.py
+- fix bug 89221 - mailman user not created on install
+- fix bug 89250 - wrong pid file name in initscript
+
+* Wed Mar 05 2003 Florian La Roche <Florian.LaRoche@redhat.de>
+- change to /etc/rc.d/init.d as in all other rpms
+
+* Thu Feb 20 2003 John Dennis <jdennis@finch.boston.redhat.com>
+- change mailman login shell from /bin/false to /sbin/nologin
+
+* Fri Feb 14 2003 John Dennis <jdennis@finch.boston.redhat.com>
+- bring package up to 2.1.1 release, add /usr/share/doc files
+
+* Sat Feb 01 2003 Florian La Roche <Florian.LaRoche@redhat.de>
+- make the icon dir owned by root:root as in other rpms
+
+* Fri Jan 31 2003 John Dennis <jdennis@finch.boston.redhat.com>
+- various small tweaks to the spec file to make installation cleaner
+- use %%{__python} when compiling, redirect compile output to /dev/null,
+- don't run update in %%post, let the user do it, remove the .pyc files in %%postun,
+- add setting of MAILHOST and URLHOST to localhost.localdomain, don't let
+- configure set them to the build machine.
+
+* Mon Jan 27 2003 John Dennis <jdennis@finch.boston.redhat.com>
+- add the cross site scripting (xss) security patch to version 2.1
+
+* Fri Jan 24 2003 John Dennis <jdennis@finch.boston.redhat.com>
+- do not start mailman service in %%post
+
+* Wed Jan 22 2003 Tim Powers <timp@redhat.com>
+- rebuilt
+
+* Mon Jan 20 2003 John Dennis <jdennis@finch.boston.redhat.com>
+- 1) remove config patch, mailmanctl was not the right file to install in init.d,
+- it needed to be scripts/mailman
+- 2) rename httpd-mailman.conf to mailman.conf, since the file now lives
+- in httpd/conf.d directory the http prefix is redundant and inconsistent
+- with the other file names in that directory.
+
+* Tue Jan  7 2003 John Dennis <jdennis@finch.boston.redhat.com>
+- Bring package up to date with current upstream source, 2.1
+- Fix several install/packaging problems that were in upstream source
+- Add multiple mail group functionality
+- Fix syntax error in fblast.py
+- Remove the forced setting of mail host and url host in mm_cfg.py
+
+* Tue Nov 12 2002 Tim Powers <timp@redhat.com> 2.0.13-4
+- remove files from $$RPM_BUILD_ROOT that we don't intent to ship
+
+* Thu Aug 14 2002 Nalin Dahyabhai <nalin@redhat.com> 2.0.13-3
+- set MAILHOST and WWWHOST in case the configure script can't figure out the
+  local host name
+
+* Fri Aug  2 2002 Nalin Dahyabhai <nalin@redhat.com> 2.0.13-2
+- rebuild
+
+* Fri Aug  2 2002 Nalin Dahyabhai <nalin@redhat.com> 2.0.13-1
+- specify log files individually, per faq wizard
+- update to 2.0.13
+
+* Wed May 22 2002 Nalin Dahyabhai <nalin@redhat.com> 2.0.11-1
+- update to 2.0.11
+
+* Fri Apr  5 2002 Nalin Dahyabhai <nalin@redhat.com> 2.0.9-1
+- include README.QMAIL in with the docs (#58887)
+- include README.SENDMAIL and README.EXIM in with the docs
+- use an included httpd.conf file instead of listing the configuration
+  directives in the %%description, which due to specspo magic might look
+  wrong sometimes (part of #51324)
+- interpolate the DEFAULT_HOST_NAME value in mm.cfg into both the DEFAULT_URL
+  and MAILMAN_OWNER (#57987)
+- move logs to /var/log/mailman, qfiles to /var/spool/mailman, rotate
+  logs in the log directory (#48724)
+- raise exceptions when someone tries to set the admin address for a list
+  to that of the admin alias (#61468)
+
+* Thu Apr  4 2002 Nalin Dahyabhai <nalin@redhat.com>
+- fix a default permissions problem in %%{_var}/mailman/archives/private,
+  reported by Johannes Erdfelt
+- update to 2.0.9
+
+* Tue Apr  2 2002 Nalin Dahyabhai <nalin@redhat.com>
+- make the symlink in /etc/smrsh relative
+
+* Tue Dec 11 2001 Nalin Dahyabhai <nalin@redhat.com> 2.0.8-1
+- set FQDN and URL at build-time so that they won't be set to the host the
+  RPM package is built on (#59177)
+
+* Wed Nov 28 2001 Nalin Dahyabhai <nalin@redhat.com>
+- update to 2.0.8
+
+* Sat Nov 17 2001 Florian La Roche <Florian.LaRoche@redhat.de> 2.0.7-1
+- update to 2.0.7
+
+* Wed Jul 25 2001 Nalin Dahyabhai <nalin@redhat.com> 2.0.6-1
+- update to 2.0.6
+
+* Mon Jun 25 2001 Nalin Dahyabhai <nalin@redhat.com>
+- code in default user/group names/IDs
+
+* Wed May 30 2001 Nalin Dahyabhai <nalin@redhat.com>
+- update to 2.0.5
+- change the default hostname from localhost to localhost.localdomain in the
+  default configuration
+- chuck configuration file settings other than those dependent on the host name
+  (the build system's host name is not a good default)  (#32337)
+
+* Tue Mar 13 2001 Nalin Dahyabhai <nalin@redhat.com>
+- update to 2.0.3
+
+* Tue Mar  6 2001 Nalin Dahyabhai <nalin@redhat.com>
+- update to 2.0.2
+
+* Wed Feb 21 2001 Nalin Dahyabhai <nalin@redhat.com>
+- patch from Barry Warsaw (via mailman-developers) to not die on
+  broken Content-Type: headers
+
+* Tue Jan  9 2001 Nalin Dahyabhai <nalin@redhat.com>
+- update to 2.0.1
+
+* Wed Dec  6 2000 Nalin Dahyabhai <nalin@redhat.com>
+- update to 2.0 final release
+- move the data to %%{_var}
+
+* Fri Oct 20 2000 Nalin Dahyabhai <nalin@redhat.com>
+- update to beta 6
+
+* Thu Aug  3 2000 Nalin Dahyabhai <nalin@redhat.com>
+- add note about adding FollowSymlinks so that archives work
+
+* Wed Aug  2 2000 Nalin Dahyabhai <nalin@redhat.com>
+- make the default owner root again so that root owns the docs
+- update to 2.0beta5, which fixes a possible security vulnerability
+- add smrsh symlink
+
+* Mon Jul 24 2000 Prospector <prospector@redhat.com>
+- rebuilt
+
+* Wed Jul 19 2000 Nalin Dahyabhai <nalin@redhat.com>
+- update to beta4
+- change uid/gid to apache.apache to match apache (#13593)
+- properly recompile byte-compiled versions of the scripts (#13619)
+- change mailman alias from root to postmaster
+
+* Sat Jul  1 2000 Nalin Dahyabhai <nalin@redhat.com>
+- update to beta3
+- drop bugs and arch patches (integrated into beta3)
+
+* Tue Jun 27 2000 Nalin Dahyabhai <nalin@redhat.com>
+- move web files to reside under %%{contentdir}
+- move files from /usr/share to %%{_datadir}
+- integrate spot-fixes from mailman lists via gnome.org
+
+* Mon Jun 19 2000 Nalin Dahyabhai <nalin@redhat.com>
+- rebuild for Power Tools
+
+* Wed May 23 2000 Nalin Dahyabhai <nalin@redhat.com>
+- Update to 2.0beta2 to pick up security fixes.
+- Change equires python to list >= 1.5.2
+
+* Mon Nov  8 1999 Bernhard Rosenkränzer <bero@redhat.com>
+- 1.1
+
+* Tue Sep 14 1999 Preston Brown <pbrown@redhat.com>
+- 1.0 final.
+
+* Tue Jun 15 1999 Preston Brown <pbrown@redhat.com>
+- security fix for cookies
+- moved to /usr/share/mailman
+
+* Fri May 28 1999 Preston Brown <pbrown@redhat.com>
+- fix up default values.
+
+* Fri May 07 1999 Preston Brown <pbrown@redhat.com>
+- modifications to install scripts
+
+* Thu May 06 1999 Preston Brown <pbrown@redhat.com>
+- initial RPM for SWS 3.0