ldap/admin/src/scripts/50fixNsState.pl | 14 ++++++++++----
ldap/admin/src/scripts/DSCreate.pm.in | 4 ++--
ldap/admin/src/scripts/DSUpdate.pm.in | 8 +++++++-
3 files changed, 19 insertions(+), 7 deletions(-)
New commits:
commit 1afc45edb18d22c6bb9c7160a1065f7ec3560622
Author: Rich Megginson <rmeggins(a)redhat.com>
Date: Tue Aug 30 17:47:55 2011 -0600
Bug 703990 - cross-platform - Support upgrade from Red Hat Directory Server
https://bugzilla.redhat.com/show_bug.cgi?id=703990
Resolves: bug 703990
Bug Description: cross-platform - Support upgrade from Red Hat Directory Server
Reviewed by: nhosoi (Thanks!)
Branch: master
Fix Description: There was bug in handling nsState from big-endian systems.
Also, create the instance specific directories if they do not exist, which
is useful if doing a cross-platform upgrade from a system that does not
use the same paths.
Platforms tested: RHEL6 x86_64
Flag Day: no
Doc impact: no
diff --git a/ldap/admin/src/scripts/50fixNsState.pl
b/ldap/admin/src/scripts/50fixNsState.pl
index acf6506..b331e9c 100644
--- a/ldap/admin/src/scripts/50fixNsState.pl
+++ b/ldap/admin/src/scripts/50fixNsState.pl
@@ -72,7 +72,7 @@ sub convert_uniqueid {
my $maxdiff = 86400*365*10; # 10 years
if (($tsdiff > $maxdiff) || (($last_update != 0) && ($last_update != 1)))
{
# try big endian
- ($tslow, $tshigh, $node, $clockseq, $last_update) = unpack($bigfmt, $val);
+ ($tshigh, $tslow, $node, $clockseq, $last_update) = unpack($bigfmt, $val);
$ts = convert_from_32bit($tshigh, $tslow);
$tssecs = ($ts - 0x01B21DD213814000) / 10000000;
$tsdiff = abs($curts - $tssecs);
@@ -120,7 +120,7 @@ sub convert_replica {
$timefmt = 'V'; # timevals are unsigned 64-bit int
$fmtstr = "vx" . $pad . $timefmt . "6vx" . $pad;
$bigfmtstr = 'nx' . $pad . 'N' . '6nx' . $pad;
- ($rid, $st_low, $st_high, $lo_low, $lo_high, $rt_low, $rt_high, $seq_num) =
unpack($fmtstr, $val);
+ ($rid, $st_low, $st_high, $lo_low, $lo_high, $ro_low, $ro_high, $seq_num) =
unpack($fmtstr, $val);
$sampled_time = convert_from_32bit($st_high, $st_low);
$local_offset = convert_from_32bit($lo_high, $lo_low);
$remote_offset = convert_from_32bit($ro_high, $ro_low);
@@ -134,7 +134,7 @@ sub convert_replica {
if ($len <= 20) {
($rid, $sampled_time, $local_offset, $remote_offset, $seq_num) =
unpack($bigfmtstr, $val);
} else {
- ($rid, $st_low, $st_high, $lo_low, $lo_high, $rt_low, $rt_high, $seq_num) =
unpack($bigfmtstr, $val);
+ ($rid, $st_high, $st_low, $lo_high, $lo_low, $ro_high, $ro_low, $seq_num) =
unpack($bigfmtstr, $val);
$sampled_time = convert_from_32bit($st_high, $st_low);
$local_offset = convert_from_32bit($lo_high, $lo_low);
$remote_offset = convert_from_32bit($ro_high, $ro_low);
@@ -222,13 +222,19 @@ sub testit {
#my $testval = "00a43cb4d11db2018b7912fd0000a42e01000000";
#my $testval = "0029B605D21DB201FEB70FFC00007EB301000000";
#my $testval = "00E8FEB72B80E001EC359ED2F4D9F1670100000000000000";
-my $testval = "00123781D21DB201F74C95A90000862201000000";
+#my $testval = "00123781D21DB201F74C95A90000862201000000";
+my $testval = '01E0D2DA53198600A12C2D6BADF15D630100000000000000';
+my $testreplval =
"\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\\\x8b5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00";
my $testdecval = $testval;
# base16 decode
$testdecval =~ s/(..)/chr(hex($1))/eg;
my $ent = new Mozilla::LDAP::Entry;
$ent->setDN("cn=uniqueid generator");
my ($rc, $newval) = convert_uniqueid($ent, $testdecval);
+$ent->setDN('cn=replica');
+my ($rc, $newval2) = convert_replica($ent, $testreplval);
}
+testit() unless caller();
+
1;
diff --git a/ldap/admin/src/scripts/DSCreate.pm.in
b/ldap/admin/src/scripts/DSCreate.pm.in
index ed40ae1..6af5910 100644
--- a/ldap/admin/src/scripts/DSCreate.pm.in
+++ b/ldap/admin/src/scripts/DSCreate.pm.in
@@ -64,9 +64,9 @@ use Mozilla::LDAP::LDIF;
use Exporter;
@ISA = qw(Exporter);
-@EXPORT = qw(createDSInstance removeDSInstance setDefaults createInstanceScripts
+@EXPORT = qw(createDSInstance removeDSInstance setDefaults createInstanceScripts
makeDSDirs
makeOtherConfigFiles installSchema updateSelinuxPolicy
updateTmpfilesDotD);
-@EXPORT_OK = qw(createDSInstance removeDSInstance setDefaults createInstanceScripts
+@EXPORT_OK = qw(createDSInstance removeDSInstance setDefaults createInstanceScripts
makeDSDirs
makeOtherConfigFiles installSchema updateSelinuxPolicy
updateTmpfilesDotD);
use strict;
diff --git a/ldap/admin/src/scripts/DSUpdate.pm.in
b/ldap/admin/src/scripts/DSUpdate.pm.in
index 3b6ccd5..36aa3c9 100644
--- a/ldap/admin/src/scripts/DSUpdate.pm.in
+++ b/ldap/admin/src/scripts/DSUpdate.pm.in
@@ -47,7 +47,8 @@ package DSUpdate;
use DSUtil;
use Inf;
use FileConn;
-use DSCreate qw(setDefaults createInstanceScripts makeOtherConfigFiles
updateSelinuxPolicy updateTmpfilesDotD);
+use DSCreate qw(setDefaults createInstanceScripts makeOtherConfigFiles
+ makeDSDirs updateSelinuxPolicy updateTmpfilesDotD);
use File::Basename qw(basename dirname);
@@ -314,6 +315,11 @@ sub updateDSInstance {
return @errs;
}
+ # create dirs if missing e.g. cross platform upgrade
+ if (@errs = makeDSDirs($inf)) {
+ return @errs;
+ }
+
# upgrade instance scripts
if (@errs = createInstanceScripts($inf, 0)) {
return @errs;