aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/nixos/modules/services/networking/powerdns.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/nixos/modules/services/networking/powerdns.nix')
-rw-r--r--nixpkgs/nixos/modules/services/networking/powerdns.nix49
1 files changed, 49 insertions, 0 deletions
diff --git a/nixpkgs/nixos/modules/services/networking/powerdns.nix b/nixpkgs/nixos/modules/services/networking/powerdns.nix
new file mode 100644
index 00000000000..ba05e15389f
--- /dev/null
+++ b/nixpkgs/nixos/modules/services/networking/powerdns.nix
@@ -0,0 +1,49 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+ cfg = config.services.powerdns;
+ configDir = pkgs.writeTextDir "pdns.conf" "${cfg.extraConfig}";
+in {
+ options = {
+ services.powerdns = {
+ enable = mkEnableOption "Powerdns domain name server";
+
+ extraConfig = mkOption {
+ type = types.lines;
+ default = "launch=bind";
+ description = ''
+ Extra lines to be added verbatim to pdns.conf.
+ Powerdns will chroot to /var/lib/powerdns.
+ So any file, powerdns is supposed to be read,
+ should be in /var/lib/powerdns and needs to specified
+ relative to the chroot.
+ '';
+ };
+ };
+ };
+
+ config = mkIf config.services.powerdns.enable {
+ systemd.services.pdns = {
+ unitConfig.Documentation = "man:pdns_server(1) man:pdns_control(1)";
+ description = "Powerdns name server";
+ wantedBy = [ "multi-user.target" ];
+ after = ["network.target" "mysql.service" "postgresql.service" "openldap.service"];
+
+ serviceConfig = {
+ Restart="on-failure";
+ RestartSec="1";
+ StartLimitInterval="0";
+ PrivateDevices=true;
+ CapabilityBoundingSet="CAP_CHOWN CAP_NET_BIND_SERVICE CAP_SETGID CAP_SETUID CAP_SYS_CHROOT";
+ NoNewPrivileges=true;
+ ExecStartPre = "${pkgs.coreutils}/bin/mkdir -p /var/lib/powerdns";
+ ExecStart = "${pkgs.powerdns}/bin/pdns_server --setuid=nobody --setgid=nogroup --chroot=/var/lib/powerdns --socket-dir=/ --daemon=no --guardian=no --disable-syslog --write-pid=no --config-dir=${configDir}";
+ ProtectSystem="full";
+ ProtectHome=true;
+ RestrictAddressFamilies="AF_UNIX AF_INET AF_INET6";
+ };
+ };
+ };
+}