Commit 03250d79 authored by IKEDA Soji's avatar IKEDA Soji
Browse files

Merge branch 'sympa-6.2' into CanaryTek/wip-unsubscribe-cmd

parents 11803acb b17e3bb8
......@@ -6,3 +6,25 @@ about: Ask community for help
<!--- ↑↑ Provide a general summary of the issue in the Title above ↑↑ -->
Version
-------
<!-- Versions of Sympa and related software -->
Installation method
-------------------
<!-- How you installed Sympa: deb, rpm, ports, ... or source package -->
Expected behavior
-----------------
<!--- Tell us what should happen -->
Actual behavior
---------------
<!--- Tell us what happens instead of the expected behavior -->
Additional information
----------------------
<!--- You may also attach files using "selecting them" link below. -->
<!--- NOTE that you should not include sensitive information! -->
......@@ -8,7 +8,6 @@
- coverage-install
- coverage-setup
- cpanm --quiet --notest --installdeps --with-develop --with-feature=Data::Password --with-feature=ldap --with-feature=safe-unicode --with-feature=smime --with-feature=soap --with-feature=sqlite .
- cpanm --notest --quiet Unicode::CaseFold
- autoreconf -i
- ./configure
- cd src; make; cd ..
......@@ -17,12 +16,6 @@
- coverage-report
- make clean
"5.10":
<<: *job
"5.12":
<<: *job
"5.14":
<<: *job
"5.16":
<<: *job
variables:
......
......@@ -11,9 +11,6 @@ perl:
- "5.20"
- "5.18"
- "5.16"
- "5.14"
- "5.12"
- "5.10"
matrix:
include:
......@@ -29,7 +26,6 @@ before_install:
install:
- cpan-install --coverage
- cpanm --installdeps --notest --with-develop --with-feature=Data::Password --with-feature=ldap --with-feature=safe-unicode --with-feature=smime --with-feature=soap --with-feature=sqlite .
- cpanm --notest --quiet Unicode::CaseFold
before_script:
- coverage-setup
......
# Authors
The development of Sympa is a collaborative effort from the users community. However, the following institutions and persons were continuously providing a development effort.
The development of Sympa is a collaborative effort from the users community. However, the following institutions and persons have been providing a development effort.
## RENATER
## Legacy...
The [RENATER](http://www.renater.fr) team was in charge of maintaining the Sympa project, contribute to the code and merge contributions from developpers all over the world.
Serge Aumont and Christophe Wolfhugel are, along with Olivier Salaün, the original authors of Sympa. Even though they no longer work on Sympa, they are the people who made Sympa real and are still giving us precious advices about the development orientations.
Authors of Sympa from RENATER are Étienne Méléard, Olivier Salaün and David Verdin.
## RENATER and INRIA
## INRIA
The [RENATER](http://www.renater.fr) team was in charge of maintaining the Sympa project, contribute to the code and merge contributions from developers all over the world.
Authors of Sympa from RENATER are Étienne Méléard, Olivier Salaün and David Verdin.
[INRIA](http://www.inria.fr/) is the main French public organization for research in the fields of Computer sciences. INRIA contributed on a regular basis on the evolution of Sympa code.
The Sympa author from INRIA is Guillaume Rousse.
## Legacy...
## The Sympa Community
Serge Aumont and Christophe Wolfhugel are, along with Olivier Salaün, the original authors of Sympa. Even though they no longer work on Sympa, they are the people who made Sympa real and are still giving us precious advices about the development orientations.
Recently, Sympa was forked and handed to the community on GitHub to revitalize development. In 2017, the first version by [The Sympa Community](https://github.com/sympa-community) was released.
# Credits
......
......@@ -28,6 +28,7 @@ SUBDIRS = src default doc po www
check_SCRIPTS = \
t/01_Conf.t \
t/Config_XML.t \
t/DataSource_LDAP2.t \
t/DatabaseManager.t \
t/Database_LDAP.t \
t/Language.t \
......@@ -49,6 +50,7 @@ check_SCRIPTS = \
t/parse_templates.t \
t/pod-syntax.t
check_DATA = \
src/lib/Sympa/Test/MockLDAP.pm \
t/data/list_data/test/config \
t/data/sympa.conf \
t/data/sympa.sqlite \
......
This diff is collapsed.
......@@ -7,8 +7,8 @@
# Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
# 2006, 2007, 2008, 2009, 2010, 2011 Comite Reseau des Universites
# Copyright (c) 2011, 2012, 2013, 2014, 2015, 2016, 2017 GIP RENATER
# Copyright 2017, 2018, 2019 The Sympa Community. See the AUTHORS.md file at
# the top-level directory of this distribution and at
# Copyright 2017, 2018, 2019, 2020, 2021 The Sympa Community. See the
# AUTHORS.md file at the top-level directory of this distribution and at
# <https://github.com/sympa-community/sympa.git>.
#
# This program is free software; you can redistribute it and/or modify
......@@ -25,7 +25,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
AC_PREREQ(2.60)
AC_INIT(sympa, 6.2.54, sympa-developpers@listes.renater.fr)
AC_INIT(sympa, 6.2.66, sympa-developpers@listes.renater.fr)
AM_INIT_AUTOMAKE([foreign -Wall -Werror 1.9 tar-pax])
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
AM_PO_SUBDIRS
......@@ -608,6 +608,53 @@ AC_ARG_WITH(
)
AC_SUBST(POSTMAP_ARG)
AC_MSG_CHECKING([whether we install/enable setuid wrappers])
AC_ARG_ENABLE(
setuid,
AS_HELP_STRING(
[--disable-setuid],
[do not install nor enable any setuid wrappers]
), ,
[enable_setuid="yes"],
)
AC_MSG_RESULT([$enable_setuid])
AC_MSG_CHECKING([whether we install setuid wrappers for web interface])
AC_ARG_ENABLE(
setuid_fcgi,
AS_HELP_STRING(
[--disable-setuid_fcgi],
[do not install setuid wrappers for web interface]
), ,
[enable_setuid_fcgi="$enable_setuid"],
)
AC_MSG_RESULT([$enable_setuid_fcgi])
AM_CONDITIONAL(SETUID_FCGI, [test "x$enable_setuid_fcgi" = "xyes"])
AC_MSG_CHECKING([whether we install setuid wrapper for alias maintenance])
AC_ARG_ENABLE(
setuid_newaliases,
AS_HELP_STRING(
[--disable-setuid_newaliases],
[do not install setuid wrappers for web interface]
), ,
[enable_setuid_newaliases="$enable_setuid"],
)
AC_MSG_RESULT([$enable_setuid_newaliases])
AM_CONDITIONAL(SETUID_NEWALIASES, [test "x$enable_setuid_newaliases" = "xyes"])
AC_MSG_CHECKING([whether we set setuid bit of queue programs])
AC_ARG_ENABLE(
setuid_queue,
AS_HELP_STRING(
[--disable-setuid_queue],
[do not set setuid bit of queue programs]
), ,
[enable_setuid_queue="$enable_setuid"],
)
AC_MSG_RESULT([$enable_setuid_queue])
AM_CONDITIONAL(SETUID_QUEUE, [test "x$enable_setuid_queue" = "xyes"])
AC_CONFIG_FILES([
Makefile
sympa.conf
......
......@@ -3,7 +3,7 @@
# Minimum version of Perl required.
# Notation suggested on https://metacpan.org/pod/Carton#PERL-VERSIONS
requires 'perl', '5.10.1';
requires 'perl', '5.16.0';
# This module provides zip/unzip for archive and shared document download/upload
requires 'Archive::Zip', '>= 1.05';
......@@ -96,7 +96,7 @@ requires 'List::Util::XS', '>= 1.20';
requires 'Locale::Messages', '>= 1.20';
# MHonArc is used to build Sympa web archives
requires 'MHonArc::UTF8';
requires 'MHonArc::UTF8', '>= 2.6.24';
# Required to compute digest for password and emails
requires 'MIME::Base64', '>= 3.03';
......@@ -208,9 +208,11 @@ feature 'x509-auth', 'Required to extract user certificates for SSL clients and
};
feature 'smime', 'Required to sign, verify, encrypt and decrypt S/MIME messages.' => sub {
requires 'Convert::ASN1', '>= 0.14';
requires 'Crypt::SMIME', '>= 0.15';
# Required to extract user certificates for SSL clients and S/MIME messages.
requires 'Crypt::OpenSSL::X509', '>= 1.800.1';
# Note: On versions < 1.808, the value() method for extension was broken.
requires 'Crypt::OpenSSL::X509', '>= 1.808';
};
feature 'csv', 'CSV database driver, required if you include list members, owners or moderators from CSV file.' => sub {
......@@ -269,9 +271,11 @@ feature 'Net::DNS', 'This is required if you set a value for "dmarc_protection_m
};
feature 'ipv6', 'Required to support IPv6 with client features.' => sub {
requires 'Socket6', '>= 0.23';
# Note: Perl 5.14 bundles Socket 0.95 which exports AF_INET6. Earlier
# version also requires Socket6 >= 0.23.
# Note: Some distributions e.g. RHEL/CentOS 6 do not provide package for
# IO::Socket::IP. If that is the case, use IO::Socket::INET6 instead.
# IO::Socket::IP. If that is the case, use IO::Socket::INET6 instead.
# Note: Perl 5.20.0 bundles IO::Socket::IP 0.29.
requires 'IO::Socket::IP', '>= 0.21';
};
......@@ -317,4 +321,5 @@ on 'develop' => sub {
requires 'Test::PerlTidy', '== 20130104';
requires 'Perl::Tidy', '== 20180220';
requires 'Code::TidyAll';
requires 'Test::Net::LDAP', '>= 0.06';
};
......@@ -32,7 +32,7 @@ nobase_default_DATA = \
create_list.conf \
edit_list.conf \
ldap_alias_entry.tt2 \
mhonarc-ressources.tt2 \
mhonarc_rc.tt2 \
mime.types \
nrcpt_by_domain.conf \
sympa.wsdl \
......@@ -187,7 +187,7 @@ nobase_default_DATA = \
web_tt2/arcsearch.tt2 \
web_tt2/arc.tt2 \
web_tt2/aside_menu.tt2 \
web_tt2/blacklist.tt2 \
web_tt2/blocklist.tt2 \
web_tt2/button_footer.tt2 \
web_tt2/button_header.tt2 \
web_tt2/ca.tt2 \
......@@ -383,6 +383,7 @@ nobase_default_DATA = \
mail_tt2/request_auth.tt2 \
mail_tt2/report.tt2 \
mail_tt2/review.tt2 \
mail_tt2/shared_moderate.tt2 \
mail_tt2/send_auth.tt2 \
mail_tt2/sendpasswd.tt2 \
mail_tt2/sendssopasswd.tt2 \
......
......@@ -156,6 +156,8 @@ max_list_members editor hidden
message_hook owner hidden
message_hook privileged_owner read
personalization owner,privileged_owner read
default privileged_owner write
default owner write
default editor read
......
[%# certif_warning.tt2 ~%]
Subject: [%"near expiration of your certificate"|loc|qencode%]
[%|loc(expiration_date)%]Your authentication certificate will expire on %1.[%END%]
......@@ -8,6 +9,6 @@ Subject: [%"near expiration of your certificate"|loc|qencode%]
[%|loc(conf.email,domain)%]To receive them again, renew your certificate with your certification authority
and send a signed message to %1@%2
or
click: [%END%][% | mailtourl({subject => 'WHICH'}) ~%]
[% conf.email %]@[% domain %]
[%~ END %]
click: [%END%][% "${conf.email}@${domain}" | mailtourl({subject => 'WHICH'}) %]
[%# end certif_warning.tt2 ~%]
......@@ -11,7 +11,7 @@ Subject: [%"List unknown"|loc|qencode%]
Subject: [%"List unknown"|loc|qencode%]
[% ELSIF status == '5.2.3' -%]
Subject: [%"Too large message"|loc|qencode%]
[% ELSIF status == '5.3.0' -%]
[% ELSIF status == '5.2.4' || status == '5.3.0' -%]
Subject: [%"Message distribution: Internal server error"|loc|qencode%]
[% ELSIF status == '5.3.5' -%]
Subject: [%"Message distribution: User error"|loc|qencode%]
......@@ -59,12 +59,13 @@ Content-Description: Notification
Note: Because binary files have to be encoded in less-efficient ASCII format before being sent over email, the final size of an attachment is often significantly larger that the original file.[%END%]
[% ELSIF status == '5.3.0' -%]
[% IF entry == 'forward' -%]
[% ELSIF status == '5.2.4' -%]
[%|loc(list.name,function)%]Impossible to forward your message to '%1-%2' because of an internal server error.[%END%]
[% ELSE -%]
[%|loc(list.name,domain)%]For further information, please contact %1-request@%2[%END -%]
[% ELSIF status == '5.3.0' -%]
[%|loc(list.name)%]Impossible to distribute your message for list '%1' because of an internal server error.[%END%]
[% END -%]
[%|loc(list.name,domain)%]For further information, please contact %1-request@%2[%END -%]
......@@ -115,13 +116,15 @@ You are not allowed to send this message for the following reason:[%END%]
[% ELSE -%]
[%|loc%]The following address is not a known mailing list:[%END%]
[% recipient %]
[% recipient %]
[%|loc%]To find out the correct list name, ask for this server's lists directory:[%END%]
[% | mailtourl({subject => 'WHICH'}) ~%]
[% conf.email %]@[% domain %]
[%~ END %]
[% IF conf.wwsympa_url -%]
[% 'my' | url_abs %]
[%- ELSE -%]
[% "${conf.email}@${domain}" | mailtourl({subject => 'WHICH'}) %]
[%- END %]
[%|loc(conf.listmaster_email,domain)%]For further information, please contact %1@%2[%END%]
......@@ -157,3 +160,5 @@ X-Sympa-Attach: yes
[% END -%]
--[% boundary %]--
[%# end delivery_status_notification.tt2 ~%]
[%# expire_deletion.tt2 ~%]
From: [% fromlist %]
Subject: [%"Removed from %1"|loc(list.name)|qencode%]
......@@ -6,6 +7,10 @@ Subject: [%"Removed from %1"|loc(list.name)|qencode%]
because you didn't confirm your subscription.[%END%]
[%|loc%]You can subscribe again:[%END%]
[% | mailtourl({subject => "sub ${list.name}"}) ~%]
[%conf.email%]@[%domain%]
[%~ END %]
[% IF conf.wwsympa_url -%]
[% 'subscribe' | url_abs([list.name]) %]
[%- ELSE -%]
[% "${conf.email}@${domain}" | mailtourl({subject => "sub ${list.name}"}) %]
[%- END %]
[%# end expire_deletion.tt2 ~%]
......@@ -2,16 +2,20 @@
Subject: [%"resubscription to %1"|loc(list.name)|qencode%]
[%|loc(list.name,domain,user.email)%]You have been subscriber of list %1@%2 with email %3 for 1 year or more.[%END%]
[% "${conf.email}@${domain}" | mailtourl({subject => "sub ${list.name}"}) %]
[% IF conf.wwsympa_url -%]
[% 'subscribe' | url_abs([list.name]) %]
[%|loc%]Everything about this list: [%END ~%]
[% 'info' | url_abs([list.name]) %]
[%|loc%]Unsubscription:[%END%] [%""~%]
[% 'signoff' | url_abs([list.name]) %]
[% 'signoff' | url_abs([list.name],{email => user.email}) %]
[% ELSE -%]
[% "${conf.email}@${domain}" | mailtourl({subject => "sub ${list.name}"}) %]
[%|loc%]Information about this list: [%END ~%]
[% "${conf.email}@${domain}" | mailtourl({subject => "info ${list.name}"}) %]
[%|loc%]Unsubscription:[%END%] [%""~%]
[% "${conf.email}@${domain}" | mailtourl({subject => "sig ${list.name} ${user.email}"}) %]
[% END -%]
[%# end expire_warning1.tt2 ~%]
......@@ -3,16 +3,20 @@ From: [% fromlist %]
Subject: [%"resubscription to %1"|loc(list.name)|qencode%]
[%|loc(list.name,domain,user.email)%]You have been subscriber of list %1@%2 with email %3 for 1 year or more.[%END%]
[% "${conf.email}@${domain}" | mailtourl({subject => "sub ${list.name}"}) %]
[% IF conf.wwsympa_url -%]
[% 'subscribe' | url_abs([list.name]) %]
[%|loc%]Everything about this list: [%END ~%]
[% 'info' | url_abs([list.name]) %]
[%|loc%]Unsubscription:[%END%] [%""~%]
[% 'signoff' | url_abs([list.name]) %]
[% 'signoff' | url_abs([list.name],{email => user.email}) %]
[% ELSE -%]
[% "${conf.email}@${domain}" | mailtourl({subject => "sub ${list.name}"}) %]
[%|loc%]Information about this list: [%END ~%]
[% "${conf.email}@${domain}" | mailtourl({subject => "info ${list.name}"}) %]
[%|loc%]Unsubscription:[%END%] [%""~%]
[% "${conf.email}@${domain}" | mailtourl({subject => "sig ${list.name} ${user.email}"}) %]
[% END -%]
[%# end expire_warning2.tt2 ~%]
[%# global_remind.tt2 ~%]
Subject: [%"Subscription summary"|loc|qencode%]
X-Sympa-NoWrap: yes
......@@ -10,8 +11,12 @@ X-Sympa-NoWrap: yes
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[% FOREACH l = lists -%]
[% l %] [% | mailtourl({subject => "sig ${l} ${user.email}"}) ~%]
[% conf.email %]@[% domain %]
[%~ END %]
[% IF conf.wwsympa_url -%]
[% l %] [% 'signoff' | url_abs([l],{email => user.email}) %]
[%- ELSE -%]
[% l %] [% "${conf.email}@${domain}" | mailtourl({subject => "sig ${l} ${user.email}"}) %]
[%- END %]
[% END -%]
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[%# end global_remind.tt2 ~%]
......@@ -26,7 +26,7 @@ Subject: [%"User guide"|loc|qencode%]
[%|loc%]SET <list>|* NOMAIL * To suspend the message reception for <list>[%END%]
[%|loc%]SET <list>|* DIGEST * Message reception in compilation mode[%END%]
[%|loc%]SET <list|*> DIGESTPLAIN * Message reception in compilation mode, sent as a plain text email with all attachments[%END%]
[%|loc%]SET <list>|* DIGESTPLAIN * Message reception in compilation mode, sent as a plain text email with all attachments[%END%]
[%|loc%]SET <list>|* SUMMARY * Receiving the message index only[%END%]
[%|loc%]SET <list>|* NOTICE * Receiving message subject only[%END%]
[%|loc%]SET <list>|* MAIL * <list> reception in normal mode[%END%]
......
[%# list_unknown.tt2 ~%]
To: [% to %]
Subject: [%"List unknown"|loc|qencode%]
Content-Type: multipart/report; report-type=delivery-status;
......@@ -10,13 +11,15 @@ Content-Description: Notification
[%|loc%]The following address is not a known mailing list:[%END%]
[% list %]
[% list %]
[%|loc%]To find out the correct list name, ask for this server's lists directory:[%END%]
[% | mailtourl({subject => 'WHICH'}) ~%]
[% conf.email %]@[% domain %]
[%~ END %]
[% IF conf.wwsympa_url -%]
[% 'my' | url_abs %]
[%- ELSE -%]
[% "${conf.email}@${domain}" | mailtourl({subject => 'WHICH'}) %]
[%- END %]
[%|loc(conf.listmaster_email,domain)%]For further information, please contact %1@%2[%END%]
......@@ -38,3 +41,5 @@ Content-Type: text/rfc822-headers
[% header %]
--[% boundary %]--
[%# end list_unknown.tt2 ~%]
[%# listeditor_notification.tt2 ~%]
To: [% to %]
[%# As of 6.2.57b, this template will no longer be used. It is left for
compatibility. ~%]
[% IF type == 'shared_moderated' -%]
Subject: [%"Shared document to be approved for %1"|loc(list.name)|qencode%]
[% IF many_files -%]
[%|loc(list.name,filename,who)%]There are new shared documents in list %1:
%2
from %3
To moderate these documents: [%END%]
[% PROCESS shared_moderate.tt2 %]
[%- ELSE -%]
[%|loc(list.name,filename,who)%]There is a new shared document in list %1:
%2
from %3
To moderate this document: [%END%]
[%- END %]
[% 'docindex' | url_abs([list.name]) %]
[% ELSE -%]
From: [% fromlist %]
To: [%"Moderator"|loc|mailbox("${list.name}-editor@${domain}",list.name)%]
Subject: [%"Moderators List %1 / %2"|loc(list.name,type)|qencode%]
[% param0 %]
[% END %]
[%- END %]
......@@ -142,3 +142,5 @@ Subject: [%"List %1 / %2"|loc(list.name,type)|qencode%]
[% param0 %]
[% END %]
[%# end listowner_notification.tt2 ~%]
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment