about summary refs log tree commit diff
path: root/nixos/modules
diff options
context:
space:
mode:
authorJonas Heinrich <onny@project-insanity.org>2023-11-05 16:01:20 +0100
committerGitHub <noreply@github.com>2023-11-05 16:01:20 +0100
commit35128eb6f81381da2a38094d6b3976c61d792489 (patch)
tree2045acfe89840fe177de0bae5edd1b008f047342 /nixos/modules
parent315e3635bf17229eb5f8da66c755de83960f0e36 (diff)
nixos/printing: Add openFirewall option (#176539)
Diffstat (limited to 'nixos/modules')
-rw-r--r--nixos/modules/services/printing/cupsd.nix23
1 files changed, 23 insertions, 0 deletions
diff --git a/nixos/modules/services/printing/cupsd.nix b/nixos/modules/services/printing/cupsd.nix
index 279b26bb89573..25367f8e61d49 100644
--- a/nixos/modules/services/printing/cupsd.nix
+++ b/nixos/modules/services/printing/cupsd.nix
@@ -108,6 +108,13 @@ let
   containsGutenprint = pkgs: length (filterGutenprint pkgs) > 0;
   getGutenprint = pkgs: head (filterGutenprint pkgs);
 
+  parsePorts = addresses: let
+    splitAddress = addr: lib.strings.splitString ":" addr;
+    extractPort = addr: builtins.elemAt (builtins.tail (splitAddress addr)) 0;
+    toInt = str: lib.strings.toInt str;
+  in
+    builtins.map (address: toInt (extractPort address)) addresses;
+
 in
 
 {
@@ -172,6 +179,15 @@ in
         '';
       };
 
+      openFirewall = mkOption {
+        type = types.bool;
+        default = false;
+        description = ''
+          Whether to open the firewall for TCP/UDP ports specified in
+          listenAdrresses option.
+        '';
+      };
+
       bindirCmds = mkOption {
         type = types.lines;
         internal = true;
@@ -463,6 +479,13 @@ in
 
     security.pam.services.cups = {};
 
+    networking.firewall = let
+      listenPorts = parsePorts cfg.listenAddresses;
+    in mkIf cfg.openFirewall {
+      allowedTCPPorts = listenPorts;
+      allowedUDPPorts = listenPorts;
+    };
+
   };
 
   meta.maintainers = with lib.maintainers; [ matthewbauer ];