nixos/specialisation: escape and restrict specialisation names (#405393)

This commit is contained in:
Ramses 2025-05-17 19:47:05 +02:00 committed by GitHub
commit 139080c304
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -10,6 +10,8 @@
let let
inherit (lib) inherit (lib)
concatStringsSep concatStringsSep
escapeShellArg
hasInfix
mapAttrs mapAttrs
mapAttrsToList mapAttrsToList
mkOption mkOption
@ -84,10 +86,18 @@ in
}; };
config = { config = {
assertions = mapAttrsToList (name: _: {
assertion = !hasInfix "/" name;
message = ''
Specialisation names must not contain forward slashes.
Invalid specialisation name: ${name}
'';
}) config.specialisation;
system.systemBuilderCommands = '' system.systemBuilderCommands = ''
mkdir $out/specialisation mkdir $out/specialisation
${concatStringsSep "\n" ( ${concatStringsSep "\n" (
mapAttrsToList (name: path: "ln -s ${path} $out/specialisation/${name}") children mapAttrsToList (name: path: "ln -s ${path} $out/specialisation/${escapeShellArg name}") children
)} )}
''; '';
}; };