rpms/openswan/devel openswan-nm-and-584224.patch, NONE, 1.1 ipsec.conf, 1.5, 1.6 openswan.spec, 1.89, 1.90
avesh agarwal
avesh at fedoraproject.org
Wed May 26 20:36:19 UTC 2010
Author: avesh
Update of /cvs/pkgs/rpms/openswan/devel
In directory cvs01.phx2.fedoraproject.org:/tmp/cvs-serv23187
Modified Files:
ipsec.conf openswan.spec
Added Files:
openswan-nm-and-584224.patch
Log Message:
* Wed May 29 2010 Avesh Agarwal <avagarwa at redhat.com> - 2.6.25-2
- NetworkManager-openswan plugin related changes
- Fixes for bz 584224
openswan-nm-and-584224.patch:
Makefile.inc | 5 ++-
Makefile.top | 2 -
include/ipsecconf/keywords.h | 3 ++
include/pluto_constants.h | 8 +++++
include/whack.h | 5 +++
lib/libipsecconf/Makefile | 4 ++
lib/libipsecconf/confread.c | 5 +++
lib/libipsecconf/keywords.c | 17 ++++++++++++
lib/libipsecconf/starterwhack.c | 7 +++++
programs/_updown.netkey/_updown.netkey.in | 42 +++++++++++++++++++++++++++---
programs/pluto/Makefile.options | 5 +++
programs/pluto/connections.c | 5 +++
programs/pluto/connections.h | 9 +++++-
programs/pluto/initiate.c | 3 ++
programs/pluto/kernel.c | 10 ++++++-
programs/pluto/whack.c | 25 +++++++++++++++++
programs/pluto/xauth.c | 8 ++---
17 files changed, 149 insertions(+), 14 deletions(-)
--- NEW FILE openswan-nm-and-584224.patch ---
diff -urNp openswan-2.6.25-cvs-patched/include/ipsecconf/keywords.h openswan-2.6.25/include/ipsecconf/keywords.h
--- openswan-2.6.25-cvs-patched/include/ipsecconf/keywords.h 2010-03-29 14:16:02.000000000 -0400
+++ openswan-2.6.25/include/ipsecconf/keywords.h 2010-05-26 15:52:43.000000000 -0400
@@ -102,6 +102,9 @@ enum keyword_numeric_config_field {
KBF_FORCEBUSY, /* 40 */
KBF_OVERLAPIP,
KBF_REMOTEPEERTYPE, /*Cisco interop: remote peer type*/
+//#ifdef HAVE_NM
+ KBF_NMCONFIGURED, /*Network Manager support*/
+//#endif
KBF_WARNIGNORE, /* to ignore obsoleted keywords */
KBF_MAX
};
diff -urNp openswan-2.6.25-cvs-patched/include/pluto_constants.h openswan-2.6.25/include/pluto_constants.h
--- openswan-2.6.25-cvs-patched/include/pluto_constants.h 2010-03-29 14:16:02.000000000 -0400
+++ openswan-2.6.25/include/pluto_constants.h 2010-05-26 15:51:08.000000000 -0400
@@ -50,6 +50,14 @@ enum keyword_remotepeertype {
CISCO = 1,
};
+/* Network Manager support */
+//#ifdef HAVE_NM
+enum keyword_nmconfigured {
+ NO_NM = 0,
+ YES_NM = 1,
+};
+//#endif
+
/* Timer events */
enum event_type {
diff -urNp openswan-2.6.25-cvs-patched/include/whack.h openswan-2.6.25/include/whack.h
--- openswan-2.6.25-cvs-patched/include/whack.h 2010-03-29 14:16:02.000000000 -0400
+++ openswan-2.6.25/include/whack.h 2010-05-26 15:50:57.000000000 -0400
@@ -129,6 +129,11 @@ struct whack_message {
/*Cisco interop: remote peer type*/
enum keyword_remotepeertype remotepeertype;
+ /*Checking if this connection is configured by Network Manager*/
+//#ifdef HAVE_NM
+ enum keyword_nmconfigured nmconfigured;
+//#endif
+
/* Force the use of NAT-T on a connection */
bool forceencaps;
diff -urNp openswan-2.6.25-cvs-patched/lib/libipsecconf/confread.c openswan-2.6.25/lib/libipsecconf/confread.c
--- openswan-2.6.25-cvs-patched/lib/libipsecconf/confread.c 2010-03-29 14:16:01.000000000 -0400
+++ openswan-2.6.25/lib/libipsecconf/confread.c 2010-05-26 15:50:46.000000000 -0400
@@ -77,6 +77,11 @@ void ipsecconf_default_values(struct sta
/*Cisco interop: remote peer type*/
cfg->conn_default.options[KBF_REMOTEPEERTYPE] = NON_CISCO;
+ /*Network Manager support*/
+//#ifdef HAVE_NM
+ cfg->conn_default.options[KBF_NMCONFIGURED] = NO_NM;
+//#endif
+
cfg->conn_default.policy = POLICY_RSASIG|POLICY_TUNNEL|POLICY_ENCRYPT|POLICY_PFS;
cfg->conn_default.policy |= POLICY_IKEV2_ALLOW;
diff -urNp openswan-2.6.25-cvs-patched/lib/libipsecconf/keywords.c openswan-2.6.25/lib/libipsecconf/keywords.c
--- openswan-2.6.25-cvs-patched/lib/libipsecconf/keywords.c 2010-03-29 14:16:01.000000000 -0400
+++ openswan-2.6.25/lib/libipsecconf/keywords.c 2010-05-26 15:53:04.000000000 -0400
@@ -191,6 +191,18 @@ struct keyword_enum_values kw_remote_pee
/*
+ * Network Manager support
+ */
+//#ifdef HAVE_NM
+struct keyword_enum_value kw_nm_configured_list[]={
+ { "yes", YES_NM },
+};
+
+struct keyword_enum_values kw_nm_configured=
+ { kw_nm_configured_list, sizeof(kw_nm_configured_list)/sizeof(struct keyword_enum_value)};
+//#endif
+
+/*
* Values for right= and left=
*/
extern struct keyword_enum_values kw_host_list;
@@ -357,6 +369,11 @@ struct keyword_def ipsec_conf_keywords_v
/* Cisco interop: remote peer type*/
{"remote_peer_type", kv_conn|kv_auto, kt_enum, KBF_REMOTEPEERTYPE, &kw_remote_peer_type},
+ /* Network Manager support*/
+//#ifdef HAVE_NM
+ {"nm_configured", kv_conn|kv_auto, kt_enum, KBF_NMCONFIGURED, &kw_nm_configured},
+//#endif
+
#ifdef NAT_TRAVERSAL
{"forceencaps", kv_conn|kv_auto, kt_bool, KBF_FORCEENCAP, NOT_ENUM},
#endif
diff -urNp openswan-2.6.25-cvs-patched/lib/libipsecconf/Makefile openswan-2.6.25/lib/libipsecconf/Makefile
--- openswan-2.6.25-cvs-patched/lib/libipsecconf/Makefile 2010-03-29 14:16:01.000000000 -0400
+++ openswan-2.6.25/lib/libipsecconf/Makefile 2010-05-26 15:30:47.000000000 -0400
@@ -39,6 +39,10 @@ CFLAGS+=-DHAVE_LIBNSS
CFLAGS+=-I/usr/include/nspr4 -I/usr/include/nss3
endif
+ifeq ($(USE_NM),true)
+CFLAGS+=-DHAVE_NM
+endif
+
ifeq ($(USE_KLIPS),true)
SRCS+=virtif.c
endif
diff -urNp openswan-2.6.25-cvs-patched/lib/libipsecconf/starterwhack.c openswan-2.6.25/lib/libipsecconf/starterwhack.c
--- openswan-2.6.25-cvs-patched/lib/libipsecconf/starterwhack.c 2010-03-29 14:16:01.000000000 -0400
+++ openswan-2.6.25/lib/libipsecconf/starterwhack.c 2010-05-26 15:53:19.000000000 -0400
@@ -523,6 +523,13 @@ static int starter_whack_basic_add_conn(
msg.remotepeertype=conn->options[KBF_REMOTEPEERTYPE];
}
+//#ifdef HAVE_NM
+ /*Network Manager support*/
+ if(conn->options_set[KBF_NMCONFIGURED]) {
+ msg.nmconfigured=conn->options[KBF_NMCONFIGURED];
+ }
+//#endif
+
set_whack_end(cfg, "left", &msg.left, &conn->left);
set_whack_end(cfg, "right", &msg.right, &conn->right);
diff -urNp openswan-2.6.25-cvs-patched/Makefile.inc openswan-2.6.25/Makefile.inc
--- openswan-2.6.25-cvs-patched/Makefile.inc 2010-03-29 14:16:24.000000000 -0400
+++ openswan-2.6.25/Makefile.inc 2010-05-26 16:00:54.000000000 -0400
@@ -350,9 +350,12 @@ endif
# Support for LIBCAP-NG to drop unneeded capabilities for the pluto daemon
USE_LIBCAP_NG?=false
-# Support for MODP groups described in RFC 51114
+# Support for MODP groups described in RFC 5114
USE_MODP_RFC5114?=false
+#Support for Network Manager
+USE_NM?=false
+
# whether to support NAT Traversal (aka NAT-T)
USE_NAT_TRAVERSAL?=true
diff -urNp openswan-2.6.25-cvs-patched/Makefile.top openswan-2.6.25/Makefile.top
--- openswan-2.6.25-cvs-patched/Makefile.top 2010-03-29 14:16:24.000000000 -0400
+++ openswan-2.6.25/Makefile.top 2010-05-26 16:01:07.000000000 -0400
@@ -110,4 +110,4 @@ export USE_WEAKSTUFF USE_NOCRYPTO USE_EX
export USE_TAPROOM USE_OBJDIR
export HAVE_STATSD USE_DYNAMICDNS
export USE_IPSEC_CONNECTION_LIMIT IPSEC_CONNECTION_LIMIT
-export USE_LIBNSS USE_FIPSCHECK USE_MODP_RFC5114
+export USE_LIBNSS USE_FIPSCHECK USE_MODP_RFC5114 USE_NM
diff -urNp openswan-2.6.25-cvs-patched/programs/pluto/connections.c openswan-2.6.25/programs/pluto/connections.c
--- openswan-2.6.25-cvs-patched/programs/pluto/connections.c 2010-03-29 14:16:01.000000000 -0400
+++ openswan-2.6.25/programs/pluto/connections.c 2010-05-26 15:55:14.000000000 -0400
@@ -1296,6 +1296,11 @@ add_connection(const struct whack_messag
c->cisco_domain_info[0] ='\0';
}
+ /* Network Manager support */
+//#ifdef HAVE_NM
+ c->nmconfigured=wm->nmconfigured;
+// c->nmconfigured = 0;
+//#endif
c->metric = wm->metric;
c->forceencaps = wm->forceencaps;
diff -urNp openswan-2.6.25-cvs-patched/programs/pluto/connections.h openswan-2.6.25/programs/pluto/connections.h
--- openswan-2.6.25-cvs-patched/programs/pluto/connections.h 2010-03-29 14:16:01.000000000 -0400
+++ openswan-2.6.25/programs/pluto/connections.h 2010-05-26 15:55:32.000000000 -0400
@@ -204,7 +204,11 @@ struct connection {
/*Cisco interop: remote peer type*/
enum keyword_remotepeertype remotepeertype;
-
+
+ /*Network Manager support*/
+//#ifdef HAVE_NM
+ enum keyword_nmconfigured nmconfigured;
+//#endif
bool forceencaps; /* always use NAT-T encap */
char *log_file_name; /* name of log file */
@@ -259,9 +263,10 @@ struct connection {
ip_address modecfg_dns2;
ip_address modecfg_wins1;
ip_address modecfg_wins2;
+#endif
char cisco_dns_info[50];
char cisco_domain_info[50];
-#endif
+ char server_banner[500];
u_int8_t metric; /* metric for tunnel routes */
#ifdef HAVE_STATSD
u_int32_t statsval; /* track what we have told statsd */
diff -urNp openswan-2.6.25-cvs-patched/programs/pluto/initiate.c openswan-2.6.25/programs/pluto/initiate.c
--- openswan-2.6.25-cvs-patched/programs/pluto/initiate.c 2010-03-29 14:16:01.000000000 -0400
+++ openswan-2.6.25/programs/pluto/initiate.c 2010-05-26 15:56:17.000000000 -0400
@@ -86,6 +86,9 @@ orient(struct connection *c)
for (sr = &c->spd; sr; sr = sr->next)
{
+
+ if(c->remotepeertype ==CISCO && sr != &c->spd ) continue;
+
/* Note: this loop does not stop when it finds a match:
* it continues checking to catch any ambiguity.
*/
diff -urNp openswan-2.6.25-cvs-patched/programs/pluto/kernel.c openswan-2.6.25/programs/pluto/kernel.c
--- openswan-2.6.25-cvs-patched/programs/pluto/kernel.c 2010-03-29 14:16:01.000000000 -0400
+++ openswan-2.6.25/programs/pluto/kernel.c 2010-05-26 15:56:37.000000000 -0400
@@ -425,6 +425,10 @@ fmt_common_shell_out(char *buf, int blen
"%s " /* PLUTO_MY_SRCIP */
"PLUTO_CISCO_DNS_INFO='%s' "
"PLUTO_CISCO_DOMAIN_INFO='%s' "
+//#ifdef HAVE_NM
+ "PLUTO_NM_CONFIGURED='%u' "
+//#endif
+ "PLUTO_SERVERBANNER='%s' "
, c->name
, c->interface->ip_dev->id_vname
, nexthop_str
@@ -449,7 +453,11 @@ fmt_common_shell_out(char *buf, int blen
, secure_xauth_username_str
, srcip_str
, c->cisco_dns_info
- , c->cisco_domain_info);
+ , c->cisco_domain_info
+//#ifdef HAVE_NM
+ , c->nmconfigured
+//#endif
+ , c->server_banner);
/*
* works for both old and new way of snprintf() returning
* eiter -1 or the output length -- by Carsten Schlote
diff -urNp openswan-2.6.25-cvs-patched/programs/pluto/Makefile.options openswan-2.6.25/programs/pluto/Makefile.options
--- openswan-2.6.25-cvs-patched/programs/pluto/Makefile.options 2010-03-29 14:16:24.000000000 -0400
+++ openswan-2.6.25/programs/pluto/Makefile.options 2010-05-26 16:03:03.000000000 -0400
@@ -341,3 +341,8 @@ DEFINES+=-DHAVE_LIBCAP_NG
LIBSPLUTO+= -lcap-ng
endif
+
+# NetworkManager support
+ifeq ($(USE_NM),true)
+DEFINES+=-DHAVE_NM
+endif
diff -urNp openswan-2.6.25-cvs-patched/programs/pluto/whack.c openswan-2.6.25/programs/pluto/whack.c
--- openswan-2.6.25-cvs-patched/programs/pluto/whack.c 2010-03-29 14:16:01.000000000 -0400
+++ openswan-2.6.25/programs/pluto/whack.c 2010-05-26 15:59:14.000000000 -0400
@@ -121,6 +121,8 @@ help(void)
" \\\n "
" [--esp <esp-algos>]"
" \\\n "
+ " [--remote_peer_type <cisco>]"
+ " \\\n "
" [--dontrekey]"
" [--aggrmode]"
" [--forceencaps]"
@@ -485,6 +487,7 @@ enum option_enums {
CD_FORCEENCAPS,
CD_IKE,
CD_PFSGROUP,
+ CD_REMOTEPEERTYPE,
CD_ESP
# define CD_LAST CD_ESP /* last connection description */
@@ -698,6 +701,8 @@ static const struct option long_opts[] =
{ "ikealg", required_argument, NULL, CD_IKE + OO },
{ "pfsgroup", required_argument, NULL, CD_PFSGROUP + OO },
{ "esp", required_argument, NULL, CD_ESP + OO },
+ { "remote_peer_type", required_argument, NULL, CD_REMOTEPEERTYPE + OO},
+
#ifdef DEBUG
{ "debug-none", no_argument, NULL, DBGOPT_NONE + OO },
{ "debug-all]", no_argument, NULL, DBGOPT_ALL + OO },
@@ -903,6 +908,12 @@ main(int argc, char **argv)
msg.esp = NULL;
msg.ike = NULL;
msg.pfsgroup = NULL;
+ msg.remotepeertype = NON_CISCO;
+
+ /*Network Manager support*/
+//#ifdef HAVE_NM
+ msg.nmconfigured = NO_NM;
+//#endif
msg.sa_ike_life_seconds = OAKLEY_ISAKMP_SA_LIFETIME_DEFAULT;
msg.sa_ipsec_life_seconds = PLUTO_SA_LIFE_DURATION_DEFAULT;
@@ -1505,6 +1516,15 @@ main(int argc, char **argv)
msg.esp = optarg;
continue;
+ case CD_REMOTEPEERTYPE: /* --remote_peer_type <cisco> */
+ if ( strcmp(optarg, "cisco" ) == 0) {
+ msg.remotepeertype = CISCO;
+ }
+ else {
+ msg.remotepeertype = NON_CISCO;
+ }
+ continue;
+
case CD_CONNIPV4:
if (LHAS(cd_seen, CD_CONNIPV6 - CD_FIRST))
diag("--ipv4 conflicts with --ipv6");
@@ -1841,6 +1861,11 @@ main(int argc, char **argv)
msg.dpd_action = DPD_ACTION_HOLD;
}
+ if (msg.remotepeertype != CISCO && msg.remotepeertype != NON_CISCO) {
+ diag("remote_peer_type can only be \"CISCO\", now defaulting to non cisco mode");
+ msg.remotepeertype = NON_CISCO; /*NON_CISCO=0*/
+ }
+
/* pack strings for inclusion in message */
wp.msg = &msg;
diff -urNp openswan-2.6.25-cvs-patched/programs/pluto/xauth.c openswan-2.6.25/programs/pluto/xauth.c
--- openswan-2.6.25-cvs-patched/programs/pluto/xauth.c 2010-03-29 14:16:01.000000000 -0400
+++ openswan-2.6.25/programs/pluto/xauth.c 2010-05-26 16:00:35.000000000 -0400
@@ -1813,16 +1813,14 @@ modecfg_inR1(struct msg_digest *md)
case CISCO_BANNER:
{
- char test[500];
DBG_dump("Received cisco banner: ", strattr.cur, pbs_left(&strattr));
- strncpy(test,strattr.cur, pbs_left(&strattr));
- test[pbs_left(&strattr)]='\0';
- DBG_log("Cisco banner: %s", test);
+ strncpy(st->st_connection->server_banner, strattr.cur, pbs_left(&strattr));
+ st->st_connection->server_banner[pbs_left(&strattr)]='\0';
+ DBG_log("Cisco banner: %s", st->st_connection->server_banner);
resp |= LELEM(attr.isaat_af_type);
}
break;
-
case CISCO_DEF_DOMAIN:
{
char tmp[50];
diff -urNp openswan-2.6.25-cvs-patched/programs/_updown.netkey/_updown.netkey.in openswan-2.6.25/programs/_updown.netkey/_updown.netkey.in
--- openswan-2.6.25-cvs-patched/programs/_updown.netkey/_updown.netkey.in 2010-03-29 14:16:01.000000000 -0400
+++ openswan-2.6.25/programs/_updown.netkey/_updown.netkey.in 2010-05-26 15:54:42.000000000 -0400
@@ -175,18 +175,31 @@ downroute() {
}
updateresolvconf() {
+
+if [ -z "$PLUTO_NM_CONFIGURED" -o "$PLUTO_NM_CONFIGURED" = 0 ]; then
echo "updating resolvconf"
- if [ -e "$OPENSWAN_RESOLV_CONF" ]; then
- echo "Backup resolv.conf already exists, so doing nothing"
- return 1
- fi
+# if [ -e "$OPENSWAN_RESOLV_CONF" ]; then
+# echo "Backup resolv.conf already exists, so doing nothing"
+# return 1
+# fi
if [ ! -e "$ORIG_RESOLV_CONF" ]; then
echo "resolv.conf does not exist, so doing nothing"
return 1
fi
+ if [ -e "$OPENSWAN_RESOLV_CONF" ]; then
+ if grep 'Openswan' $ORIG_RESOLV_CONF > /dev/null 2>&1
+ then
+ echo "Current resolv.conf is generated by Openswan, and backup resolv.conf already exists, so doing nothing"
+ return 1
+ else
+ echo "backup resolv.conf exists, but current resolv.conf is not generated by Openswan"
+ fi
+ fi
+
+ rm -f $OPENSWAN_RESOLV_CONF
cp -- $ORIG_RESOLV_CONF $OPENSWAN_RESOLV_CONF
RESOLVE_CONF="#Generated by Openswan (IPSec)"
@@ -209,9 +222,26 @@ updateresolvconf() {
rm -f -- $ORIG_RESOLV_CONF
echo -e $RESOLVE_CONF > $ORIG_RESOLV_CONF
return $?
+
+else
+ echo "Giving control to Network Manager"
+ openswan_reason=connect
+ export openswan_reason
+ export PLUTO_CISCO_DOMAIN_INFO
+ export PLUTO_CISCO_DNS_INFO
+ export PLUTO_SERVERBANNER
+ export PLUTO_SOURCEIP
+ export PLUTO_PEER
+
+ /usr/libexec/nm-openswan-service-helper
+
+ return 0
+fi
}
restoreresolvconf() {
+
+if [ -z "$PLUTO_NM_CONFIGURED" -o "$PLUTO_NM_CONFIGURED" = 0 ]; then
echo "restoring resolvconf"
if [ ! -e "$OPENSWAN_RESOLV_CONF" ]; then
@@ -228,6 +258,10 @@ restoreresolvconf() {
rm -f -- "$OPENSWAN_RESOLV_CONF"
return 0
+else
+ echo "Controlled by Network Manager, doing nothing"
+fi
+
}
addsource() {
Index: ipsec.conf
===================================================================
RCS file: /cvs/pkgs/rpms/openswan/devel/ipsec.conf,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- ipsec.conf 13 Oct 2008 17:07:16 -0000 1.5
+++ ipsec.conf 26 May 2010 20:36:19 -0000 1.6
@@ -19,5 +19,5 @@ config setup
# Enable this if you see "failed to find any available worker"
nhelpers=0
-#You may put your configuration (.conf) file in the "/etc/ipsec.d/" and uncomment this.
-#include /etc/ipsec.d/*.conf
+#You may put your configuration (.conf) file in the "/etc/ipsec.d/"
+include /etc/ipsec.d/*.conf
Index: openswan.spec
===================================================================
RCS file: /cvs/pkgs/rpms/openswan/devel/openswan.spec,v
retrieving revision 1.89
retrieving revision 1.90
diff -u -p -r1.89 -r1.90
--- openswan.spec 29 Mar 2010 18:05:46 -0000 1.89
+++ openswan.spec 26 May 2010 20:36:19 -0000 1.90
@@ -2,6 +2,7 @@
%define USE_FIPSCHECK 1
%define USE_LIBCAP_NG 1
%define USE_MODP_RFC5114 1
+%define USE_NM 1
%define nss_version 3.12.3-2
%define fipscheck_version 1.2.0-1
@@ -9,7 +10,7 @@ Summary: IPSEC implementation with IKEv1
Name: openswan
Version: 2.6.25
-Release: 1%{?dist}
+Release: 2%{?dist}
License: GPLv2+
Url: http://www.openswan.org/
Source: openswan-%{version}.tar.gz
@@ -20,6 +21,7 @@ Patch1: openswan-2.6-relpath.patch
Patch2: openswan-2.6-selinux.patch
Patch3: openswan-ipsec-help-524146-509318.patch
Patch4: openswan-rfc5114.patch
+Patch5: openswan-nm-and-584224.patch
Group: System Environment/Daemons
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -77,6 +79,7 @@ find doc -name .gitignore -print0 | xarg
%patch2 -p1 -b .selinux
%patch3 -p1
%patch4 -p1
+%patch5 -p1
%build
@@ -101,6 +104,9 @@ find doc -name .gitignore -print0 | xarg
%if %{USE_MODP_RFC5114}
USE_MODP_RFC5114=true \
%endif
+%if %{USE_NM}
+ USE_NM=true \
+%endif
programs
FS=$(pwd)
@@ -226,6 +232,10 @@ fi
chkconfig --add ipsec || :
%changelog
+* Wed May 29 2010 Avesh Agarwal <avagarwa at redhat.com> - 2.6.25-2
+- NetworkManager-openswan plugin related changes
+- Fixes for bz 584224
+
* Mon Mar 29 2010 Avesh Agarwal <avagarwa at redhat.com> - 2.6.25-1
- New upstream release
- Updated existing patches that could not make into this release
More information about the scm-commits
mailing list