summaryrefslogtreecommitdiffstats
path: root/ldap/admin/src/migrateLocalDB
diff options
context:
space:
mode:
authorRich Megginson <rmeggins@redhat.com>2007-07-18 20:37:12 +0000
committerRich Megginson <rmeggins@redhat.com>2007-07-18 20:37:12 +0000
commit9dc51a21f16bc27e5d50ff072d6c94c301227efc (patch)
tree1b2f12e962ff74f39394b560f68fd0168bc6be01 /ldap/admin/src/migrateLocalDB
parent1190f204bf5e3a18e759dbb6308e2e7e17dfba2a (diff)
Resolves: bug 248145
Bug Description: Replace ds_newinst binary with perl script - remove dead code Reviewed by: nhosoi (Thanks!) Fix Description: This is my favorite part - removing all of the now dead code. I also had to fix the exit code so that you could use $? to test for the success or failure of the new setup scripts. Platforms tested: RHEL4, FC6 Flag Day: no Doc impact: no
Diffstat (limited to 'ldap/admin/src/migrateLocalDB')
-rw-r--r--ldap/admin/src/migrateLocalDB297
1 files changed, 0 insertions, 297 deletions
diff --git a/ldap/admin/src/migrateLocalDB b/ldap/admin/src/migrateLocalDB
deleted file mode 100644
index 90e9a97f..00000000
--- a/ldap/admin/src/migrateLocalDB
+++ /dev/null
@@ -1,297 +0,0 @@
-#!/usr/bin/env perl
-#
-# BEGIN COPYRIGHT BLOCK
-# This Program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; version 2 of the License.
-#
-# This Program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA 02111-1307 USA.
-#
-# In addition, as a special exception, Red Hat, Inc. gives You the additional
-# right to link the code of this Program with code not covered under the GNU
-# General Public License ("Non-GPL Code") and to distribute linked combinations
-# including the two, subject to the limitations in this paragraph. Non-GPL Code
-# permitted under this exception must only link to the code of this Program
-# through those well defined interfaces identified in the file named EXCEPTION
-# found in the source code files (the "Approved Interfaces"). The files of
-# Non-GPL Code may instantiate templates or use macros or inline functions from
-# the Approved Interfaces without causing the resulting work to be covered by
-# the GNU General Public License. Only Red Hat, Inc. may make changes or
-# additions to the list of Approved Interfaces. You must obey the GNU General
-# Public License in all respects for all of the Program code and other code used
-# in conjunction with the Program except the Non-GPL Code covered by this
-# exception. If you modify this file, you may extend this exception to your
-# version of the file, but you are not obligated to do so. If you do not wish to
-# provide this exception without modification, you must delete this exception
-# statement from your version and license this file solely under the GPL without
-# exception.
-#
-#
-# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
-# Copyright (C) 2005 Red Hat, Inc.
-# All rights reserved.
-# END COPYRIGHT BLOCK
-#
-
-# Migrate a SuiteSpot 2.X or 3.X localdb to a 4.0 directory server
-
-BEGIN {
- $isNT = -d '\\';
- $PATHSEP = $isNT ? "\\" : "/";
- @INC = ( '.', '../../../admin/admin/bin' );
- grep { s@/@\\@g } @INC if $isNT;
- $script_suffix = $isNT ? ".bat" : "";
- $exe_suffix = $isNT ? ".exe" : "";
- # NT needs quotes around some things unix doesn't
- $quote = $isNT ? "\"" : "";
-}
-
-sub getNextEntry {
- my $fh = shift;
- my @entry = (); # an array of strings, each string is 1 attr/value pair
- my $line = "";
- while (($line = <$fh>) && !($line =~ /^$/)) { # entry is terminated by EOF or empty line34
- chop $line;
- if ($line =~ /^\s/) { # line begins with a single space char
- $entry[@entry-1] .= $'; # add continuation to line
- } else {
- push @entry, $line;
- }
- }
- return @entry;
-}
-
-# given a string of the form string:value, return everything to the left of the :
-sub getAttrName {
- my $s = shift;
- $s =~ s/[:].*$//;
- return $s;
-}
-
-sub printEntry {
- my $fh = shift;
- foreach (@_) {
- print $fh $_, "\n";
- }
- print $fh "\n";
-}
-
-sub usage {
- print 'Usage: perl migrateLocalDb <userdb> <new suffix> [<new instance>]', "\n";
- print "\t", '<userdb> - full path to the userdb directory to migrate', "\n";
- print "\t", ' e.g. /usr/netscape/suitespot3/userdb', "\n";
- print "\t", '<new suffix> - new suffix e.g. dc=example,dc=com; may be empty', "\n";
- print "\t", '<new instance> - full path to the destination instance', "\n";
- print "\t", ' e.g. /usr/netscape/server4/slapd-foo', "\n";
- print "The new instance is optional. If not given, the local db will\n";
- print "be converted to the LDIF file userdb/localdb.ldif, but\n";
- print "it will not be added to the database of the new instance.\n";
-}
-
-sub sigDieHandler {
- print @_, "\n";
- print "\n";
- &usage();
- print "\n";
- print "NMC_STATUS: ", 0+$!, "\n";
- exit $!;
-}
-
-$SIG{__DIE__} = 'sigDieHandler';
-
-# check for command line arguments
-if (@ARGV > 0) {
- $localDBPath = $ARGV[0];
- $newSuffix = $ARGV[1];
- $instanceDir = $ARGV[2];
- $bindDN = $ARGV[3];
- $bindPwd = $ARGV[4];
- # the perl executable should be in server root/install/
- $relPath = '/install/';
- $relPath =~ s#/#\\#g if ($isNT);
- ($sroot = $) =~ s#$relPath.*$##;
-} elsif ($ENV{'REQUEST_METHOD'}) {
- $| = 1;
- # print CGI header
- print "Content-type: text/plain\n\n";
-
- # process the CGI input
- use Cgi;
-
- # get the server root directory
- $sroot = $ENV{'NETSITE_ROOT'};
-
- $localDBPath = $cgiVars{'localDBPath'};
- $newSuffix = $cgiVars{'newSuffix'};
- $instanceDir = $cgiVars{'instanceDir'};
- $bindDN = $cgiVars{'bindDN'};
- $bindPwd = $cgiVars{'bindPwd'};
-} else {
- die "";
-}
-
-# this is a table of attributes which have DN syntax
-%dnAttrs = (
- 'aliasedobjectname', "\n",
- 'member', "\n",
- 'owner', "\n",
- 'roleoccupant', "\n",
- 'seealso', "\n",
- 'dn', "\n",
- 'uniquemember', "\n",
- 'creatorsname', "\n",
- 'modifiersname', "\n",
- 'manager', "\n",
- 'documentauthor', "\n",
- 'secretary', "\n",
- 'associatedname', "\n",
- 'ditredirect', "\n",
- 'targetdn', "\n",
- 'newrdn', "\n",
- 'newsuperior', "\n",
- 'lastmodifiedby', "\n",
- 'replicaroot', "\n",
- 'replicabinddn', "\n",
- 'cirreplicaroot', "\n",
- 'cirbinddn', "\n",
- 'vlvbase', "\n",
- 'netscapemdsuffix', "\n",
- 'changelog', "\n",
- 'obsoletedbydocument', "\n",
- 'obsoletesdocument', "\n",
- 'reciprocalnaminglink', "\n",
- 'updatedbydocument', "\n",
- 'updatesdocument', "\n"
-);
-
-print "Begin local db migration\n";
-
-# see if the parameters are valid
-# check localdb path
-die "Error: could not find the local db $localDBPath" if (! -d $localDBPath);
-# check suffix?
-
-# get the old server root directory
-# step 1: convert the local db to an ldif file
-# lookup the old suffix from the lcache.conf
-$lcache = $localDBPath . $PATHSEP . 'ldap' . $PATHSEP . 'config' . $PATHSEP .
- 'lcache.conf';
-open(LCACHE, "$lcache") or die "Error: could not open config file $lcache";
-while (<LCACHE>) {
- chop;
- if (/^suffix\s+/i) {
- $oldSuffix = $';
- $oldSuffix =~ s/^[\"]//;
- # trim leading "
- $oldSuffix =~ s/[\"]$//;
- # trim trailing "
- print "The old suffix is $oldSuffix\n";
- }
-}
-close(LCACHE);
-
-print "Converting the local db to LDIF . . .\n";
-# run the ldapsearch -C command
-$cmddir = $localDBPath . $PATHSEP . 'ldap' . $PATHSEP . 'tools';
-@cmd = ($quote . $cmddir . $PATHSEP . 'ldapsearch' . $quote, '-C',
- "${quote}$lcache${quote}",
- '-s', 'sub', '-b', "\"$oldSuffix\"", '"objectclass=*"');
-chdir($cmddir) or die "Error: could not change to directory $cmddir";
-open(READCMD, "${quote}@cmd${quote}|") or die "Error: could not execute @cmd";
-if ($instanceDir) {
- $outputFile = $instanceDir . $PATHSEP . 'ldif' . $PATHSEP . 'localdb.ldif';
-} else {
- $outputFile = $localDBPath . $PATHSEP . 'localdb.ldif';
-}
-
-open(OUT, ">$outputFile") or die "Error: could not write file $outputFile";
-while (@entry = getNextEntry(\*READCMD)) {
- # for each entry, replace the old suffix with the new one; if there
- # was no old suffix, just append the new one to the DN value attrs
- if ($newSuffix && $newSuffix ne '""') {
- if ($oldSuffix && $oldSuffix ne '""') {
- grep { s/$oldSuffix/$newSuffix/ig } @entry;
- } else {
- for ($ii = 0; $ii < @entry; ++$ii) {
- $name = &getAttrName($entry[$ii]);
- if ($dnAttrs{lc($name)}) {
- $entry[$ii] .= ", $newSuffix";
- }
- }
- }
- }
-
- printEntry(\*OUT, @entry);
-}
-close(READCMD);
-close(OUT);
-
-if ($? != 0) {
- die "Error: could not read local db from $localDBPath";
-} elsif (! -s $outputFile) {
- die "Error: converted local db is empty";
-}
-
-# check instance dir
-
-if ($instanceDir) {
- if (! -d $instanceDir) {
- # use may have given relative path
- $instanceDir = $sroot . $PATHSEP . $instanceDir;
- die "Error: could not find the instance dir $instanceDir in server root $sroot"
- if (! -d $instanceDir);
- }
-
-# step 2: load the converted LDIF file into the target directory server
-# if the bindDN and password were given, attempt to use ldif2ldap, otherwise,
-# shutdown the server and use ldif2db
-
- if ($bindDN && $bindPwd) {
- } else {
- print "Shutting down the server . . .\n";
- # shutdown the server
- $stopCmd = $quote . $instanceDir . $PATHSEP . 'stop-slapd' . $script_suffix . $quote;
- system($stopCmd);
- print "Warning: could not shutdown the server in $instanceDir.\nThe server may already be down." if ($? != 0);
- sleep(10); # give the server time to shutdown
-
- # add the new suffix to the slapd.ldbm.conf
- if ($newSuffix && $newSuffix ne '""') {
- print "Adding suffix $newSuffix . . .\n";
- $slc = $instanceDir . $PATHSEP . 'config' . $PATHSEP . 'slapd.ldbm.conf';
- open(SLC, ">>$slc") or
- print "Warning: could not add the suffix $newSuffix: import may fail.\n";
- print SLC "suffix\t\"$newSuffix\"\n";
- close(SLC);
- }
-
- print "Importing the local db LDIF file . . .\n";
- # import the LDIF file
- @impCmd = ($quote . $instanceDir . $PATHSEP . 'ldif2db' . $quote,
- '-C', '-i', "${quote}$outputFile${quote}");
- system(@impCmd);
- die "Error: could not import LDIF file $outputFile" if ($? != 0);
-
- print "Restarting the server . . .\n";
- # start the server
- $startCmd = $quote . $instanceDir . $PATHSEP . 'start-slapd' . $script_suffix . $quote;
- system($startCmd);
- print "Warning: could not restart the server in $instanceDir" if ($? != 0);
- }
-
- print "Finished. The local db has been imported to $instanceDir.\n";
-} else {
- print "Finished. The local db has been written to $outputFile.\n";
-}
-
-if (%cgiVars) {
- print "NMC_STATUS: 0\n";
-}
-
-exit 0;