From de21ff07a677959d9ed6f0349efafdbe28ce4403 Mon Sep 17 00:00:00 2001 From: Alexandre Pujol Date: Thu, 3 Oct 2024 11:55:33 +0100 Subject: [PATCH] build: move upstream overwrite to its own build tasks. It allow us to controll when we want to do it and either or not it should be enabled. --- cmd/prebuild/main.go | 1 + pkg/prebuild/cli/cli.go | 4 +- pkg/prebuild/prepare/configure.go | 41 ------------------- pkg/prebuild/prepare/core_test.go | 6 +++ pkg/prebuild/prepare/overwrite.go | 67 +++++++++++++++++++++++++++++++ 5 files changed, 76 insertions(+), 43 deletions(-) create mode 100644 pkg/prebuild/prepare/overwrite.go diff --git a/cmd/prebuild/main.go b/cmd/prebuild/main.go index 629b37ed..51bbca85 100644 --- a/cmd/prebuild/main.go +++ b/cmd/prebuild/main.go @@ -25,6 +25,7 @@ func init() { "merge", "configure", "setflags", + "overwrite", "systemd-default", ) diff --git a/pkg/prebuild/cli/cli.go b/pkg/prebuild/cli/cli.go index b82d918a..e629b46c 100644 --- a/pkg/prebuild/cli/cli.go +++ b/pkg/prebuild/cli/cli.go @@ -106,8 +106,8 @@ func Prebuild() { if file != "" { sync, _ := prepare.Tasks["synchronise"].(*prepare.Synchronise) sync.Path = file - configure, _ := prepare.Tasks["configure"].(*prepare.Configure) - configure.OneFile = true + overwrite, _ := prepare.Tasks["overwrite"].(*prepare.Overwrite) + overwrite.OneFile = true } logging.Step("Building apparmor.d profiles for %s on ABI%d.", prebuild.Distribution, prebuild.ABI) diff --git a/pkg/prebuild/prepare/configure.go b/pkg/prebuild/prepare/configure.go index 6be35d3d..9a423060 100644 --- a/pkg/prebuild/prepare/configure.go +++ b/pkg/prebuild/prepare/configure.go @@ -6,7 +6,6 @@ package prepare import ( "fmt" - "os" "github.com/roddhjav/apparmor.d/pkg/prebuild" "github.com/roddhjav/apparmor.d/pkg/util" @@ -14,7 +13,6 @@ import ( type Configure struct { prebuild.Base - OneFile bool } func init() { @@ -23,18 +21,12 @@ func init() { Keyword: "configure", Msg: "Set distribution specificities", }, - OneFile: false, }) } func (p Configure) Apply() ([]string, error) { res := []string{} - if prebuild.ABI == 4 { - if err := OverwriteUpstreamProfile(p.OneFile); err != nil { - return res, err - } - } switch prebuild.Distribution { case "arch", "opensuse": @@ -65,36 +57,3 @@ func (p Configure) Apply() ([]string, error) { } return res, nil } - -// Overwrite upstream profile: disable upstream & rename ours -func OverwriteUpstreamProfile(oneFile bool) error { - const ext = ".apparmor.d" - disableDir := prebuild.RootApparmord.Join("disable") - if err := disableDir.Mkdir(); err != nil { - return err - } - - path := prebuild.DistDir.Join("overwrite") - if !path.Exist() { - return fmt.Errorf("%s not found", path) - } - for _, name := range util.MustReadFileAsLines(path) { - origin := prebuild.RootApparmord.Join(name) - dest := prebuild.RootApparmord.Join(name + ext) - if !dest.Exist() && oneFile { - continue - } - if err := origin.Rename(dest); err != nil { - - return err - } - originRel, err := origin.RelFrom(dest) - if err != nil { - return err - } - if err := os.Symlink(originRel.String(), disableDir.Join(name).String()); err != nil { - return err - } - } - return nil -} diff --git a/pkg/prebuild/prepare/core_test.go b/pkg/prebuild/prepare/core_test.go index 3c35e3e8..ea18d2cd 100644 --- a/pkg/prebuild/prepare/core_test.go +++ b/pkg/prebuild/prepare/core_test.go @@ -64,6 +64,12 @@ func TestTask_Apply(t *testing.T) { wantErr: false, want: "dists/flags/main.flags", }, + { + name: "overwrite", + task: Tasks["overwrite"], + wantErr: false, + wantFiles: paths.PathList{prebuild.RootApparmord.Join("flatpak.apparmor.d")}, + }, { name: "systemd-default", task: Tasks["systemd-default"], diff --git a/pkg/prebuild/prepare/overwrite.go b/pkg/prebuild/prepare/overwrite.go new file mode 100644 index 00000000..209e8dc8 --- /dev/null +++ b/pkg/prebuild/prepare/overwrite.go @@ -0,0 +1,67 @@ +// apparmor.d - Full set of apparmor profiles +// Copyright (C) 2021-2024 Alexandre Pujol +// SPDX-License-Identifier: GPL-2.0-only + +package prepare + +import ( + "fmt" + "os" + + "github.com/roddhjav/apparmor.d/pkg/prebuild" + "github.com/roddhjav/apparmor.d/pkg/util" +) + +const ext = ".apparmor.d" + +type Overwrite struct { + prebuild.Base + OneFile bool +} + +func init() { + RegisterTask(&Overwrite{ + Base: prebuild.Base{ + Keyword: "overwrite", + Msg: "Overwrite dummy upstream profiles", + }, + OneFile: false, + }) +} + +func (p Overwrite) Apply() ([]string, error) { + res := []string{} + if prebuild.ABI == 3 { + return res, nil + } + + disableDir := prebuild.RootApparmord.Join("disable") + if err := disableDir.Mkdir(); err != nil { + return res, err + } + + path := prebuild.DistDir.Join("overwrite") + if !path.Exist() { + return res, fmt.Errorf("%s not found", path) + } + for _, name := range util.MustReadFileAsLines(path) { + origin := prebuild.RootApparmord.Join(name) + dest := prebuild.RootApparmord.Join(name + ext) + if !dest.Exist() && p.OneFile { + continue + } + if err := origin.Rename(dest); err != nil { + + return res, err + } + originRel, err := origin.RelFrom(dest) + if err != nil { + return res, err + } + if err := os.Symlink(originRel.String(), disableDir.Join(name).String()); err != nil { + return res, err + } + } + + return res, nil +}