public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Conrad Kostecki" <conikost@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: net-misc/stargazer/
Date: Sun, 11 Jul 2021 21:23:19 +0000 (UTC)	[thread overview]
Message-ID: <1626038305.00eeaa6f7d079b25e6316e1c07b4772672c78569.conikost@gentoo> (raw)

commit:     00eeaa6f7d079b25e6316e1c07b4772672c78569
Author:     Conrad Kostecki <conikost <AT> gentoo <DOT> org>
AuthorDate: Sun Jul 11 21:03:48 2021 +0000
Commit:     Conrad Kostecki <conikost <AT> gentoo <DOT> org>
CommitDate: Sun Jul 11 21:18:25 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=00eeaa6f

net-misc/stargazer: migrate to GLEP 81

Bug: https://bugs.gentoo.org/781440
Package-Manager: Portage-3.0.20, Repoman-3.0.3
Signed-off-by: Conrad Kostecki <conikost <AT> gentoo.org>

 net-misc/stargazer/stargazer-2.408-r2.ebuild | 542 +++++++++++++++++++++++++++
 1 file changed, 542 insertions(+)

diff --git a/net-misc/stargazer/stargazer-2.408-r2.ebuild b/net-misc/stargazer/stargazer-2.408-r2.ebuild
new file mode 100644
index 00000000000..7f3667a702e
--- /dev/null
+++ b/net-misc/stargazer/stargazer-2.408-r2.ebuild
@@ -0,0 +1,542 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PROJECTS="sgconv rlm_stg rscriptd sgauth sgconf sgconf_xml stargazer"
+
+STG_MODULES_AUTH="always_online internet_access freeradius"
+STG_MODULES_CAPTURE="ipq ether netflow"
+STG_MODULES_CONFIG="sgconfig rpcconfig"
+STG_MODULES_OTHER="ping smux remote_script"
+STG_MODULES_STORE="files firebird mysql postgres"
+
+declare -A MODULES
+MODULES=( [module_auth_always_online]="authorization\/ao:mod_ao"
+	[module_auth_internet_access]="authorization\/inetaccess:mod_ia"
+	[module_auth_freeradius]="other\/radius:mod_radius"
+	[module_capture_ipq]="capture\/ipq_linux:mod_cap_ipq"
+	[module_capture_ether]="capture\/ether_linux:mod_cap_ether"
+	[module_capture_netflow]="capture\/cap_nf:mod_cap_nf"
+	[module_config_sgconfig]="configuration\/sgconfig:mod_sg"
+	[module_config_rpcconfig]="configuration\/rpcconfig:mod_rpc"
+	[module_other_ping]="other\/ping:mod_ping"
+	[module_other_smux]="other\/smux:mod_smux"
+	[module_other_remote_script]="other\/rscript:mod_remote_script"
+	[module_store_files]="store\/files:store_files"
+	[module_store_firebird]="store\/firebird:store_firebird"
+	[module_store_mysql]="store\/mysql:store_mysql"
+	[module_store_postgres]="store\/postgresql:store_postgresql"
+)
+
+declare -A INIT
+INIT=(	[module_store_files]="11d"
+	[module_store_firebird]="11d;s/need net/need net firebird/"
+	[module_store_mysql]="11d;s/need net/need net mysql/"
+	[module_store_postgres]="11d;s/need net/need net postgresql/"
+)
+
+MY_P="stg-${PV}"
+
+inherit flag-o-matic linux-info
+
+DESCRIPTION="Billing system for small home and office networks"
+HOMEPAGE="http://stg.dp.ua/"
+SRC_URI="http://stg.dp.ua/download/server/${PV}/${MY_P}.tar.gz"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+CDEPEND="
+	acct-group/stg
+	acct-user/stg
+"
+
+RDEPEND="
+	module_config_rpcconfig? (
+		dev-libs/expat
+		dev-libs/xmlrpc-c[abyss,cxx]
+	)
+	module_config_sgconfig? ( dev-libs/expat )
+	module_store_firebird? ( dev-db/firebird )
+	module_store_mysql? ( dev-db/mysql-connector-c:0= )
+	module_store_postgres? ( dev-db/postgresql:= )
+	rscriptd? ( ${CDEPEND} )
+	sgauth? ( ${CDEPEND} )
+	sgconf? (
+		${CDEPEND}
+		dev-libs/expat
+	)
+	sgconf_xml? ( dev-libs/expat )
+	stargazer? ( ${CDEPEND} )
+"
+
+DEPEND="${RDEPEND}"
+
+REQUIRED_USE="stargazer? ( ^^ ( module_store_files module_store_firebird module_store_mysql module_store_postgres ) )"
+
+DOCS=( BUGS ../../ChangeLog CHANGES README TODO )
+
+# Patches already in upstream's trunk
+PATCHES=(
+	# Fix dependency on fbclient for module_store_firebird
+	"${FILESDIR}"/patches/stg-2.408-makefile-firebird-upstream.patch
+	# Rewrite config for rscriptd
+	"${FILESDIR}"/patches/stg-2.408-rscriptd.conf-upstream.patch
+	# Rewrite config for sgauth
+	"${FILESDIR}"/patches/stg-2.408-sgauth.conf-upstream.patch
+	# Standardization of 'On-scripts'
+	"${FILESDIR}"/patches/stg-2.408-on-upstream.patch
+	# Install demo scripts for rscriptd
+	"${FILESDIR}"/patches/stg-2.408-rscriptd-upstream.patch
+	# Fix crush on stop
+	"${FILESDIR}"/patches/stg-2.408-fix-crash-on-stop.patch
+	# Rename convertor to sgconv to avoid possible file name collisions
+	"${FILESDIR}"/patches/stg-2.408-sgconv-upstream.patch
+	# Debug support. Install radius lib to /usr/lib/freeradius
+	"${FILESDIR}"/patches/stg-2.408-makefile-build-upstream.patch
+	# Don't compile sgconv always with debug. Remove MAKEOPTS=-j1
+	"${FILESDIR}"/patches/stg-2.408-build-upstream.patch
+	# FreeBSD install directory
+	"${FILESDIR}"/patches/stg-2.408-radius-upstream.patch
+)
+
+IUSE="sgconv radius rscriptd sgauth sgconf sgconf_xml stargazer debug"
+
+for module in ${STG_MODULES_AUTH} ; do IUSE="${IUSE} module_auth_${module}" ; done
+for module in ${STG_MODULES_CAPTURE} ; do IUSE="${IUSE} module_capture_${module}" ; done
+for module in ${STG_MODULES_CONFIG} ; do IUSE="${IUSE} module_config_${module}" ; done
+for module in ${STG_MODULES_OTHER} ; do IUSE="${IUSE} module_other_${module}" ; done
+for module in ${STG_MODULES_STORE} ; do IUSE="${IUSE} module_store_${module}" ; done
+
+IUSE=${IUSE/stargazer/+stargazer}
+IUSE=${IUSE/module_store_files/+module_store_files}
+
+src_prepare() {
+	# Rename convertor to sgconv to avoid possible file name collisions
+	mv projects/convertor/ projects/sgconv/ \
+		|| die "Couldn't move convertor folder"
+	mv projects/sgconv/convertor.conf \
+		projects/sgconv/sgconv.conf || die "Couldn't move convertor config"
+
+	default
+
+	local project
+	for project in ${PROJECTS} ; do
+		# Rename build script to configure for further econf launch in every project
+		mv projects/$project/build projects/$project/configure \
+			|| die "Couldn't move build folder for $project"
+		# Change check for debug build
+		sed -i 's/if \[ "$1" = "debug" \]/if \[ "${10}" = "--enable-debug" \]/' \
+			projects/$project/configure \
+			|| die "sed for debug check failed"
+	done
+
+	# Correct working directory, user and group for sgconv.conf, store_files.conf
+	# Correct paths for rscriptd.conf, store_firebird.conf, mod_remote_scriptd.conf, stargazer.conf, rpcconfig.cpp, 00-base-00.sql
+	eapply "${FILESDIR}"/patches/stg-2.408-correct-paths.patch
+
+	# Correct target install-data for stargazer, rscriptd, sgauth, remove debug symbols stripping
+	eapply "${FILESDIR}"/patches/stg-2.408-makefile.patch
+
+	# Remove make from script (for keeping symbols), always add variable to Makefile.conf for all projects
+	eapply "${FILESDIR}"/patches/stg-2.408-build.patch
+
+	# Remove static-libs
+	eapply "${FILESDIR}"/patches/stg-2.408-static-libs.patch
+
+	# Define which module to compile
+	local module
+	for module in ${!MODULES[@]} ; do
+		if ! use $module ; then
+			sed -i "s/${MODULES[$module]%:*}//" \
+				projects/stargazer/configure \
+				|| die "sed for module configure failed"
+		fi
+	done
+
+	# Correct Gentoo init script
+	sed -i	-e 's/opts/extra_commands/' \
+		-e 's/runscript/openrc-run/' \
+		projects/stargazer/inst/linux/etc/init.d/stargazer.gentoo \
+		|| die "sed for init-script failed"
+	local init
+	for init in ${!INIT[@]} ; do
+		if use $init ; then
+			sed -i "${INIT[$init]}" \
+				projects/stargazer/inst/linux/etc/init.d/stargazer.gentoo \
+				|| die "sed for $init failed"
+		fi
+	done
+
+	# Check for IPQ subsystem availability
+	if use module_capture_ipq && kernel_is ge 3 5 ; then
+		die "The IPQ subsystem requires kernel 3.5 or greater."
+	fi
+}
+
+src_configure() {
+	use debug && filter-flags '-O?'
+
+	# Define local variables, strip '+' symbol for used by default USE flags
+	local USEFLAGS=(${IUSE//+})
+	local PROJECTS=($PROJECTS)
+	local i
+
+	for (( i = 0 ; i < ${#PROJECTS[@]} ; i++ )) ; do
+		if use ${USEFLAGS[$i]} ; then
+			cd "${S}"/projects/${PROJECTS[$i]} \
+				|| die "cd to ${PROJECTS[$i]} failed"
+			econf $(use_enable debug)
+		fi
+	done
+}
+
+src_compile() {
+	# Define local variables, strip '+' symbol for used by default USE flags
+	local USEFLAGS=(${IUSE//+})
+	local PROJECTS=($PROJECTS)
+	local i
+
+	# Set jobs to 1 for debug build
+	use debug && MAKEOPTS="-j1"
+
+	# Build necessary libraries first
+	touch Makefile.conf
+	cd stglibs || die "cd to stglibs failed"
+	emake STG_LIBS="ia.lib srvconf.lib"
+
+	for (( i = 0 ; i < ${#PROJECTS[@]} ; i++ )) ; do
+		if use ${USEFLAGS[$i]} ; then
+			cd "${S}"/projects/${PROJECTS[$i]} \
+				|| die "cd to ${PROJECTS[$i]} failed"
+			emake
+		fi
+	done
+}
+
+src_install() {
+	if use rscriptd || use stargazer ; then
+		# Install config file for logrotate
+		insinto /etc/logrotate.d
+		newins "${FILESDIR}"/logrotate stargazer
+
+		# Keeping logs directory
+		diropts -m 755 -o stg -g stg
+		keepdir /var/log/stargazer
+		if use stargazer ; then
+			diropts -m 775 -o stg -g stg
+			keepdir /var/lib/stargazer
+		fi
+	fi
+
+	if use sgconv ; then
+		cd projects/sgconv || die "cd to sgconv failed"
+
+		emake DESTDIR="${D}" PREFIX="${D}" install
+
+		# Install files into specified directory
+		insinto /etc/stargazer
+		doins "${S}"/projects/sgconv/sgconv.conf
+
+		# Install manual page
+		doman "${FILESDIR}"/mans/sgconv.1
+	fi
+
+	if use radius ; then
+		cd "${S}"/projects/rlm_stg || die "cd to rlm_stg failed"
+
+		emake DESTDIR="${D}" PREFIX="${D}" install
+	fi
+
+	if use rscriptd ; then
+		cd "${S}"/projects/rscriptd || die "cd to rscriptd failed"
+
+		emake DESTDIR="${D}" PREFIX="${D}" install
+
+		# Install Gentoo init script
+		doinitd "${FILESDIR}"/rscriptd
+
+		# Correct permissions for file
+		fperms 0640 /etc/stargazer/rscriptd.conf
+
+		# Install manual page
+		doman "${FILESDIR}"/mans/rscriptd.8
+	fi
+
+	if use sgauth ; then
+		cd "${S}"/projects/sgauth || die "cd to sgauth failed"
+
+		emake DESTDIR="${D}" PREFIX="${D}" install
+
+		# Correct permissions for file
+		fperms 0640 /etc/stargazer/sgauth.conf
+
+		# Install manual page
+		doman "${FILESDIR}"/mans/sgauth.8
+	fi
+
+	if use sgconf ; then
+		cd "${S}"/projects/sgconf || die "cd to sgconf failed"
+
+		emake DESTDIR="${D}" PREFIX="${D}" install
+
+		# Install manual page
+		doman "${FILESDIR}"/mans/sgconf.1
+	fi
+
+	if use sgconf_xml ; then
+		cd "${S}"/projects/sgconf_xml || die "cd to sgconf_xml failed"
+
+		emake DESTDIR="${D}" PREFIX="${D}" install
+
+		# Install manual page
+		doman "${FILESDIR}"/mans/sgconf_xml.1
+	fi
+
+	if use stargazer ; then
+		cd "${S}"/projects/stargazer || die "cd to stargazer failed"
+
+		emake DESTDIR="${D}" PREFIX="${D}" install
+
+		# Install docs
+		einstalldocs
+
+		# Install and rename Gentoo init script
+		newinitd "${S}"/projects/stargazer/inst/linux/etc/init.d/stargazer.gentoo stargazer
+
+		# Install manual page
+		doman "${FILESDIR}"/mans/stargazer.8
+
+		# Install files needed for module_store_files
+		if use module_store_files ; then
+			# Install files into specified directory
+			insinto /var/lib
+			doins -r "${S}"/projects/stargazer/inst/var/stargazer
+
+			# Correct user and group for files and directories
+			fowners -R stg:stg /var/lib/stargazer
+		fi
+
+		if use module_store_firebird ; then
+			# Install files into specified directory
+			insinto /usr/share/stargazer/db/firebird
+			doins \
+				"${S}"/projects/stargazer/inst/var/00-base-00.sql \
+				"${S}"/projects/stargazer/inst/var/00-alter-01.sql
+		fi
+
+		if use module_store_mysql ; then
+			# Install file into specified directory
+			insinto /usr/share/stargazer/db/mysql
+			doins "${S}"/projects/stargazer/inst/var/00-mysql-01.sql
+		fi
+
+		if use module_store_postgres ; then
+			# Install files into specified directory
+			insinto /usr/share/stargazer/db/postgresql
+			doins \
+				"${S}"/projects/stargazer/inst/var/00-base-00.postgresql.sql \
+				"${S}"/projects/stargazer/inst/var/00-alter-01.postgresql.sql
+		fi
+
+		if use module_other_smux ; then
+			# Install files into specified directory
+			insinto /usr/share/snmp/mibs
+			doins "${S}"/projects/stargazer/plugins/other/smux/STG-MIB.mib
+		fi
+
+		if use module_other_remote_script ; then
+			# Create subnets file based on example from mod_remote_script.conf
+			grep 192 "${S}"/projects/stargazer/inst/linux/etc/stargazer/conf-available.d/mod_remote_script.conf \
+				| sed 's/# //' > "${ED}"/etc/stargazer/subnets
+
+			# Correct permissions for file
+			fperms 0640 /etc/stargazer/subnets
+		fi
+
+		# Correct permissions for files
+		fperms 0640 \
+			/etc/stargazer/rules \
+			/etc/stargazer/stargazer.conf
+
+		# Install files into specified directory for selected modules
+		insinto /etc/stargazer/conf-available.d
+		insopts -m 0640
+
+		local module
+		for module in ${!MODULES[@]} ; do
+			use $module && doins "${S}"/projects/stargazer/inst/linux/etc/stargazer/conf-available.d/${MODULES[$module]#*:}.conf
+		done
+
+		# Create symlinks of configs for selected modules
+		for module in ${!MODULES[@]} ; do
+			use $module \
+				&& dosym \
+				/etc/stargazer/conf-available.d/${MODULES[$module]#*:}.conf \
+				/etc/stargazer/conf-enabled.d/${MODULES[$module]#*:}.conf
+		done
+	fi
+
+	# Correct user and gsroup for files and directories
+	if use sgconv || use rscriptd || use sgauth || use stargazer ; then
+		fowners -R stg:stg /etc/stargazer
+	fi
+
+	# Put the files in the right folder to support multilib
+	if [ ! -e "${ED}"/usr/$(get_libdir) ] ; then
+		mv "${ED}"/usr/lib/ "${ED}"/usr/$(get_libdir) \
+			|| die "Failed to move library directory for multilib support"
+	fi
+}
+
+pkg_postinst() {
+	if use sgconv ; then
+		einfo "\nSgconv:"
+		einfo "----------"
+		einfo "For further use edit /etc/stargazer/sgconv.conf."
+	fi
+
+	if use radius ; then
+		einfo "\nRadius:"
+		einfo "-------"
+		einfo "For further use emerge net-dialup/freeradius.\n"
+
+		einfo "Example config:\n"
+
+		einfo "stg {"
+		einfo "      local_port = 6667"
+		einfo "      server = localhost"
+		einfo "      port = 6666"
+		einfo "      password = 123456"
+		einfo "    }\n"
+
+		einfo "You should place 'stg' into section Instantiate, Authorize."
+		einfo "In section Authentificate 'stg' should go in sub-section"
+		einfo "Auth-Type before other authentifications modules:\n"
+
+		einfo "Auth-Type PAP {"
+		einfo "                stg"
+		einfo "                pap"
+		einfo "}\n"
+
+		einfo "It also may be used in section Accounting and Post-Auth."
+
+		use module_auth_freeradius || einfo "\nFor use RADIUS enable USE-flag module_auth_freeradius."
+	fi
+
+	if use rscriptd ; then
+		einfo "\nRemote Script Executer:"
+		einfo "-----------------------"
+		einfo "For further use edit /etc/stargazer/rscriptd.conf."
+		einfo "You have to change 'Password' field at least."
+	fi
+
+	if use sgauth ; then
+		einfo "\nSgauth:"
+		einfo "-------"
+		einfo "For further use edit /etc/stargazer/sgauth.conf."
+		einfo "You have to change 'ServerName', 'Login', 'Password' fields at least."
+	fi
+
+	if use sgconf ; then
+		einfo "\nSgconf:"
+		einfo "-------"
+		use module_config_sgconfig \
+			|| einfo "For further use enable USE-flag module_config_sgconfig."
+	fi
+
+	if use sgconf_xml ; then
+		einfo "\nSgconf_xml:"
+		einfo "-----------"
+		use module_config_rpcconfig \
+			|| einfo "For further use enable USE-flag module_config_rpcconfig."
+	fi
+
+	if use stargazer ; then
+		einfo "\nStargazer:"
+		einfo "----------"
+		einfo "Modules availability:\n"
+		if use module_auth_always_online ; then
+			einfo "* module_auth_always_online available."
+		fi
+		if use module_auth_internet_access ; then
+			einfo "* module_auth_internet_access available."
+		fi
+		if use module_auth_freeradius ; then
+			einfo "* module_auth_freeradius available.\n"
+			einfo "For further use emerge net-dialup/freeradius.\n"
+			use radius || einfo "\n           For use RADIUS enable use USE-flag radius."
+		fi
+		if use module_capture_ipq ; then
+			einfo "* module_capture_ipq available."
+		fi
+		if use module_capture_ether ; then
+			einfo "* module_capture_ether available."
+		fi
+		if use module_capture_netflow ; then
+			einfo "* module_capture_netflow available.\n"
+			einfo "For further use emerge any netflow sensor:\n"
+			einfo "net-firewall/ipt_netflow or net-analyzer/softflowd.\n"
+		fi
+		if use module_config_sgconfig ; then
+			einfo "* module_config_sgconfig available."
+		fi
+		if use module_config_rpcconfig ; then
+			einfo "* module_config_rpcconfig available.\n"
+			einfo "KNOWN BUG: Sometimes you can't configure Stargazer"
+			einfo "through xml-based configurator, because module is not responding."
+			einfo "This bug is introduced by xmlrpc-c library."
+			einfo "This bug proceeds very rare, but it still exists.\n"
+		fi
+		if use module_other_ping ; then
+			einfo "* module_other_ping available."
+		fi
+		if use module_other_smux ; then
+			einfo "* module_other_smux available.\n"
+			einfo "For further use emerge net-analyzer/net-snmp.\n"
+		fi
+		if use module_other_remote_script ; then
+			einfo "* module_other_remote_script available.\n"
+			einfo "For further use edit /etc/stargazer/subnets.\n"
+		fi
+		if use module_store_files ; then
+			einfo "* module_store_files available."
+		fi
+		if use module_store_firebird ; then
+			einfo "* module_store_firebird available.\n"
+			einfo "You should add 'firebird' user to stg group:\n"
+			einfo "# usermod -a -G stg firebird\n"
+			einfo "and restart firebird:\n"
+			einfo "# /etc/init.d/firebird restart\n"
+			einfo "Stargazer DB schema for Firebird is here: /usr/share/stargazer/db/firebird"
+			einfo "For new setup you should execute 00-base-00.sql:\n"
+			einfo "# fbsql -q -i /usr/share/stargazer/db/firebird/00-base-00.sql\n"
+			einfo "For upgrade from version 2.406 you should execute 00-alter-01.sql:\n"
+			einfo "# fbsql -i /usr/share/stargazer/db/firebird/00-alter-01.sql\n"
+		fi
+		if use module_store_mysql ; then
+			einfo "* module_store_mysql available.\n"
+			einfo "For upgrade from version 2.406 you should execute 00-mysql-01.sql:\n"
+			einfo "# mysql < /usr/share/stargazer/db/mysql/00-mysql-01.sql\n"
+		fi
+		if use module_store_postgres ; then
+			einfo "* module_store_postgres available.\n"
+			einfo "DB schema for PostgresSQL is here: /usr/share/stargazer/db/postgresql"
+			einfo "For new setup you should execute 00-base-00.postgresql.sql:\n"
+			einfo "# psql -f /usr/share/stargazer/db/postgresql/00-base-00.postgresql.sql\n"
+			einfo "For upgrade from version 2.406 you should execute 00-alter-01.sql:\n"
+			einfo "# psql -f /usr/share/stargazer/db/postgresql/00-alter-01.sql\n"
+		fi
+		einfo "\n    For all storage backends:\n"
+		einfo "* Default admin login - admin, default admin password - 123456."
+		einfo "* Default subscriber login - test, default subscriber password - 123456.\n"
+		einfo "Don't run newer versions without reading their ChangeLog first,"
+		einfo "it can be found in /usr/share/doc/${PF}"
+	fi
+	if use debug ; then
+		ewarn "\nThis is a debug build, avoid to use it in production."
+	fi
+}


             reply	other threads:[~2021-07-11 21:23 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-11 21:23 Conrad Kostecki [this message]
  -- strict thread matches above, loose matches on Subject: below --
2021-07-11 21:23 [gentoo-commits] repo/gentoo:master commit in: net-misc/stargazer/ Conrad Kostecki
2020-02-08 16:25 David Seifert
2018-05-05  1:50 Aaron Bauman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1626038305.00eeaa6f7d079b25e6316e1c07b4772672c78569.conikost@gentoo \
    --to=conikost@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox