diff --git a/merge-group.pl b/merge-group.pl new file mode 100644 index 0000000..e3d3820 --- /dev/null +++ b/merge-group.pl @@ -0,0 +1,42 @@ +#! /usr/bin/perl +use strict; +use warnings; + +if (scalar @ARGV < 1) { + die "Usage: $0 "; +} + +my $LOWEST_PVV_GID = int($ARGV[0]); + +my @lines = (); + +# Read old group file +open(IN, "/etc/group") || die "Unable to open /etc/group: $!"; +while() { + my @parts = split(":"); + if ($parts[2] < $LOWEST_PVV_GID || $parts[0] eq "nogroup") { + push @lines, $_; + } +} +close IN || die "Unable to close /etc/group: $!"; + +# Read pvv group file +my $groupcount = 0; +open(PVV, "/etc/group.pvv") || die "Unable to open /etc/group.pvv: $!"; +while() { + ++$groupcount; + push @lines, $_; +} +close PVV || die "Unable to close /etc/group.pvv: $!"; + +if ($groupcount < 200) { + die "/etc/group.pvv has less than 200 groups, something went wrong"; +} + +open(OUT, ">/etc/group.tmp") || die "Unable to open /etc/group.tmp for writing: $!"; +foreach (@lines) { + print OUT $_ || die "Can't write to /etc/group.tmp: $!"; +} +close OUT || die "Unable to close /etc/group.tmp: $!"; + +rename "/etc/group.tmp", "/etc/group" || die "Unable to move /etc/group.tmp to /etc/group: $!";