# Copyright (c) 2015-2019, Regents of the University of California,
#                          Arizona Board of Regents,
#                          Colorado State University,
#                          University Pierre & Marie Curie, Sorbonne University,
#                          Washington University in St. Louis,
#                          Beijing Institute of Technology,
#                          The University of Memphis.
#
# This file is part of NFD (Named Data Networking Forwarding Daemon).
# See AUTHORS.md for complete list of NFD authors and contributors.
#
# NFD is free software: you can redistribute it and/or modify it under the terms
# of the GNU General Public License as published by the Free Software Foundation,
# either version 3 of the License, or (at your option) any later version.
#
# NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE.  See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.

[Unit]
Description=NDN Autoconfig Client
Documentation=man:nfd-autoconfig(1)
BindsTo=nfd.service
After=nfd.service

[Service]
Environment=HOME=%S/ndn/ndn-autoconfig
ExecStart=@BINDIR@/ndn-autoconfig --daemon --config @SYSCONFDIR@/ndn/autoconfig.conf
Restart=on-failure
RestartPreventExitStatus=2
User=ndn

CapabilityBoundingSet=
LockPersonality=yes
MemoryDenyWriteExecute=yes
NoNewPrivileges=yes
PrivateDevices=yes
PrivateTmp=yes
PrivateUsers=yes
ProtectControlGroups=yes
ProtectHome=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
# systemd older than v232 doesn't support a value of "strict" for ProtectSystem,
# so it will ignore that line and use ProtectSystem=full; with newer systemd,
# the latter assignment is recognized and takes precedence, resulting in an
# effective setting of ProtectSystem=strict
ProtectSystem=full
ProtectSystem=strict
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
RestrictNamespaces=yes
RestrictRealtime=yes
StateDirectory=ndn/ndn-autoconfig
SystemCallArchitectures=native
SystemCallErrorNumber=EPERM
SystemCallFilter=~@aio @chown @clock @cpu-emulation @debug @keyring @module @mount @obsolete @privileged @raw-io @reboot @resources @setuid @swap

[Install]
WantedBy=multi-user.target
