summaryrefslogtreecommitdiffstats
path: root/ldap/admin/src/scripts/template-migrateInstance7
diff options
context:
space:
mode:
Diffstat (limited to 'ldap/admin/src/scripts/template-migrateInstance7')
-rw-r--r--ldap/admin/src/scripts/template-migrateInstance7586
1 files changed, 0 insertions, 586 deletions
diff --git a/ldap/admin/src/scripts/template-migrateInstance7 b/ldap/admin/src/scripts/template-migrateInstance7
deleted file mode 100644
index acc0e987..00000000
--- a/ldap/admin/src/scripts/template-migrateInstance7
+++ /dev/null
@@ -1,586 +0,0 @@
-#{{PERL-EXEC}}
-#
-# 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
-#
-use Time::localtime;
-
-BEGIN {
- require 'uname.lib';
- $| = 1;
- $isNT = -d '\\';
- $PATHSEP = $isNT ? "\\" : "/";
- $SEP = $isNT ? ";" : ":" ;
- $exitCode = 0;
- @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 ? "\"" : "";
- if ($isNT) {
- # we have to pass batch files directly to the NT command interpreter
- $com_spec = $ENV{ComSpec};
- if (!$com_spec) {
- $com_spec = $ENV{COMSPEC};
- }
- if (!$com_spec || ! -f $com_spec) {
- # find the first available command interpreter
- foreach $drive (c..z) {
- $com_spec = "$drive:\\winnt\\system32\\cmd.exe";
- last if (-f $com_spec);
- $com_spec = undef;
- }
- if (! $com_spec) {
- # punt and pray
- $com_spec = 'c:\winnt\system32\cmd.exe';
- }
- }
- $os = "WINNT";
- } else {
- $os = &uname("-s");
- if ($os eq "SunOS") {
- $isSolaris9 = ( &uname("-r") eq "5.9" );
- }
- }
-
- if ( ($os eq "AIX") || ($os eq "HP-UX") ) {
- $sigChildHandler = 'sigChildHandler';
- }
- SWITCH: {
- if ($os eq "AIX") {
- $LIB_PATH = "LIBPATH" ;
- last SWITCH ;
- }
- if ($os eq "HP-UX") {
- $LIB_PATH = "SHLIB_PATH" ;
- last SWITCH ;
- }
- if ($isNT) {
- $LIB_PATH = "PATH" ;
- last SWITCH ;
- }
- else {
- $LIB_PATH = "LD_LIBRARY_PATH" ;
- last SWITCH ;
- }
- }
- $slapdExecName = $isNT ? 'slapd.exe' : 'ns-slapd';
- select STDERR;
- $| = 1;
- select STDOUT;
- $| = 1;
-}
-
-
-
-$TRACELEVEL = 0;
-${root} = "{{DS-ROOT}}" ;
-${type} = "" ;
-${newname} = "" ;
-${newport} = "" ;
-${rootDN} = "" ;
-${rootpwd} = "" ;
-${localhost} = "" ;
-${LogFileReport} = "" ;
-
-# get input users
-&getParameters() ;
-
-
-${oldHome} = "${oldDir}${PATHSEP}$type-$oldname" ;
-${oldConfDir} = "${oldHome}${PATHSEP}config${PATHSEP}" ;
-${oldSlapdConf} = "${oldConfDir}slapd.conf" ;
-${serverHome} = "${root}${PATHSEP}$type-$newname" ;
-${ldif_rep} = "${oldConfDir}ldif${PATHSEP}" ;
-${curdir} = getCwd();
-
-
-if (!(-d $serverHome)) {
- print("\n$serverHome doesn't exist\n");
- exit(1);
- }
- if (!(-d $oldHome)) {
- print("\n$oldHome doesn't exist\n");
- exit(1);
- }
-if ($olddatadir && !(-d $olddatadir)) {
- print("\n$olddatadir doesn't exist\n");
- exit(1);
- }
-$ENV{"$LIB_PATH"} = "$root${PATHSEP}lib${SEP}".$ENV{"$LIB_PATH"} ;
-
-# get the version of the DS to migrate
-($oldVersion, $oldMinor) = &getVersion($oldDir, $oldversionstr);
-# get the version of the new DS
-($Version, $Minor) = &getVersion($root);
-
-if ($Version >= 7) {
- if ($oldVersion == 4) {
- $myscript = "migrateTo7" ;
- printMsg("\n******* Migration from $oldVersion.$oldMinor to $Version.$Minor Directory Server *********\n");
- }
- elsif ($oldVersion == 5 ) {
- printMsg("\nWarning. You may experience some problems if the version of directory server you want to migrate is not a 5.0 or 5.1") if ($oldMinor > 1);
- $myscript = "migrate5to7" ;
- printMsg("\n******* Migration from $oldVersion.$oldMinor to $Version.$Minor Directory Server *********\n");
- }
- elsif ($oldVersion == 6 ) {
- $myscript = "migrate6to7" ;
- printMsg("\n******* Migration from $oldVersion.$oldMinor to $Version.$Minor Directory Server *********\n");
- }
- else {
-
- die "We don't support the version of directory server you want to migrate";
- }
-}
-else {
- die "\n\nThe version of directory you want to upgrade is not a 7.x product\nMigration aborted\n";
-}
-
-my $start_time = gmtime ;
-@args = ($^X, $myscript, @ARGV, '-L', $LogFileReport);
-$exitCode = &mySystem(@args);
-#die "Error: @args: $!" if ($exitCode != 0);
-
-open(LOGFILE,">> $LogFileReport") or die "\nCan't write to $LogFileReport\n$!\n";
-if (! $exitCode) {
- my $end_time = gmtime ;
- printMsg("-> Migration started at $start_time\n");
- printMsg("-> Migration ended at $end_time\n\n");
-}
-printMsg("***********************************************\n\n");
-print("-> The migration report file is available at: $LogFileReport\n\n");
-
-close(LOGFILE);
-
-#######################################################################################################################
-sub usage {
- print(STDERR "\nUsage: $0 -D rootdn { -w password | -w - | -j filename } -p port \n");
- print(STDERR " -o oldInstancePath -n newInstancePath [-t tracelevel] \n");
- print(STDERR " [-L logfile] [-noinput]\n");
- print(STDERR "************** parameters in brackets are optionals, others are required **************\n");
- print(STDERR " Opts: -D rootdn - new Directory Manager\n");
- print(STDERR " : -w password - new Directory Manager's password\n");
- print(STDERR " : -w - - Prompt for new Directory Manager's password\n");
- print(STDERR " : -j filename - Read new Directory Manager's password from file\n");
- print(STDERR " : -p port - new Directory Server port\n");
- print(STDERR " : -o oldInstancePath - Path of the old instance to migrate \n");
- print(STDERR " : -n newInstancePath - Path of the new instance\n");
- print(STDERR " : [-d dataPath] - Path to directory containing data files to import into new instance\n");
- print(STDERR " : [-v oldVersion] - Version of old instance (obtained by running $slapdExecName -v\n");
- print(STDERR " : [-t tracelevel] - specify the level of trace (0..3) by default setup to 1\n");
- print(STDERR " : [-L logfile] - specify the file to log the migration report \n");
- print(STDERR " : [-noinput] - no user interventions during migration processing to solve conflicts\n");
-
- }
-
-
-#######################################################################################################################
-# get input users
-
-sub getParameters {
- my $exit = 0 ;
- my $i = 0;
- my $pwdfile= "";
-
- while ($i <= $#ARGV) {
- if ( "$ARGV[$i]" eq "-D" ) { # directory manager
- if (! $rootDN) {
- $rootDN = $ARGV[++$i] ;
- }
- else {
- &usage() ;
- exit(1);
- }
- } elsif ("$ARGV[$i]" eq "-w") { # password
- if (! $rootpwd) {
- $rootpwd = $ARGV[++$i] ;
- }
- else {
- &usage() ;
- exit(1);
- }
- } elsif ("$ARGV[$i]" eq "-j") { # password file
- if (! $pwdfile) {
- $pwdfile = $ARGV[++$i] ;
- }
- else {
- &usage() ;
- exit(1);
- }
- } elsif ("$ARGV[$i]" eq "-o") { # old instance path
- if (! $oldHome ) {
- $oldHome = $ARGV[++$i] ;
- grep { s@\\@/@g } $oldHome if $isNT ;
- if ($oldHome =~ /[\"]?(.*)?[\"]?/) { $oldHome = $1 ; }
- if ($oldHome =~ m@^(.*)/([^-/]*)-([^/]*)[/]?$@) {
- $oldDir = $1 ;
- $type = $2 ;
- $oldname = $3 ;
- if ($isNT) {
- $oldDir = lc($oldDir) ;
- $type = lc($type) ;
- $oldname = lc($oldname) ;
- $oldHome = lc($oldHome) ;
- grep { s@/@\\@g } $oldDir ;
- grep { s@/@\\@g } $oldHome ;
- }
- }
- else {
- print("\nThe old instance path is not correct. It must be like slapd-instancename");
- &usage();
- exit(1);
- }
- }
- else {
- &usage() ;
- exit(1);
- }
- } elsif ("$ARGV[$i]" eq "-n") { # 5.x instance path
- if (! $serverHome ) {
- $serverHome = $ARGV[++$i] ;
- grep { s@\\@/@g } $root if $isNT ;
- grep { s@\\@/@g } $serverHome if $isNT ;
- if ($serverHome =~ /[\"]?(.*)?[\"]?/) { $serverHome = $1 ; }
- if ($serverHome =~ m@^(.*?)/?([^/-]*)-([^/]*)[/]?$@) {
- $root = $1 if ($1);
- $type = $2 ;
- $newname = $3 ;
- if ($isNT) {
- $root = lc($root) ;
- $type = lc($type) ;
- $newname = lc($newname) ;
- $serverHome = lc($serverHome) ;
- grep { s@/@\\@g } $root ;
- grep { s@/@\\@g } $serverHome ;
- }
- }
- else {
- print("\nThe new instance path is not correct. It must be like slapd-instancename");
- &usage();
- exit(1);
- }
- }
- else {
- &usage() ;
- exit(1);
- }
- } elsif ("$ARGV[$i]" eq "-p") { # 5.x DS port
- if (! $newport ) {
- $newport = $ARGV[++$i] ;
- }
- else {
- &usage() ;
- exit(1);
- }
- } elsif ("$ARGV[$i]" eq "-d") { # old instance LDIF data dir
- if (! $olddatadir ) {
- $olddatadir = $ARGV[++$i] ;
- }
- else {
- &usage() ;
- exit(1);
- }
- } elsif ("$ARGV[$i]" eq "-v") { # old version
- if (! $oldversionstr ) {
- $oldversionstr = $ARGV[++$i] ;
- }
- else {
- &usage() ;
- exit(1);
- }
- } elsif ("$ARGV[$i]" eq "-t") { # TRACELEVEL
- my $value = $ARGV[++$i] ;
- if ($value =~ /[0-3]/) {
- $TRACELEVEL = $value ;
- }
- else {
- print("\nThe tracelevel must belong to 0..3 interval");
- &usage();
- exit();
- }
- } elsif ("$ARGV[$i]" eq "-noinput") { # no user interventions during processing
- } elsif ("$ARGV[$i]" eq "-L") { # user defined logfile for the migration
- $LogFileReport = $ARGV[++$i];
- }
- else {
- &usage() ;
- exit(1);
- }
- $i++;
- }
-
- if (! $rootDN) {
- print("\nThe rootDN is missing");
- $exit = 1;
- }
- if ($pwdfile ne "") {
- # Open file and get the password
- unless (open (RPASS, $pwfile)) {
- die "Error, cannot open password file $passwdfile\n";
- }
- $rootpwd = <RPASS>;
- chomp($rootpwd);
- close(RPASS);
- } elsif ($rootpwd eq "-"){
- # Read the password from terminal
- die "The '-w -' option requires an extension library (Term::ReadKey) which is not\n",
- "part of the standard perl distribution. If you want to use it, you must\n",
- "download and install the module. You can find it at\n",
- "http://www.perl.com/CPAN/CPAN.html\n";
- # Remove the previous line and uncomment the following 6 lines once you have installed Term::ReadKey module.
-# use Term::ReadKey;
-# print "Bind Password: ";
-# ReadMode('noecho');
-# $rootpwd = ReadLine(0);
-# chomp($rootpwd);
-# ReadMode('normal');
- }
- if (! $rootpwd) {
- print("\nThe rootpwd is missing");
- $exit = 1 ;
- }
- if (! $newport) {
- print("\nThe port is missing");
- $exit = 1;
- }
- if (! $serverHome) {
- print("\nThe new instance path is missing");
- $exit = 1;
- }
- if (! $oldHome) {
- print("\nThe old instance path is missing");
- $exit = 1;
- }
- if ((! $LogFileReport) && $serverHome) {
- ($sec, $min, $hour, $dd, $mm, $yy) = &GetTime();
- $LogFileReport = "${serverHome}${PATHSEP}logs${PATHSEP}Migration_${dd}${mm}${yy}_${hour}${min}${sec}.log";
- }
- if ($exit) {
- &usage() ;
- exit(1);
- }
-
-}
-
-#############################################################################
-# printMsg print message to the user standard output.
-
-sub printMsg {
-
- my $TypeMsg = shift ;
- my $Msg = shift ;
- my $LineNb = shift ;
- if ($LineNb) {
- printTrace("Line: $LineNb, $TypeMsg, $Msg");
- }
- else {
- printTrace("$TypeMsg $Msg");
- }
-}
-
-#############################################################################
-# print message error to the user standard output.
-
-sub printTrace {
-
- my $Msg = shift ;
- my $level = shift ;
- if ($level <= $TRACELEVEL) {
- print($Msg);
- print LOGFILE $Msg;
- }
-
-}
-
-#############################################################################
-sub mySystem {
- my $cmd = $_[0];
- # the system {$cmd} avoids some NT shell quoting problems if the $cmd
- # needs to be quoted e.g. contains spaces; the map puts double quotes
- # around the arguments on NT which are stripped by the command
- # interpreter cmd.exe; but don't quote things which are already quoted
- my @fixargs = map { /^[\"].*[\"]$/ ? $_ : $quote . $_ . $quote } @_;
- my $rc = 0;
- if ($cmd =~ /[.](bat|cmd)$/) {
- # we have to pass batch files directly to the NT command interpreter
- $cmd = $com_spec;
-# print "system $cmd /c \"@fixargs\"\n";
- $rc = system {$cmd} '/c', "\"@fixargs\"";
- } else {
-# print "system $cmd \"@fixargs\"\n";
- if($isNT) {
- $rc = system "\"@fixargs\"";
- } else {
- $rc = system @fixargs;
- }
- }
-
- return $rc;
-}
-
-#############################################################################
-
-sub GetTime {
- my $tm = localtime;
- (my $sec, my $min, my $hour, my $dd, my $mm, my $yy) = ($tm->sec, $tm->min, $tm->hour, $tm->mday, ($tm->mon)+1, ($tm->year)+1900);
- $sec = "0$sec" unless $sec > 9 ;
- $min = "0$min" unless $min > 9 ;
- $hour = "0$hour" unless $hour > 9 ;
- $dd = "0$dd" unless $dd > 9 ;
- $mm = "0$mm" unless $mm > 9 ;
- return ($sec, $min, $hour, $dd, $mm, $yy);
-}
-
-#############################################################################
-
-sub getVersion {
- my $dir = shift;
- my $versionstr = shift;
- my $version = 0;
- my $minor = 0;
- my $buildNumber = 0;
- my $progDir = "${PATHSEP}bin${PATHSEP}slapd${PATHSEP}server${PATHSEP}";
- my $progDir2 = "${PATHSEP}bin${PATHSEP}slapd${PATHSEP}";
-
- # find the slapd executable
- if (!$versionstr) { # version not specified on cmd line - find it
- $prog = $dir . $progDir . $slapdExecName;
- if (! -f $prog) {
- $prog = $dir . $progDir2 . $slapdExecName;
- if (-f $prog && $isNT) {
- # if slapd is in bin/slapd and we're on NT, just assume version 1;
- # apparently, slapd.exe doesn't like the -v argument . . .
- return ( '1', $minor );
- }
- else{
- die "Could not run slapd program $prog: $!";
- }
- }
- else {
- chdir($dir . $progDir);
- }
- $preserve_lib_path = $ENV{"$LIB_PATH"};
- $ENV{"$LIB_PATH"}=
- "$dir${PATHSEP}lib${SEP}".
- "$dir${PATHSEP}bin${PATHSEP}slapd${PATHSEP}lib${SEP}".
- "$dir${PATHSEP}bin${PATHSEP}slapd${PATHSEP}server${SEP}".
- $ENV{"$LIB_PATH"};
- # read the old version from the old slapd program
-
- open(F, "${quote}${quote}$prog${quote} -v${quote} 2>&1 |") or
- die "Could not run slapd program $prog: $!";
- sleep(1); # allow some data to accumulate in the pipe
-# print "Output from $prog -v:\n";
- while (<F>) {
- if (/^Red Hat-Directory/ || /^Netscape-Directory/ || /^iPlanet-Directory/i) {
- $versionstr = $_;
- last;
- }
- }
- $code = close(F);
- # print "$prog returned code=$code status=$?\n";
- $ENV{"$LIB_PATH"}="$root${PATHSEP}lib${SEP}".$ENV{"$LIB_PATH"};
- }
-
- if ($versionstr =~ /^Red Hat-Directory\/(\d+)\.(\d+)(?:b\d)*\s+(\S+)/) {
- $version = $1;
- $minor = $2;
- $buildNumber = $3;
- }
- elsif ($versionstr =~ /^Netscape-Directory\/(\d+)\.(\d+)(?:b\d)*\s+(\S+)/) {
- $version = $1;
- $minor = $2;
- $buildNumber = $3;
- }
- elsif ($versionstr =~ /^Netscape-Directory\(restrict?ed-mode\)\/(\d+)\.(\d+)\s+(\S+)/) { # we can have restricted-mode or restriced-mode ...
- $version = $1;
- $minor = $2;
- $buildNumber = $3;
- }
- elsif ($versionstr =~ /^iPlanet-Directory\/(\d+)\.(\d+)\s+(\S+)/i) {
- $version = $1;
- $minor = $2;
- $buildNumber = $3;
- } elsif ($versionstr =~ /(\d+)\.(\d+)/) {
- $version = $1;
- $minor = $2;
- }
-
- if ($version == 0) {
- die "\nCould not determine version of the directory server in $dir: \n";
- }
-
- # distinguish the 4.1 and the 4.11 thanks to the buildNumber
- if (($version == 4) && ($minor == 1)){
- if (! ($buildNumber =~ /^B99\.16/)) {
- # it's not a 4.1 Netscape Directory Server => it's a 4.11
- $minor = 11 ;
- }
- }
- # Restore the original library path
- $ENV{"$LIB_PATH"} = $preserve_lib_path;
- chdir($curdir) or die "Could not change directory to $curdir: $!" ;
- return ( $version, $minor );
-}
-
-###############################################################################################
-# get current directory
-
-sub getCwd {
- my $command = $isNT ? "cd" : "/bin/pwd";
- open(PWDCMD, "$command 2>&1 |") or
- die "Error: could not execute $command: $!";
- # without the following sleep, reading from the pipe will
- # return nothing; I guess it gives the pwd command time
- # to get some data to read . . .
- sleep(1);
- my $currentdir;
- while (<PWDCMD>) {
- if (!$currentdir) {
- chomp($currentdir = $_);
- }
- }
- my $code = close(PWDCMD);
-# if ($code || $?) {
-# print "$command returned code=$code status=$? dir=$curdir\n";
-# }
-# print "getCwd curdir=\[$curdir\]\n";
- return $currentdir;
-}