www/caddy{,-custom}: Fix start/stop with admin API disabled

Caddy largely relies on the admin API for state control, like
start/stop/reload. However, the admin API endpoints are inherently
a security risk.

Although the admin API is enabled by default, many users may choose
to disable it. However, the rc(8) script then needs an alternative
approach to controlling the daemon.

We already sortof supported signal-based control, but it didn't always
work, because there are multiple error messages that indicate that
the admin API is disabled (and none of them actually say that in a clear
way).

This commit fixes start and stop with the admin API disabled. The
reload command (and reloadssl) still require the admin API to be
enabled and will fail if the admin API is disabled.

PR:		255106
Submitted by:	scf
This commit is contained in:
Adam Weinberger 2024-01-17 06:41:24 -05:00
parent e32cceef0b
commit 2d925f1503
4 changed files with 8 additions and 3 deletions

View file

@ -4,7 +4,7 @@
PORTNAME= caddy-custom PORTNAME= caddy-custom
PORTVERSION= ${CADDY_VERSION}.${XCADDY_VERSION} PORTVERSION= ${CADDY_VERSION}.${XCADDY_VERSION}
PORTREVISION= 11 PORTREVISION= 12
CATEGORIES= www CATEGORIES= www
DISTFILES= # none DISTFILES= # none

View file

@ -150,7 +150,9 @@ caddy_prestop()
echo "done" echo "done"
exit 0 exit 0
else else
if echo "${result}" | grep -q "connection refused"; then if echo "${result}" | grep -q -e "connection refused" \
-e "connect: no such file or directory"; then
echo "admin interface unavailable; using pidfile" echo "admin interface unavailable; using pidfile"
return 0 return 0
else else

View file

@ -1,6 +1,7 @@
PORTNAME= caddy PORTNAME= caddy
DISTVERSIONPREFIX= v DISTVERSIONPREFIX= v
DISTVERSION= 2.7.6 DISTVERSION= 2.7.6
PORTREVISION= 1
CATEGORIES= www CATEGORIES= www
DIST_SUBDIR= caddy DIST_SUBDIR= caddy

View file

@ -150,7 +150,9 @@ caddy_prestop()
echo "done" echo "done"
exit 0 exit 0
else else
if echo "${result}" | grep -q "connection refused"; then if echo "${result}" | grep -q -e "connection refused" \
-e "connect: no such file or directory"; then
echo "admin interface unavailable; using pidfile" echo "admin interface unavailable; using pidfile"
return 0 return 0
else else