summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNoriko Hosoi <nhosoi@redhat.com>2005-04-02 00:34:18 +0000
committerNoriko Hosoi <nhosoi@redhat.com>2005-04-02 00:34:18 +0000
commit43325bbecf2eb1955a59b3ba7cd2c0d8e805842b (patch)
tree4c574aa684c0ea71082d54a5ff77f0c66988fe5f
parent98843ec1e6ddf64aad4f911da90304e2adfaf32d (diff)
downloadds-43325bbecf2eb1955a59b3ba7cd2c0d8e805842b.tar.gz
ds-43325bbecf2eb1955a59b3ba7cd2c0d8e805842b.tar.xz
ds-43325bbecf2eb1955a59b3ba7cd2c0d8e805842b.zip
[Bug 153175] SSL 6.x -> 7.0 migration script problems
Applied the proposed fix from HP.
-rw-r--r--ldap/admin/src/scripts/template-migrate6to759
1 files changed, 42 insertions, 17 deletions
diff --git a/ldap/admin/src/scripts/template-migrate6to7 b/ldap/admin/src/scripts/template-migrate6to7
index de58c85f..16997477 100644
--- a/ldap/admin/src/scripts/template-migrate6to7
+++ b/ldap/admin/src/scripts/template-migrate6to7
@@ -443,6 +443,7 @@ SWITCH: {
@nsds5replicaAttrs = (
'objectclass',
+ 'nsDS5ReplicaName',
'nsDS5ReplicaRoot',
'nsDS5ReplicaType',
'nsDS5ReplicaLegacyConsumer',
@@ -486,6 +487,12 @@ printTrace("\nBackup $serverHome${PATHSEP}config on $serverHome${PATHSEP}config_
printTrace("\nMigrate the schema...",0);
MigrateSchema();
+#migrate key/cert databases
+# We will migrate the key/cert databases before the dse file because the
+# dse migration may cause SSL to be enabled.
+printTrace("\n\nMigrate key/cert databases...",0,1);
+&MigrateSSL();
+
# start the server unless it is already started
&startServer() unless (isDirectoryAlive());
@@ -527,10 +534,6 @@ printTrace("\n\nMigrate replicas...",0,1);
printTrace("\n\nMigrate replication agreements...",0,1);
&MigrateNSDS_replication_agreement();
-#migrate key/cert databases
-printTrace("\n\nMigrate key/cert databases...",0,1);
-&MigrateSSL();
-
# migrate certmap.conf
printTrace("\n\nMigrate Certmap.conf...",0,1);
&MigrateCertmap() ;
@@ -1600,7 +1603,7 @@ sub MigrateNSDS5_replica{
foreach $replica (@new6replicas) {
my $DN = $replica->getDN(1);
my $newReplica;
- my @removeAttrs = qw(nsstate nsds5replicaname nsds5replicachangecount);
+ my @removeAttrs = qw(nsstate nsds5replicachangecount);
for (@removeAttrs) {
$replica->remove($_);
}
@@ -1906,13 +1909,25 @@ sub migrateChangelog {
$newchangelogdir = ($newChangelog->getValues($changelogdir))[0];
stopServer($root,'slapd-'.$newname);
printTrace("\ncopying $oldchangelogdir${PATHSEP}* to $newchangelogdir",3);
- copyDir("$oldchangelogdir","$newchangelogdir");
- # We need to modify the DBVERSION file for a new verision of the db
- open(DBVERSION,">$newchangelogdir${PATHSEP}DBVERSION") || die "Can't overwrite $newchangelogdir${PATHSEP}DBVERSION: $! ";
- print DBVERSION "Changelog5/NSMMReplicationPlugin/3.0";
- close(DBVERSION);
+ # Clean destination changelog directory
+ opendir(NEWCLDIR, "$newchangelogdir");
+ while($delfile = readdir(NEWCLDIR)) {
+ if ( -f "$newchangelogdir/$delfile" ) {
+ unlink "$newchangelogdir/$delfile" or die "Can't delete $newchangelogdir/$delfile: $!\n";
+ }
+ }
+ copyDir("$oldchangelogdir","$newchangelogdir");
+
+ # We need to modify the DBVERSION file for a new verision of the db
+ # For 6.21 to 7.0, leave it as 4.0. For 6.11 to 7.0 we want the server
+ # to perform the migration at startup, so set it to 3.0.
+ if(substr($oldMinor,0,1) < 2) {
+ open(DBVERSION,">$newchangelogdir${PATHSEP}DBVERSION") || die "Can't overwrite $newchangelogdir${PATHSEP}DBVERSION: $! ";
+ print DBVERSION "Changelog5/NSMMReplicationPlugin/3.0";
+ close(DBVERSION);
+ }
&startServer() unless (isDirectoryAlive());
}
}
@@ -2437,12 +2452,15 @@ sub MigrateSSL {
if (! -d $aliasDir) {
mkdir($aliasDir, 0750);
}
- &stopServer($root,'slapd-'.$newname);
+ &stopServer($root,'slapd-'.$newname) if (isDirectoryAlive());
+
+ my $old_certdb_ver = (substr($oldMinor,0,1) >= 2) ? "8" : "7";
my $keydb = "$aliasDir${PATHSEP}slapd-$newname-key3.db" ;
my $certdb = "$aliasDir${PATHSEP}slapd-$newname-cert8.db" ;
- my $certdb7 = "$aliasDir${PATHSEP}slapd-$newname-cert7.db" ;
+ my $certdb_target = "$aliasDir${PATHSEP}slapd-$newname-cert${old_certdb_ver}.db" ;
my $old_keydb = "$oldDir${PATHSEP}alias${PATHSEP}slapd-$oldname-key3.db" ;
- my $old_certdb = "$oldDir${PATHSEP}alias${PATHSEP}slapd-$oldname-cert7.db";
+ my $old_certdb = "$oldDir${PATHSEP}alias${PATHSEP}slapd-$oldname-cert${old_certdb_ver}.db";
+
my $keydb_backup = "$aliasDir${PATHSEP}slapd-$newname-key3.db_backup" ;
my $certdb_backup = "$aliasDir${PATHSEP}slapd-$newname-cert7.db_backup" ;
if (-f $old_keydb) {
@@ -2471,19 +2489,19 @@ sub MigrateSSL {
printMsg("\n$certdb already exists. backup in $certdb_backup ...");
&copyBinFile($certdb,$certdb_backup);
unlink($certdb) || print "Couldn't delete $certdb : $!\n";
- &copyBinFile($old_certdb,$certdb7);
+ &copyBinFile($old_certdb,$certdb_target);
}
else {
print("\n\n$certdb already exists. Do you want to overwrite it ? [no]: ");
my $answer = <STDIN> ;
if ($answer =~ /^y|yes$/i) {
unlink($certdb) || print "Couldn't delete $certdb : $!\n";
- &copyBinFile($old_certdb,$certdb7);
+ &copyBinFile($old_certdb,$certdb_target);
}
}
}
else {
- &copyBinFile($old_certdb,$certdb7);
+ &copyBinFile($old_certdb,$certdb_target);
}
}
# copy the old password file
@@ -2494,7 +2512,7 @@ sub MigrateSSL {
);
}
&startServer();
- if ($PRESERVE) {
+ if ($PRESERVE && $old_certdb_ver == 7) {
chown($newuid,$newgid,$certdb) || print "Failed to set uid $newuid gid $newgid on $certdb : $!\n";
chmod($mode,$certdb) || print "Failed to set mode $mode on $certdb : $!\n";
}
@@ -3037,10 +3055,17 @@ sub migrate_credential{
chomp($credServerHome = <STDIN>);
}
}
+
+ my $cur_dir = getCwd();
+ my $migratecreddir = "${quote}$root${PATHSEP}bin${PATHSEP}slapd${PATHSEP}server";
+ chdir(${migratecreddir}) or die "Could not change directory to $migratecreddir: $!";
+
# print "\nMigratecred command is: ${quote}$root${PATHSEP}bin${PATHSEP}slapd${PATHSEP}server${PATHSEP}$migratecredExecName${quote} -o $credOldHome -n $credServerHome -c @old_value\n";
my @new_cred = `${quote}$root${PATHSEP}bin${PATHSEP}slapd${PATHSEP}server${PATHSEP}$migratecredExecName${quote} -o $credOldHome -n $credServerHome -c @old_value`;
+ chdir(${cur_dir}) or die "Could not change directory back to $cur_dir: $!";
+
if ( $? == 0 )
{
$entry_to_modify->setValues($credentials_attr, @new_cred);