2 # Helper script for synchronizing /etc/passwd, /etc/group, and /etc/shadow
6 my $all = $ARGV[0] eq '--all';
9 print "Syncing /etc/passwd\n";
10 open my $p, '<', '/etc/passwd' or die;
11 open my $q, '>', '/etc/passwd.new' or die;
12 system qw(chmod --reference /etc/passwd /etc/passwd.new);
13 system qw(chown --reference /etc/passwd /etc/passwd.new);
17 # FIXME: Hard-wired UIDs
18 if ($a[3] < 65000 || $a[3] >= 65500) {
23 open my $r, '<', 'etcpasswd' or die;
24 while (<$r>) { print $q $_; }
28 push @files, 'passwd';
30 print "Syncing /etc/group\n";
31 open my $p, '<', '/etc/group' or die;
32 open my $q, '>', '/etc/group.new' or die;
33 system qw(chmod --reference /etc/group /etc/group.new);
34 system qw(chown --reference /etc/group /etc/group.new);
37 # FIXME: Hard-wired GIDs
38 if ($a[2] < 65000 || $a[2] >= 65500) {
42 open my $r, '<', 'etcgroup' or die;
43 while (<$r>) { print $q $_; }
50 print "Syncing /etc/shadow\n";
51 open my $p, '<', '/etc/shadow' or die;
52 open my $q, '>', '/etc/shadow.new' or die;
53 system qw(chmod --reference /etc/shadow /etc/shadow.new);
54 system qw(chown --reference /etc/shadow /etc/shadow.new);
57 if ($sysusers{$a[0]}) {
61 open my $r, '<', 'etcshadow' or die;
62 while (<$r>) { print $q $_; }
66 push @files, 'shadow';
70 rename "/etc/$f", "/etc/$f.old" or die "Rename failed: $!\n";
71 rename "/etc/$f.new", "/etc/$f" or die "Rename failed: $!\n";