commit:     2a4d02ee57f3c8fad7af5600ebdcc7305678daa8
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 18 17:50:52 2026 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Jan 18 17:55:41 2026 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2a4d02ee

net-irc/irker: password handling rework for OpenRC init script

Introduce IRKERD_PASSWORD_FILE and prefer that if set in /etc/conf.d/irkerd,
which passes -P /path/to/password instead of the password itself with
-p password.

If IRKERD_PASSWORD_FILE is unset, stash the value of IRKERD_PASSWORD in
a file to 'upgrade' it and avoid showing the password in the process
table.

Needed a patch to make -P work too.

Thanks to navi for feedback on the idea.

Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../files/irker-2.24-password-file-typo.patch      | 26 +++++++++
 net-irc/irker/files/irkerd.confd-r1                | 23 ++++++++
 net-irc/irker/files/irkerd.initd-r1                | 49 ++++++++++++++++
 net-irc/irker/irker-2.24-r1.ebuild                 | 66 ++++++++++++++++++++++
 4 files changed, 164 insertions(+)

diff --git a/net-irc/irker/files/irker-2.24-password-file-typo.patch 
b/net-irc/irker/files/irker-2.24-password-file-typo.patch
new file mode 100644
index 000000000000..d431f9bc8a4d
--- /dev/null
+++ b/net-irc/irker/files/irker-2.24-password-file-typo.patch
@@ -0,0 +1,26 @@
+https://gitlab.com/esr/irker/-/merge_requests/35
+
+From 765334f1e9663c09d507a589cdd4e8c002c1fafc Mon Sep 17 00:00:00 2001
+From: Sam James <[email protected]>
+Date: Sun, 18 Jan 2026 17:53:39 +0000
+Subject: [PATCH] irkerd: fix typo for -P
+
+---
+ irkerd | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/irkerd b/irkerd
+index f22c343..71f0da0 100755
+--- a/irkerd
++++ b/irkerd
+@@ -1219,7 +1219,7 @@ if __name__ == "__main__":
+         LOG.setLevel(log_level)
+ 
+     if args.password_file:
+-        with args.file as f:
++        with args.password_file as f:
+             # IRC passwords must be at most 128 bytes, and cannot contain a \n
+             args.password = f.read(128).split("\n")[0].strip()
+ 
+-- 
+GitLab

diff --git a/net-irc/irker/files/irkerd.confd-r1 
b/net-irc/irker/files/irkerd.confd-r1
new file mode 100644
index 000000000000..b8c7454b9c33
--- /dev/null
+++ b/net-irc/irker/files/irkerd.confd-r1
@@ -0,0 +1,23 @@
+# /etc/conf.d/irkerd: config file for /etc/init.d/irkerd
+
+# Nick-Serv login
+# IRKERD_NICK=""
+
+# Nick-Server password (deprecated in favor of IRKERD_PASSWORD_FILE)
+# IRKERD_PASSWORD=""
+
+# Nick-Server password file (preferred)
+# IRKERD_PASSWORD_FILE=""
+
+# Log file, if none syslog is used (facility daemon)
+# IRKERD_LOGFILE=""
+
+# Debug Level (critical, error, warning, info, debug)
+# IRKERD_LOGLEVEL=""
+
+# To run an anonymous irkerd safely. It should not be able to write to anywhere
+# on your system. If the user is undefined or empty, it defaults to "nobody".
+# IRKERD_USER=""
+
+# see man pages for irkerd for valid cmdline options
+# IRKERD_OPTS=""

