From d1c19eccd0e147ac26818a7320a22c2cd1c73c5a Mon Sep 17 00:00:00 2001 From: Ginko <152240782+Giggum@users.noreply.github.com> Date: Sat, 16 Aug 2025 20:19:43 -0400 Subject: [PATCH 1/2] op-mode: T7677: fix BrokenPipeError when user quits output of show firewall --- src/op_mode/firewall.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/op_mode/firewall.py b/src/op_mode/firewall.py index 15fbb65a2..ba65058da 100755 --- a/src/op_mode/firewall.py +++ b/src/op_mode/firewall.py @@ -17,7 +17,9 @@ import argparse import ipaddress import json +import os import re +import sys import tabulate import textwrap @@ -25,6 +27,15 @@ from vyos.utils.process import cmd from vyos.utils.dict import dict_search_args +def catch_broken_pipe(func): + def wrapped(*args, **kwargs): + try: + func(*args, **kwargs) + except (BrokenPipeError, KeyboardInterrupt): + # Flush standard streams; redirect remaining output to devnull + os.dup2(os.open(os.devnull, os.O_WRONLY), sys.stdout.fileno()) # pylint: disable = no-member + return wrapped + def get_config_node(conf, node=None, family=None, hook=None, priority=None): if node == 'nat': if family == 'ipv6': @@ -339,6 +350,7 @@ def show_firewall_rule(family, hook, priority, rule_id): if firewall: output_firewall_name(family, hook, priority, firewall, rule_id) +@catch_broken_pipe def show_firewall_group(name=None): conf = Config() firewall = get_config_node(conf, node='firewall') -- 2.39.5 (Apple Git-154)