diff options
author | Noriko Hosoi <nhosoi@redhat.com> | 2010-07-22 12:10:22 -0700 |
---|---|---|
committer | Noriko Hosoi <nhosoi@redhat.com> | 2010-07-22 12:10:22 -0700 |
commit | 2f9943f02911e6ee7de2d28860a929345fae629c (patch) | |
tree | 08011764abd45007e485860a8ab143164ae35b15 /ldap/admin | |
parent | 2a03eed6f1bb8d70d529b9248603e0449f07ec30 (diff) | |
download | ds-2f9943f02911e6ee7de2d28860a929345fae629c.tar.gz ds-2f9943f02911e6ee7de2d28860a929345fae629c.tar.xz ds-2f9943f02911e6ee7de2d28860a929345fae629c.zip |
616618 - 389 v1.2.5 accepts 2 identical entries with different DN formats
https://bugzilla.redhat.com/show_bug.cgi?id=616618
Change Description:
. renamed 91upgradednformat.pl to 80upgradednformat.pl to run
upgradednformat before 90subtreerename.pl.
. ported following patches applied to Directory_Server_8_2_Branch
to master and 389-ds-base-1.2.6.
612771 - RHDS 8.1/389 v1.2.5 accepts 2 identical entries with
different DN formats
* commit 50bb2ee6676e10cdda704982dfa831efa4011037
Fix Description:
This patch fixes the upgradednformat utility to eliminate the
duplicated DNs found in the upgrading period. Assuming DN:
attr0=value0,attr1=value1,...,attrn=valuen exists in the DB
and another identical DN is found, the second DN is renamed to
nsuniqueid=<uuid>+attr0=value0,attr1=value1,...,attrn=valuen
, where the <uuid> is the unique id assigned to the entry when
the entry is added to the server. The modification is logged
in the error log.
In addition, there was a bug to handle multi-valued RDNs in
slapi_dn_normalize_ext. In case multi-valued RDN appears with
DN value (e.g., nsuniqueid=<uuid>+cn=uid\=<uid>\,o\=<org>,dc=<dc>),
it was not normalized properly. Introduced second rdn_av_stack
(subinitial_rdn_av_stack) for the nested DN value.
See also:
http://directory.fedoraproject.org/wiki/Upgrade_to_New_DN_Format#Another_Upgrade_Scenario
* commit ebaa18adaf201f75c709e078abd8e32605eddb81
Fix Description:
1) In the previous commit 50bb2ee6676e10cdda704982dfa831efa4011037,
there were 3 places to miss replacing rdn_av_count with subrdn_av_count.
2) A variable subtypestart is used to keep the head of nested
multivalued RDNs. For instance,
seeAlso=cn\=<CN>\+l\=<L>\,o\=<O>,dc=examle,dc=com
^ or ^ or ^
There was a bug to set the first position ("cn" in the above example).
In addition, fixed a warning assigning "const char *" to "char *" in
import_foreman (import-threads.c).
* commit 472a2c0f2f21205390ba87c31c498b4419a932ba
Fix Description:
When newly creating an ancestorid index file, instead of
opening the index file with DB_TRUNCATE option, delete
the file then create it.
616135 - Upgrade failure on Solaris :
tar: db/NetscapeRoot/{DBVERSION,*.db4}:
No such file or directory
* commit e6723421e6dc69408edb2a396eb22da361cff206
Fix Description:
.../'{'DBVERSION,*.db4'}' is not a shell syntax. Process DBVERSION
and *.db4 individually.
Cherry-picked 700d7c1a199db4a690740636b8bd3e612304ce1e and
0b6ddc9b06845bdf385e749f2c5a99497df20d98 from
389-ds-base-1.2.6 branch.
Diffstat (limited to 'ldap/admin')
-rw-r--r-- | ldap/admin/src/scripts/80upgradednformat.pl (renamed from ldap/admin/src/scripts/91upgradednformat.pl) | 41 | ||||
-rw-r--r-- | ldap/admin/src/scripts/90subtreerename.pl | 6 |
2 files changed, 36 insertions, 11 deletions
diff --git a/ldap/admin/src/scripts/91upgradednformat.pl b/ldap/admin/src/scripts/80upgradednformat.pl index 611f1e0d..cb44b852 100644 --- a/ldap/admin/src/scripts/91upgradednformat.pl +++ b/ldap/admin/src/scripts/80upgradednformat.pl @@ -15,15 +15,21 @@ use File::Copy; sub runinst { my ($inf, $inst, $dseldif, $conn) = @_; - # First, check if the server is up or down. - if ($conn->isa("Mozilla::LDAP::Conn")) { - # The server is up, we do nothing. - return (); - } - my @errs; my $config = "cn=config"; + my $config_entry = $conn->search($config, "base", "(cn=*)"); + if (!$config_entry) { + return ("error_no_configuration_entry", $!); + } + # First, check if the server is up or down. + my $rundir = $config_entry->getValues('nsslapd-rundir'); + + # Check if the server is up or not + my $pidfile = $rundir . "/" . $inst . ".pid"; + if (-e $pidfile) { + return (); # server is running; do nothing. + } my $mappingtree = "cn=mapping tree,cn=config"; my $ldbmbase = "cn=ldbm database,cn=plugins,cn=config"; @@ -33,6 +39,22 @@ sub runinst { return ("error_no_mapping_tree_entries", $!); } + my $db_config_entry = + $conn->search("cn=config,cn=ldbm database,cn=plugins,cn=config", + "base", "(objectclass=*)"); + if (!$db_config_entry) { + return ('error_finding_config_entry', + 'cn=config,cn=ldbm database,cn=plugins,cn=config', + $conn->getErrorString()); + } + # If subtree rename swich is not found in the config file, + # set off to the switch and upgrade dn format using entrydn. + my $switch = $db_config_entry->getValues('nsslapd-subtree-rename-switch'); + if ("" eq $switch) { + $db_config_entry->addValue('nsslapd-subtree-rename-switch', "off"); + $conn->update($db_config_entry); + } + # If a suffix in the mapping tree is doube-quoted and # the cn value has only the double-quoted value, e.g. # dn: cn="dc=example,dc=com",cn=mapping tree,cn=config @@ -62,10 +84,6 @@ sub runinst { $mtentry = $conn->nextEntry(); } - my $config_entry = $conn->search($config, "base", "(cn=*)", 0, ("nsslapd-instancedir")); - if (!$config_entry) { - return ("error_no_configuration_entry", $!); - } my $instancedir = $config_entry->{"nsslapd-instancedir"}[0]; my $upgradednformat = $instancedir . "/upgradednformat"; @@ -107,7 +125,8 @@ sub runinst { my $rc = 0; if (system("cd $pdbdir; tar cf - db/DBVERSION | (cd $dbinstdir; tar xf -)") || - system("cd $pdbdir; tar cf - db/$instname/{DBVERSION,*.db4} | (cd $dbinstdir; tar xf -)")) { + system("cd $pdbdir; tar cf - db/$instname/DBVERSION | (cd $dbinstdir; tar xf -)") || + system("cd $pdbdir; tar cf - db/$instname/*.db4 | (cd $dbinstdir; tar xf -)")) { push @errs, ["error_cant_backup_db", $backend, $!]; return @errs; } diff --git a/ldap/admin/src/scripts/90subtreerename.pl b/ldap/admin/src/scripts/90subtreerename.pl index e4746d7b..d9e1d37a 100644 --- a/ldap/admin/src/scripts/90subtreerename.pl +++ b/ldap/admin/src/scripts/90subtreerename.pl @@ -37,6 +37,7 @@ sub runinst { } elsif ("off" eq $switch || "OFF" eq $switch) { $ent1->setValues('nsslapd-subtree-rename-switch', "on"); $need_update = 1; + $conn->update($ent1); } if (1 == $need_update) { @@ -46,6 +47,11 @@ sub runinst { my $prog = $instdir . "/dn2rdn"; my $output = `$prog 2>&1`; my $stat = $?; + + if (0 != $stat) { + $ent1->setValues('nsslapd-subtree-rename-switch', "off"); + $conn->update($ent1); + } } return (); |