fix: keep systemd's OSC 3008 shell context out of command output (#41) #42

Merged
christianmanivong merged 2 commits from fix/osc-context-41 into main 2026-10-23 21:10:04 +00:00
Owner

Fixes #41.

systemd 258 (Ubuntu 26.04) ships /etc/profile.d/80-systemd-osc-context.sh: an interactive bash wraps every command in OSC 3008 sequences from PS0 and PROMPT_COMMAND, each with a fresh UUID. They ended up in every value read through netmiko's shell, and because the prompt never looked the same twice, the prompt line stayed in the output too. On a real Ubuntu 26.04.1 host os_version grew past 255 characters and netOrk could not store the poll.

  • open() sends unset PS0 PROMPT_COMMAND right after switching the history off, then re-reads the prompt (set_base_prompt()), so netmiko's prompt stripping works again. unset because the script appends to PROMPT_COMMAND as an array.
  • _send() runs its output through strip_terminal_codes() as a second line of defence.
  • Fixture: the real os-release output from that host.
  • Version 0.15.1.

netOrk cannot take 0.15.x before it moves to napalm-device-types 4.22, so the same fix sits on fix/osc-context-41-backport (c00deef, on top of 0ba5081, the commit netOrk pins). netOrk pins that SHA until then; keep the branch.

Fixes #41. systemd 258 (Ubuntu 26.04) ships `/etc/profile.d/80-systemd-osc-context.sh`: an interactive bash wraps every command in OSC 3008 sequences from `PS0` and `PROMPT_COMMAND`, each with a fresh UUID. They ended up in every value read through netmiko's shell, and because the prompt never looked the same twice, the prompt line stayed in the output too. On a real Ubuntu 26.04.1 host `os_version` grew past 255 characters and netOrk could not store the poll. - `open()` sends `unset PS0 PROMPT_COMMAND` right after switching the history off, then re-reads the prompt (`set_base_prompt()`), so netmiko's prompt stripping works again. `unset` because the script appends to `PROMPT_COMMAND` as an array. - `_send()` runs its output through `strip_terminal_codes()` as a second line of defence. - Fixture: the real `os-release` output from that host. - Version 0.15.1. netOrk cannot take 0.15.x before it moves to napalm-device-types 4.22, so the same fix sits on `fix/osc-context-41-backport` (c00deef, on top of 0ba5081, the commit netOrk pins). netOrk pins that SHA until then; keep the branch.
christianmanivong added 1 commit 2026-10-23 16:58:59 +00:00
fix: keep systemd's OSC 3008 shell context out of command output (#41)
driver / standard (pull_request) Failing after 17s
driver / lint (pull_request) Successful in 28s
driver / types (pull_request) Successful in 51s
driver / test (3.10) (pull_request) Successful in 1m3s
driver / test (3.11) (pull_request) Successful in 1m4s
driver / test (3.12) (pull_request) Successful in 1m58s
driver / test (3.13) (pull_request) Successful in 2m1s
driver / lowest (pull_request) Successful in 1m19s
driver / build (pull_request) Successful in 23s
driver / security (pull_request) Successful in 4m12s
CI / driver (pull_request) Failing after 8m24s
driver / publish (pull_request) Skipped
4159612a33
systemd 258 (Ubuntu 26.04) ships /etc/profile.d/80-systemd-osc-context.sh:
an interactive bash wraps every command in OSC 3008 sequences from PS0 and
PROMPT_COMMAND, each with a fresh UUID. They ended up in every value read
through netmiko's shell, and because the prompt never looked the same twice,
the prompt line stayed in the output too. os_version grew past 255
characters and netOrk could not store the poll.

The session now unsets PS0 and PROMPT_COMMAND right after switching the
history off and reads its prompt anew; _send() strips terminal codes from
what it returns.

Version 0.15.1.
christianmanivong added 1 commit 2026-10-23 20:46:37 +00:00
refactor: prepare the interactive shell in its own module
driver / standard (pull_request) Successful in 40s
driver / lint (pull_request) Successful in 27s
driver / test (3.10) (pull_request) Successful in 3m57s
driver / test (3.11) (pull_request) Successful in 1m7s
driver / test (3.12) (pull_request) Successful in 1m9s
driver / types (pull_request) Successful in 19m18s
driver / lowest (pull_request) Successful in 43s
driver / security (pull_request) Successful in 1m3s
driver / build (pull_request) Successful in 58s
driver / test (3.13) (pull_request) Successful in 16m1s
CI / driver (pull_request) Successful in 23m9s
driver / publish (pull_request) Skipped
42e93f02dd
The prompt-hook step (#41) pushed linux.py past its line count in the
quality baseline. The three steps that make netmiko's fresh shell fit to
read - history off, prompt hooks off, no line wrap - and the prompt
pattern move to napalm_linux/_shell.py, under strict mypy. linux.py
shrinks below where it was; the baseline follows.
christianmanivong merged commit 661f6da3f7 into main 2026-10-23 21:10:04 +00:00
christianmanivong deleted branch fix/osc-context-41 2026-10-23 21:10:04 +00:00
Sign in to join this conversation.