From 5b782cffd0c2779dc7d156aec9e9e5f970e6bf40 Mon Sep 17 00:00:00 2001 From: Noriko Hosoi Date: Fri, 4 Oct 2013 11:38:33 -0700 Subject: [PATCH 34/39] Ticket #53 - Need to update supported locales commit e0c78d5b87d4d798a936eba9c90f5db5347bcb3c did not include the upgreade script: 60upgradeconfigfiles.pl. Note: This is a part of 389-ds-base-1.3.2.0. (cherry picked from commit 64e0b3799971fa17aae7260ae238e9f68f66c3bd) (cherry picked from commit 5950daa74ef929d6543b04baf2255c65e606a97d) --- ldap/admin/src/scripts/60upgradeconfigfiles.pl | 69 ++++++++++++++++++++++++ 1 files changed, 69 insertions(+), 0 deletions(-) create mode 100644 ldap/admin/src/scripts/60upgradeconfigfiles.pl diff --git a/ldap/admin/src/scripts/60upgradeconfigfiles.pl b/ldap/admin/src/scripts/60upgradeconfigfiles.pl new file mode 100644 index 0000000..4b37353 --- /dev/null +++ b/ldap/admin/src/scripts/60upgradeconfigfiles.pl @@ -0,0 +1,69 @@ +use File::Copy; +use Mozilla::LDAP::LDIF; +use DSCreate qw(installSchema); + +sub runinst { + my ($inf, $inst, $dseldif, $conn) = @_; + + if (!$inf->{slapd}->{config_dir} or (! -d $inf->{slapd}->{config_dir})) { + return ('error_reading_config_dir', $inf->{slapd}->{config_dir}); + } + + # these files are obsolete, or we want to replace + # them with newer versions + my @toremove = qw(slapd-collations.conf); + + # make a backup directory to store the deleted config file, then + # don't really delete it, just move it to that directory + my $mode = (stat($inf->{slapd}->{config_dir}))[2]; + my $bakdir = $inf->{slapd}->{bak_dir} . ".bak"; + if (! -d $bakdir) { + $! = 0; # clear + mkdir $bakdir, $mode; + if ($!) { + return ('error_creating_directory', $bakdir, $!); + } + } + + my @errs; + for my $file (@toremove) { + my $oldname = $inf->{slapd}->{config_dir} . "/" . $file; + next if (! -f $oldname); # does not exist - skip - already (re)moved + my $newname = "$bakdir/$file"; + $! = 0; # clear + rename $oldname, $newname; + if ($!) { + push @errs, ["error_renaming_config", $oldname, $newname, $!]; + } + } + + my $configsrcdir = $inf->{slapd}->{config_dir} . "/../config"; + for my $file (@toremove) { + my $srcname = "$configsrcdir/$file"; + my $newname = $inf->{slapd}->{config_dir} . "/" . $file; + + copy $srcname, $newname; + if ($!) { + push @errs, ["error_renaming_config", $srcname, $newname, $!]; + } + } + + # If we've encountered any errors up to this point, restore + # the original file. + if (@errs) { + # restore the original files + for my $file (@toremove) { + my $oldname = "$bakdir/$file"; + next if (! -f $oldname); # does not exist - not backed up + my $newname = $inf->{slapd}->{config_dir} . "/" . $file; + next if (-f $newname); # not removed + rename $oldname, $newname; + } + return @errs; + } + + if (-d $bakdir) { + system("rm -rf $bakdir"); + } + return (); +} -- 1.7.1