summary refs log tree commit diff
path: root/nixos
diff options
context:
space:
mode:
authorJörg Thalheim <joerg@thalheim.io>2020-09-23 10:44:59 +0200
committerJörg Thalheim <joerg@thalheim.io>2020-09-23 10:50:55 +0200
commit52bdb3eb7bc853873d68187494c2a683ce3084bc (patch)
tree4973326874cf07c87f25e24bc72bc224f6132a2f /nixos
parent8403806a3953ac75ad1141e578e55293114a0617 (diff)
downloadnixpkgs-52bdb3eb7bc853873d68187494c2a683ce3084bc.tar
nixpkgs-52bdb3eb7bc853873d68187494c2a683ce3084bc.tar.gz
nixpkgs-52bdb3eb7bc853873d68187494c2a683ce3084bc.tar.bz2
nixpkgs-52bdb3eb7bc853873d68187494c2a683ce3084bc.tar.lz
nixpkgs-52bdb3eb7bc853873d68187494c2a683ce3084bc.tar.xz
nixpkgs-52bdb3eb7bc853873d68187494c2a683ce3084bc.tar.zst
nixpkgs-52bdb3eb7bc853873d68187494c2a683ce3084bc.zip
nixos/update-users-group: treat all file as utf-8
Ideally we would treat everything as bytes however our database is
already utf-8 encoded so we need to stay compatible.
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/config/update-users-groups.pl11
1 files changed, 5 insertions, 6 deletions
diff --git a/nixos/modules/config/update-users-groups.pl b/nixos/modules/config/update-users-groups.pl
index e1c7a46e430..979f6464f08 100644
--- a/nixos/modules/config/update-users-groups.pl
+++ b/nixos/modules/config/update-users-groups.pl
@@ -98,7 +98,7 @@ sub parseGroup {
     return ($f[0], { name => $f[0], password => $f[1], gid => $gid, members => $f[3] });
 }
 
-my %groupsCur = -f "/etc/group" ? map { parseGroup } read_file("/etc/group") : ();
+my %groupsCur = -f "/etc/group" ? map { parseGroup } read_file("/etc/group", { binmode => ":utf8" }) : ();
 
 # Read the current /etc/passwd.
 sub parseUser {
@@ -109,20 +109,19 @@ sub parseUser {
     return ($f[0], { name => $f[0], fakePassword => $f[1], uid => $uid,
         gid => $f[3], description => $f[4], home => $f[5], shell => $f[6] });
 }
-
-my %usersCur = -f "/etc/passwd" ? map { parseUser } read_file("/etc/passwd") : ();
+my %usersCur = -f "/etc/passwd" ? map { parseUser } read_file("/etc/passwd", { binmode => ":utf8" }) : ();
 
 # Read the groups that were created declaratively (i.e. not by groups)
 # in the past. These must be removed if they are no longer in the
 # current spec.
 my $declGroupsFile = "/var/lib/nixos/declarative-groups";
 my %declGroups;
-$declGroups{$_} = 1 foreach split / /, -e $declGroupsFile ? read_file($declGroupsFile) : "";
+$declGroups{$_} = 1 foreach split / /, -e $declGroupsFile ? read_file($declGroupsFile, { binmode => ":utf8" }) : "";
 
 # Idem for the users.
 my $declUsersFile = "/var/lib/nixos/declarative-users";
 my %declUsers;
-$declUsers{$_} = 1 foreach split / /, -e $declUsersFile ? read_file($declUsersFile) : "";
+$declUsers{$_} = 1 foreach split / /, -e $declUsersFile ? read_file($declUsersFile, { binmode => ":utf8" }) : "";
 
 
 # Generate a new /etc/group containing the declared groups.
@@ -260,7 +259,7 @@ system("nscd --invalidate passwd");
 my @shadowNew;
 my %shadowSeen;
 
-foreach my $line (-f "/etc/shadow" ? read_file("/etc/shadow") : ()) {
+foreach my $line (-f "/etc/shadow" ? read_file("/etc/shadow", { binmode => ":utf8" }) : ()) {
     chomp $line;
     my ($name, $hashedPassword, @rest) = split(':', $line, -9);
     my $u = $usersOut{$name};;