diff --git a/net-irc/irker/files/irkerd.initd-r1 
b/net-irc/irker/files/irkerd.initd-r1
new file mode 100644
index 000000000000..b99150f79a01
--- /dev/null
+++ b/net-irc/irker/files/irkerd.initd-r1
@@ -0,0 +1,49 @@
+#!/sbin/openrc-run
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+: "${pidfile:=/run/${RC_SVCNAME}.pid}"
+: "${IRKERD_USER:=nobody}"
+
+depend() {
+        use net
+}
+
+start_pre() {
+       # If the user has specified IRKERD_PASSWORD, let's mask it from
+       # the process table by stashing it in a file and using -P ...
+       # instead.
+       if [ -z "${IRKERD_PASSWORD_FILE}" ] && [ -n "${IRKERD_PASSWORD}" ] ; 
then
+               checkpath -F -m 0700 -o "${IRKERD_USER}" /run/irkerd.pw || 
return 1
+               printf "%s" "${IRKERD_PASSWORD}" > /run/irkerd.pw || return 1
+       fi
+}
+
+start() (
+       if [ -n "${IRKERD_LOGFILE}" ] ; then
+               checkpath -f \
+                       -o "${IRKERD_USER}" \
+                       "${IRKERD_LOGFILE}" \
+                       || return 1
+       fi
+
+       set -f
+       set -- ${IRKERD_OPTS}
+       [ -n "${IRKERD_LOGLEVEL}" ] && set -- "$@" -d "${IRKERD_LOGLEVEL}"
+       [ -n "${IRKERD_LOGFILE}"  ] && set -- "$@" -l "${IRKERD_LOGFILE}"
+       [ -n "${IRKERD_NICK}"     ] && set -- "$@" -n "${IRKERD_NICK}"
+       if [ -n "${IRKERD_PASSWORD_FILE}" ] ; then
+               set -- "$@" -P "${IRKERD_PASSWORD_FILE}"
+       elif [ -n "${IRKERD_PASSWORD}" ] ; then
+               set -- "$@" -P "/run/irkerd.pw"
+       fi
+
+        ebegin "Starting ${RC_SVCNAME}"
+        start-stop-daemon --start \
+                --quiet --background \
+                --user "${IRKERD_USER}" \
+                --make-pidfile --pidfile "${pidfile}" \
+                --exec /usr/bin/irkerd \
+                -- "$@" < /dev/null
+        eend $?
+)

diff --git a/net-irc/irker/irker-2.24-r1.ebuild 
b/net-irc/irker/irker-2.24-r1.ebuild
new file mode 100644
index 000000000000..c9f273a73fe9
--- /dev/null
+++ b/net-irc/irker/irker-2.24-r1.ebuild
@@ -0,0 +1,66 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..13} )
+PYTHON_REQ_USE="ssl"
+
+inherit optfeature python-single-r1 systemd
+
+DESCRIPTION="Submission tools for IRC notifications"
+HOMEPAGE="http://www.catb.org/esr/irker/ https://gitlab.com/esr/irker";
+SRC_URI="http://www.catb.org/esr/${PN}/${P}.tar.gz";
+
+LICENSE="BSD-2"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~s390 ~sparc ~x86"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+# Dependency notes:
+# NOTE: No pkgconfig dep here because of the systemd sed below
+# NOTE: No need for asciidoc here as it's only used for the
+# 'release' makefile target.
+RDEPEND="${PYTHON_DEPS}"
+BDEPEND="
+       app-text/docbook-xml-dtd:4.1.2
+       app-text/xmlto
+       ${PYTHON_DEPS}
+"
+
+DOCS=( NEWS README hacking.adoc security.adoc )
+HTML_DOCS=( irkerd.html irkerhook.html )
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-2.24-password-file-typo.patch
+)
+
+src_prepare() {
+       default
+
+       # Rely on systemd eclass for systemd service install
+       sed -i -e "/^SYSTEMDSYSTEMUNITDIR/d" Makefile || die "sed failed"
+
+       # Prefix support
+       sed -e "s|@EPREFIX@|${EPREFIX}|" "${FILESDIR}"/irkerd.service > 
"${WORKDIR}"/irkerd.service || die "sed failed"
+}
+
+src_install() {
+       default
+
+       python_doscript "${ED}"/usr/bin/irkerd
+       # Not installed with the default Makefile
+       python_doscript irk irkerhook.py
+
+       newinitd "${FILESDIR}"/irkerd.initd-r1 irkerd
+       newconfd "${FILESDIR}"/irkerd.confd-r1 irkerd
+
+       systemd_dounit "${WORKDIR}"/irkerd.service
+
+       docinto examples
+       dodoc filter-example.py filter-test.py
+}
+
+pkg_postinst() {
+       optfeature "SOCKS5 proxy support" dev-python/pysocks
+}

Reply via email to