summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMilan Bouchet-Valat <nalimilan@club.fr>2010-03-14 15:51:31 +0100
committerMilan Bouchet-Valat <nalimilan@club.fr>2010-03-14 16:13:13 +0100
commitbd607d9be07d9ad001e282525588cfea8667039a (patch)
treec8b47e1fe2e3f290ef3a90ea0758b59c1608bdaa
parent475e95c7c18181b82a51ca67fb0caecc5d8083e6 (diff)
Don't reload whole groups configuration on every individual change
Load the config once when committing, to avoid reloading it many times when committing the whole GroupsConfig.
-rw-r--r--Users/Groups.pm17
1 files changed, 15 insertions, 2 deletions
diff --git a/Users/Groups.pm b/Users/Groups.pm
index da492ad..f68d9b4 100644
--- a/Users/Groups.pm
+++ b/Users/Groups.pm
@@ -301,14 +301,27 @@ sub get_files
sub set
{
my ($config) = @_;
+ my ($groups) = &get ();
+ my ($new_group, $group);
return if (!$config);
+
+ # Make backups manually, otherwise they don't get backed up.
+ &Utils::File::do_backup ($group_names);
+
# Change groups that are present in both old and new config.
# Groups won't be removed or added this way, for more safety.
- foreach $group (@$config)
+ foreach $new_group (@$config)
{
- set_group ($group);
+ foreach $group (@$groups)
+ {
+ if ($$new_group[$GID] == $$group[$GID])
+ {
+ &change_group ($group, $new_group);
+ break;
+ }
+ }
}
}