Round 283: SELinux ext, AppArmor ext, Firewalld ext, Nftables ext, Iptables ext (20 commands)

ober

b9021edf045c84921e8d9e31eb21b681a5f03044

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index f4842d7..83e7d10 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -4583,6 +4583,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | ebib-import-file | :orange_circle: | Import file into Ebib |
 | ebib-push-citation | :orange_circle: | Push Ebib citation to buffer |
 
+### Round 283 — SELinux ext, AppArmor ext, Firewalld ext, Nftables ext, Iptables ext
+
+| Command | Status | Description |
+|---------|--------|-------------|
+| selinux-status | :orange_circle: | Show SELinux status |
+| selinux-toggle | :orange_circle: | Toggle SELinux mode |
+| selinux-audit | :orange_circle: | View SELinux audit log |
+| selinux-context | :orange_circle: | Show file SELinux context |
+| apparmor-status | :orange_circle: | Show AppArmor status |
+| apparmor-enforce | :orange_circle: | Set profile to enforce |
+| apparmor-complain | :orange_circle: | Set profile to complain |
+| apparmor-disable | :orange_circle: | Disable AppArmor profile |
+| firewalld-status | :orange_circle: | Show firewalld status |
+| firewalld-add-rule | :orange_circle: | Add firewalld rule |
+| firewalld-remove-rule | :orange_circle: | Remove firewalld rule |
+| firewalld-list-zones | :orange_circle: | List firewalld zones |
+| nftables-list | :orange_circle: | List nftables ruleset |
+| nftables-add | :orange_circle: | Add nftables rule |
+| nftables-flush | :orange_circle: | Flush nftables ruleset |
+| nftables-save | :orange_circle: | Save nftables ruleset |
+| iptables-list | :orange_circle: | List iptables rules |
+| iptables-add | :orange_circle: | Add iptables rule |
+| iptables-delete | :orange_circle: | Delete iptables rule |
+| iptables-save | :orange_circle: | Save iptables rules |
+
 ### Round 282 — Syslog ext, Journalctl ext, Logrotate ext, Rsyslog ext, Auditd ext
 
 | Command | Status | Description |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index abf346b..53246a0 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -22023,4 +22023,54 @@
   (let* ((echo (app-state-echo app)))
     (echo-read-string echo "Export path: "
       (lambda (path)
-        (echo-message! echo (str "Journalctl: exporting to " path))))))
\ No newline at end of file
+        (echo-message! echo (str "Journalctl: exporting to " path))))))
+
+;;; Round 283 — Firewalld ext, Nftables ext, Iptables ext (batch 2)
+
+(def (cmd-firewalld-remove-rule app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Rule: "
+      (lambda (rule)
+        (echo-message! echo (str "Firewalld: removing rule " rule))))))
+
+(def (cmd-firewalld-list-zones app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Firewalld: listing zones")))
+
+(def (cmd-nftables-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Nftables: listing ruleset")))
+
+(def (cmd-nftables-add app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Rule: "
+      (lambda (rule)
+        (echo-message! echo (str "Nftables: adding " rule))))))
+
+(def (cmd-nftables-flush app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Nftables: flushing ruleset")))
+
+(def (cmd-nftables-save app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Nftables: saving ruleset")))
+
+(def (cmd-iptables-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Iptables: listing rules")))
+
+(def (cmd-iptables-add app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Rule: "
+      (lambda (rule)
+        (echo-message! echo (str "Iptables: adding " rule))))))
+
+(def (cmd-iptables-delete app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Rule number: "
+      (lambda (num)
+        (echo-message! echo (str "Iptables: deleting rule " num))))))
+
+(def (cmd-iptables-save app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Iptables: saving rules")))
\ No newline at end of file
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 9794fc6..847bea0 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -22676,3 +22676,55 @@
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Logrotate: forcing rotation")))
 
+;;; Round 283 — SELinux ext, AppArmor ext, Firewalld ext (batch 1)
+
+(def (cmd-selinux-status app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SELinux: showing status")))
+
+(def (cmd-selinux-toggle app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SELinux: toggling enforcement mode")))
+
+(def (cmd-selinux-audit app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SELinux: viewing audit log")))
+
+(def (cmd-selinux-context app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "File path: "
+      (lambda (path)
+        (echo-message! echo (str "SELinux: context of " path))))))
+
+(def (cmd-apparmor-status app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "AppArmor: showing status")))
+
+(def (cmd-apparmor-enforce app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Profile: "
+      (lambda (prof)
+        (echo-message! echo (str "AppArmor: enforcing " prof))))))
+
+(def (cmd-apparmor-complain app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Profile: "
+      (lambda (prof)
+        (echo-message! echo (str "AppArmor: complain mode " prof))))))
+
+(def (cmd-apparmor-disable app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Profile: "
+      (lambda (prof)
+        (echo-message! echo (str "AppArmor: disabling " prof))))))
+
+(def (cmd-firewalld-status app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Firewalld: showing status")))
+
+(def (cmd-firewalld-add-rule app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Rule: "
+      (lambda (rule)
+        (echo-message! echo (str "Firewalld: adding rule " rule))))))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 7f1dec8..31db53d 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -7360,4 +7360,25 @@
   (register-command! 'syslog-remote cmd-syslog-remote)
   (register-command! 'syslog-archive cmd-syslog-archive)
   (register-command! 'journalctl-export cmd-journalctl-export)
+  ;; Round 283
+  (register-command! 'selinux-status cmd-selinux-status)
+  (register-command! 'selinux-toggle cmd-selinux-toggle)
+  (register-command! 'selinux-audit cmd-selinux-audit)
+  (register-command! 'selinux-context cmd-selinux-context)
+  (register-command! 'apparmor-status cmd-apparmor-status)
+  (register-command! 'apparmor-enforce cmd-apparmor-enforce)
+  (register-command! 'apparmor-complain cmd-apparmor-complain)
+  (register-command! 'apparmor-disable cmd-apparmor-disable)
+  (register-command! 'firewalld-status cmd-firewalld-status)
+  (register-command! 'firewalld-add-rule cmd-firewalld-add-rule)
+  (register-command! 'firewalld-remove-rule cmd-firewalld-remove-rule)
+  (register-command! 'firewalld-list-zones cmd-firewalld-list-zones)
+  (register-command! 'nftables-list cmd-nftables-list)
+  (register-command! 'nftables-add cmd-nftables-add)
+  (register-command! 'nftables-flush cmd-nftables-flush)
+  (register-command! 'nftables-save cmd-nftables-save)
+  (register-command! 'iptables-list cmd-iptables-list)
+  (register-command! 'iptables-add cmd-iptables-add)
+  (register-command! 'iptables-delete cmd-iptables-delete)
+  (register-command! 'iptables-save cmd-iptables-save)
 )