# apparmor.d - Full set of apparmor profiles
# Copyright (C) 2022-2024 Alexandre Pujol <alexandre@pujol.io>
# SPDX-License-Identifier: GPL-2.0-only

abi <abi/4.0>,

include <tunables/global>

@{exec_path} = @{bin}/etckeeper
@{att} = ""
profile etckeeper /{,usr/}bin/etckeeper {
  include <abstractions/base-strict>
  include <abstractions/cgroup-limits>
  include <abstractions/consoles>
  include <abstractions/nameservice-strict>
  include <abstractions/perl>

  capability dac_read_search,
  capability dac_override,

  @{exec_path} mrix,

  @{sh_path}            rix,
  @{bin}/{,e}grep       rix,
  @{bin}/cat            rix,
  @{bin}/chmod          rix,
  @{bin}/cut            rix,
  @{bin}/diff           rix,
  @{bin}/dpkg           rpx -> child-dpkg,
  @{bin}/dpkg-query     rpx,
  @{bin}/find           rix,
  @{bin}/getent         rix,
  @{bin}/git*           rix,
  @{bin}/gpg{,2}        rcx -> gpg,
  @{bin}/hostname       rix,
  @{bin}/man            rpx,
  @{bin}/mkdir          rix,
  @{bin}/mktemp         rix,
  @{bin}/pacman          cx -> pacman,
  @{bin}/ps             rpx,
  @{bin}/rev            rix,
  @{bin}/rm             rix,
  @{bin}/sed            rix,
  @{bin}/sort           rix,
  @{bin}/tail           rix,
  @{bin}/tty            rix,
  @{bin}/uniq           rix,
  @{bin}/whoami         rix,
  @{bin}/xargs          rix,
  @{lib}/git{,-core}/git*  rix,

  /etc/.git/hooks/*     rix,
  /etc/etckeeper/*.d/*  rix,
  /etc/etckeeper/daily  rix,

  #aa:lint ignore=too-wide
  /etc/   rw,
  /etc/** rwlk -> /etc/**,

  /var/cache/etckeeper/{,**} rw,

        @{HOME}/.gitconfig* r,
  owner @{HOME}/.netrc r,
  owner @{user_config_dirs}/git/{,*} rw,

  owner @{tmp}/etckeeper-git* rw,

  owner @{PROC}/@{pid}/fd/ r,

  profile gpg {
    include <abstractions/base-strict>
    include <abstractions/consoles>

    @{bin}/gpg{,2}     mr,
    @{bin}/gpg-agent  rpx,

    owner @{user_gpg_dirs}/ rw,
    owner @{user_gpg_dirs}/** rwlk -> @{user_gpg_dirs}/**,

    owner @{PROC}/@{pid}/fd/ r,

    include if exists <local/etckeeper_gpg>
  }

  profile pacman {
    include <abstractions/base-strict>
    include <abstractions/consoles>
    include <abstractions/nameservice-strict>

    unix (send receive) type=stream,

    @{bin}/pacman  r,

    @{bin}/gpg     rix,
    @{bin}/gpgconf rix,
    @{bin}/gpgsm   rix,

    /etc/pacman.conf r,
    /etc/pacman.d/gnupg/gpg.conf r,
    /etc/pacman.d/gnupg/pubring.gpg r,
    /etc/pacman.d/gnupg/trustdb.gpg rw,
    /etc/pacman.d/*mirrorlist r,

    / r,

    /var/cache/etckeeper/packagelist.pre-install rw,
    /var/lib/pacman/{,**} r,

    deny network inet dgram,
    deny network inet6 dgram,

    include if exists <local/etckeeper_pacman>
  }

  include if exists <local/etckeeper>
}

# vim:syntax=apparmor
