Files
guru/net-irc/pounce/files/pounce.initd-r2
T
zyxhere💭 3ed37b3ed5 net-*/*: stop exporting $pidfile in OpenRC service scripts (insecure)
Say it with me: the pidfile and its parent directories should
only be writable by root unless you use supervise-daemon ;)

With `checkpath -o someuser:someuser $pidfile` in start_pre(), it can
cause DOS attacks because the now unprivelaged process can replace the
pidfile with some other pid number in it like pid 1 and cause the host
machine to crash when the daemon finally stops. Supervise-daemon can
supervise without the daemon creating a pidfile so don't export the
variable at all.

That assumes the scripts *are* using supervise-daemon, if
supervise-daemon fails to start (due to maybe some incorrect config
option *wink wink*) then OpenRC falls back to the older
start-stop-daemon and that *does* use the $pidfile. If thats the case
then the daemon will simply fail to start (yes I haven't tested if any
these packages work without $pidfile which they should since they are
specifying `supervisor=supervise-daemon`).

IMO failing to start is better than running in a potentially vulnerable
configuration.

Merges: https://codeberg.org/gentoo/guru/pulls/92
Part-off: https://codeberg.org/gentoo/guru/pulls/92
Signed-off-by: zyxhere💭 <zyx@envs.net>
2026-09-30 12:19:39 +00:00

34 lines
764 B
Plaintext

#!/sbin/openrc-run
# Copyright 2022-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
#
# shellcheck shell=sh
extra_started_commands="reload"
description="IRC bouncer"
description_reload="Refresh TLS keys"
supervisor="supervise-daemon"
command="/usr/bin/pounce"
command_args="${POUNCE_CONFIG:-/etc/pounce/pounce.conf}"
command_user="${POUNCE_USER:-pounce:pounce}"
output_logger="logger -p daemon.info -t pounce --"
error_logger="logger -p daemon.err -t pounce --"
depend() {
use dns logger
need net
}
start_pre() {
checkpath -d -o "${command_user}" /run/pounce
}
reload() {
ebegin "Refreshing ${RC_SVCNAME} keys"
start-stop-daemon --signal SIGUSR1 --pidfile "${pidfile}"
eend $? "Failed to reload ${RC_SVCNAME}"
}