git: 0187875a6c0b - main - pfctl: Fix recursive printing of anchor labels

From: Kristof Provost <kp_at_FreeBSD.org>
Date: Mon, 27 Nov 2023 20:38:05 UTC
The branch main has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=0187875a6c0b68a8026be174f8a0f968fc8ab6ed

commit 0187875a6c0b68a8026be174f8a0f968fc8ab6ed
Author:     Luiz Amaral <email@luiz.eng.br>
AuthorDate: 2023-11-27 15:53:27 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2023-11-27 20:37:33 +0000

    pfctl: Fix recursive printing of anchor labels
    
    We recently noticed that the recursive printing of labels wasn't working
    like the recursive printing of rules.
    
    When running pfctl -sr -a* we get a listing of all rules, including the
    ones inside anchors. On the other hand, when running pfctl -sl -a*, it
    would only print the labels in the root level, just like without the
    -a* argument.
    
    As in our use-case we are interested on labels only and our labels are
    unique even between anchors, we didn't add indentation or hierarchy to
    the printing.
    
    Sponsored by:   InnoGames GmbH
    Differential Revision:  https://reviews.freebsd.org/D42728
---
 sbin/pfctl/pfctl.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/sbin/pfctl/pfctl.c b/sbin/pfctl/pfctl.c
index b752d87e63c6..2702c701f9cc 100644
--- a/sbin/pfctl/pfctl.c
+++ b/sbin/pfctl/pfctl.c
@@ -1367,6 +1367,14 @@ pfctl_show_rules(int dev, char *path, int opts, enum pfctl_show format,
 				    (unsigned long long)rule.bytes[1],
 				    (uintmax_t)rule.states_tot);
 			}
+
+			if (anchor_call[0] &&
+			    (((p = strrchr(anchor_call, '/')) ?
+			      p[1] == '_' : anchor_call[0] == '_') ||
+			     opts & PF_OPT_RECURSE)) {
+				pfctl_show_rules(dev, npath, opts, format,
+				    anchor_call, depth, rule.anchor_wildcard);
+			}
 			break;
 		}
 		case PFCTL_SHOW_RULES: