mirror of
https://gitlab.com/apparmor/apparmor
synced 2025-09-01 14:55:10 +00:00
refactor autodep to make it easier to add remote repository support
(jmichael)
This commit is contained in:
@@ -600,8 +600,46 @@ sub handle_binfmt ($$) {
|
|||||||
|
|
||||||
$profile->{path}->{$library} = "mr";
|
$profile->{path}->{$library} = "mr";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $profile;
|
sub create_new_profile {
|
||||||
|
my $fqdbin = shift;
|
||||||
|
|
||||||
|
my $profile = {
|
||||||
|
$fqdbin => {
|
||||||
|
flags => "complain",
|
||||||
|
include => { "abstractions/base" => 1 },
|
||||||
|
path => { $fqdbin => "mr" }
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
# if the executable exists on this system, pull in extra dependencies
|
||||||
|
if (-f $fqdbin) {
|
||||||
|
my $hashbang = head($fqdbin);
|
||||||
|
if ($hashbang =~ /^#!\s*(\S+)/) {
|
||||||
|
my $interpreter = get_full_path($1);
|
||||||
|
$profile->{$fqdbin}{path}->{$interpreter} = "ix";
|
||||||
|
if ($interpreter =~ /perl/) {
|
||||||
|
$profile->{$fqdbin}{include}->{"abstractions/perl"} = 1;
|
||||||
|
} elsif ($interpreter =~ m/\/bin\/(bash|sh)/) {
|
||||||
|
$profile->{$fqdbin}{include}->{"abstractions/bash"} = 1;
|
||||||
|
}
|
||||||
|
handle_binfmt($profile->{$fqdbin}, $interpreter);
|
||||||
|
} else {
|
||||||
|
handle_binfmt($profile->{$fqdbin}, $fqdbin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# create required infrastructure hats if it's a known change_hat app
|
||||||
|
for my $hatglob (keys %required_hats) {
|
||||||
|
if ($fqdbin =~ /$hatglob/) {
|
||||||
|
for my $hat (sort split(/\s+/, $required_hats{$hatglob})) {
|
||||||
|
$profile->{$hat} = { flags => "complain" };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return { $fqdbin => $profile };
|
||||||
}
|
}
|
||||||
|
|
||||||
sub autodep ($) {
|
sub autodep ($) {
|
||||||
@@ -617,48 +655,18 @@ sub autodep ($) {
|
|||||||
# ignore directories
|
# ignore directories
|
||||||
return if -d $fqdbin;
|
return if -d $fqdbin;
|
||||||
|
|
||||||
my $profile = {
|
my $profile_data = create_new_profile($fqdbin);
|
||||||
flags => "complain",
|
|
||||||
include => { "abstractions/base" => 1 },
|
|
||||||
path => { $fqdbin => "mr" }
|
|
||||||
};
|
|
||||||
|
|
||||||
# if the executable exists on this system, pull in extra dependencies
|
|
||||||
if (-f $fqdbin) {
|
|
||||||
my $hashbang = head($fqdbin);
|
|
||||||
if ($hashbang =~ /^#!\s*(\S+)/) {
|
|
||||||
my $interpreter = get_full_path($1);
|
|
||||||
$profile->{path}->{$interpreter} = "ix";
|
|
||||||
if ($interpreter =~ /perl/) {
|
|
||||||
$profile->{include}->{"abstractions/perl"} = 1;
|
|
||||||
} elsif ($interpreter =~ m/\/bin\/(bash|sh)/) {
|
|
||||||
$profile->{include}->{"abstractions/bash"} = 1;
|
|
||||||
}
|
|
||||||
$profile = handle_binfmt($profile, $interpreter);
|
|
||||||
} else {
|
|
||||||
$profile = handle_binfmt($profile, $fqdbin);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# stick the profile into our data structure.
|
# stick the profile into our data structure.
|
||||||
$sd{$fqdbin}{$fqdbin} = $profile;
|
attach_profile_data(\%sd, $profile_data);
|
||||||
|
|
||||||
# instantiate the required infrastructure hats for this changehat app
|
|
||||||
for my $hatglob (keys %required_hats) {
|
|
||||||
if ($fqdbin =~ /$hatglob/) {
|
|
||||||
for my $hat (split(/\s+/, $required_hats{$hatglob})) {
|
|
||||||
$sd{$fqdbin}{$hat} = { flags => "complain" };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (-f "$profiledir/tunables/global") {
|
if (-f "$profiledir/tunables/global") {
|
||||||
my $file = getprofilefilename($fqdbin);
|
my $file = getprofilefilename($fqdbin);
|
||||||
|
|
||||||
unless (exists $variables{$file}) {
|
unless (exists $variables{$file}) {
|
||||||
$variables{$file} = {};
|
$variables{$file} = { };
|
||||||
}
|
}
|
||||||
$variables{$file}{"#tunables/global"} = 1; # sorry
|
$variables{$file}{"#tunables/global"} = 1; # sorry
|
||||||
}
|
}
|
||||||
|
|
||||||
# write out the profile...
|
# write out the profile...
|
||||||
|
Reference in New Issue
Block a user