Package: auto-apt-proxy
Severity: normal
X-Debbugs-Cc: [email protected]
I reported this originally in bug #1051481
"apt-cacher-ng: Illegal SRV name (underscore not valid except first character
of label)"
in September 2023 and it was fixed in f9330e88 2024-07-17.
At that time it seems I forgot to also report it for auto-apt-proxy!
Got bitten by it again now whilst writing an extension that uses
systemd-resolved/resolvectl instead of avahi-browse to do the lookup.
Specifically, systemd-resolved correctly refuses to advertise the
illegal SRV name so look-ups were failing 'mysteriously'.
systemd-resolved[1424470]: /etc/systemd/dnssd/squid-deb-proxy.dnssd:3: Service
type is invalid. Ignoring.
$ cat /etc/systemd/dnssd/squid-deb-proxy.dnssd
[Service]
Name=Squid deb proxy on %H systemd
Type=_apt_proxy._tcp
Port=8000
The definition is in RFC6335 section 5.1 "Service Name Syntax":
Valid service names are hereby normatively defined as follows:
o MUST be at least 1 character and no more than 15 characters long
o MUST contain only US-ASCII [ANSI.X3.4-1986] letters 'A' - 'Z' and
'a' - 'z', digits '0' - '9', and hyphens ('-', ASCII 0x2D or
decimal 45)
o MUST contain at least one letter ('A' - 'Z' or 'a' - 'z')
o MUST NOT begin or end with a hyphen
o hyphens MUST NOT be adjacent to other hyphens
>From b821f0c4a33e2272558d49f90a2eb1a4e92a7fa9 Mon Sep 17 00:00:00 2001
From: Tj <[email protected]>
Date: Sun, 15 Feb 2026 12:46:21 +0000
Subject: [PATCH] use legal SRV name
RFC6335 section 5.1 Service Name Syntax does not allow underscores in
the SRV name itself; only as the leading character in each part.
-_apt_proxy._tcp
+_apt-proxy._tcp
apt-cacher-ng originally advertised only the illegal form but since
commit f9330e88 configures avahi to advertise both.
systemd-resolved refuses to asvertise the illegal form.
Signed-off-by: Tj <[email protected]>
Signed-off-by: Tj <[email protected]>
---
auto-apt-proxy | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/auto-apt-proxy b/auto-apt-proxy
index 1063074..e49f834 100755
--- a/auto-apt-proxy
+++ b/auto-apt-proxy
@@ -43,6 +43,10 @@ log_debug_if_present() {
log_debug "${msg}"
}
+SERVICE_NAME="${SERVICE_NAME:-_apt-proxy._tcp}"
+# illegal format; RFC6335 section 5.1
+service_name_legacy="_apt_proxy._tcp"
+
uid=$(id -u)
cache_dir=${TMPDIR:-/tmp}/.auto-apt-proxy-${uid}
if [ -d "${cache_dir}" ]; then
@@ -208,10 +212,12 @@ detect_DNS_SRV_record() {
local domain
domain="$(hostname --domain 2>/dev/null)"
search_domains=$(get_search_domains)
+ local service
+ service="${1:-${SERVICE_NAME}}"
for d in $domain $search_domains; do
- log_debug "Looking up SRV entry for _apt_proxy._tcp.${d}"
+ log_debug "Looking up SRV entry for ${service}.${d}"
result=$(
- /usr/lib/apt/apt-helper srv-lookup _apt_proxy._tcp."${d}" 2>/dev/null |
+ /usr/lib/apt/apt-helper srv-lookup "${service}.${d}" 2>/dev/null |
shuf |
awk '/^[^#]/{print "http://" $1 ":" $4;found=1;exit}END{exit !found}'
)
@@ -230,9 +236,11 @@ detect_avahi_local() {
return 1
fi
- log_debug "Looking up _apt_proxy._tcp on mDNS (avahi)"
+ local service
+ service="${1:-${SERVICE_NAME}}"
+ log_debug "Looking up ${service} on mDNS (avahi)"
- data=$(avahi-browse --terminate --no-db-lookup --resolve --parsable
_apt_proxy._tcp | awk -F ';' '/^=;/ { print($7, $8, $9); exit}')
+ data=$(avahi-browse --terminate --no-db-lookup --resolve --parsable
"${service}" | awk -F ';' '/^=;/ { print($7, $8, $9); exit}')
if [ -z "${data}" ]; then
return 1
fi
@@ -375,7 +383,11 @@ __detect__() {
# Check for explicitly configured proxies
detect_from v4_explicit_proxy_etc_hosts v6_explicit_proxy_etc_hosts &&
return 0
detect_DNS_SRV_record && return 0
+ # fallback to lookup the legacy 'illegal' name
+ detect_DNS_SRV_record "${service_name_legacy}" && return 0
detect_avahi_local && return 0
+ # fallback to lookup the legacy 'illegal' name
+ detect_avahi_local "${service_name_legacy}" && return 0
# Check special hosts on the network
detect_from v4_gateway v6_gateway && return 0
--
2.39.5