Fix missing firewalld.conf when modifying zone services

When users modified firewall zone services (e.g., enabling SSH on WAN),
firewalld.conf would disappear from /etc/firewalld/, causing firewalld
to fail with "Failed to load '/etc/firewalld/firewalld.conf': [Errno 2]
No such file or directory".

Root cause: After switching to the "roll in" staging directory approach
late in development, firewalld.conf generation was still conditional on
changes to "default" or "logging" settings. When other changes (zones,
services, policies) were made:

1. Code created /etc/firewalld+/ staging directory
2. Skipped generating firewalld.conf (no default/logging in diff)
3. On commit: rm -rf /etc/firewalld (deleted firewalld.conf!)
4. Renamed /etc/firewalld+ → /etc/firewalld (incomplete config)

Fix: Always generate firewalld.conf whenever firewall configuration is
being staged, not just for default/logging changes.

Fixes #1346

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
Joachim Wiberg
2026-01-13 07:25:52 +01:00
parent 5a651800f3
commit 125ea47d6e
+2 -3
View File
@@ -549,9 +549,8 @@ int firewall_change(sr_session_ctx_t *session, struct lyd_node *config, struct l
goto done;
}
if (lydx_get_descendant(diff, "firewall", "default", NULL) ||
lydx_get_descendant(diff, "firewall", "logging", NULL))
generate_firewalld_conf(global);
/* Always generate firewalld.conf when firewall is enabled */
generate_firewalld_conf(global);
/*
* Regenerate everything if anything in firewall changed, firewalld