import mailman-2.1.29-4.module+el8+2450+4586b8cd
commit
1b37f1b827
@ -0,0 +1 @@
|
||||
SOURCES/mailman-2.1.29.tgz
|
@ -0,0 +1 @@
|
||||
40fe97974a6f0805a01d55c6944565f238778238 SOURCES/mailman-2.1.29.tgz
|
@ -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
|
@ -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:
|
@ -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()
|
@ -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.
|
||||
#
|
@ -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
|
||||
|
@ -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>
|
@ -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.
|
@ -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)
|
@ -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
|
@ -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,
|
@ -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
|
||||