ipsec, imsd, ims-pdn-up: the SA reader and the holds key compare in canonical form; LOCAL is canonicalised, PCSCF= accepted in RFC 5952 §4 form only
ParseExistingSa and SaLocals compared PCSCF= and LOCAL= as text against `ip xfrm` output, which prints RFC 5952 form, so an upper-case or uncompressed PCSCF= found no SAs and the restart registered fresh — on KPN into the live-SA refusal; the holds file's pdn key compared the same way. Both sides of each of those compares now go through imsd::util::CanonicalAddr, LOCAL is canonicalised once on the way in, and PCSCF= is accepted in that one spelling only — upper case, leading zeros or an uncompressed run are refused at bring-up with the spelling to use, a dotted-quad tail (the form ip prints for an IPv4-mapped address, which CanonicalIp6 does not read) with the rule alone, a bracketed one by the bring-up script, which routes the value as typed, with the rule (no brackets) — and a comma-separated PCSCF= (a list) with its own message instead of reaching the socket layer: one spelling, instead of a leniency both consumers of the setting would have to share. Tested: crafter-build test, 7 passed; the upper-case PCSCF= refused with the spelling to use, a bracketed one refused by the script, and the spelling they name resuming, in builds of this series on the dev phone (KPN).
This commit is contained in:
parent
146d4368d0
commit
b60a3633c1
7 changed files with 84 additions and 22 deletions
|
|
@ -302,6 +302,7 @@ fi
|
|||
PCSCF=${PCSCF:-$(envval PCSCF)}
|
||||
case "$PCSCF" in
|
||||
'') log "PCSCF not configured: no P-CSCF host route (imsd needs PCSCF= in /etc/imsd.env)" ;;
|
||||
*\[*) log "PCSCF '$PCSCF': write the bare address, as ip prints it (no brackets)"; exit 1 ;;
|
||||
*:*) OUT=$(ip -6 route replace "$PCSCF/128" dev "$IFACE" 2>&1) ||
|
||||
{ log "host route to P-CSCF $PCSCF failed: $(squash "$OUT")"; exit 1; }
|
||||
log "host route to P-CSCF $PCSCF dev $IFACE" ;;
|
||||
|
|
|
|||
|
|
@ -6,8 +6,10 @@
|
|||
# trigger restarts every unit marked needs-restart (enqueue-marked). A
|
||||
# changed bus policy is live the moment apk writes it (dbus-broker-launch
|
||||
# reloads on its own), so it must not be left facing the old daemon. The
|
||||
# restart resumes the registration over its existing SAs, or goes on
|
||||
# waiting when the network had imsd wait; a call in progress ends.
|
||||
# restart resumes the registration over its existing SAs, goes on waiting
|
||||
# when the network had imsd wait, or — an upper-case, zero-padded or uncompressed PCSCF=,
|
||||
# accepted until 0.3.12 — stops at bring-up with the spelling to use; a
|
||||
# call in progress ends.
|
||||
#
|
||||
# Also installed as imsd.post-install: `apk del imsd` removes the files
|
||||
# and leaves the daemon running, so a later `apk add` of the package is
|
||||
|
|
|
|||
Loading…
Reference in a new issue