summaryrefslogtreecommitdiffstats
path: root/ldap/admin/src/scripts
diff options
context:
space:
mode:
authorNoriko Hosoi <nhosoi@redhat.com>2007-02-21 21:22:08 +0000
committerNoriko Hosoi <nhosoi@redhat.com>2007-02-21 21:22:08 +0000
commit4e73e76b8d964ff950bd3c1d105714a18bfd8383 (patch)
tree0905287520172c5af80a5c6805d7cfbf37ba9a5e /ldap/admin/src/scripts
parentfa05437fb16b35caa6337c0d216466a374436a47 (diff)
downloadds-4e73e76b8d964ff950bd3c1d105714a18bfd8383.tar.gz
ds-4e73e76b8d964ff950bd3c1d105714a18bfd8383.tar.xz
ds-4e73e76b8d964ff950bd3c1d105714a18bfd8383.zip
Resolves: 229576
Summary: clean up template-scriptname which is derived from template-scriptname.in
Diffstat (limited to 'ldap/admin/src/scripts')
-rw-r--r--ldap/admin/src/scripts/template-bak2db39
-rw-r--r--ldap/admin/src/scripts/template-bak2db.pl134
-rwxr-xr-xldap/admin/src/scripts/template-cl-dump.pl348
-rw-r--r--ldap/admin/src/scripts/template-db2bak17
-rw-r--r--ldap/admin/src/scripts/template-db2bak.pl123
-rw-r--r--ldap/admin/src/scripts/template-db2index21
-rw-r--r--ldap/admin/src/scripts/template-db2index.pl227
-rw-r--r--ldap/admin/src/scripts/template-db2ldif41
-rw-r--r--ldap/admin/src/scripts/template-db2ldif.pl250
-rw-r--r--ldap/admin/src/scripts/template-ldif2db20
-rw-r--r--ldap/admin/src/scripts/template-ldif2db.pl226
-rw-r--r--ldap/admin/src/scripts/template-ldif2ldap10
-rw-r--r--ldap/admin/src/scripts/template-monitor13
-rw-r--r--ldap/admin/src/scripts/template-ns-accountstatus.pl846
-rw-r--r--ldap/admin/src/scripts/template-ns-activate.pl846
-rw-r--r--ldap/admin/src/scripts/template-ns-inactivate.pl846
-rwxr-xr-xldap/admin/src/scripts/template-ns-newpwpolicy.pl279
-rwxr-xr-xldap/admin/src/scripts/template-repl-monitor-cgi.pl75
-rwxr-xr-xldap/admin/src/scripts/template-repl-monitor.pl996
-rw-r--r--ldap/admin/src/scripts/template-restoreconfig17
-rw-r--r--ldap/admin/src/scripts/template-saveconfig18
-rw-r--r--ldap/admin/src/scripts/template-start-slapd75
-rw-r--r--ldap/admin/src/scripts/template-stop-slapd42
-rw-r--r--ldap/admin/src/scripts/template-suffix2instance16
-rw-r--r--ldap/admin/src/scripts/template-verify-db.pl240
-rw-r--r--ldap/admin/src/scripts/template-vlvindex17
26 files changed, 0 insertions, 5782 deletions
diff --git a/ldap/admin/src/scripts/template-bak2db b/ldap/admin/src/scripts/template-bak2db
deleted file mode 100644
index 00ddbad5..00000000
--- a/ldap/admin/src/scripts/template-bak2db
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/sh
-
-prefix="{{DS-ROOT}}"
-LD_LIBRARY_PATH=$prefix/{{SERVER-DIR}}:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export LD_LIBRARY_PATH
-SHLIB_PATH=$prefix/{{SERVER-DIR}}:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export SHLIB_PATH
-
-if [ $# -lt 1 ] || [ $# -gt 3 ]
-then
- echo "Usage: bak2db archivedir [-n backendname]"
- exit 1
-else
- archivedir=$1
- shift
-fi
-while getopts "n:" flag
-do
- case $flag in
- n) bename=$OPTARG;;
- *) echo "Usage: bak2db archivedir [-n backendname]"; exit 2;;
- esac
-done
-
-if [ 1 = `expr $archivedir : "\/"` ]
-then
- archivedir=$archivedir
-else
- # relative
- archivedir=`pwd`/$archivedir
-fi
-
-cd {{SERVERBIN-DIR}}
-if [ "$#" -eq 2 ]
-then
- ./ns-slapd archive2db -D {{CONFIG-DIR}} -a $archivedir -n $bename
-else
- ./ns-slapd archive2db -D {{CONFIG-DIR}} -a $archivedir
-fi
diff --git a/ldap/admin/src/scripts/template-bak2db.pl b/ldap/admin/src/scripts/template-bak2db.pl
deleted file mode 100644
index 34c651c9..00000000
--- a/ldap/admin/src/scripts/template-bak2db.pl
+++ /dev/null
@@ -1,134 +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
-#
-
-sub usage {
- print(STDERR "Usage: $0 [-v] -D rootdn { -w password | -w - | -j filename } \n");
- print(STDERR " : -a dirname [-t dbtype]\n");
- print(STDERR " Opts: -D rootdn - Directory Manager\n");
- print(STDERR " : -w password - Directory Manager's password\n");
- print(STDERR " : -w - - Prompt for Directory Manager's password\n");
- print(STDERR " : -j filename - Read Directory Manager's password from file\n");
- print(STDERR " : -a dirname - backup directory\n");
- print(STDERR " : -t dbtype - database type (default: ldbm database)\n");
- print(STDERR " : -n backend - name of backend instance to restore\n");
- print(STDERR " : -v - verbose\n");
-}
-$taskname = "";
-$archivedir = "";
-$dbtype = "ldbm database";
-$instance = "";
-$prefix = "{{DS-ROOT}}";
-$verbose = 0;
-$rootdn = "";
-$passwd = "";
-$passwdfile = "";
-$i = 0;
-while ($i <= $#ARGV) {
- if ("$ARGV[$i]" eq "-a") { # backup directory
- $i++; $archivedir = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-D") { # Directory Manager
- $i++; $rootdn = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-w") { # Directory Manager's password
- $i++; $passwd = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-j") { # Read Directory Manager's password from a file
- $i++; $passwdfile = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-t") { # database type
- $i++; $dbtype = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-n") { # backend instance name
- $i++; $instance = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-v") { # verbose
- $verbose = 1;
- } else {
- &usage; exit(1);
- }
- $i++;
-}
-if ($passwdfile ne ""){
-# Open file and get the password
- unless (open (RPASS, $passwdfile)) {
- die "Error, cannot open password file $passwdfile\n";
- }
- $passwd = <RPASS>;
- chomp($passwd);
- close(RPASS);
-} elsif ($passwd 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');
-# $passwd = ReadLine(0);
-# chomp($passwd);
-# ReadMode('normal');
-}
-if ( $rootdn eq "" || $passwd eq "") { &usage; exit(1); }
-($s, $m, $h, $dy, $mn, $yr, $wdy, $ydy, $r) = localtime(time);
-$mn++; $yr += 1900;
-$taskname = "restore_${yr}_${mn}_${dy}_${h}_${m}_${s}";
-if ($archivedir eq "") {
- &usage; exit(1);
-}
-use File::Spec;
-$isabs = File::Spec->file_name_is_absolute( $archivedir );
-if (!$isabs) {
- $archivedir = File::Spec->rel2abs( $archivedir );
-}
-$dn = "dn: cn=$taskname, cn=restore, cn=tasks, cn=config\n";
-$misc = "changetype: add\nobjectclass: top\nobjectclass: extensibleObject\n";
-$cn = "cn: $taskname\n";
-if ($instance ne "") {
- $nsinstance = "nsInstance: ${instance}\n";
-}
-$nsarchivedir = "nsArchiveDir: $archivedir\n";
-$nsdbtype = "nsDatabaseType: $dbtype\n";
-$entry = "${dn}${misc}${cn}${nsinstance}${nsarchivedir}${nsdbtype}";
-$vstr = "";
-if ($verbose != 0) { $vstr = "-v"; }
-$ENV{'PATH'} = "$prefix/usr/lib/mozldap6:$prefix/usr/bin:/usr/lib/mozldap6:/usr/bin";
-$ENV{'LD_LIBRARY_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-$ENV{'SHLIB_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-open(FOO, "| ldapmodify $vstr -h {{SERVER-NAME}} -p {{SERVER-PORT}} -D \"$rootdn\" -w \"$passwd\" -a" );
-print(FOO "$entry");
-close(FOO);
diff --git a/ldap/admin/src/scripts/template-cl-dump.pl b/ldap/admin/src/scripts/template-cl-dump.pl
deleted file mode 100755
index e0a92374..00000000
--- a/ldap/admin/src/scripts/template-cl-dump.pl
+++ /dev/null
@@ -1,348 +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
-###################################################################################
-#
-# FILE: cl-dump.pl
-#
-# SYNOPSIS:
-#
-# cl-dump.pl [-h host] [-p port] [-D bind-dn] -w bind-password | -P bind-cert\
-# [-r replica-roots] [-o output-file] [-c] [-v]\n";
-#
-# cl-dump.pl -i changelog-ldif-file-with-base64encoding [-o output-file] [-c]\n";
-#
-# DESCRIPTION:
-# Dump and decode Directory Server replication change log
-#
-# OPTIONS:
-#
-# -c Dump and interpret CSN only. This option can be used with or
-# without -i option.
-#
-# -D bind-dn
-# Directory server's bind DN. Default to "cn=Directory Manager" if
-# the option is omitted.
-#
-# -h host
-# Directory server's host. Default to the server where the script
-# is running.
-#
-# -i changelog-ldif-file-with-base64encoding
-# If you already have a ldif-like changelog, but the changes
-# in that file are encoded, you may use this option to
-# decode that ldif-like changelog.
-#
-# -o output-file
-# Path name for the final result. Default to STDOUT if omitted.
-#
-# -p port
-# Directory server's port. Default to 389.
-#
-# -P bind-cert
-# Pathname of binding certificate DB
-#
-# -r replica-roots
-# Specify replica roots whose changelog you want to dump. The replica
-# roots may be seperated by comma. All the replica roots would be
-# dumped if the option is omitted.
-#
-# -v Print the version of this script.
-#
-# -w bind-password
-# Password for the bind DN
-#
-# RESTRICTION:
-# If you are not using -i option, the script should be run when the server
-# is running, and from where the server's changelog directory is accessible.
-#
-# DIAGNOSIS:
-# For environment variable issues, see script template-repl-monitor.pl under
-# DSHOME/bin/slapd/admin/scripts
-#
-################################################################################
-# enable the use of our bundled perldap with our bundled ldapsdk libraries
-# all of this nonsense can be omitted if the mozldapsdk and perldap are
-# installed in the operating system locations (e.g. /usr/lib /usr/lib/perl5)
-$prefix = "{{DS-ROOT}}";
-
-$ENV{'LD_LIBRARY_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-$ENV{'SHLIB_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-
-$usage="Usage: $0 [-h host] [-p port] [-D bind-dn] [-w bind-password | -P bind-cert] [-r replica-roots] [-o output-file] [-c] [-v]\n\n $0 -i changelog-ldif-file-with-base64encoding [-o output-file] [-c]";
-
-use Getopt::Std; # Parse command line arguments
-use Mozilla::LDAP::Conn; # LDAP module for Perl
-use Mozilla::LDAP::Utils; # LULU, utilities.
-use Mozilla::LDAP::API; # Used to parse LDAP URL
-use MIME::Base64; # Decode
-
-# Global variables
-
-$version = "Directory Server Changelog Dump - Version 1.0";
-
-#main
-{
- # Turn off buffered I/O
- $| = 1;
-
- # Check for legal options
- if (!getopts('h:p:D:w:P:r:o:cvi:')) {
- print $usage;
- exit -1;
- }
-
- exit -1 if &validateArgs;
-
- if ($opt_v) {
- print OUTPUT "$version\n";
- exit;
- }
-
- if (!$opt_i) {
- &cl_dump_and_decode;
- }
- elsif ($opt_c) {
- &grep_csn ($opt_i);
- }
- else {
- &cl_decode ($opt_i);
- }
-
- close (OUTPUT);
-}
-
-# Validate the parameters
-sub validateArgs
-{
- my ($rc) = 0;
-
- %ld = Mozilla::LDAP::Utils::ldapArgs();
- chop ($ld{host} = `hostname`) if !$opt_h;
- $ld{bind} = "cn=Directory Manager" if !$opt_D;
- @allreplicas = ($opt_r) if ($opt_r);
- if ($opt_o && ! open (OUTPUT, ">$opt_o")) {
- print "Can't create output file $opt_o\n";
- $rc = -1;
- }
- # Open STDOUT if option -o is missing
- open (OUTPUT, ">-") if !$opt_o;
-
- return $rc;
-}
-
-# Dump and decode changelog
-# OUTPUT should have been opened before this call
-sub cl_dump_and_decode
-{
- # Open the connection
- my ($conn) = new Mozilla::LDAP::Conn (\%ld);
- if (!$conn) {
- print OUTPUT qq/Can't connect to $ld{host}:$ld{port} as "$ld{bind}"\n/;
- return -1;
- }
-
- # Get the changelog dir
- my ($changelogdir);
- my ($entry) = $conn->search ("cn=changelog5,cn=config", "sub", "(objectClass=*)");
- while ($entry) {
- $changelogdir = $entry->{"nsslapd-changelogdir"}[0];
- last if $changelogdir;
- $entry = $conn->nextEntry ();
- }
-
- # Get all the replicas on the server if -r option is not specified
- if (!$opt_r) {
- $entry = $conn->search ("cn=mapping tree,cn=config", "sub",
- "(objectClass=nsDS5Replica)");
- while ($entry) {
- push (@allreplicas, "$entry->{nsDS5ReplicaRoot}[0]");
- $entry = $conn->nextEntry ();
- }
- }
-
- # Dump the changelog for the replica
- my (@ldifs);
- my ($replica);
- my ($gotldif);
- my ($ldif);
- foreach (@allreplicas) {
- # Reset the script's start time
- $^T = time;
-
- $replica = $_;
- $gotldif = 0;
-
- # Can't move this line before entering the loop:
- # no ldif file generated other than for the first
- # replica.
- $entry = $conn->newEntry();
- $entry->setDN ("cn=replica,cn=\"$_\",cn=mapping tree,cn=config");
- $entry->setValues('nsDS5Task', 'CL2LDIF');
- $conn->update ($entry);
-
- #Decode the dumped changelog
- @ldifs = <$changelogdir/*.ldif>;
- foreach (@ldifs) {
- # Skip older ldif files
- next if ($#ldifs > 0 && (-M $_ > 0));
- $ldif = $_;
- $gotldif = 1;
- &print_header ($replica, 0);
- if ($opt_c) {
- &grep_csn ($_);
- }
- else {
- &cl_decode ($_);
- }
- # Test op -M doesn't work well so we use rename
- # here to avoid reading the same ldif file more
- # than once.
- rename ($ldif, "$ldif.done");
- }
- &print_header ($replica, "Not Found") if !$gotldif;
- }
- $conn->close;
-}
-
-sub print_header
-{
- my ($replica, $ldif) = @_;
- print OUTPUT "\n# Replica Root: $replica" if $replica;
- print OUTPUT "\n# LDIF File : $ldif\n" if $ldif;
-}
-
-# Grep and interpret CSNs
-# OUTPUT should have been opened before this call
-sub grep_csn
-{
- open (INPUT, "@_") || return;
- &print_header (0, @_);
-
- my ($csn, $maxcsn, $modts);
- while (<INPUT>) {
- next if ($_ !~ /(csn:)|(ruv:)/i);
- if (/ruv:\s*{.+}\s+(\w+)\s+(\w+)\s+(\w*)/i) {
- #
- # RUV with two CSNs and an optional lastModifiedTime
- #
- $csn = &csn_to_string($1);
- $maxcsn = &csn_to_string($2);
- $modts = $3;
- if ( $modts =~ /^0+$/ ) {
- $modts = "";
- }
- else {
- $modts = &csn_to_string($modts);
- }
- }
- elsif (/csn:\s*(\w+)\s+/i || /ruv:\s*{.+}\s+(\w+)\s+/i) {
- #
- # Single CSN
- #
- $csn = &csn_to_string($1);
- $maxcsn = "";
- $modts = "";
- }
- else {
- printf OUTPUT;
- next;
- }
- chop;
- printf OUTPUT "$_ ($csn";
- printf OUTPUT "; $maxcsn" if $maxcsn;
- printf OUTPUT "; $modts" if $modts;
- printf OUTPUT ")\n";
- }
-}
-
-sub csn_to_string
-{
- my ($csn, $tm, $seq, $masterid, $subseq);
- my ($sec, $min, $hour, $mday, $mon, $year);
-
- $csn = "@_";
- return $csn if !$csn;
-
- ($tm, $seq, $masterid, $subseq) = unpack("a8 a4 a4 a4", $csn);
- $tm = hex($tm);
- $seq = hex($seq);
- $masterid = hex($masterid);
- $subseq = hex($subseq);
- ($sec, $min, $hour, $mday, $mon, $year) = localtime ($tm);
- $mon++;
- $year += 1900;
- foreach ($sec, $min, $hour, $mday, $mon) {
- $_ = "0".$_ if ($_ < 10);
- }
- $csn = "$mon/$mday/$year $hour:$min:$sec";
- $csn .= " $seq $subseq" if ( $seq != 0 || $subseq != 0 );
-
- return $csn;
-}
-
-# Decode the changelog
-# OUTPUT should have been opened before this call
-sub cl_decode
-{
- open (INPUT, "@_") || return;
- &print_header (0, @_);
-
- my ($encoded);
- undef $encoded;
- while (<INPUT>) {
- # Try to accomodate "changes" in 4.X and "change" in 6.X
- if (/^changes?::\s*(\S*)/i) {
- print OUTPUT "change::\n";
- $encoded = $1;
- next;
- }
- if (!defined ($encoded)) {
- print OUTPUT;
- next;
- }
- if ($_ eq "\n") {
- print OUTPUT MIME::Base64::decode($encoded);
- print OUTPUT "\n";
- undef $encoded;
- next;
- }
- /^\s*(\S+)\s*\n/;
- $encoded .= $1;
- }
-}
diff --git a/ldap/admin/src/scripts/template-db2bak b/ldap/admin/src/scripts/template-db2bak
deleted file mode 100644
index bb34ae23..00000000
--- a/ldap/admin/src/scripts/template-db2bak
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh
-
-prefix="{{DS-ROOT}}"
-LD_LIBRARY_PATH=$prefix/{{SERVER-DIR}}:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export LD_LIBRARY_PATH
-SHLIB_PATH=$prefix/{{SERVER-DIR}}:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export SHLIB_PATH
-
-cd {{SERVERBIN-DIR}}
-if [ "$#" -eq 1 ]
-then
- bak_dir=$1
-else
- bak_dir={{BAK-DIR}}/`date +%Y_%m_%d_%H_%M_%S`
-fi
-
-./ns-slapd db2archive -D {{CONFIG-DIR}} -a $bak_dir
diff --git a/ldap/admin/src/scripts/template-db2bak.pl b/ldap/admin/src/scripts/template-db2bak.pl
deleted file mode 100644
index eb0ddc6d..00000000
--- a/ldap/admin/src/scripts/template-db2bak.pl
+++ /dev/null
@@ -1,123 +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
-#
-
-sub usage {
- print(STDERR "Usage: $0 [-v] -D rootdn { -w password | -w - | -j filename } \n");
- print(STDERR " [-a dirname] [-t dbtype]\n");
- print(STDERR " Opts: -D rootdn - Directory Manager\n");
- print(STDERR " : -w password - Directory Manager's password\n");
- print(STDERR " : -w - - Prompt for Directory Manager's password\n");
- print(STDERR " : -j filename - Read Directory Manager's password from file\n");
- print(STDERR " : -a dirname - backup directory\n");
- print(STDERR " : -t dbtype - database type (default: ldbm database)\n");
- print(STDERR " : -v - verbose\n");
-}
-$taskname = "";
-$archivedir = "";
-$dbtype = "ldbm database";
-$prefix = "{{DS-ROOT}}";
-$mybakdir = "{{BAK-DIR}}";
-$verbose = 0;
-$rootdn = "";
-$passwd = "";
-$passwdfile = "";
-$i = 0;
-while ($i <= $#ARGV) {
- if ("$ARGV[$i]" eq "-a") { # backup directory
- $i++; $archivedir = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-D") { # Directory Manager
- $i++; $rootdn = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-w") { # Directory Manager's password
- $i++; $passwd = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-j") { # Read Directory Manager's password from a file
- $i++; $passwdfile = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-t") { # database type
- $i++; $dbtype = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-v") { # verbose
- $verbose = 1;
- } else {
- &usage; exit(1);
- }
- $i++;
-}
-if ($passwdfile ne ""){
-# Open file and get the password
- unless (open (RPASS, $passwdfile)) {
- die "Error, cannot open password file $passwdfile\n";
- }
- $passwd = <RPASS>;
- chomp($passwd);
- close(RPASS);
-} elsif ($passwd 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');
-# $passwd = ReadLine(0);
-# chomp($passwd);
-# ReadMode('normal');
-}
-if ( $rootdn eq "" || $passwd eq "") { &usage; exit(1); }
-($s, $m, $h, $dy, $mn, $yr, $wdy, $ydy, $r) = localtime(time);
-$mn++; $yr += 1900;
-$taskname = "backup_${yr}_${mn}_${dy}_${h}_${m}_${s}";
-if ($archivedir eq "") {
- $archivedir = "${bakdir}{{SEP}}bak{{SEP}}${yr}_${mn}_${dy}_${h}_${m}_${s}";
-}
-$dn = "dn: cn=$taskname, cn=backup, cn=tasks, cn=config\n";
-$misc = "changetype: add\nobjectclass: top\nobjectclass: extensibleObject\n";
-$cn = "cn: $taskname\n";
-$nsarchivedir = "nsArchiveDir: $archivedir\n";
-$nsdbtype = "nsDatabaseType: $dbtype\n";
-$entry = "${dn}${misc}${cn}${nsarchivedir}${nsdbtype}";
-$vstr = "";
-if ($verbose != 0) { $vstr = "-v"; }
-$ENV{'PATH'} = "$prefix/usr/lib/mozldap6:$prefix/usr/bin:/usr/lib/mozldap6:/usr/bin";
-$ENV{'LD_LIBRARY_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-$ENV{'SHLIB_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-open(FOO, "| ldapmodify $vstr -h {{SERVER-NAME}} -p {{SERVER-PORT}} -D \"$rootdn\" -w \"$passwd\" -a" );
-print(FOO "$entry");
-close(FOO);
diff --git a/ldap/admin/src/scripts/template-db2index b/ldap/admin/src/scripts/template-db2index
deleted file mode 100644
index 7350e2cc..00000000
--- a/ldap/admin/src/scripts/template-db2index
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-
-prefix="{{DS-ROOT}}"
-LD_LIBRARY_PATH=$prefix/{{SERVER-DIR}}:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export LD_LIBRARY_PATH
-SHLIB_PATH=$prefix/{{SERVER-DIR}}:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export SHLIB_PATH
-
-cd {{SERVERBIN-DIR}}
-if [ $# -eq 0 ]
-then
- bak_dir={{BAK-DIR}}/reindex_`date +%Y_%m_%d_%H_%M_%S`
- ./ns-slapd upgradedb -D {{CONFIG-DIR}} -f -a "$bak_dir"
-elif [ $# -lt 4 ]
-then
- echo "Usage: db2index [-n backend_instance | {-s includesuffix}* -t attribute[:indextypes[:matchingrules]] -T vlvattribute]"
- exit 1
-else
- ./ns-slapd db2index -D {{CONFIG-DIR}} "$@"
-fi
-
diff --git a/ldap/admin/src/scripts/template-db2index.pl b/ldap/admin/src/scripts/template-db2index.pl
deleted file mode 100644
index 0ea8bf4b..00000000
--- a/ldap/admin/src/scripts/template-db2index.pl
+++ /dev/null
@@ -1,227 +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
-#
-
-sub usage {
- print(STDERR "Usage: $0 [-v] -D rootdn { -w password | -w - | -j filename } \n");
- print(STDERR " -n instance [-t attributeName[:indextypes[:matchingrules]]]\n");
- print(STDERR " Opts: -D rootdn - Directory Manager\n");
- print(STDERR " : -w password - Directory Manager's password\n");
- print(STDERR " : -w - - Prompt for Directory Manager's password\n");
- print(STDERR " : -j filename - Read Directory Manager's password from file\n");
- print(STDERR " : -n instance - instance to be indexed\n");
- print(STDERR " : -t attributeName[:indextypes[:matchingrules]]\n");
- print(STDERR " - attribute: name of the attribute to be indexed\n");
- print(STDERR " If omitted, all the indexes defined \n");
- print(STDERR " for that instance are generated.\n");
- print(STDERR " - indextypes: comma separated index types\n");
- print(STDERR " - matchingrules: comma separated matrules\n");
- print(STDERR " Example: -t foo:eq,pres\n");
- print(STDERR " : -v - verbose\n");
-}
-
-$instance = "";
-$rootdn = "";
-$passwd = "";
-$passwdfile = "";
-$attribute_arg = "";
-$vlvattribute_arg = "";
-$verbose = 0;
-
-$prefix = "{{DS-ROOT}}";
-
-$ENV{'PATH'} = "$prefix/usr/lib/mozldap6:$prefix/usr/bin:/usr/lib/mozldap6:/usr/bin";
-$ENV{'LD_LIBRARY_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-$ENV{'SHLIB_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-
-$i = 0;
-while ($i <= $#ARGV)
-{
- if ("$ARGV[$i]" eq "-n")
- {
- # instance
- $i++; $instance = $ARGV[$i];
- }
- elsif ("$ARGV[$i]" eq "-D")
- {
- # Directory Manager
- $i++; $rootdn = $ARGV[$i];
- }
- elsif ("$ARGV[$i]" eq "-w")
- {
- # Directory Manager's password
- $i++; $passwd = $ARGV[$i];
- }
- elsif ("$ARGV[$i]" eq "-j")
- {
- # Read Directory Manager's password from a file
- $i++; $passwdfile = $ARGV[$i];
- }
- elsif ("$ARGV[$i]" eq "-t")
- {
- # Attribute to index
- $i++; $attribute_arg = $ARGV[$i];
- }
- elsif ("$ARGV[$i]" eq "-T")
- {
- # Vlvattribute to index
- $i++; $vlvattribute_arg = $ARGV[$i];
- }
- elsif ("$ARGV[$i]" eq "-v")
- {
- # verbose
- $verbose = 1;
- }
- else
- {
- &usage; exit(1);
- }
- $i++;
-}
-
-if ($passwdfile ne ""){
-# Open file and get the password
- unless (open (RPASS, $passwdfile)) {
- die "Error, cannot open password file $passwdfile\n";
- }
- $passwd = <RPASS>;
- chomp($passwd);
- close(RPASS);
-} elsif ($passwd 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');
-# $passwd = ReadLine(0);
-# chomp($passwd);
-# ReadMode('normal');
-}
-
-if ( $rootdn eq "" || $passwd eq "" )
-{
- &usage;
- exit(1);
-}
-
-$vstr = "";
-if ($verbose != 0)
-{
- $vstr = "-v";
-}
-
-($s, $m, $h, $dy, $mn, $yr, $wdy, $ydy, $r) = localtime(time);
-$mn++; $yr += 1900;
-$taskname = "db2index_${yr}_${mn}_${dy}_${h}_${m}_${s}";
-
-if ( $instance eq "" )
-{
- &usage;
- exit(1);
-}
-
-# No attribute name has been specified: let's get them from the configuration
-$attribute="";
-$indexes_list="";
-$vlvattribute="";
-$vlvindexes_list="";
-chdir("$prefix{{SEP}}usr{{SEP}}bin");
-if ( $attribute_arg eq "" && $vlvattribute_arg eq "" )
-{
- # Get the list of indexes from the entry
- $indexes_list="ldapsearch $vstr -h {{SERVER-NAME}} -p {{SERVER-PORT}} -D \"$rootdn\" -w \"$passwd\" -s one " .
- "-b \"cn=index,cn=\"$instance\", cn=ldbm database,cn=plugins,cn=config\" \"(&(objectclass=*)(nsSystemIndex=false))\" cn";
- # build the values of the attribute nsIndexAttribute
- open(LDAP1, "$indexes_list |");
- while (<LDAP1>) {
- s/\n //g;
- if (/^cn: (.*)\n/) {
- $IndexAttribute="nsIndexAttribute";
- $attribute="$attribute$IndexAttribute: $1\n";
- }
- }
- close(LDAP1);
- if ( $attribute eq "" )
- {
- # No attribute to index, just exit
- exit(0);
- }
-
- # Get the list of indexes from the entry
- $vlvindexes_list="ldapsearch $vstr -h {{SERVER-NAME}} -p {{SERVER-PORT}} -D \"$rootdn\" -w \"$passwd\" -s sub -b \"cn=\"$instance\", cn=ldbm database,cn=plugins,cn=config\" \"objectclass=vlvIndex\" cn";
-
- # build the values of the attribute nsIndexVlvAttribute
- open(LDAP1, "$vlvindexes_list |");
- while (<LDAP1>) {
- s/\n //g;
- if (/^cn: (.*)\n/) {
- $vlvIndexAttribute="nsIndexVlvAttribute";
- $vlvattribute="$vlvattribute$vlvIndexAttribute: $1\n";
- }
- }
- close(LDAP1);
-}
-else
-{
- if ( $attribute_arg ne "" )
- {
- $attribute="nsIndexAttribute: $attribute_arg\n";
- }
- if ( $vlvattribute_arg ne "" )
- {
- $vlvattribute="nsIndexVlvAttribute: $vlvattribute_arg\n";
- }
-}
-
-# Build the task entry to add
-
-$dn = "dn: cn=$taskname, cn=index, cn=tasks, cn=config\n";
-$misc = "changetype: add\nobjectclass: top\nobjectclass: extensibleObject\n";
-$cn = "cn: $taskname\n";
-$nsinstance = "nsInstance: ${instance}\n";
-
-$entry = "${dn}${misc}${cn}${nsinstance}${attribute}${vlvattribute}";
-open(FOO, "| ldapmodify $vstr -h {{SERVER-NAME}} -p {{SERVER-PORT}} -D \"$rootdn\" -w \"$passwd\" -a" );
-print(FOO "$entry");
-close(FOO);
diff --git a/ldap/admin/src/scripts/template-db2ldif b/ldap/admin/src/scripts/template-db2ldif
deleted file mode 100644
index 505aa949..00000000
--- a/ldap/admin/src/scripts/template-db2ldif
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/sh
-
-prefix="{{DS-ROOT}}"
-LD_LIBRARY_PATH=$prefix/{{SERVER-DIR}}:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export LD_LIBRARY_PATH
-SHLIB_PATH=$prefix/{{SERVER-DIR}}:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export SHLIB_PATH
-
-cd {{SERVERBIN-DIR}}
-if [ "$#" -lt 2 ];
-then
- echo "Usage: db2ldif {-n backend_instance}* | {-s includesuffix}*"
- echo " [{-x excludesuffix}*] [-a outputfile]"
- echo " [-N] [-r] [-C] [-u] [-U] [-m] [-M] [-1]"
- echo "Note: either \"-n backend_instance\" or \"-s includesuffix\" is required."
- exit 1
-fi
-
-set_ldif=0
-ldif_file="mydummy"
-for arg in "$@"
-do
- if [ "$arg" = '-a' ];
- then
- set_ldif=1
- elif [ $set_ldif -eq 1 ];
- then
- ldif_file=$arg
- set_ldif=2
- fi
-done
-if [ $ldif_file = "mydummy" ]
-then
- ldif_file={{LDIF-DIR}}/laputa-`date +%Y_%m_%d_%H%M%S`.ldif
-fi
-if [ $set_ldif -eq 2 ]
-then
-./ns-slapd db2ldif -D {{CONFIG-DIR}} "$@"
-else
-./ns-slapd db2ldif -D {{CONFIG-DIR}} -a $ldif_file "$@"
-fi
diff --git a/ldap/admin/src/scripts/template-db2ldif.pl b/ldap/admin/src/scripts/template-db2ldif.pl
deleted file mode 100644
index c2b5fca2..00000000
--- a/ldap/admin/src/scripts/template-db2ldif.pl
+++ /dev/null
@@ -1,250 +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
-#
-
-sub usage {
- print(STDERR "Usage: $0 [-v] -D rootdn { -w password | -w - | -j filename } \n");
- print(STDERR " {-n instance}* | {-s include}* [{-x exclude}*] \n");
- print(STDERR " [-m] [-M] [-u] [-C] [-N] [-U] [-a filename]\n");
- print(STDERR " Opts: -D rootdn - Directory Manager\n");
- print(STDERR " : -w password - Directory Manager's password\n");
- print(STDERR " : -w - - Prompt for Directory Manager's password\n");
- print(STDERR " : -j filename - Read Directory Manager's password from file\n");
- print(STDERR " : -n instance - instance to be exported\n");
- print(STDERR " : -a filename - output ldif file\n");
- print(STDERR " : -s include - included suffix(es)\n");
- print(STDERR " : -x exclude - excluded suffix(es)\n");
- print(STDERR " : -m - minimal base64 encoding\n");
- print(STDERR " : -M - output ldif is stored in multiple files\n");
- print(STDERR " these files are named : <instance>_<filename>\n");
- print(STDERR " by default, all instances are stored in <filename>\n");
- print(STDERR " : -r - export replica\n");
- print(STDERR " : -u - do not export unique id\n");
- print(STDERR " : -C - use main db file only\n");
- print(STDERR " : -N - suppress printing sequential number\n");
- print(STDERR " : -U - output ldif is not folded\n");
- print(STDERR " : -E - Decrypt encrypted data when exporting\n");
- print(STDERR " : -1 - do not print version line\n");
- print(STDERR " : -v - verbose\n");
-}
-
-@instances = (
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- ""
-);
-@included = (
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- ""
-);
-@excluded = (
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- ""
-);
-$maxidx = 50;
-$nowrap = 0;
-$nobase64 = 0;
-$noversion = 0;
-$nouniqueid = 0;
-$useid2entry = 0;
-$onefile = 1;
-$printkey = 1;
-$taskname = "";
-$ldiffile = "";
-$doreplica = 0;
-$prefix = "{{DS-ROOT}}";
-$ldifdir = "{{LDIF-DIR}}";
-$servid = "{{SERV-ID}}";
-$verbose = 0;
-$rootdn = "";
-$passwd = "";
-$passwdfile = "";
-$i = 0;
-$insti = 0;
-$incli = 0;
-$excli = 0;
-$decrypt_on_export = 0;
-while ($i <= $#ARGV) {
- if ( "$ARGV[$i]" eq "-n" ) { # instances
- $i++;
- if ($insti < $maxidx) {
- $instances[$insti] = $ARGV[$i]; $insti++;
- } else {
- &usage; exit(1);
- }
- } elsif ("$ARGV[$i]" eq "-s") { # included suffix
- $i++;
- if ($incli < $maxidx) {
- $included[$incli] = $ARGV[$i]; $incli++;
- } else {
- &usage; exit(1);
- }
- } elsif ("$ARGV[$i]" eq "-x") { # excluded suffix
- $i++;
- if ($excli < $maxidx) {
- $excluded[$excli] = $ARGV[$i]; $excli++;
- } else {
- &usage; exit(1);
- }
- } elsif ("$ARGV[$i]" eq "-a") { # ldif file
- $i++; $ldiffile = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-D") { # Directory Manager
- $i++; $rootdn = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-w") { # Directory Manager's password
- $i++; $passwd = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-j") { # Read Directory Manager's password from a file
- $i++; $passwdfile = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-M") { # multiple ldif file
- $onefile = 0;
- } elsif ("$ARGV[$i]" eq "-o") { # one ldif file
- $onefile = 1;
- } elsif ("$ARGV[$i]" eq "-u") { # no dump unique id
- $nouniqueid = 1;
- } elsif ("$ARGV[$i]" eq "-C") { # use id2entry
- $useid2entry = 1;
- } elsif ("$ARGV[$i]" eq "-N") { # does not print key
- $printkey = 0;
- } elsif ("$ARGV[$i]" eq "-r") { # export replica
- $doreplica = 1;
- } elsif ("$ARGV[$i]" eq "-m") { # no base64
- $nobase64 = 1;
- } elsif ("$ARGV[$i]" eq "-U") { # no wrap
- $nowrap = 1;
- } elsif ("$ARGV[$i]" eq "-1") { # no version line
- $noversion = 1;
- } elsif ("$ARGV[$i]" eq "-E") { # decrypt
- $decrypt_on_export = 1;
- } elsif ("$ARGV[$i]" eq "-v") { # verbose
- $verbose = 1;
- } else {
- &usage; exit(1);
- }
- $i++;
-}
-if ($passwdfile ne ""){
-# Open file and get the password
- unless (open (RPASS, $passwdfile)) {
- die "Error, cannot open password file $passwdfile\n";
- }
- $passwd = <RPASS>;
- chomp($passwd);
- close(RPASS);
-} elsif ($passwd 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');
-# $passwd = ReadLine(0);
-# chomp($passwd);
-# ReadMode('normal');
-}
-if (($instances[0] eq "" && $included[0] eq "") || $rootdn eq "" || $passwd eq "") { &usage; exit(1); }
-($s, $m, $h, $dy, $mn, $yr, $wdy, $ydy, $r) = localtime(time);
-$mn++; $yr += 1900;
-$taskname = "export_${yr}_${mn}_${dy}_${h}_${m}_${s}";
-if ($ldiffile eq "") {
- $ldiffile = "${ldifdir}{{SEP}}${servid}-${yr}_${mn}_${dy}_${h}_${m}_${s}.ldif";
-}
-$dn = "dn: cn=$taskname, cn=export, cn=tasks, cn=config\n";
-$misc = "changetype: add\nobjectclass: top\nobjectclass: extensibleObject\n";
-$cn = "cn: $taskname\n";
-$i = 0;
-$nsinstance = "";
-while ("" ne "$instances[$i]") {
- $nsinstance = "${nsinstance}nsInstance: $instances[$i]\n";
- $i++;
-}
-$i = 0;
-$nsincluded = "";
-while ("" ne "$included[$i]") {
- $nsincluded = "${nsincluded}nsIncludeSuffix: $included[$i]\n";
- $i++;
-}
-$i = 0;
-$nsexcluded = "";
-while ("" ne "$excluded[$i]") {
- $nsexcluded = "${nsexcluded}nsExcludeSuffix: $excluded[$i]\n";
- $i++;
-}
-$nsreplica = "";
-if ($doreplica != 0) { $nsreplica = "nsExportReplica: true\n"; }
-$nsnobase64 = "";
-if ($nobase64 != 0) { $nsnobase64 = "nsMinimalEncoding: true\n"; }
-$nsnowrap = "";
-if ($nowrap != 0) { $nsnowrap = "nsNoWrap: true\n"; }
-$nsnoversion = "";
-if ($noversion != 0) { $nsnoversion = "nsNoVersionLine: true\n"; }
-$nsnouniqueid = "";
-if ($nouniqueid != 0) { $nsnouniqueid = "nsDumpUniqId: false\n"; }
-$nsuseid2entry = "";
-if ($useid2entry != 0) { $nsuseid2entry = "nsUseId2Entry: true\n"; }
-$nsonefile = "";
-if ($onefile != 0) { $nsonefile = "nsUseOneFile: true\n"; }
-if ($onefile == 0) { $nsonefile = "nsUseOneFile: false\n"; }
-$nsexportdecrypt = "";
-if ($decrypt_on_export != 0) { $nsexportdecrypt = "nsExportDecrypt: true\n"; }
-$nsprintkey = "";
-if ($printkey == 0) { $nsprintkey = "nsPrintKey: false\n"; }
-$nsldiffile = "nsFilename: ${ldiffile}\n";
-$entry = "${dn}${misc}${cn}${nsinstance}${nsincluded}${nsexcluded}${nsreplica}${nsnobase64}${nsnowrap}${nsnoversion}${nsnouniqueid}${nsuseid2entry}${nsonefile}${nsexportdecrypt}${nsprintkey}${nsldiffile}";
-$vstr = "";
-if ($verbose != 0) { $vstr = "-v"; }
-$ENV{'PATH'} = "$prefix/usr/lib/mozldap6:$prefix/usr/bin:/usr/lib/mozldap6:/usr/bin";
-$ENV{'LD_LIBRARY_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-$ENV{'SHLIB_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-open(FOO, "| ldapmodify $vstr -h {{SERVER-NAME}} -p {{SERVER-PORT}} -D \"$rootdn\" -w \"$passwd\" -a" );
-print(FOO "$entry");
-close(FOO);
diff --git a/ldap/admin/src/scripts/template-ldif2db b/ldap/admin/src/scripts/template-ldif2db
deleted file mode 100644
index 7bd3a5e8..00000000
--- a/ldap/admin/src/scripts/template-ldif2db
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/sh
-
-prefix="{{DS-ROOT}}"
-LD_LIBRARY_PATH=$prefix/{{SERVER-DIR}}:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export LD_LIBRARY_PATH
-SHLIB_PATH=$prefix/{{SERVER-DIR}}:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export SHLIB_PATH
-
-cd {{SERVERBIN-DIR}}
-if [ $# -lt 4 ]
-then
- echo "Usage: ldif2db -n backend_instance | {-s includesuffix}* [{-x excludesuffix}*]"
- echo " {-i ldiffile}* [-O]"
- echo "Note: either \"-n backend_instance\" or \"-s includesuffix\" and \"-i ldiffile\" are required."
- exit 1
-fi
-
-echo importing data ...
-./ns-slapd ldif2db -D {{CONFIG-DIR}} "$@" 2>&1
-exit $?
diff --git a/ldap/admin/src/scripts/template-ldif2db.pl b/ldap/admin/src/scripts/template-ldif2db.pl
deleted file mode 100644
index bc4a1c14..00000000
--- a/ldap/admin/src/scripts/template-ldif2db.pl
+++ /dev/null
@@ -1,226 +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
-#
-
-sub usage {
- print(STDERR "Usage: $0 [-v] -D rootdn { -w password | -w - | -j filename } \n");
- print(STDERR " -n instance | {-s include}* [{-x exclude}*] [-O] [-c]\n");
- print(STDERR " [-g [string]] [-G namespace_id] {-i filename}*\n");
- print(STDERR " Opts: -D rootdn - Directory Manager\n");
- print(STDERR " : -w password - Directory Manager's password\n");
- print(STDERR " : -w - - Prompt for Directory Manager's password\n");
- print(STDERR " : -j filename - Read Directory Manager's password from file\n");
- print(STDERR " : -n instance - instance to be imported to\n");
- print(STDERR " : -i filename - input ldif file(s)\n");
- print(STDERR " : -s include - included suffix\n");
- print(STDERR " : -x exclude - excluded suffix(es)\n");
- print(STDERR " : -O - only create core db, no attr indexes\n");
- print(STDERR " : -c size - merge chunk size\n");
- print(STDERR " : -g [string] - string is \"none\" or \"deterministic\"\n");
- print(STDERR " : none - unique id is not generated\n");
- print(STDERR " : deterministic - generate name based unique id (-G name)\n");
- print(STDERR " : by default - generate time based unique id\n");
- print(STDERR " : -G name - namespace id for name based uniqueid (-g deterministic)\n");
- print(STDERR " : -E - Encrypt data when importing\n");
- print(STDERR " : -v - verbose\n");
-}
-
-@ldiffiles = (
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- ""
-);
-@included = (
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- ""
-);
-@excluded = (
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "", "", "",
- ""
-);
-$maxidx = 50;
-$instance = "";
-$noattrindexes = 0;
-$mergechunksiz = 0;
-$genuniqid = "time";
-$uniqidname = "";
-$taskname = "";
-$prefix = "{{DS-ROOT}}";
-$verbose = 0;
-$rootdn = "";
-$passwd = "";
-$passwdfile = "";
-$i = 0;
-$ldifi = 0;
-$incli = 0;
-$excli = 0;
-$encrypt_on_import = 0;
-while ($i <= $#ARGV) {
- if ( "$ARGV[$i]" eq "-i" ) { # ldiffiles
- $i++;
- if ($ldifi < $maxidx) {
- $ldiffiles[$ldifi] = $ARGV[$i]; $ldifi++;
- } else {
- &usage; exit(1);
- }
- } elsif ("$ARGV[$i]" eq "-s") { # included suffix
- $i++;
- if ($incli < $maxidx) {
- $included[$incli] = $ARGV[$i]; $incli++;
- } else {
- &usage; exit(1);
- }
- } elsif ("$ARGV[$i]" eq "-x") { # excluded suffix
- $i++;
- if ($excli < $maxidx) {
- $excluded[$excli] = $ARGV[$i]; $excli++;
- } else {
- &usage; exit(1);
- }
- } elsif ("$ARGV[$i]" eq "-n") { # instance
- $i++; $instance = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-D") { # Directory Manager
- $i++; $rootdn = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-w") { # Directory Manager's password
- $i++; $passwd = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-j") { # Read Directory Manager's password from a file
- $i++; $passwdfile = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-O") { # no attr indexes
- $noattrindexes = 1;
- } elsif ("$ARGV[$i]" eq "-c") { # merge chunk size
- $i++; $mergechunksiz = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-g") { # generate uniqueid
- if (("$ARGV[$i+1]" ne "") && !("$ARGV[$i+1]" =~ /^-/)) {
- $i++;
- if ("$ARGV[$i]" eq "none") {
- $genuniqid = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "deterministic") {
- $genuniqid = $ARGV[$i];
- }
- }
- } elsif ("$ARGV[$i]" eq "-G") { # namespace id
- $i++; $uniqidname = $ARGV[$i];
- } elsif ("$ARGV[$i]" eq "-v") { # verbose
- $verbose = 1;
- } elsif ("$ARGV[$i]" eq "-E") { # encrypt on import
- $encrypt_on_import = 1;
- } else {
- &usage; exit(1);
- }
- $i++;
-}
-if ($passwdfile ne ""){
-# Open file and get the password
- unless (open (RPASS, $passwdfile)) {
- die "Error, cannot open password file $passwdfile\n";
- }
- $passwd = <RPASS>;
- chomp($passwd);
- close(RPASS);
-} elsif ($passwd 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');
-# $passwd = ReadLine(0);
-# chomp($passwd);
-# ReadMode('normal');
-}
-if (($instance eq "" && $included[0] eq "") || $ldiffiles[0] eq "" || $rootdn eq "" || $passwd eq "") { &usage; exit(1); }
-($s, $m, $h, $dy, $mn, $yr, $wdy, $ydy, $r) = localtime(time);
-$mn++; $yr += 1900;
-$taskname = "import_${yr}_${mn}_${dy}_${h}_${m}_${s}";
-$dn = "dn: cn=$taskname, cn=import, cn=tasks, cn=config\n";
-$misc = "changetype: add\nobjectclass: top\nobjectclass: extensibleObject\n";
-$cn = "cn: $taskname\n";
-if ($instance ne "") {
- $nsinstance = "nsInstance: ${instance}\n";
-}
-$i = 0;
-$nsldiffiles = "";
-while ("" ne "$ldiffiles[$i]") {
- $nsldiffiles = "${nsldiffiles}nsFilename: $ldiffiles[$i]\n";
- $i++;
-}
-$i = 0;
-$nsincluded = "";
-while ("" ne "$included[$i]") {
- $nsincluded = "${nsincluded}nsIncludeSuffix: $included[$i]\n";
- $i++;
-}
-$i = 0;
-$nsexcluded = "";
-while ("" ne "$excluded[$i]") {
- $nsexcluded = "${nsexcluded}nsExcludeSuffix: $excluded[$i]\n";
- $i++;
-}
-$nsnoattrindexes = "";
-if ($noattrindexes != 0) { $nsnoattrindexes = "nsImportIndexAttrs: false\n"; }
-$nsimportencrypt = "";
-if ($encrypt_on_import != 0) { $nsimportencrypt = "nsImportEncrypt: true\n"; }
-$nsmergechunksiz = "nsImportChunkSize: ${mergechunksiz}\n";
-$nsgenuniqid = "nsUniqueIdGenerator: ${genuniqid}\n";
-$nsuniqidname = "";
-if ($uniqidname ne "") { $nsuniqidname = "nsUniqueIdGeneratorNamespace: ${uniqidname}\n"; }
-$entry = "${dn}${misc}${cn}${nsinstance}${nsincluded}${nsexcluded}${nsldiffiles}${nsnoattrindexes}${nsimportencrypt}${nsmergechunksiz}${nsgenuniqid}${nsuniqidname}";
-$vstr = "";
-if ($verbose != 0) { $vstr = "-v"; }
-$ENV{'PATH'} = "$prefix/usr/lib/mozldap6:$prefix/usr/bin:/usr/lib/mozldap6:/usr/bin";
-$ENV{'LD_LIBRARY_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-$ENV{'SHLIB_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-open(FOO, "| ldapmodify $vstr -h {{SERVER-NAME}} -p {{SERVER-PORT}} -D \"$rootdn\" -w \"$passwd\" -a" );
-print(FOO "$entry");
-close(FOO);
diff --git a/ldap/admin/src/scripts/template-ldif2ldap b/ldap/admin/src/scripts/template-ldif2ldap
deleted file mode 100644
index 6519cbfb..00000000
--- a/ldap/admin/src/scripts/template-ldif2ldap
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-
-prefix="{{DS-ROOT}}"
-PATH=$prefix/usr/lib/mozldap6:/usr/lib/mozldap6
-LD_LIBRARY_PATH=$prefix/usr/lib/dirsec:/usr/lib/dirsec:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export LD_LIBRARY_PATH
-SHLIB_PATH=$prefix/usr/lib/dirsec:/usr/lib/dirsec:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export SHLIB_PATH
-
-ldapmodify -a -p {{SERVER-PORT}} -D "$1" -w "$2" -f $3
diff --git a/ldap/admin/src/scripts/template-monitor b/ldap/admin/src/scripts/template-monitor
deleted file mode 100644
index 8df67e5f..00000000
--- a/ldap/admin/src/scripts/template-monitor
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-
-PATH=$prefix/usr/lib/mozldap6:/usr/lib/mozldap6
-LD_LIBRARY_PATH=$prefix/usr/lib/dirsec:/usr/lib/dirsec:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export LD_LIBRARY_PATH
-SHLIB_PATH=$prefix/usr/lib/dirsec:/usr/lib/dirsec:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export SHLIB_PATH
-
-if [ "x$1" != "x" ];
-then MDN="$1";
-else MDN="cn=monitor";
- fi
-ldapsearch -p {{SERVER-PORT}} -b "$MDN" -s base "objectClass=*"
diff --git a/ldap/admin/src/scripts/template-ns-accountstatus.pl b/ldap/admin/src/scripts/template-ns-accountstatus.pl
deleted file mode 100644
index 1f0228de..00000000
--- a/ldap/admin/src/scripts/template-ns-accountstatus.pl
+++ /dev/null
@@ -1,846 +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
-#
-
-###############################
-# SUB-ROUTINES
-###############################
-
-sub usage_and_exit
-{
- print (STDERR "$cmd [-D rootdn] { -w password | -w - | -j filename } \n");
- print (STDERR " [-p port] [-h host] -I DN-to-$operation\n\n");
- print (STDERR "May be used to $operation a user or a domain of users\n\n");
- print (STDERR "Arguments:\n");
- print (STDERR " -? - help\n");
- print (STDERR " -D rootdn - Provide a Directory Manager DN. Default= '$defrootdn'\n");
- print (STDERR " -w password - Provide a password for the Directory Manager DN\n");
- print (STDERR " -w - - Prompt for the Directory Manager's password\n");
- print (STDERR " -j filename - Read the Directory Manager's password from file\n");
- print (STDERR " -p port - Provide a port. Default= '$defport'\n");
- print (STDERR " -h host - Provide a host name. Default= '$defhost'\n");
- print (STDERR " -I DN-to-$operation - Single entry DN or role DN to $operation\n");
- exit 100;
-}
-
-sub debug
-{
-# print " ==> @_";
-}
-
-sub out
-{
- print "@_";
-}
-
-# --------------------------
-# Check if the entry is part of a locked role:
-# i.e.: for each role member (nsroledn) of nsdisabledrole, check if
-# * it is the same as the entry
-# * the entry is member of role (==has nsroledn attributes), compare each of
-# them with the nsroledn of nsdisabledrole
-# * if nsroledn of nsdisabledrole are complex, go through each of them
-# argv[0] is the local file handler
-# argv[1] is the entry (may be a single entry DN or a role DN)
-# argv[2] is the base for the search
-# --------------------------
-
-$throughRole="";
-
-sub indirectLock
-{
- # For recursivity, file handler must be local
- my $L_filehandle=$_[0];
- $L_filehandle++;
-
- my $L_entry=$_[1];
- # Remove useless space
- my @L_intern=split /([,])/,$L_entry;
- my $L_result="";
- foreach $L_part (@L_intern)
- {
- $L_part=~s/^ +//;
- $L_part=~ tr/A-Z/a-z/;
- $L_result="$L_result$L_part";
- }
- $L_entry=$L_result;
-
- my $L_base=$_[2];
-
- my $L_search;
- my $L_currentrole;
- my $L_retCode;
-
- my $L_local;
-
-`$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$L_base\" \"(|(objectclass=*)(objectclass=ldapsubentry))\" nsroledn >> {{DEV-NULL}} 2>&1 `;
-$retCode=$?;
-if ( $retCode != 0 )
-{
- $retCode=$?>>8;
- return 1;
-}
-
- # Check if the role is a nested role
- @L_Nested="$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$L_base\" \"(|(objectclass=nsNestedRoleDefinition)(objectclass=ldapsubentry))\" ";
- # L_isNested == 1 means that we are going through a nested role, so for each member of that
- # nested role, check that the member is below the scope of the nested
- $L_isNested=@L_Nested;
-
- # Not Direct Lock, Go through roles if any
- $L_search="$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$L_base\" \"(|(objectclass=*)(objectclass=ldapsubentry))\" nsroledn ";
-
- debug("\t-->indirectLock: check if $L_entry is part of a locked role from base $L_base\n\n");
-
- unless (open ($L_filehandle, "$L_search |"))
- {
- out("Can't open file $L_filehandle\n");
- exit;
- }
- while (<$L_filehandle>) {
-
- s/\n //g;
- if (/^nsroledn: (.*)\n/) {
- $L_currentrole = $1;
-
- # Remove useless space
- my @L_intern=split /([,])/,$L_currentrole;
- my $L_result="";
- foreach $L_part (@L_intern)
- {
- $L_part=~s/^ +//;
- $L_part=~ tr/A-Z/a-z/;
- $L_result="$L_result$L_part";
- }
- $L_currentrole=$L_result;
-
- debug("\t-- indirectLock loop: current nsroledn $L_currentrole of base $L_base\n");
- if ( $L_isNested == 1 )
- {
- if ( checkScope($L_currentrole, $L_base) == 0 )
- {
- # Scope problem probably a bad conf, skip the currentrole
- next;
- }
- }
-
- if ( $L_currentrole eq $L_entry )
- {
- # the entry is a role that is directly locked
- # i.e, nsroledn of nsdisabledrole contains the entry
- $throughRole=$L_base;
- $throughRole=~ tr/A-Z/a-z/;
-
- # skipDisabled means that we've just found that the entry (which is a role)
- # is locked directly (==its DN is part of nsroledn attributes)
- # we just want to know now, if it is locked through another role
- # at least, one
- if ( $skipDisabled == 1 )
- {
- # direct inactivation
- $directLocked=1;
- # just go through that test once
- $skipDisabled=0;
- next;
- }
- debug("\t-- 1 indirectLock: $L_currentrole locked throughRole == $throughRole\n");
- return 0;
- }
-
- $L_retCode=memberOf($L_currentrole, $L_entry);
- if ( $L_retCode == 0 && $single == 1 )
- {
- $throughRole=$L_currentrole;
- $throughRole=~ tr/A-Z/a-z/;
- if ( $skipManaged == 1 )
- {
- if ( $L_currentrole eq $nsManagedDisabledRole)
- {
- # Try next nsroledn
- $directLocked=1;
- $skipManaged=0;
- next;
- }
- }
- debug("\t-- 2 indirectLock: $L_currentrole locked throughRole == $throughRole\n");
- return 0;
- }
-
- # Only for the first iteration
- # the first iteration is with nsdisabledrole as base, other
- # loops are deeper
- $L_local=$skipDisabled;
- $skipDisabled=0;
-
- # the current nsroledn may be a complex role, just go through
- # its won nsroledn
- $L_retCode=indirectLock($L_filehandle,$L_entry, $L_currentrole);
-
- # Because of recursivity, to keep the initial value for the first level
- $skipDisabled=$L_local;
-
- if ( $L_retCode == 0 )
- {
- $throughRole=$L_currentrole;
- $throughRole=~ tr/A-Z/a-z/;
- debug("\t-- 3 indirectLock: $L_entry locked throughRole == $throughRole\n");
- return 0;
- }
- }
- }
-
- close($L_filehandle);
-
- debug("\t<--indirectLock: no more nsroledn to process\n");
- return 1;
-}
-
-# --------------------------
-# Check if nsroledn is part of the entry attributes
-# argv[0] is a role DN (nsroledn attribute)
-# argv[1] is the entry
-# --------------------------
-sub memberOf
-{
- my $L_nsroledn=$_[0];
- $L_nsroledn=~ tr/A-Z/a-z/;
-
- my $L_entry=$_[1];
-
- my $L_search;
- my $L_currentrole;
-
- $L_search="$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$L_entry\" \"(|(objectclass=*)(objectclass=ldapsubentry))\" nsrole";
-
- debug("\t\t-->memberOf: $L_search: check if $L_entry has $L_nsroledn as nsroledn attribute\n");
-
- open (LDAP2, "$L_search |");
- while (<LDAP2>) {
- s/\n //g;
- if (/^nsrole: (.*)\n/) {
- $L_currentrole = $1;
- $L_currentrole=~ tr/A-Z/a-z/;
- if ( $L_currentrole eq $L_nsroledn )
- {
- # the parm is part of the $L_entry nsroledn
- debug("\t\t<--memberOf: $L_entry locked through $L_nsroledn\n");
- return 0;
- }
- }
- }
- close(LDAP2);
-
- # the parm is not part of the $L_entry nsroledn
- debug("\t\t<--memberOf: $L_entry not locked through $L_nsroledn\n");
- return 1;
-}
-
-
-# --------------------------
-# Remove the rdn of a DN
-# argv[0] is a DN
-# --------------------------
-sub removeRdn
-{
- $L_entry=$_[0];
-
- @L_entryToTest=split /([,])/,$L_entry;
- debug("removeRdn: entry to split: $L_entry**@L_entryToTest\n");
-
- $newDN="";
- $removeRDN=1;
- foreach $part (@L_entryToTest)
- {
- $part=~ s/^ +//;
- $part=~ tr/A-Z/a-z/;
- if ( $removeRDN <= 2 )
- {
- $removeRDN=$removeRDN+1;
- }
- else
- {
- $newDN="$newDN$part";
- }
- }
-
- debug("removeRdn: new DN **$newDN**\n");
-}
-
-# --------------------------
-# Check if L_current is below the scope of
-# L_nestedRole
-# argv[0] is a role
-# argv[1] is the nested role
-# --------------------------
-sub checkScope
-{
- $L_current=$_[0];
- $L_nestedRole=$_[1];
-
- debug("checkScope: check if $L_current is below $L_nestedRole\n");
-
- removeRdn($L_nestedRole);
- $L_nestedRoleSuffix=$newDN;
- debug("checkScope: nested role based: $L_nestedRoleSuffix\n");
-
- $cont=1;
- while ( ($cont == 1) && ($L_current ne "") )
- {
- removeRdn($L_current);
- $currentDn=$newDN;
- debug("checkScope: current DN to check: $currentDn\n");
-
- if ( $currentDn eq $L_nestedRoleSuffix )
- {
- debug("checkScope: DN match!!!\n");
- $cont = 0;
- }
- else
- {
- $L_current=$currentDn;
- }
- }
-
- if ( $cont == 1 )
- {
- debug("checkScope: $_[0] and $_[1] are not compatible\n");
- return 0;
- }
- else
- {
- debug("checkScope: $_[0] and $_[1] are compatible\n");
- return 1;
- }
-}
-
-
-###############################
-# MAIN ROUTINE
-###############################
-
-# Generated variable
-$prefix="{{DS-ROOT}}";
-
-# Determine which command we are running
-if ( $0 =~ /ns-inactivate(.pl)?$/ )
-{
- $cmd="ns-inactivate.pl";
- $operation="inactivate";
- $state="inactivated";
- $modrole="add";
- $already="already";
-}
-elsif ( $0 =~ /ns-activate(.pl)?$/ )
-{
- $cmd="ns-activate.pl";
- $operation="activate";
- $state="activated";
- $modrole="delete";
- $already="already";
-}
-elsif ( $0 =~ /ns-accountstatus(.pl)?$/ )
-{
- $cmd="ns-accountstatus.pl";
- $operation="get status of";
- $state="activated";
- # no need for $modrole as no operation is performed
- $already="";
-
-}
-else
-{
- out("$0: unknown command\n");
- exit 100;
-}
-
-debug("Running ** $cmd ** $operation\n");
-
-$ENV{'PATH'} = "$prefix/usr/lib/mozldap6:$prefix/usr/bin:/usr/lib/mozldap6:/usr/bin";
-$ENV{'LD_LIBRARY_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-$ENV{'SHLIB_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-
-$ldapsearch="ldapsearch -1";
-$ldapmodify="ldapmodify";
-
-# Default values
-$defrootdn= "{{ROOT-DN}}";
-$defhost= "{{SERVER-NAME}}";
-$defport= "{{SERVER-PORT}}";
-
-# User values
-$rootdn= "{{ROOT-DN}}";
-$rootpw= "";
-$pwfile= "";
-$host= "{{SERVER-NAME}}";
-$port= "{{SERVER-PORT}}";
-$entry= "";
-
-$single=0;
-$role=0;
-
-# Process the command line arguments
-while( $arg = shift)
-{
- if($arg eq "-?")
- {
- usage_and_exit();
- }
- elsif($arg eq "-D")
- {
- $rootdn= shift @ARGV;
- }
- elsif($arg eq "-w")
- {
- $rootpw= shift @ARGV;
- }
- elsif($arg eq "-j")
- {
- $pwfile= shift @ARGV;
- }
- elsif($arg eq "-p")
- {
- $port= shift @ARGV;
- }
- elsif($arg eq "-h")
- {
- $host= shift @ARGV;
- }
- elsif($arg eq "-I")
- {
- $entry= shift @ARGV;
- }
- else
- {
- print "$arg: Unknown command line argument.\n";
- usage_and_exit();
- }
-}
-
-if ($pwfile ne ""){
-# Open file and get the password
- unless (open (RPASS, $pwfile)) {
- die "Error, cannot open password file $passwdfile\n";
- }
- $rootpw = <RPASS>;
- chomp($rootpw);
- close(RPASS);
-} elsif ($rootpw 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');
-# $rootpw = ReadLine(0);
-# chomp($rootpw);
-# ReadMode('normal');
-}
-
-if( $rootpw eq "" )
-{
- usage_and_exit();
-}
-
-if( $entry eq "" )
-{
- usage_and_exit();
-}
-
-#
-# Check the actual existence of the entry to inactivate/activate
-# and at the same time, validate the various parm: port, host, rootdn, rootpw
-#
-@exist=`$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$entry\" \"(objectclass=*)\" dn`;
-$retCode1=$?;
-if ( $retCode1 != 0 )
-{
- $retCode1=$?>>8;
- exit $retCode1;
-}
-
-@isRole=`$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$entry\" \"(&(objectclass=LDAPsubentry)(objectclass=nsRoleDefinition))\" dn`;
-$nbLineRole=@isRole;
-$retCode2=$?;
-if ( $retCode2 != 0 )
-{
- $retCode2=$?>>8;
- exit $retCode2;
-}
-
-if ( $nbLineRole == 1 )
-{
- debug("Groups of users\n");
- $role=1;
-}
-else
-{
- debug("Single user\n");
- $single=1;
-}
-
-#
-# First of all, check the existence of the nsaccountlock attribute in the entry
-#
-$isLocked=0;
-if ( $single == 1 )
-{
- $searchAccountLock="$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$entry\" \"(objectclass=*)\" nsaccountlock";
- open (LDAP1, "$searchAccountLock |");
- while (<LDAP1>) {
- s/\n //g;
- if (/^nsaccountlock: (.*)\n/) {
- $L_currentvalue = $1;
- $L_currentvalue=~ tr/A-Z/a-z/;
- if ( $L_currentvalue eq "true")
- {
- $isLocked=1;
- }
- elsif ( $L_currentvalue eq "false" )
- {
- $isLocked=0;
- }
- }
- }
- close(LDAP1);
-}
-debug("Is the entry already locked? ==> $isLocked\n");
-
-#
-# Get the suffix name of that entry
-#
-
-# Remove the space at the beginning (just in case...)
-# -I "uid=jvedder , ou=People , o=sun.com"
-@suffix=split /([,])/,$entry;
-$result="";
-foreach $part (@suffix)
-{
- $part=~s/^ +//;
- $part=~ tr/A-Z/a-z/;
- $result="$result$part";
-}
-@suffixN=$result;
-
-debug("Entry to $operation: #@suffix#\n");
-debug("Entry to $operation: #@suffixN#\n");
-
-# Get the suffix
-$cont=0;
-while ($cont == 0)
-{
- # Look if suffix is the suffix of the entry
- # ldapsearch -s one -b "cn=mapping tree,cn=config" "cn=\"uid=jvedder,ou=People,o=sun.com\""
- #
- debug("\tSuffix from the entry: #@suffixN#\n");
- @mapping=`$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s one -b \"cn=mapping tree, cn=config\" \"cn=\\"@suffixN\\"\" cn `;
-
- $retCode=$?;
- if ( $retCode != 0 )
- {
- $retCode=$?>>8;
- exit $retCode;
- }
-
- # If we get a result, remove the dn:
- # dn: cn="o=sun.com",cn=mapping tree,cn=config
- # cn: "o=sun.com"
- #
- shift @mapping;
-
- foreach $res (@mapping)
- {
- # Break the string cn: "o=sun.com" into pieces
- @cn= split(/ /,$res);
-
- # And remove the cn: part
- shift @cn;
-
- # Now compare the suffix we extract from the mapping tree
- # with the suffix derived from the entry
- debug("\tSuffix from mapping tree: #@cn#\n");
- if ( @cn eq @suffixN ) {
- debug("Found matching suffix\n");
- $cont=1;
- }
- }
-
- if ( $cont == 0 )
- {
- # Remove the current rdn to try another suffix
- shift @suffix;
-
- $result="";
- foreach $part (@suffix)
- {
- $part=~ s/^ +//;
- $part=~ tr/A-Z/a-z/;
- $result="$result$part";
- }
- @suffixN=$result;
-
- debug("\t\tNothing found => go up one level in rdn #@suffix#\n");
- $len=@suffix;
- if ( $len == 0 )
- {
- debug("Can not find suffix. Problem\n");
- $cont=2;
- }
- }
-}
-if ( $cont == 2)
-{
- out("Can not find suffix for entry $entry\n");
- exit 100;
-}
-
-if ( $operation eq "inactivate" )
-{
- #
- # Now that we have the suffix and we know if we deal with a single entry or
- # a role, just try to create the COS and roles associated.
- #
- @base=(
- "cn=nsManagedDisabledRole,@suffixN",
- "cn=nsDisabledRole,@suffixN",
- "cn=nsAccountInactivationTmp,@suffixN",
- "\'cn=\"cn=nsDisabledRole,@suffixN\",cn=nsAccountInactivationTmp,@suffixN\'",
- "cn=nsAccountInactivation_cos,@suffixN" );
-
- $addrolescos="$ldapmodify -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -c -a >> {{DEV-NULL}} 2>&1 ";
- @role1=(
- "dn: cn=nsManagedDisabledRole,@suffixN\n",
- "objectclass: LDAPsubentry\n",
- "objectclass: nsRoleDefinition\n",
- "objectclass: nsSimpleRoleDefinition\n",
- "objectclass: nsManagedRoleDefinition\n",
- "cn: nsManagedDisabledRole\n\n" );
- @role2=(
- "dn: cn=nsDisabledRole,@suffixN\n",
- "objectclass: top\n",
- "objectclass: LDAPsubentry\n",
- "objectclass: nsRoleDefinition\n",
- "objectclass: nsComplexRoleDefinition\n",
- "objectclass: nsNestedRoleDefinition\n",
- "nsRoleDN: cn=nsManagedDisabledRole,@suffixN\n",
- "cn: nsDisabledRole\n\n" );
- @cos1=(
- "dn: cn=nsAccountInactivationTmp,@suffixN\n",
- "objectclass: top\n",
- "objectclass: nsContainer\n\n" );
- @cos2=(
- "dn: cn=\"cn=nsDisabledRole,@suffixN\",cn=nsAccountInactivationTmp,@suffixN\n",
- "objectclass: top\n",
- "objectclass: extensibleObject\n",
- "objectclass: costemplate\n",
- "objectclass: ldapsubentry\n",
- "cosPriority: 1\n",
- "nsAccountLock: true\n\n" );
- @cos3=(
- "dn: cn=nsAccountInactivation_cos,@suffixN\n",
- "objectclass: top\n",
- "objectclass: LDAPsubentry\n",
- "objectclass: cosSuperDefinition\n",
- "objectclass: cosClassicDefinition\n",
- "cosTemplateDn: cn=nsAccountInactivationTmp,@suffixN\n",
- "cosSpecifier: nsRole\n",
- "cosAttribute: nsAccountLock operational\n\n" );
-
- @all=(\@role1, \@role2, \@cos1, \@cos2, \@cos3);
-
- $i=0;
-
- foreach $current (@base)
- {
- debug("Creating $current ??\n");
- open(FD,"| $addrolescos ");
- print FD @{$all[$i]};
- close(FD);
- if ( $? != 0 )
- {
- $retCode=$?>>8;
- if ( $retCode == 68 )
- {
- debug("Entry $current already exists, ignore error\n");
- }
- else
- {
- # Probably a more serious problem.
- # Exit with LDAP error
- exit $retCode;
- }
- }
- else
- {
- debug("Entry $current created\n");
- }
- $i=$i+1;
- }
-}
-
-$skipManaged=0;
-$skipDisabled=0;
-$directLocked=0;
-
-$nsDisabledRole="cn=nsDisabledRole,@suffixN";
-$nsDisabledRole=~ tr/A-Z/a-z/;
-
-$nsManagedDisabledRole="cn=nsManagedDisabledRole,@suffixN";
-$nsManagedDisabledRole=~ tr/A-Z/a-z/;
-
-if ( $operation eq "inactivate" )
-{
- # Go through all the roles part of nsdisabledrole to check if the entry
- # is a member of one of those roles
- $ret=indirectLock("LDAP00", $entry, $nsDisabledRole);
- if ( $ret == 0 )
- {
- if ( $throughRole ne $nsDisabledRole && $throughRole ne $nsManagedDisabledRole )
- {
- # indirect lock
- out("$entry already $state through $throughRole.\n");
- }
- else
- {
- # direct lock
- out("$entry already $state.\n");
- }
- exit 100;
- }
- elsif ( $isLocked == 1 )
- {
- # the entry is not locked through a role, may be nsaccountlock is "hardcoded" ?
- out("$entry already $state (probably directly).\n");
- exit 103;
- }
-}
-elsif ( $operation eq "activate" || $operation eq "get status of" )
-{
- $skipManaged=$single;
- $skipDisabled=$role;
-
- $ret=indirectLock("LDAP00",$entry, $nsDisabledRole);
-
- if ( $ret == 0 )
- {
- # undirectly locked
- if ( $throughRole ne $nsDisabledRole && $throughRole ne $nsManagedDisabledRole )
- {
- if ( $operation eq "activate" )
- {
- out("$entry inactivated through $throughRole. Can not activate it individually.\n");
- exit 100;
- }
- else
- {
- out("$entry inactivated through $throughRole.\n");
- exit 104;
- }
- }
- debug("$entry locked individually\n");
-
- if ( $operation ne "activate" )
- {
- out("$entry inactivated.\n");
- exit 103;
- }
- }
- elsif ( $directLocked == 0 )
- {
- if ( $operation eq "activate" && $isLocked != 1 )
- {
- out("$entry $already $state.\n");
- exit 100;
- }
- elsif ( $isLocked != 1 )
- {
- out("$entry $already $state.\n");
- exit 102;
- }
- else
- {
- # not locked using our schema, but nsaccountlock is probably present
- out("$entry inactivated (probably directly).\n");
- exit 103;
- }
- }
- elsif ( $operation ne "activate" )
- {
- out("$entry inactivated.\n");
- exit 103;
- }
- # else Locked directly, juste unlock it!
- debug("$entry locked individually\n");
-}
-
-#
-# Inactivate/activate the entry
-#
-$action="$ldapmodify -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -c >> {{DEV-NULL}} 2>&1";
-if ( $single == 1 )
-{
- @record=(
- "dn: $entry\n",
- "changetype: modify\n",
- "$modrole: nsRoleDN\n",
- "nsRoleDN: cn=nsManagedDisabledRole,@suffixN\n\n" );
-}
-else
-{
- @record=(
- "dn: cn=nsDisabledRole,@suffixN\n",
- "changetype: modify\n",
- "$modrole: nsRoleDN\n",
- "nsRoleDN: $entry\n\n" );
-}
-open(FD,"| $action ");
-print FD @record;
-close(FD);
-if ( $? != 0 )
-{
-debug("$modrole, $entry\n");
- $retCode=$?>>8;
- exit $retCode;
-}
-
-out("$entry $state.\n");
-exit 0;
diff --git a/ldap/admin/src/scripts/template-ns-activate.pl b/ldap/admin/src/scripts/template-ns-activate.pl
deleted file mode 100644
index 1f0228de..00000000
--- a/ldap/admin/src/scripts/template-ns-activate.pl
+++ /dev/null
@@ -1,846 +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
-#
-
-###############################
-# SUB-ROUTINES
-###############################
-
-sub usage_and_exit
-{
- print (STDERR "$cmd [-D rootdn] { -w password | -w - | -j filename } \n");
- print (STDERR " [-p port] [-h host] -I DN-to-$operation\n\n");
- print (STDERR "May be used to $operation a user or a domain of users\n\n");
- print (STDERR "Arguments:\n");
- print (STDERR " -? - help\n");
- print (STDERR " -D rootdn - Provide a Directory Manager DN. Default= '$defrootdn'\n");
- print (STDERR " -w password - Provide a password for the Directory Manager DN\n");
- print (STDERR " -w - - Prompt for the Directory Manager's password\n");
- print (STDERR " -j filename - Read the Directory Manager's password from file\n");
- print (STDERR " -p port - Provide a port. Default= '$defport'\n");
- print (STDERR " -h host - Provide a host name. Default= '$defhost'\n");
- print (STDERR " -I DN-to-$operation - Single entry DN or role DN to $operation\n");
- exit 100;
-}
-
-sub debug
-{
-# print " ==> @_";
-}
-
-sub out
-{
- print "@_";
-}
-
-# --------------------------
-# Check if the entry is part of a locked role:
-# i.e.: for each role member (nsroledn) of nsdisabledrole, check if
-# * it is the same as the entry
-# * the entry is member of role (==has nsroledn attributes), compare each of
-# them with the nsroledn of nsdisabledrole
-# * if nsroledn of nsdisabledrole are complex, go through each of them
-# argv[0] is the local file handler
-# argv[1] is the entry (may be a single entry DN or a role DN)
-# argv[2] is the base for the search
-# --------------------------
-
-$throughRole="";
-
-sub indirectLock
-{
- # For recursivity, file handler must be local
- my $L_filehandle=$_[0];
- $L_filehandle++;
-
- my $L_entry=$_[1];
- # Remove useless space
- my @L_intern=split /([,])/,$L_entry;
- my $L_result="";
- foreach $L_part (@L_intern)
- {
- $L_part=~s/^ +//;
- $L_part=~ tr/A-Z/a-z/;
- $L_result="$L_result$L_part";
- }
- $L_entry=$L_result;
-
- my $L_base=$_[2];
-
- my $L_search;
- my $L_currentrole;
- my $L_retCode;
-
- my $L_local;
-
-`$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$L_base\" \"(|(objectclass=*)(objectclass=ldapsubentry))\" nsroledn >> {{DEV-NULL}} 2>&1 `;
-$retCode=$?;
-if ( $retCode != 0 )
-{
- $retCode=$?>>8;
- return 1;
-}
-
- # Check if the role is a nested role
- @L_Nested="$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$L_base\" \"(|(objectclass=nsNestedRoleDefinition)(objectclass=ldapsubentry))\" ";
- # L_isNested == 1 means that we are going through a nested role, so for each member of that
- # nested role, check that the member is below the scope of the nested
- $L_isNested=@L_Nested;
-
- # Not Direct Lock, Go through roles if any
- $L_search="$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$L_base\" \"(|(objectclass=*)(objectclass=ldapsubentry))\" nsroledn ";
-
- debug("\t-->indirectLock: check if $L_entry is part of a locked role from base $L_base\n\n");
-
- unless (open ($L_filehandle, "$L_search |"))
- {
- out("Can't open file $L_filehandle\n");
- exit;
- }
- while (<$L_filehandle>) {
-
- s/\n //g;
- if (/^nsroledn: (.*)\n/) {
- $L_currentrole = $1;
-
- # Remove useless space
- my @L_intern=split /([,])/,$L_currentrole;
- my $L_result="";
- foreach $L_part (@L_intern)
- {
- $L_part=~s/^ +//;
- $L_part=~ tr/A-Z/a-z/;
- $L_result="$L_result$L_part";
- }
- $L_currentrole=$L_result;
-
- debug("\t-- indirectLock loop: current nsroledn $L_currentrole of base $L_base\n");
- if ( $L_isNested == 1 )
- {
- if ( checkScope($L_currentrole, $L_base) == 0 )
- {
- # Scope problem probably a bad conf, skip the currentrole
- next;
- }
- }
-
- if ( $L_currentrole eq $L_entry )
- {
- # the entry is a role that is directly locked
- # i.e, nsroledn of nsdisabledrole contains the entry
- $throughRole=$L_base;
- $throughRole=~ tr/A-Z/a-z/;
-
- # skipDisabled means that we've just found that the entry (which is a role)
- # is locked directly (==its DN is part of nsroledn attributes)
- # we just want to know now, if it is locked through another role
- # at least, one
- if ( $skipDisabled == 1 )
- {
- # direct inactivation
- $directLocked=1;
- # just go through that test once
- $skipDisabled=0;
- next;
- }
- debug("\t-- 1 indirectLock: $L_currentrole locked throughRole == $throughRole\n");
- return 0;
- }
-
- $L_retCode=memberOf($L_currentrole, $L_entry);
- if ( $L_retCode == 0 && $single == 1 )
- {
- $throughRole=$L_currentrole;
- $throughRole=~ tr/A-Z/a-z/;
- if ( $skipManaged == 1 )
- {
- if ( $L_currentrole eq $nsManagedDisabledRole)
- {
- # Try next nsroledn
- $directLocked=1;
- $skipManaged=0;
- next;
- }
- }
- debug("\t-- 2 indirectLock: $L_currentrole locked throughRole == $throughRole\n");
- return 0;
- }
-
- # Only for the first iteration
- # the first iteration is with nsdisabledrole as base, other
- # loops are deeper
- $L_local=$skipDisabled;
- $skipDisabled=0;
-
- # the current nsroledn may be a complex role, just go through
- # its won nsroledn
- $L_retCode=indirectLock($L_filehandle,$L_entry, $L_currentrole);
-
- # Because of recursivity, to keep the initial value for the first level
- $skipDisabled=$L_local;
-
- if ( $L_retCode == 0 )
- {
- $throughRole=$L_currentrole;
- $throughRole=~ tr/A-Z/a-z/;
- debug("\t-- 3 indirectLock: $L_entry locked throughRole == $throughRole\n");
- return 0;
- }
- }
- }
-
- close($L_filehandle);
-
- debug("\t<--indirectLock: no more nsroledn to process\n");
- return 1;
-}
-
-# --------------------------
-# Check if nsroledn is part of the entry attributes
-# argv[0] is a role DN (nsroledn attribute)
-# argv[1] is the entry
-# --------------------------
-sub memberOf
-{
- my $L_nsroledn=$_[0];
- $L_nsroledn=~ tr/A-Z/a-z/;
-
- my $L_entry=$_[1];
-
- my $L_search;
- my $L_currentrole;
-
- $L_search="$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$L_entry\" \"(|(objectclass=*)(objectclass=ldapsubentry))\" nsrole";
-
- debug("\t\t-->memberOf: $L_search: check if $L_entry has $L_nsroledn as nsroledn attribute\n");
-
- open (LDAP2, "$L_search |");
- while (<LDAP2>) {
- s/\n //g;
- if (/^nsrole: (.*)\n/) {
- $L_currentrole = $1;
- $L_currentrole=~ tr/A-Z/a-z/;
- if ( $L_currentrole eq $L_nsroledn )
- {
- # the parm is part of the $L_entry nsroledn
- debug("\t\t<--memberOf: $L_entry locked through $L_nsroledn\n");
- return 0;
- }
- }
- }
- close(LDAP2);
-
- # the parm is not part of the $L_entry nsroledn
- debug("\t\t<--memberOf: $L_entry not locked through $L_nsroledn\n");
- return 1;
-}
-
-
-# --------------------------
-# Remove the rdn of a DN
-# argv[0] is a DN
-# --------------------------
-sub removeRdn
-{
- $L_entry=$_[0];
-
- @L_entryToTest=split /([,])/,$L_entry;
- debug("removeRdn: entry to split: $L_entry**@L_entryToTest\n");
-
- $newDN="";
- $removeRDN=1;
- foreach $part (@L_entryToTest)
- {
- $part=~ s/^ +//;
- $part=~ tr/A-Z/a-z/;
- if ( $removeRDN <= 2 )
- {
- $removeRDN=$removeRDN+1;
- }
- else
- {
- $newDN="$newDN$part";
- }
- }
-
- debug("removeRdn: new DN **$newDN**\n");
-}
-
-# --------------------------
-# Check if L_current is below the scope of
-# L_nestedRole
-# argv[0] is a role
-# argv[1] is the nested role
-# --------------------------
-sub checkScope
-{
- $L_current=$_[0];
- $L_nestedRole=$_[1];
-
- debug("checkScope: check if $L_current is below $L_nestedRole\n");
-
- removeRdn($L_nestedRole);
- $L_nestedRoleSuffix=$newDN;
- debug("checkScope: nested role based: $L_nestedRoleSuffix\n");
-
- $cont=1;
- while ( ($cont == 1) && ($L_current ne "") )
- {
- removeRdn($L_current);
- $currentDn=$newDN;
- debug("checkScope: current DN to check: $currentDn\n");
-
- if ( $currentDn eq $L_nestedRoleSuffix )
- {
- debug("checkScope: DN match!!!\n");
- $cont = 0;
- }
- else
- {
- $L_current=$currentDn;
- }
- }
-
- if ( $cont == 1 )
- {
- debug("checkScope: $_[0] and $_[1] are not compatible\n");
- return 0;
- }
- else
- {
- debug("checkScope: $_[0] and $_[1] are compatible\n");
- return 1;
- }
-}
-
-
-###############################
-# MAIN ROUTINE
-###############################
-
-# Generated variable
-$prefix="{{DS-ROOT}}";
-
-# Determine which command we are running
-if ( $0 =~ /ns-inactivate(.pl)?$/ )
-{
- $cmd="ns-inactivate.pl";
- $operation="inactivate";
- $state="inactivated";
- $modrole="add";
- $already="already";
-}
-elsif ( $0 =~ /ns-activate(.pl)?$/ )
-{
- $cmd="ns-activate.pl";
- $operation="activate";
- $state="activated";
- $modrole="delete";
- $already="already";
-}
-elsif ( $0 =~ /ns-accountstatus(.pl)?$/ )
-{
- $cmd="ns-accountstatus.pl";
- $operation="get status of";
- $state="activated";
- # no need for $modrole as no operation is performed
- $already="";
-
-}
-else
-{
- out("$0: unknown command\n");
- exit 100;
-}
-
-debug("Running ** $cmd ** $operation\n");
-
-$ENV{'PATH'} = "$prefix/usr/lib/mozldap6:$prefix/usr/bin:/usr/lib/mozldap6:/usr/bin";
-$ENV{'LD_LIBRARY_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-$ENV{'SHLIB_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-
-$ldapsearch="ldapsearch -1";
-$ldapmodify="ldapmodify";
-
-# Default values
-$defrootdn= "{{ROOT-DN}}";
-$defhost= "{{SERVER-NAME}}";
-$defport= "{{SERVER-PORT}}";
-
-# User values
-$rootdn= "{{ROOT-DN}}";
-$rootpw= "";
-$pwfile= "";
-$host= "{{SERVER-NAME}}";
-$port= "{{SERVER-PORT}}";
-$entry= "";
-
-$single=0;
-$role=0;
-
-# Process the command line arguments
-while( $arg = shift)
-{
- if($arg eq "-?")
- {
- usage_and_exit();
- }
- elsif($arg eq "-D")
- {
- $rootdn= shift @ARGV;
- }
- elsif($arg eq "-w")
- {
- $rootpw= shift @ARGV;
- }
- elsif($arg eq "-j")
- {
- $pwfile= shift @ARGV;
- }
- elsif($arg eq "-p")
- {
- $port= shift @ARGV;
- }
- elsif($arg eq "-h")
- {
- $host= shift @ARGV;
- }
- elsif($arg eq "-I")
- {
- $entry= shift @ARGV;
- }
- else
- {
- print "$arg: Unknown command line argument.\n";
- usage_and_exit();
- }
-}
-
-if ($pwfile ne ""){
-# Open file and get the password
- unless (open (RPASS, $pwfile)) {
- die "Error, cannot open password file $passwdfile\n";
- }
- $rootpw = <RPASS>;
- chomp($rootpw);
- close(RPASS);
-} elsif ($rootpw 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');
-# $rootpw = ReadLine(0);
-# chomp($rootpw);
-# ReadMode('normal');
-}
-
-if( $rootpw eq "" )
-{
- usage_and_exit();
-}
-
-if( $entry eq "" )
-{
- usage_and_exit();
-}
-
-#
-# Check the actual existence of the entry to inactivate/activate
-# and at the same time, validate the various parm: port, host, rootdn, rootpw
-#
-@exist=`$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$entry\" \"(objectclass=*)\" dn`;
-$retCode1=$?;
-if ( $retCode1 != 0 )
-{
- $retCode1=$?>>8;
- exit $retCode1;
-}
-
-@isRole=`$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$entry\" \"(&(objectclass=LDAPsubentry)(objectclass=nsRoleDefinition))\" dn`;
-$nbLineRole=@isRole;
-$retCode2=$?;
-if ( $retCode2 != 0 )
-{
- $retCode2=$?>>8;
- exit $retCode2;
-}
-
-if ( $nbLineRole == 1 )
-{
- debug("Groups of users\n");
- $role=1;
-}
-else
-{
- debug("Single user\n");
- $single=1;
-}
-
-#
-# First of all, check the existence of the nsaccountlock attribute in the entry
-#
-$isLocked=0;
-if ( $single == 1 )
-{
- $searchAccountLock="$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$entry\" \"(objectclass=*)\" nsaccountlock";
- open (LDAP1, "$searchAccountLock |");
- while (<LDAP1>) {
- s/\n //g;
- if (/^nsaccountlock: (.*)\n/) {
- $L_currentvalue = $1;
- $L_currentvalue=~ tr/A-Z/a-z/;
- if ( $L_currentvalue eq "true")
- {
- $isLocked=1;
- }
- elsif ( $L_currentvalue eq "false" )
- {
- $isLocked=0;
- }
- }
- }
- close(LDAP1);
-}
-debug("Is the entry already locked? ==> $isLocked\n");
-
-#
-# Get the suffix name of that entry
-#
-
-# Remove the space at the beginning (just in case...)
-# -I "uid=jvedder , ou=People , o=sun.com"
-@suffix=split /([,])/,$entry;
-$result="";
-foreach $part (@suffix)
-{
- $part=~s/^ +//;
- $part=~ tr/A-Z/a-z/;
- $result="$result$part";
-}
-@suffixN=$result;
-
-debug("Entry to $operation: #@suffix#\n");
-debug("Entry to $operation: #@suffixN#\n");
-
-# Get the suffix
-$cont=0;
-while ($cont == 0)
-{
- # Look if suffix is the suffix of the entry
- # ldapsearch -s one -b "cn=mapping tree,cn=config" "cn=\"uid=jvedder,ou=People,o=sun.com\""
- #
- debug("\tSuffix from the entry: #@suffixN#\n");
- @mapping=`$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s one -b \"cn=mapping tree, cn=config\" \"cn=\\"@suffixN\\"\" cn `;
-
- $retCode=$?;
- if ( $retCode != 0 )
- {
- $retCode=$?>>8;
- exit $retCode;
- }
-
- # If we get a result, remove the dn:
- # dn: cn="o=sun.com",cn=mapping tree,cn=config
- # cn: "o=sun.com"
- #
- shift @mapping;
-
- foreach $res (@mapping)
- {
- # Break the string cn: "o=sun.com" into pieces
- @cn= split(/ /,$res);
-
- # And remove the cn: part
- shift @cn;
-
- # Now compare the suffix we extract from the mapping tree
- # with the suffix derived from the entry
- debug("\tSuffix from mapping tree: #@cn#\n");
- if ( @cn eq @suffixN ) {
- debug("Found matching suffix\n");
- $cont=1;
- }
- }
-
- if ( $cont == 0 )
- {
- # Remove the current rdn to try another suffix
- shift @suffix;
-
- $result="";
- foreach $part (@suffix)
- {
- $part=~ s/^ +//;
- $part=~ tr/A-Z/a-z/;
- $result="$result$part";
- }
- @suffixN=$result;
-
- debug("\t\tNothing found => go up one level in rdn #@suffix#\n");
- $len=@suffix;
- if ( $len == 0 )
- {
- debug("Can not find suffix. Problem\n");
- $cont=2;
- }
- }
-}
-if ( $cont == 2)
-{
- out("Can not find suffix for entry $entry\n");
- exit 100;
-}
-
-if ( $operation eq "inactivate" )
-{
- #
- # Now that we have the suffix and we know if we deal with a single entry or
- # a role, just try to create the COS and roles associated.
- #
- @base=(
- "cn=nsManagedDisabledRole,@suffixN",
- "cn=nsDisabledRole,@suffixN",
- "cn=nsAccountInactivationTmp,@suffixN",
- "\'cn=\"cn=nsDisabledRole,@suffixN\",cn=nsAccountInactivationTmp,@suffixN\'",
- "cn=nsAccountInactivation_cos,@suffixN" );
-
- $addrolescos="$ldapmodify -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -c -a >> {{DEV-NULL}} 2>&1 ";
- @role1=(
- "dn: cn=nsManagedDisabledRole,@suffixN\n",
- "objectclass: LDAPsubentry\n",
- "objectclass: nsRoleDefinition\n",
- "objectclass: nsSimpleRoleDefinition\n",
- "objectclass: nsManagedRoleDefinition\n",
- "cn: nsManagedDisabledRole\n\n" );
- @role2=(
- "dn: cn=nsDisabledRole,@suffixN\n",
- "objectclass: top\n",
- "objectclass: LDAPsubentry\n",
- "objectclass: nsRoleDefinition\n",
- "objectclass: nsComplexRoleDefinition\n",
- "objectclass: nsNestedRoleDefinition\n",
- "nsRoleDN: cn=nsManagedDisabledRole,@suffixN\n",
- "cn: nsDisabledRole\n\n" );
- @cos1=(
- "dn: cn=nsAccountInactivationTmp,@suffixN\n",
- "objectclass: top\n",
- "objectclass: nsContainer\n\n" );
- @cos2=(
- "dn: cn=\"cn=nsDisabledRole,@suffixN\",cn=nsAccountInactivationTmp,@suffixN\n",
- "objectclass: top\n",
- "objectclass: extensibleObject\n",
- "objectclass: costemplate\n",
- "objectclass: ldapsubentry\n",
- "cosPriority: 1\n",
- "nsAccountLock: true\n\n" );
- @cos3=(
- "dn: cn=nsAccountInactivation_cos,@suffixN\n",
- "objectclass: top\n",
- "objectclass: LDAPsubentry\n",
- "objectclass: cosSuperDefinition\n",
- "objectclass: cosClassicDefinition\n",
- "cosTemplateDn: cn=nsAccountInactivationTmp,@suffixN\n",
- "cosSpecifier: nsRole\n",
- "cosAttribute: nsAccountLock operational\n\n" );
-
- @all=(\@role1, \@role2, \@cos1, \@cos2, \@cos3);
-
- $i=0;
-
- foreach $current (@base)
- {
- debug("Creating $current ??\n");
- open(FD,"| $addrolescos ");
- print FD @{$all[$i]};
- close(FD);
- if ( $? != 0 )
- {
- $retCode=$?>>8;
- if ( $retCode == 68 )
- {
- debug("Entry $current already exists, ignore error\n");
- }
- else
- {
- # Probably a more serious problem.
- # Exit with LDAP error
- exit $retCode;
- }
- }
- else
- {
- debug("Entry $current created\n");
- }
- $i=$i+1;
- }
-}
-
-$skipManaged=0;
-$skipDisabled=0;
-$directLocked=0;
-
-$nsDisabledRole="cn=nsDisabledRole,@suffixN";
-$nsDisabledRole=~ tr/A-Z/a-z/;
-
-$nsManagedDisabledRole="cn=nsManagedDisabledRole,@suffixN";
-$nsManagedDisabledRole=~ tr/A-Z/a-z/;
-
-if ( $operation eq "inactivate" )
-{
- # Go through all the roles part of nsdisabledrole to check if the entry
- # is a member of one of those roles
- $ret=indirectLock("LDAP00", $entry, $nsDisabledRole);
- if ( $ret == 0 )
- {
- if ( $throughRole ne $nsDisabledRole && $throughRole ne $nsManagedDisabledRole )
- {
- # indirect lock
- out("$entry already $state through $throughRole.\n");
- }
- else
- {
- # direct lock
- out("$entry already $state.\n");
- }
- exit 100;
- }
- elsif ( $isLocked == 1 )
- {
- # the entry is not locked through a role, may be nsaccountlock is "hardcoded" ?
- out("$entry already $state (probably directly).\n");
- exit 103;
- }
-}
-elsif ( $operation eq "activate" || $operation eq "get status of" )
-{
- $skipManaged=$single;
- $skipDisabled=$role;
-
- $ret=indirectLock("LDAP00",$entry, $nsDisabledRole);
-
- if ( $ret == 0 )
- {
- # undirectly locked
- if ( $throughRole ne $nsDisabledRole && $throughRole ne $nsManagedDisabledRole )
- {
- if ( $operation eq "activate" )
- {
- out("$entry inactivated through $throughRole. Can not activate it individually.\n");
- exit 100;
- }
- else
- {
- out("$entry inactivated through $throughRole.\n");
- exit 104;
- }
- }
- debug("$entry locked individually\n");
-
- if ( $operation ne "activate" )
- {
- out("$entry inactivated.\n");
- exit 103;
- }
- }
- elsif ( $directLocked == 0 )
- {
- if ( $operation eq "activate" && $isLocked != 1 )
- {
- out("$entry $already $state.\n");
- exit 100;
- }
- elsif ( $isLocked != 1 )
- {
- out("$entry $already $state.\n");
- exit 102;
- }
- else
- {
- # not locked using our schema, but nsaccountlock is probably present
- out("$entry inactivated (probably directly).\n");
- exit 103;
- }
- }
- elsif ( $operation ne "activate" )
- {
- out("$entry inactivated.\n");
- exit 103;
- }
- # else Locked directly, juste unlock it!
- debug("$entry locked individually\n");
-}
-
-#
-# Inactivate/activate the entry
-#
-$action="$ldapmodify -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -c >> {{DEV-NULL}} 2>&1";
-if ( $single == 1 )
-{
- @record=(
- "dn: $entry\n",
- "changetype: modify\n",
- "$modrole: nsRoleDN\n",
- "nsRoleDN: cn=nsManagedDisabledRole,@suffixN\n\n" );
-}
-else
-{
- @record=(
- "dn: cn=nsDisabledRole,@suffixN\n",
- "changetype: modify\n",
- "$modrole: nsRoleDN\n",
- "nsRoleDN: $entry\n\n" );
-}
-open(FD,"| $action ");
-print FD @record;
-close(FD);
-if ( $? != 0 )
-{
-debug("$modrole, $entry\n");
- $retCode=$?>>8;
- exit $retCode;
-}
-
-out("$entry $state.\n");
-exit 0;
diff --git a/ldap/admin/src/scripts/template-ns-inactivate.pl b/ldap/admin/src/scripts/template-ns-inactivate.pl
deleted file mode 100644
index 1f0228de..00000000
--- a/ldap/admin/src/scripts/template-ns-inactivate.pl
+++ /dev/null
@@ -1,846 +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
-#
-
-###############################
-# SUB-ROUTINES
-###############################
-
-sub usage_and_exit
-{
- print (STDERR "$cmd [-D rootdn] { -w password | -w - | -j filename } \n");
- print (STDERR " [-p port] [-h host] -I DN-to-$operation\n\n");
- print (STDERR "May be used to $operation a user or a domain of users\n\n");
- print (STDERR "Arguments:\n");
- print (STDERR " -? - help\n");
- print (STDERR " -D rootdn - Provide a Directory Manager DN. Default= '$defrootdn'\n");
- print (STDERR " -w password - Provide a password for the Directory Manager DN\n");
- print (STDERR " -w - - Prompt for the Directory Manager's password\n");
- print (STDERR " -j filename - Read the Directory Manager's password from file\n");
- print (STDERR " -p port - Provide a port. Default= '$defport'\n");
- print (STDERR " -h host - Provide a host name. Default= '$defhost'\n");
- print (STDERR " -I DN-to-$operation - Single entry DN or role DN to $operation\n");
- exit 100;
-}
-
-sub debug
-{
-# print " ==> @_";
-}
-
-sub out
-{
- print "@_";
-}
-
-# --------------------------
-# Check if the entry is part of a locked role:
-# i.e.: for each role member (nsroledn) of nsdisabledrole, check if
-# * it is the same as the entry
-# * the entry is member of role (==has nsroledn attributes), compare each of
-# them with the nsroledn of nsdisabledrole
-# * if nsroledn of nsdisabledrole are complex, go through each of them
-# argv[0] is the local file handler
-# argv[1] is the entry (may be a single entry DN or a role DN)
-# argv[2] is the base for the search
-# --------------------------
-
-$throughRole="";
-
-sub indirectLock
-{
- # For recursivity, file handler must be local
- my $L_filehandle=$_[0];
- $L_filehandle++;
-
- my $L_entry=$_[1];
- # Remove useless space
- my @L_intern=split /([,])/,$L_entry;
- my $L_result="";
- foreach $L_part (@L_intern)
- {
- $L_part=~s/^ +//;
- $L_part=~ tr/A-Z/a-z/;
- $L_result="$L_result$L_part";
- }
- $L_entry=$L_result;
-
- my $L_base=$_[2];
-
- my $L_search;
- my $L_currentrole;
- my $L_retCode;
-
- my $L_local;
-
-`$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$L_base\" \"(|(objectclass=*)(objectclass=ldapsubentry))\" nsroledn >> {{DEV-NULL}} 2>&1 `;
-$retCode=$?;
-if ( $retCode != 0 )
-{
- $retCode=$?>>8;
- return 1;
-}
-
- # Check if the role is a nested role
- @L_Nested="$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$L_base\" \"(|(objectclass=nsNestedRoleDefinition)(objectclass=ldapsubentry))\" ";
- # L_isNested == 1 means that we are going through a nested role, so for each member of that
- # nested role, check that the member is below the scope of the nested
- $L_isNested=@L_Nested;
-
- # Not Direct Lock, Go through roles if any
- $L_search="$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$L_base\" \"(|(objectclass=*)(objectclass=ldapsubentry))\" nsroledn ";
-
- debug("\t-->indirectLock: check if $L_entry is part of a locked role from base $L_base\n\n");
-
- unless (open ($L_filehandle, "$L_search |"))
- {
- out("Can't open file $L_filehandle\n");
- exit;
- }
- while (<$L_filehandle>) {
-
- s/\n //g;
- if (/^nsroledn: (.*)\n/) {
- $L_currentrole = $1;
-
- # Remove useless space
- my @L_intern=split /([,])/,$L_currentrole;
- my $L_result="";
- foreach $L_part (@L_intern)
- {
- $L_part=~s/^ +//;
- $L_part=~ tr/A-Z/a-z/;
- $L_result="$L_result$L_part";
- }
- $L_currentrole=$L_result;
-
- debug("\t-- indirectLock loop: current nsroledn $L_currentrole of base $L_base\n");
- if ( $L_isNested == 1 )
- {
- if ( checkScope($L_currentrole, $L_base) == 0 )
- {
- # Scope problem probably a bad conf, skip the currentrole
- next;
- }
- }
-
- if ( $L_currentrole eq $L_entry )
- {
- # the entry is a role that is directly locked
- # i.e, nsroledn of nsdisabledrole contains the entry
- $throughRole=$L_base;
- $throughRole=~ tr/A-Z/a-z/;
-
- # skipDisabled means that we've just found that the entry (which is a role)
- # is locked directly (==its DN is part of nsroledn attributes)
- # we just want to know now, if it is locked through another role
- # at least, one
- if ( $skipDisabled == 1 )
- {
- # direct inactivation
- $directLocked=1;
- # just go through that test once
- $skipDisabled=0;
- next;
- }
- debug("\t-- 1 indirectLock: $L_currentrole locked throughRole == $throughRole\n");
- return 0;
- }
-
- $L_retCode=memberOf($L_currentrole, $L_entry);
- if ( $L_retCode == 0 && $single == 1 )
- {
- $throughRole=$L_currentrole;
- $throughRole=~ tr/A-Z/a-z/;
- if ( $skipManaged == 1 )
- {
- if ( $L_currentrole eq $nsManagedDisabledRole)
- {
- # Try next nsroledn
- $directLocked=1;
- $skipManaged=0;
- next;
- }
- }
- debug("\t-- 2 indirectLock: $L_currentrole locked throughRole == $throughRole\n");
- return 0;
- }
-
- # Only for the first iteration
- # the first iteration is with nsdisabledrole as base, other
- # loops are deeper
- $L_local=$skipDisabled;
- $skipDisabled=0;
-
- # the current nsroledn may be a complex role, just go through
- # its won nsroledn
- $L_retCode=indirectLock($L_filehandle,$L_entry, $L_currentrole);
-
- # Because of recursivity, to keep the initial value for the first level
- $skipDisabled=$L_local;
-
- if ( $L_retCode == 0 )
- {
- $throughRole=$L_currentrole;
- $throughRole=~ tr/A-Z/a-z/;
- debug("\t-- 3 indirectLock: $L_entry locked throughRole == $throughRole\n");
- return 0;
- }
- }
- }
-
- close($L_filehandle);
-
- debug("\t<--indirectLock: no more nsroledn to process\n");
- return 1;
-}
-
-# --------------------------
-# Check if nsroledn is part of the entry attributes
-# argv[0] is a role DN (nsroledn attribute)
-# argv[1] is the entry
-# --------------------------
-sub memberOf
-{
- my $L_nsroledn=$_[0];
- $L_nsroledn=~ tr/A-Z/a-z/;
-
- my $L_entry=$_[1];
-
- my $L_search;
- my $L_currentrole;
-
- $L_search="$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$L_entry\" \"(|(objectclass=*)(objectclass=ldapsubentry))\" nsrole";
-
- debug("\t\t-->memberOf: $L_search: check if $L_entry has $L_nsroledn as nsroledn attribute\n");
-
- open (LDAP2, "$L_search |");
- while (<LDAP2>) {
- s/\n //g;
- if (/^nsrole: (.*)\n/) {
- $L_currentrole = $1;
- $L_currentrole=~ tr/A-Z/a-z/;
- if ( $L_currentrole eq $L_nsroledn )
- {
- # the parm is part of the $L_entry nsroledn
- debug("\t\t<--memberOf: $L_entry locked through $L_nsroledn\n");
- return 0;
- }
- }
- }
- close(LDAP2);
-
- # the parm is not part of the $L_entry nsroledn
- debug("\t\t<--memberOf: $L_entry not locked through $L_nsroledn\n");
- return 1;
-}
-
-
-# --------------------------
-# Remove the rdn of a DN
-# argv[0] is a DN
-# --------------------------
-sub removeRdn
-{
- $L_entry=$_[0];
-
- @L_entryToTest=split /([,])/,$L_entry;
- debug("removeRdn: entry to split: $L_entry**@L_entryToTest\n");
-
- $newDN="";
- $removeRDN=1;
- foreach $part (@L_entryToTest)
- {
- $part=~ s/^ +//;
- $part=~ tr/A-Z/a-z/;
- if ( $removeRDN <= 2 )
- {
- $removeRDN=$removeRDN+1;
- }
- else
- {
- $newDN="$newDN$part";
- }
- }
-
- debug("removeRdn: new DN **$newDN**\n");
-}
-
-# --------------------------
-# Check if L_current is below the scope of
-# L_nestedRole
-# argv[0] is a role
-# argv[1] is the nested role
-# --------------------------
-sub checkScope
-{
- $L_current=$_[0];
- $L_nestedRole=$_[1];
-
- debug("checkScope: check if $L_current is below $L_nestedRole\n");
-
- removeRdn($L_nestedRole);
- $L_nestedRoleSuffix=$newDN;
- debug("checkScope: nested role based: $L_nestedRoleSuffix\n");
-
- $cont=1;
- while ( ($cont == 1) && ($L_current ne "") )
- {
- removeRdn($L_current);
- $currentDn=$newDN;
- debug("checkScope: current DN to check: $currentDn\n");
-
- if ( $currentDn eq $L_nestedRoleSuffix )
- {
- debug("checkScope: DN match!!!\n");
- $cont = 0;
- }
- else
- {
- $L_current=$currentDn;
- }
- }
-
- if ( $cont == 1 )
- {
- debug("checkScope: $_[0] and $_[1] are not compatible\n");
- return 0;
- }
- else
- {
- debug("checkScope: $_[0] and $_[1] are compatible\n");
- return 1;
- }
-}
-
-
-###############################
-# MAIN ROUTINE
-###############################
-
-# Generated variable
-$prefix="{{DS-ROOT}}";
-
-# Determine which command we are running
-if ( $0 =~ /ns-inactivate(.pl)?$/ )
-{
- $cmd="ns-inactivate.pl";
- $operation="inactivate";
- $state="inactivated";
- $modrole="add";
- $already="already";
-}
-elsif ( $0 =~ /ns-activate(.pl)?$/ )
-{
- $cmd="ns-activate.pl";
- $operation="activate";
- $state="activated";
- $modrole="delete";
- $already="already";
-}
-elsif ( $0 =~ /ns-accountstatus(.pl)?$/ )
-{
- $cmd="ns-accountstatus.pl";
- $operation="get status of";
- $state="activated";
- # no need for $modrole as no operation is performed
- $already="";
-
-}
-else
-{
- out("$0: unknown command\n");
- exit 100;
-}
-
-debug("Running ** $cmd ** $operation\n");
-
-$ENV{'PATH'} = "$prefix/usr/lib/mozldap6:$prefix/usr/bin:/usr/lib/mozldap6:/usr/bin";
-$ENV{'LD_LIBRARY_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-$ENV{'SHLIB_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-
-$ldapsearch="ldapsearch -1";
-$ldapmodify="ldapmodify";
-
-# Default values
-$defrootdn= "{{ROOT-DN}}";
-$defhost= "{{SERVER-NAME}}";
-$defport= "{{SERVER-PORT}}";
-
-# User values
-$rootdn= "{{ROOT-DN}}";
-$rootpw= "";
-$pwfile= "";
-$host= "{{SERVER-NAME}}";
-$port= "{{SERVER-PORT}}";
-$entry= "";
-
-$single=0;
-$role=0;
-
-# Process the command line arguments
-while( $arg = shift)
-{
- if($arg eq "-?")
- {
- usage_and_exit();
- }
- elsif($arg eq "-D")
- {
- $rootdn= shift @ARGV;
- }
- elsif($arg eq "-w")
- {
- $rootpw= shift @ARGV;
- }
- elsif($arg eq "-j")
- {
- $pwfile= shift @ARGV;
- }
- elsif($arg eq "-p")
- {
- $port= shift @ARGV;
- }
- elsif($arg eq "-h")
- {
- $host= shift @ARGV;
- }
- elsif($arg eq "-I")
- {
- $entry= shift @ARGV;
- }
- else
- {
- print "$arg: Unknown command line argument.\n";
- usage_and_exit();
- }
-}
-
-if ($pwfile ne ""){
-# Open file and get the password
- unless (open (RPASS, $pwfile)) {
- die "Error, cannot open password file $passwdfile\n";
- }
- $rootpw = <RPASS>;
- chomp($rootpw);
- close(RPASS);
-} elsif ($rootpw 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');
-# $rootpw = ReadLine(0);
-# chomp($rootpw);
-# ReadMode('normal');
-}
-
-if( $rootpw eq "" )
-{
- usage_and_exit();
-}
-
-if( $entry eq "" )
-{
- usage_and_exit();
-}
-
-#
-# Check the actual existence of the entry to inactivate/activate
-# and at the same time, validate the various parm: port, host, rootdn, rootpw
-#
-@exist=`$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$entry\" \"(objectclass=*)\" dn`;
-$retCode1=$?;
-if ( $retCode1 != 0 )
-{
- $retCode1=$?>>8;
- exit $retCode1;
-}
-
-@isRole=`$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$entry\" \"(&(objectclass=LDAPsubentry)(objectclass=nsRoleDefinition))\" dn`;
-$nbLineRole=@isRole;
-$retCode2=$?;
-if ( $retCode2 != 0 )
-{
- $retCode2=$?>>8;
- exit $retCode2;
-}
-
-if ( $nbLineRole == 1 )
-{
- debug("Groups of users\n");
- $role=1;
-}
-else
-{
- debug("Single user\n");
- $single=1;
-}
-
-#
-# First of all, check the existence of the nsaccountlock attribute in the entry
-#
-$isLocked=0;
-if ( $single == 1 )
-{
- $searchAccountLock="$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s base -b \"$entry\" \"(objectclass=*)\" nsaccountlock";
- open (LDAP1, "$searchAccountLock |");
- while (<LDAP1>) {
- s/\n //g;
- if (/^nsaccountlock: (.*)\n/) {
- $L_currentvalue = $1;
- $L_currentvalue=~ tr/A-Z/a-z/;
- if ( $L_currentvalue eq "true")
- {
- $isLocked=1;
- }
- elsif ( $L_currentvalue eq "false" )
- {
- $isLocked=0;
- }
- }
- }
- close(LDAP1);
-}
-debug("Is the entry already locked? ==> $isLocked\n");
-
-#
-# Get the suffix name of that entry
-#
-
-# Remove the space at the beginning (just in case...)
-# -I "uid=jvedder , ou=People , o=sun.com"
-@suffix=split /([,])/,$entry;
-$result="";
-foreach $part (@suffix)
-{
- $part=~s/^ +//;
- $part=~ tr/A-Z/a-z/;
- $result="$result$part";
-}
-@suffixN=$result;
-
-debug("Entry to $operation: #@suffix#\n");
-debug("Entry to $operation: #@suffixN#\n");
-
-# Get the suffix
-$cont=0;
-while ($cont == 0)
-{
- # Look if suffix is the suffix of the entry
- # ldapsearch -s one -b "cn=mapping tree,cn=config" "cn=\"uid=jvedder,ou=People,o=sun.com\""
- #
- debug("\tSuffix from the entry: #@suffixN#\n");
- @mapping=`$ldapsearch -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -s one -b \"cn=mapping tree, cn=config\" \"cn=\\"@suffixN\\"\" cn `;
-
- $retCode=$?;
- if ( $retCode != 0 )
- {
- $retCode=$?>>8;
- exit $retCode;
- }
-
- # If we get a result, remove the dn:
- # dn: cn="o=sun.com",cn=mapping tree,cn=config
- # cn: "o=sun.com"
- #
- shift @mapping;
-
- foreach $res (@mapping)
- {
- # Break the string cn: "o=sun.com" into pieces
- @cn= split(/ /,$res);
-
- # And remove the cn: part
- shift @cn;
-
- # Now compare the suffix we extract from the mapping tree
- # with the suffix derived from the entry
- debug("\tSuffix from mapping tree: #@cn#\n");
- if ( @cn eq @suffixN ) {
- debug("Found matching suffix\n");
- $cont=1;
- }
- }
-
- if ( $cont == 0 )
- {
- # Remove the current rdn to try another suffix
- shift @suffix;
-
- $result="";
- foreach $part (@suffix)
- {
- $part=~ s/^ +//;
- $part=~ tr/A-Z/a-z/;
- $result="$result$part";
- }
- @suffixN=$result;
-
- debug("\t\tNothing found => go up one level in rdn #@suffix#\n");
- $len=@suffix;
- if ( $len == 0 )
- {
- debug("Can not find suffix. Problem\n");
- $cont=2;
- }
- }
-}
-if ( $cont == 2)
-{
- out("Can not find suffix for entry $entry\n");
- exit 100;
-}
-
-if ( $operation eq "inactivate" )
-{
- #
- # Now that we have the suffix and we know if we deal with a single entry or
- # a role, just try to create the COS and roles associated.
- #
- @base=(
- "cn=nsManagedDisabledRole,@suffixN",
- "cn=nsDisabledRole,@suffixN",
- "cn=nsAccountInactivationTmp,@suffixN",
- "\'cn=\"cn=nsDisabledRole,@suffixN\",cn=nsAccountInactivationTmp,@suffixN\'",
- "cn=nsAccountInactivation_cos,@suffixN" );
-
- $addrolescos="$ldapmodify -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -c -a >> {{DEV-NULL}} 2>&1 ";
- @role1=(
- "dn: cn=nsManagedDisabledRole,@suffixN\n",
- "objectclass: LDAPsubentry\n",
- "objectclass: nsRoleDefinition\n",
- "objectclass: nsSimpleRoleDefinition\n",
- "objectclass: nsManagedRoleDefinition\n",
- "cn: nsManagedDisabledRole\n\n" );
- @role2=(
- "dn: cn=nsDisabledRole,@suffixN\n",
- "objectclass: top\n",
- "objectclass: LDAPsubentry\n",
- "objectclass: nsRoleDefinition\n",
- "objectclass: nsComplexRoleDefinition\n",
- "objectclass: nsNestedRoleDefinition\n",
- "nsRoleDN: cn=nsManagedDisabledRole,@suffixN\n",
- "cn: nsDisabledRole\n\n" );
- @cos1=(
- "dn: cn=nsAccountInactivationTmp,@suffixN\n",
- "objectclass: top\n",
- "objectclass: nsContainer\n\n" );
- @cos2=(
- "dn: cn=\"cn=nsDisabledRole,@suffixN\",cn=nsAccountInactivationTmp,@suffixN\n",
- "objectclass: top\n",
- "objectclass: extensibleObject\n",
- "objectclass: costemplate\n",
- "objectclass: ldapsubentry\n",
- "cosPriority: 1\n",
- "nsAccountLock: true\n\n" );
- @cos3=(
- "dn: cn=nsAccountInactivation_cos,@suffixN\n",
- "objectclass: top\n",
- "objectclass: LDAPsubentry\n",
- "objectclass: cosSuperDefinition\n",
- "objectclass: cosClassicDefinition\n",
- "cosTemplateDn: cn=nsAccountInactivationTmp,@suffixN\n",
- "cosSpecifier: nsRole\n",
- "cosAttribute: nsAccountLock operational\n\n" );
-
- @all=(\@role1, \@role2, \@cos1, \@cos2, \@cos3);
-
- $i=0;
-
- foreach $current (@base)
- {
- debug("Creating $current ??\n");
- open(FD,"| $addrolescos ");
- print FD @{$all[$i]};
- close(FD);
- if ( $? != 0 )
- {
- $retCode=$?>>8;
- if ( $retCode == 68 )
- {
- debug("Entry $current already exists, ignore error\n");
- }
- else
- {
- # Probably a more serious problem.
- # Exit with LDAP error
- exit $retCode;
- }
- }
- else
- {
- debug("Entry $current created\n");
- }
- $i=$i+1;
- }
-}
-
-$skipManaged=0;
-$skipDisabled=0;
-$directLocked=0;
-
-$nsDisabledRole="cn=nsDisabledRole,@suffixN";
-$nsDisabledRole=~ tr/A-Z/a-z/;
-
-$nsManagedDisabledRole="cn=nsManagedDisabledRole,@suffixN";
-$nsManagedDisabledRole=~ tr/A-Z/a-z/;
-
-if ( $operation eq "inactivate" )
-{
- # Go through all the roles part of nsdisabledrole to check if the entry
- # is a member of one of those roles
- $ret=indirectLock("LDAP00", $entry, $nsDisabledRole);
- if ( $ret == 0 )
- {
- if ( $throughRole ne $nsDisabledRole && $throughRole ne $nsManagedDisabledRole )
- {
- # indirect lock
- out("$entry already $state through $throughRole.\n");
- }
- else
- {
- # direct lock
- out("$entry already $state.\n");
- }
- exit 100;
- }
- elsif ( $isLocked == 1 )
- {
- # the entry is not locked through a role, may be nsaccountlock is "hardcoded" ?
- out("$entry already $state (probably directly).\n");
- exit 103;
- }
-}
-elsif ( $operation eq "activate" || $operation eq "get status of" )
-{
- $skipManaged=$single;
- $skipDisabled=$role;
-
- $ret=indirectLock("LDAP00",$entry, $nsDisabledRole);
-
- if ( $ret == 0 )
- {
- # undirectly locked
- if ( $throughRole ne $nsDisabledRole && $throughRole ne $nsManagedDisabledRole )
- {
- if ( $operation eq "activate" )
- {
- out("$entry inactivated through $throughRole. Can not activate it individually.\n");
- exit 100;
- }
- else
- {
- out("$entry inactivated through $throughRole.\n");
- exit 104;
- }
- }
- debug("$entry locked individually\n");
-
- if ( $operation ne "activate" )
- {
- out("$entry inactivated.\n");
- exit 103;
- }
- }
- elsif ( $directLocked == 0 )
- {
- if ( $operation eq "activate" && $isLocked != 1 )
- {
- out("$entry $already $state.\n");
- exit 100;
- }
- elsif ( $isLocked != 1 )
- {
- out("$entry $already $state.\n");
- exit 102;
- }
- else
- {
- # not locked using our schema, but nsaccountlock is probably present
- out("$entry inactivated (probably directly).\n");
- exit 103;
- }
- }
- elsif ( $operation ne "activate" )
- {
- out("$entry inactivated.\n");
- exit 103;
- }
- # else Locked directly, juste unlock it!
- debug("$entry locked individually\n");
-}
-
-#
-# Inactivate/activate the entry
-#
-$action="$ldapmodify -p $port -h $host -D \"$rootdn\" -w \"$rootpw\" -c >> {{DEV-NULL}} 2>&1";
-if ( $single == 1 )
-{
- @record=(
- "dn: $entry\n",
- "changetype: modify\n",
- "$modrole: nsRoleDN\n",
- "nsRoleDN: cn=nsManagedDisabledRole,@suffixN\n\n" );
-}
-else
-{
- @record=(
- "dn: cn=nsDisabledRole,@suffixN\n",
- "changetype: modify\n",
- "$modrole: nsRoleDN\n",
- "nsRoleDN: $entry\n\n" );
-}
-open(FD,"| $action ");
-print FD @record;
-close(FD);
-if ( $? != 0 )
-{
-debug("$modrole, $entry\n");
- $retCode=$?>>8;
- exit $retCode;
-}
-
-out("$entry $state.\n");
-exit 0;
diff --git a/ldap/admin/src/scripts/template-ns-newpwpolicy.pl b/ldap/admin/src/scripts/template-ns-newpwpolicy.pl
deleted file mode 100755
index 70a6411b..00000000
--- a/ldap/admin/src/scripts/template-ns-newpwpolicy.pl
+++ /dev/null
@@ -1,279 +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
-#
-
-# enable the use of our bundled perldap with our bundled ldapsdk libraries
-# all of this nonsense can be omitted if the mozldapsdk and perldap are
-# installed in the operating system locations (e.g. /usr/lib /usr/lib/perl5)
-$prefix = "{{DS-ROOT}}";
-
-$ENV{'PATH'} = "$prefix/usr/lib/mozldap6:$prefix/usr/bin:/usr/lib/mozldap6:/usr/bin";
-$ENV{'LD_LIBRARY_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-$ENV{'SHLIB_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-# Add new password policy specific entries
-
-#############################################################################
-# enable the use of Perldap functions
-require DynaLoader;
-
-use Getopt::Std;
-use Mozilla::LDAP::Conn;
-use Mozilla::LDAP::Utils qw(:all);
-use Mozilla::LDAP::API qw(:api :ssl :apiv3 :constant); # Direct access to C API
-
-#############################################################################
-# Default values of the variables
-
-$opt_D = "{{ROOT-DN}}";
-$opt_p = "{{SERVER-PORT}}";
-$opt_h = "{{SERVER-NAME}}";
-$opt_v = 0;
-
-# Variables
-$ldapsearch="ldapsearch -1";
-$ldapmodify="ldapmodify";
-
-#############################################################################
-
-sub usage {
- print (STDERR "ns-newpwpolicy.pl [-v] [-D rootdn] { -w password | -j filename } \n");
- print (STDERR " [-p port] [-h host] -U UserDN -S SuffixDN\n\n");
-
- print (STDERR "Arguments:\n");
- print (STDERR " -? - help\n");
- print (STDERR " -v - verbose output\n");
- print (STDERR " -D rootdn - Directory Manager DN. Default= '$opt_D'\n");
- print (STDERR " -w rootpw - password for the Directory Manager DN\n");
- print (STDERR " -j filename - Read the Directory Manager's password from file\n");
- print (STDERR " -p port - port. Default= $opt_p\n");
- print (STDERR " -h host - host name. Default= '$opt_h'\n");
- print (STDERR " -U userDN - User entry DN\n");
- print (STDERR " -S suffixDN - Suffix entry DN\n");
- exit 100;
-}
-
-# Process the command line arguments
-{
- usage() if (!getopts('vD:w:j:p:h:U:S:'));
-
- if ($opt_j ne ""){
- die "Error, cannot open password file $opt_j\n" unless (open (RPASS, $opt_j));
- $opt_w = <RPASS>;
- chomp($opt_w);
- close(RPASS);
- }
-
- usage() if( $opt_w eq "" );
- if ($opt_U eq "" && $opt_S eq "") {
- print (STDERR "Please provide at least -S or -U option.\n\n");
- }
-
- # Now, check if the user/group exists
-
- if ($opt_S) {
- print (STDERR "host = $opt_h, port = $opt_p, suffixDN = \"$opt_S\"\n\n") if $opt_v;
- @base=(
- "cn=nsPwPolicyContainer,$opt_S",
- "cn=\"cn=nsPwPolicyEntry,$opt_S\",cn=nsPwPolicyContainer,$opt_S",
- "cn=\"cn=nsPwTemplateEntry,$opt_S\",cn=nsPwPolicyContainer,$opt_S",
- "cn=nsPwPolicy_cos,$opt_S"
- );
-
- $ldapadd="$ldapmodify -p $opt_p -h $opt_h -D \"$opt_D\" -w \"$opt_w\" -c -a 2>&1";
- $modifyCfg="$ldapmodify -p $opt_p -h $opt_h -D \"$opt_D\" -w \"$opt_w\" -c 2>&1";
-
- @container=(
- "dn: cn=nsPwPolicyContainer,$opt_S\n",
- "objectclass: top\n",
- "objectclass: nsContainer\n\n" );
- @pwpolicy=(
- "dn: cn=\"cn=nsPwPolicyEntry,$opt_S\",cn=nsPwPolicyContainer,$opt_S\n",
- "objectclass: top\n",
- "objectclass: ldapsubentry\n",
- "objectclass: passwordpolicy\n\n" );
- @template=(
- "dn: cn=\"cn=nsPwTemplateEntry,$opt_S\",cn=nsPwPolicyContainer,$opt_S\n",
- "objectclass: top\n",
- "objectclass: extensibleObject\n",
- "objectclass: costemplate\n",
- "objectclass: ldapsubentry\n",
- "cosPriority: 1\n",
- "pwdpolicysubentry: cn=\"cn=nsPwPolicyEntry,$opt_S\",cn=nsPwPolicyContainer,$opt_S\n\n" );
- @cos=(
- "dn: cn=nsPwPolicy_cos,$opt_S\n",
- "objectclass: top\n",
- "objectclass: LDAPsubentry\n",
- "objectclass: cosSuperDefinition\n",
- "objectclass: cosPointerDefinition\n",
- "cosTemplateDn: cn=\"cn=nsPwTemplateEntry,$opt_S\",cn=nsPwPolicyContainer,$opt_S\n",
- "cosAttribute: pwdpolicysubentry default operational-default\n\n" );
-
- @all=(\@container, \@pwpolicy, \@template, \@cos);
-
- $i=0;
-
- foreach $current (@base)
- {
- open(FD,"| $ldapadd");
- print FD @{$all[$i]};
- close(FD);
- if ( $? != 0 ) {
- $retCode=$?>>8;
- if ( $retCode == 68 ) {
- print( STDERR "Entry \"$current\" already exists. Please ignore the error\n\n");
- }
- else {
- # Probably a more serious problem.
- # Exit with LDAP error
- print(STDERR "Error $retcode while adding \"$current\". Exiting.\n");
- exit $retCode;
- }
- }
- else {
- print( STDERR "Entry \"$current\" created\n\n") if $opt_v;
- }
- $i=$i+1;
- }
-
- $modConfig = "dn:cn=config\nchangetype: modify\nreplace:nsslapd-pwpolicy-local\nnsslapd-pwpolicy-local: on\n\n";
- open(FD,"| $modifyCfg ");
- print(FD $modConfig);
- close(FD);
- $retcode = $?;
- if ( $retcode != 0 ) {
- print( STDERR "Error $retcode while modifing \"cn=config\". Exiting.\n" );
- exit ($retcode);
- }
- else {
- print( STDERR "Entry \"cn=config\" modified\n\n") if $opt_v;
- }
- } # end of $opt_S
-
- if ($opt_U) {
- my $norm_opt_U = normalizeDN($opt_U);
- print (STDERR "host = $opt_h, port = $opt_p, userDN = \"$norm_opt_U\"\n\n") if $opt_v;
- $retcode = `$ldapsearch -h $opt_h -p $opt_p -b \"$norm_opt_U\" -s base \"\"`;
- if ($retcode != 0 ) {
- print( STDERR "the user entry $norm_opt_U does not exist. Exiting.\n");
- exit ($retcode);
- }
-
- print( STDERR "the user entry $norm_opt_U found..\n\n") if $opt_v;
-
- # Now, get the parentDN
- @rdns = ldap_explode_dn($norm_opt_U, 0);
- shift @rdns;
- $parentDN = join(',', @rdns);
-
- print (STDERR "parentDN is $parentDN\n\n") if $opt_v;
-
- @base=(
- "cn=nsPwPolicyContainer,$parentDN",
- "cn=\"cn=nsPwPolicyEntry,$norm_opt_U\",cn=nsPwPolicyContainer,$parentDN"
- );
-
- $ldapadd="$ldapmodify -p $opt_p -h $opt_h -D \"$opt_D\" -w \"$opt_w\" -c -a 2>&1";
- $modifyCfg="$ldapmodify -p $opt_p -h $opt_h -D \"$opt_D\" -w \"$opt_w\" -c 2>&1";
-
- @container=(
- "dn: cn=nsPwPolicyContainer,$parentDN\n",
- "objectclass: top\n",
- "objectclass: nsContainer\n\n" );
- @pwpolicy=(
- "dn: cn=\"cn=nsPwPolicyEntry,$norm_opt_U\",cn=nsPwPolicyContainer,$parentDN\n",
- "objectclass: top\n",
- "objectclass: ldapsubentry\n",
- "objectclass: passwordpolicy\n\n" );
-
- @all=(\@container, \@pwpolicy);
-
- $i=0;
-
- foreach $current (@base)
- {
- open(FD,"| $ldapadd ");
- print FD @{$all[$i]};
- close(FD);
- if ( $? != 0 ) {
- $retCode=$?>>8;
- if ( $retCode == 68 ) {
- print( STDERR "Entry $current already exists. Please ignore the error\n\n");
- }
- else {
- # Probably a more serious problem.
- # Exit with LDAP error
- print(STDERR "Error $retcode while adding \"$current\". Exiting.\n");
- exit $retCode;
- }
- }
- else {
- print( STDERR "Entry $current created\n\n") if $opt_v;
- }
- $i=$i+1;
- }
-
- $target = "cn=\"cn=nsPwPolicyEntry,$norm_opt_U\",cn=nsPwPolicyContainer,$parentDN";
- $modConfig = "dn: $norm_opt_U\nchangetype: modify\nreplace:pwdpolicysubentry\npwdpolicysubentry: $target\n\n";
- open(FD,"| $modifyCfg ");
- print(FD $modConfig);
- close(FD);
- $retcode = $?;
- if ( $retcode != 0 ) {
- print( STDERR "Error $retcode while modifing $norm_opt_U. Exiting.\n" );
- exit ($retcode);
- }
- else {
- print( STDERR "Entry \"$norm_opt_U\" modified\n\n") if $opt_v;
- }
-
- $modConfig = "dn:cn=config\nchangetype: modify\nreplace:nsslapd-pwpolicy-local\nnsslapd-pwpolicy-local: on\n\n";
- open(FD,"| $modifyCfg ");
- print(FD $modConfig);
- close(FD);
- $retcode = $?;
- if ( $retcode != 0 ) {
- print( STDERR "Error $retcode while modifing \"cn=config\". Exiting.\n" );
- exit ($retcode);
- }
- else {
- print( STDERR "Entry \"cn=config\" modified\n\n") if $opt_v;
- }
- } # end of $opt_U
-}
diff --git a/ldap/admin/src/scripts/template-repl-monitor-cgi.pl b/ldap/admin/src/scripts/template-repl-monitor-cgi.pl
deleted file mode 100755
index f961baf3..00000000
--- a/ldap/admin/src/scripts/template-repl-monitor-cgi.pl
+++ /dev/null
@@ -1,75 +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) 2005 Red Hat, Inc.
-# All rights reserved.
-# END COPYRIGHT BLOCK
-#
-
-use Cgi;
-
-$params = "";
-$params .= " -h $cgiVars{'servhost'}" if $cgiVars{'servhost'};
-$params .= " -p $cgiVars{'servport'}" if $cgiVars{'servport'};
-$params .= " -f $cgiVars{'configfile'}" if $cgiVars{'configfile'};
-$params .= " -t $cgiVars{'refreshinterval'}" if $cgiVars{'refreshinterval'};
-if ($cgiVars{'admurl'}) {
- $admurl = "$cgiVars{'admurl'}";
- if ( $ENV{'QUERY_STRING'} ) {
- $admurl .= "?$ENV{'QUERY_STRING'}";
- }
- elsif ( $ENV{'CONTENT_LENGTH'} ) {
- $admurl .= "?$Cgi::CONTENT";
- }
- $params .= " -u \"$admurl\"";
-}
-$siteroot = $cgiVars{'siteroot'};
-$prefix = "{{DS-ROOT}}";
-
-$ENV{'PATH'} = "$prefix/usr/lib/mozldap6:$prefix/usr/bin:/usr/lib/mozldap6:/usr/bin";
-$ENV{'LD_LIBRARY_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-$ENV{'SHLIB_PATH'} = "$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec:/usr/lib";
-
-# Save user-specified parameters as cookies in monreplication.properties.
-# Sync up with the property file so that monreplication2 is interval, and
-# monreplication3 the config file pathname.
-$propertyfile = "$siteroot/bin/admin/admin/bin/property/monreplication.properties";
-$edit1 = "s#monreplication2=.*#monreplication2=$cgiVars{'refreshinterval'}#;";
-$edit2 = "s#^monreplication3=.*#monreplication3=$cgiVars{'configfile'}#;";
-system("perl -p -i.bak -e \"$edit1\" -e \"$edit2\" $propertyfile");
-
-# Now the real work
-$replmon = "$siteroot/bin/slapd/admin/scripts/template-repl-monitor.pl";
-system("perl -I$siteroot/lib/perl/arch -I$siteroot/lib/perl $replmon $params");
diff --git a/ldap/admin/src/scripts/template-repl-monitor.pl b/ldap/admin/src/scripts/template-repl-monitor.pl
deleted file mode 100755
index d1ec4bb6..00000000
--- a/ldap/admin/src/scripts/template-repl-monitor.pl
+++ /dev/null
@@ -1,996 +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
-##############################################################################
-#
-# FILE: repl-monitor.pl
-#
-# SYNOPSIS:
-# repl-monitor.pl -f configuration-file [-h host] [-p port] [-r] \
-# [-u refresh-url] [-t refresh-interval]
-#
-# repl-monitor.pl -v
-#
-# DESCRIPTION:
-# Given an LDAP replication "supplier" server, crawl over all the ldap
-# servers via direct or indirect replication agreements.
-# For each master replica discovered, display the maxcsn of the master
-# and the replication status of all its lower level replicas.
-# All output is in HTML.
-#
-# OPTIONS:
-#
-# -f configuration-file
-# The configuration file contains the sections for the connection
-# parameters, the server alias, and the thresholds for different colors
-# when display the time lags between consumers and master.
-# If the Admin Server is running on Windows, the configuration-file
-# name may have format "D:/opt/replmon.conf".
-#
-# The connection parameter section consists of the section name
-# followed by one of more connection parameter entries:
-#
-# [connection]
-# host:port:binddn:bindpwd:bindcert
-# host:port=shadowport:binddn:bindpwd:bindcert
-# ...
-#
-# where host:port default (*:*) to that in a replication agreement,
-# binddn default (*) to "cn=Directory Manager", and bindcert is the
-# pathname of cert db if you want the script to connect to the server
-# via SSL. If bindcert is omitted, the connection will be simple
-# bind.
-# "port=shadowport" means to use shadowport instead of port if port
-# is specified in the replication agreement. This is useful when
-# for example, ssl port is specified in a replication agreement,
-# but you can't access the cert db from the machine where this
-# script is running. So you could let the script to map the ssl
-# port to a non-ssl port and use the simple bind.
-#
-# A server may have a dedicated or a share entry in the connection
-# section. The script will find out the most matched entry for a given
-# server. For example, if all the ldap servers except host1 share the
-# same binddn and bindpassword, the connection section then just need
-# two entries:
-#
-# [connection]
-# *:*:binddn:bindpassword:
-# host1:*:binddn:bindpassword:
-#
-# If a host:port is assigned an alias, then the alias instead of
-# host:port will be displayed in The output file. Each host:port
-# can have only one alias. But each alias may be used by more than
-# one host:port.
-#
-# [alias]
-# alias = host:port
-# ...
-#
-# CSN time lags between masters and consumers might be displayed in
-# different colors based on their range. The thresholds for different
-# colors may be specified in color section:
-#
-# [color]
-# lowmark (in minutes) = color
-# ...
-# If the color section or color entry is missing, the default color
-# set is: green for [0-5) minutes lag, yellow [5-60), and red 60 and more.
-#
-# -h host
-# Initial replication supplier's host. Default to the current host.
-#
-# -p port
-# Initial replication supplier's port. Default to 389.
-#
-# -r If specified, -r causes the routine to be entered without printing
-# HTML header information. This is suitable when making multiple calls
-# to this routine (e.g. when specifying multiple, different, "unrelated"
-# supplier servers) and expecting a single HTML output.
-#
-# -t refresh-interval
-# Specify the refresh interval in seconds. This option has to be
-# jointly used with option -u.
-#
-# -u refresh-url
-# The output HTML file may invoke a CGI program periodically. If
-# this CGI program in turn calls this script, the effect is that
-# the output HTML file would automatically refresh itself. This
-# is useful for continuing monitoring. See also option -t.
-#
-# -v Print out the version of this script
-#
-# DIAGNOSTICS:
-# There are several ways to invoke this script if you got error
-# "Can't locate Mozilla/LDAP/Conn.pm in @INC", or
-# "usage: Undefined variable":
-#
-# 1. Set the first line of the script to #!<DSHOME>/bin/slapd/admin/bin/perl
-# and run this script directly.
-#
-# 2. Run
-# <DSHOME>/bin/slapd/admin/bin/perl repl-monitor.pl
-#
-# 3. Set environment variable PERL5LIB to your Perl lib dirs where
-# Mozilla::LDAP module can be located. This should be under serverroot/lib/perl
-# e.g. PERL5LIB="serverroot/lib/perl/arch:serverroot/lib/perl"
-#
-# 4. Set LD_LIBRARY_PATH (or SHLIB_PATH) to point to the location of our
-# bundled shared libraries e.g. LD_LIBRARY_PATH="serverroot/lib"
-#
-# 5. Invoke the script as follows if <MYPERLDIR> (serverroot/lib/perl) contains
-# Mozilla/LDAP:
-# <MYPERLDIR>/bin/perl -I <MYPERLDIR>/arch -I <MYPERLDIR> repl-monitor.pl
-#
-#############################################################################
-# enable the use of our bundled perldap with our bundled ldapsdk libraries
-# all of this nonsense can be omitted if the mozldapsdk and perldap are
-# installed in the operating system locations (e.g. /usr/lib /usr/lib/perl5)
-# this script is always invoked by repl-monitor-cgi.pl, which sets all of these
-# If using this script standalone, be sure to set the shared lib path and
-# the path to the perldap modules.
-$usage = "\nusage: $0 -f configuration-file [-h host] [-p port] [-r] [-u refresh-url] [-t refresh-interval]\n\nor : $0 -v\n";
-
-use Getopt::Std; # parse command line arguments
-use Mozilla::LDAP::Conn; # LDAP module for Perl
-use Mozilla::LDAP::Utils qw(normalizeDN); # LULU, utilities.
-use Mozilla::LDAP::API qw(:api :ssl :apiv3 :constant); # Direct access to C API
-use Time::Local; # to convert GMT Z strings to localtime
-
-#
-# Global variables
-#
-$product = "Directory Server Replication Monitor";
-$version = "Version 1.0";
-#
-# ldap servers given or discovered from the replication agreements:
-# @servers = (host:port=shadowport:binddn:password:cert_db)
-#
-# entries read from the connection section of the configuration file:
-# @allconnections = (host:port=shadowport:binddn:password:cert_db)
-#
-# aliases of ldap servers read from the configuration file:
-# %allaliases{$host:$port}= (alias)
-#
-# replicas discovered on all ldap servers
-# @allreplicas = (server#:replicaroot:replicatype:serverid:replicadn)
-#
-# ruvs retrieved from all replicas
-# @allruvs{replica#:masterid} = (rawcsn:decimalcsn;mon/day/year hh:mi:ss)
-#
-# agreements discovered on all ldap supplier servers:
-# @allagreements = (supplier_replica#:consumer#:conntype:schedule:status)
-# the array may take another format after the consumer replicas are located:
-# @allagreements = (supplier_replica#:consumer_replica#:conntype:schedule:status)
-#
-
-#main
-{
- # turn off buffered I/O
- $| = 1;
-
- # Check for legal options
- if (!getopts('h:p:f:ru:t:v')) {
- print $usage;
- exit -1;
- }
-
- if ($opt_v) {
- print "$product - $version\n";
- exit;
- }
-
- $interval = $opt_t;
- $interval = 300 if ( !$interval || $interval <= 0 );
-
- # Get current date/time
- $nowraw = localtime();
- ($wday, $mm, $dd, $tt, $yy) = split(/ /, $nowraw);
- $now = "$wday $mm $dd $yy $tt";
-
- # if no -r (Reenter and skip html header), print html header
- if (!$opt_r) {
- # print the HTML header
- &print_html_header;
- } else {
- # print separator for new replication set
- print "<hr width=90% size=3><br>\n";
- }
-
- exit -1 if &validateArgs < 0;
- exit if &read_cfg_file ($opt_f) < 0;
-
- # Start with the given host and port
- # The index names in %ld are defined in Mozilla::LDAP::Utils::ldapArgs()
- &add_server ("$ld{host}:$ld{port}:$ld{bind}:$ld{pswd}:$ld{cert}");
-
- $serveridx = 0;
- while ($serveridx <= $#servers) {
- if (&get_replicas ($serveridx) != 0 && $serveridx == 0) {
- my ($host, $port, $binddn) = split (/:/, $servers[0]);
- print("Login to $host:$port as \"$binddn\" failed\n");
- exit;
- }
- $serveridx++;
- }
-
- &find_consumer_replicas;
- &process_suppliers;
-
- # All done! - well, for the current invokation only
- # print "</body></html>\n";
- exit;
-}
-
-sub validateArgs
-{
- my ($rc) = 0;
-
- %ld = Mozilla::LDAP::Utils::ldapArgs();
-
- if (!$opt_v && !$opt_f) {
- print "<p>Error: Missing configuration file.\n";
- print "<p>If you need help on the configuration file, Please go back and click the Help button.\n";
- #print $usage; # Don't show usage in CGI
- $rc = -1;
- }
- elsif (!$opt_h) {
- chop ($ld{"host"} = `hostname`);
- }
-
- return $rc;
-}
-
-sub read_cfg_file
-{
- my ($fn) = @_;
- unless (open(CFGFILEHANDLE, $fn)) {
- print "<p>Error: Can't open \"$fn\": $!.\n";
- print "<p>If you need help on the configuration file, Please go back and click the Help button.\n";
- return -1;
- }
- $section = 0;
- while (<CFGFILEHANDLE>) {
- next if (/^\s*\#/ || /^\s*$/);
- chop ($_);
- if (m/^\[(.*)\]/) {
- $section = $1;
- }
- else {
- if ( $section =~ /conn/i ) {
- push (@allconnections, $_);
- }
- elsif ( $section =~ /alias/i ) {
- m/^\s*(\S.*)\s*=\s*(\S+)/;
- $allaliases {$2} = $1;
- }
- elsif ( $section =~ /color/i ) {
- m/^\s*(-?\d+)\s*=\s*(\S+)/;
- $allcolors {$1} = $2;
- }
- }
- }
- if ( ! keys (%allcolors) ) {
- $allcolors {0} = "#ccffcc"; #apple green
- $allcolors {5} = "#ffffcc"; #cream yellow
- $allcolors {60} = "#ffcccc"; #pale pink
- }
- @colorkeys = sort (keys (%allcolors));
- close (CFGFILEHANDLE);
- return 0;
-}
-
-sub get_replicas
-{
- my ($serveridx) = @_;
- my ($conn, $host, $port, $shadowport, $binddn, $bindpwd, $bindcert);
- my ($others);
- my ($replica, $replicadn);
- my ($ruv, $replicaroot, $replicatype, $serverid, $masterid, $maxcsn);
- my ($type, $flag, $i);
- my ($myridx, $ridx, $cidx);
-
- #
- # Bind to the server
- #
- ($host, $port, $binddn, $bindpwd, $bindcert) = split (/:/, "$servers[$serveridx]", 5);
-
- ($port, $shadowport) = split (/=/, $port);
- $shadowport = $port if !$shadowport;
-
- $conn = new Mozilla::LDAP::Conn ($host, $shadowport, "$binddn", $bindpwd, $bindcert);
-
- return -1 if (!$conn);
-
- #
- # Get all the replica on the server
- #
- $myridx = $#allreplicas + 1;
- $replica = $conn->search ("cn=mapping tree,cn=config",
- "sub",
- "(objectClass=nsDS5Replica)", 0,
- qw(nsDS5ReplicaRoot nsDS5ReplicaType nsDS5Flags nsDS5ReplicaId));
- while ($replica) {
- $replicadn = $replica->getDN;
- $replicaroot = normalizeDN ($replica->{nsDS5ReplicaRoot}[0]);
- $type = $replica->{nsDS5ReplicaType}[0];
- $flag = $replica->{nsDS5Flags}[0];
- $serverid = $replica->{nsDS5ReplicaId}[0];
-
- # flag = 0: change log is not created
- # type = 2: read only replica
- # type = 3: updatable replica
- $replicatype = $flag == 0 ? "consumer" : ($type == 2 ? "hub" : "master");
-
- push (@allreplicas, "$serveridx:$replicaroot:$replicatype:$serverid:$replicadn");
-
- $replica = $conn->nextEntry ();
- }
-
- #
- # Get ruv for each replica
- #
- for ($ridx = $myridx; $ridx <= $#allreplicas; $ridx++) {
-
- $replicaroot = $1 if ($allreplicas[$ridx] =~ /^\d+:([^:]*)/);
- # do a one level search with nsuniqueid in the filter - this will force the use of the
- # nsuniqueid index instead of the entry dn index, which seems to be unreliable in
- # heavily loaded servers
- $ruv = $conn->search($replicaroot, "one",
- "(&(nsuniqueid=ffffffff-ffffffff-ffffffff-ffffffff)(objectClass=nsTombstone))",
- 0, qw(nsds50ruv nsruvReplicaLastModified));
- next if !$ruv; # this should be an error case . . .
-
- for ($ruv->getValues('nsds50ruv')) {
- if (m/\{replica\s+(\d+).+?\}\s*\S+\s*(\S+)/i) {
- $masterid = $1;
- $maxcsn = &to_decimal_csn ($2);
- $allruvs {"$ridx:$masterid"} = "$2:$maxcsn";
- }
- }
-
- for ($ruv->getValues('nsruvReplicaLastModified')) {
- if (m/\{replica\s+(\d+).+?\}\s*(\S+)/i) {
- $masterid = $1;
- $lastmodifiedat = hex($2);
- my ($sec, $min, $hour, $mday, $mon, $year) = localtime ($lastmodifiedat);
- $mon++;
- $year += 1900;
- $hour = "0".$hour if ($hour < 10);
- $min = "0".$min if ($min < 10);
- $sec = "0".$sec if ($sec < 10);
- $allruvs {"$ridx:$masterid"} .= ";$mon/$mday/$year $hour:$min:$sec";
- }
- }
- }
-
- #
- # Get all agreements for each supplier replica
- #
- for ($ridx = $myridx; $ridx <= $#allreplicas; $ridx++) {
- $_ = $allreplicas[$ridx];
-
- # Skip consumers
- next if m/:consumer:/i;
-
- m/:([^:]*)$/;
- $replicadn = $1;
- my @attrlist = qw(cn nsds5BeginReplicaRefresh nsds5replicaUpdateInProgress
- nsds5ReplicaLastInitStatus nsds5ReplicaLastInitStart
- nsds5ReplicaLastInitEnd nsds5replicaReapActive
- nsds5replicaLastUpdateStart nsds5replicaLastUpdateEnd
- nsds5replicaChangesSentSinceStartup nsds5replicaLastUpdateStatus
- nsds5ReplicaHost
- nsds5ReplicaPort nsDS5ReplicaBindMethod nsds5ReplicaUpdateSchedule);
- $agreement = $conn->search("$replicadn", "sub", "(objectClass=nsDS5ReplicationAgreement)",
- 0, @attrlist);
- while ($agreement) {
-
- my %agmt = ();
- # Push consumer to server stack if we have not already
- $host = ($agreement->getValues('nsDS5ReplicaHost'))[0];
- $port = ($agreement->getValues('nsDS5ReplicaPort'))[0];
- $cidx = &add_server ("$host:$port");
-
- for (@attrlist) {
- $agmt{$_} = ($agreement->getValues($_))[0];
- }
- if ($agmt{nsDS5ReplicaBindMethod} =~ /simple/i) {
- $agmt{nsDS5ReplicaBindMethod} = 'n';
- }
- if (!$agmt{nsds5ReplicaUpdateSchedule} ||
- ($agmt{nsds5ReplicaUpdateSchedule} eq '0000-2359 0123456') ||
- ($agmt{nsds5ReplicaUpdateSchedule} eq '*') ||
- ($agmt{nsds5ReplicaUpdateSchedule} eq '* *')) {
- $agmt{nsds5ReplicaUpdateSchedule} = 'always in sync';
- }
-
- $agmt{ridx} = $ridx;
- $agmt{cidx} = $cidx;
- push @allagreements, \%agmt;
-
- $agreement = $conn->nextEntry ();
- }
- }
-
- $conn->close;
-}
-
-#
-# Initially, the agreements have consumer host:port info instead of
-# replica info. This routine will find the consumer replica info
-#
-sub find_consumer_replicas
-{
- my ($m_ridx); # index of master's replica
- my ($s_ridx); # index of supplier's replica
- my ($c_ridx); # index of consumer's replica
- my ($c_sidx); # index of consumer server
- my ($remainder); #
- my ($s_replicaroot); # supplier replica root
- my ($c_replicaroot); # consumer replica root
- my ($j, $val);
-
- #
- # Loop through every agreement defined on the current supplier replica
- #
- foreach (@allagreements) {
- $s_ridx = $_->{ridx};
- $c_sidx = $_->{cidx};
- $s_replicaroot = $1 if ($allreplicas[$s_ridx] =~ /^\d+:([^:]*)/);
- $c_replicaroot = "";
-
- # $c_ridx will be assigned to -$c_sidx
- # if the condumer is not accessible
- # $c_sidx will not be zero since it's
- # not the first server.
- $c_ridx = -$c_sidx; # $c_sidx will not be zero
-
- # Loop through consumer's replicas and find
- # the counter part for the current supplier
- # replica
- for ($j = 0; $j <= $#allreplicas; $j++) {
-
- # Get a replica on consumer
- # I'm not sure what's going on here, but possibly could be made
- # much simpler with normalizeDN and/or ldap_explode_dn
- if ($allreplicas[$j] =~ /^$c_sidx:([^:]*)/) {
- $val = $1;
-
- # We need to find out the consumer
- # replica that matches the supplier
- # replicaroot most.
- if ($s_replicaroot =~ /^.*$val$/i &&
- length ($val) >= length ($c_replicaroot)) {
- $c_ridx = $j;
-
- # Avoid case-sensitive comparison
- last if (length($s_replicaroot) == length($val));
- $c_replicaroot = $val;
- }
- }
- }
- $_->{ridx} = $s_ridx;
- $_->{cidx} = $c_ridx;
- }
-}
-
-sub process_suppliers
-{
- my ($ridx, $mid, $maxcsn);
-
- $mid = "";
-
- $last_sidx = -1; # global variable for print html page
-
- for ($ridx = 0; $ridx <= $#allreplicas; $ridx++) {
-
- # Skip consumers and hubs
- next if $allreplicas[$ridx] !~ /:master:(\d+):/i;
- $mid = $1;
-
- # Skip replicas without agreements defined yet
- next if (! grep {$_->{ridx} == $ridx} @allagreements);
-
- $maxcsn = &print_master_header ($ridx, $mid);
- if ( "$maxcsn" != "none" ) {
- &print_consumer_header ();
- &print_consumers ($ridx, $mid);
- }
- &print_supplier_end;
- }
-
- if ($mid eq "") {
- print "<p>The server is not a master or it has no replication agreement\n";
- }
-}
-
-sub print_master_header
-{
- my ($ridx, $mid) = @_;
- my ($myruv) = $allruvs {"$ridx:$mid"};
- my ($maxcsnval) = split ( /;/, "$myruv" );
- my ($maxcsn) = &to_string_csn ($maxcsnval);
- my ($sidx, $replicaroot, $replicatype, $serverid) = split (/:/, $allreplicas[$ridx]);
-
- # Print the master name
- if ( $last_sidx != $sidx ) {
- my ($ldapurl) = &get_ldap_url ($sidx, $sidx);
- &print_legend if ( $last_sidx < 0);
- print "<p><p><hr><p>\n";
- print "\n<p><center class=page-subtitle><font color=#0099cc>\n";
- print "Master:&nbsp $ldapurl</center>\n";
- $last_sidx = $sidx;
- }
-
- # Print the current replica info onthe master
- print "\n<p><table border=0 cellspacing=1 cellpadding=6 cols=10 width=100% class=bgColor9>\n";
-
- print "\n<tr><td colspan=10><center>\n";
- print "<font class=areatitle>Replica ID:&nbsp;</font>";
- print "<font class=text28>$serverid</font>\n";
-
- print "<font class=areatitle>Replica Root:&nbsp;</font>";
- print "<font class=text28>$replicaroot</font>\n";
-
- print "<font class=areatitle>Max CSN:&nbsp;</font>";
- print "<font class=text28>$maxcsn</font>\n";
-
- return $maxcsn;
-}
-
-sub print_consumer_header
-{
- #Print the header of consumer
- print "\n<tr class=bgColor16>\n";
- print "<th nowrap>Receiver</th>\n";
- print "<th nowrap>Time Lag</th>\n";
- print "<th nowrap>Max CSN</th>\n";
- print "<th nowrap>Last Modify Time</th>\n";
- print "<th nowrap>Supplier</th>\n";
- print "<th nowrap>Sent/Skipped</th>\n";
- print "<th nowrap>Update Status</th>\n";
- print "<th nowrap>Update Started</th>\n";
- print "<th nowrap>Update Ended</th>\n";
- print "<th nowrap colspan=2>Schedule</th>\n";
- print "<th nowrap>SSL?</th>\n";
- print "</tr>\n";
-}
-
-sub print_consumers
-{
- my ($m_ridx, $mid) = @_;
- my ($ignore, $m_replicaroot) = split (/:/, $allreplicas[$m_ridx]);
- my (@consumers, @ouragreements, @myagreements);
- my ($s_ridx, $c_ridx, $conntype, $schedule, $status);
- my ($c_maxcsn_str, $lag, $markcolor);
- my ($c_replicaroot, $c_replicatype);
- my ($first_entry);
- my ($nrows);
- my ($found);
-
- undef @ouragreements;
-
- # Collect all the consumer replicas for the current master replica
- push (@consumers, $m_ridx);
- foreach (@consumers) {
- $s_ridx = $_;
- for (@allagreements) {
- next if ($_->{ridx} != $s_ridx);
- $c_ridx = $_->{cidx};
- next if $c_ridx == $m_ridx;
- push @ouragreements, $_;
- $found = 0;
- foreach (@consumers) {
- if ($_ == $c_ridx) {
- $found = 1;
- last;
- }
- }
- push (@consumers, $c_ridx) if !$found;
- }
- }
-
- # Print each consumer replica
- my ($myruv) = $allruvs {"$m_ridx:$mid"};
- my ($m_maxcsn) = split ( /;/, "$myruv" );
- foreach (@consumers) {
- $c_ridx = $_;
- next if $c_ridx == $m_ridx;
-
- if ($c_ridx >= 0) {
- $myruv = $allruvs {"$c_ridx:$mid"};
- ($c_maxcsn, $c_lastmodified) = split ( /;/, "$myruv" );
- ($c_maxcsn_str, $lag, $markcolor) = &cacl_time_lag ($m_maxcsn, $c_maxcsn);
- $c_maxcsn_str =~ s/ /\<br\>/;
- ($c_sidx, $c_replicaroot, $c_replicatype) = split (/:/, $allreplicas[$c_ridx]);
- $c_replicaroot = "same as master" if $m_replicaroot eq $c_replicaroot;
- }
- else {
- # $c_ridx is actually -$c_sidx when c is not available
- $c_sidx = -$c_ridx;
- $c_maxcsn_str = "_";
- $lag = "n/a";
- $markcolor = red;
- $c_replicaroot = "_";
- $c_replicatype = "_";
- }
-
- $nrows = 0;
- foreach (@ouragreements) {
- next if ($_->{cidx} != $c_ridx);
- $nrows++;
- }
-
- $first_entry = 1;
- foreach (@ouragreements) {
- next if ($_->{cidx} != $c_ridx);
- $s_ridx = $_->{ridx};
- $conntype = $_->{nsDS5ReplicaBindMethod};
- $status = $_->{nsds5replicaLastUpdateStatus};
- $schedule = $_->{nsds5ReplicaUpdateSchedule};
- $s_sidx = $1 if $allreplicas [$s_ridx] =~ /^(\d+):/;
- $s_ldapurl = &get_ldap_url ($s_sidx, "n/a");
-
- # Print out the consumer's replica and ruvs
- print "\n<tr class=bgColor13>\n";
- if ($first_entry) {
- $first_entry = 0;
- $c_ldapurl = &get_ldap_url ($c_sidx, $conntype);
- print "<td rowspan=$nrows width=5% class=bgColor5>$c_ldapurl<BR>Type: $c_replicatype</td>\n";
- print "<td rowspan=$nrows width=5% nowrap bgcolor=$markcolor><center>$lag</center></td>\n";
- print "<td rowspan=$nrows width=15% nowrap>$c_maxcsn_str</td>\n";
- print "<td rowspan=$nrows width=15% nowrap>$c_lastmodified</td>\n";
- }
- print "<td width=5% nowrap><center>$s_ldapurl</center></td>\n";
- my $changecount = $_->{nsds5replicaChangesSentSinceStartup};
- if ( $changecount =~ /^$mid:(\d+)\/(\d+) / || $changecount =~ / $mid:(\d+)\/(\d+) / ) {
- $changecount = "$1 / $2";
- }
- elsif ( $changecount =~ /^(\d+)$/ ) {
- $changecount = $changecount . " / " . "$_->{nsds5replicaChangesSkippedSinceStartup}";
- }
- else {
- $changecount = "0 / 0";
- }
- print "<td width=3% nowrap>$changecount</td>\n";
- my $redfontstart = "";
- my $redfontend = "";
- if ($status =~ /error/i) {
- $redfontstart = "<font color='red'>";
- $redfontend = "</font>";
- }
- elsif ($status =~ /^(\d+) /) {
- if ( $1 != 0 ) {
- # warning
- $redfontstart = "<font color='#FF7777'>";
- $redfontend = "</font>";
- }
- }
- print "<td width=20% nowrap>$redfontstart$status$redfontend</td>\n";
- print "<td nowrap>", &format_z_time($_->{nsds5replicaLastUpdateStart}), "</td>\n";
- print "<td nowrap>", &format_z_time($_->{nsds5replicaLastUpdateEnd}), "</td>\n";
- if ( $schedule =~ /always/i ) {
- print "<td colspan=2 width=10% nowrap>$schedule</td>\n";
- }
- else {
- my ($ndays, @days);
- $schedule =~ /(\d\d)(\d\d)-(\d\d)(\d\d) (\d+)/;
- print "<td width=10% nowrap>$1:$2-$3:$4</td>\n";
- $ndays = $5;
- $ndays =~ s/(\d)/$1,/g;
- @days = (Sun,Mon,Tue,Wed,Thu,Fri,Sat)[eval $ndays];
- print "<td width=10% nowrap>@days</td>\n";
- }
- print "<td width=3% nowrap class=bgColor5>$conntype</td>\n";
- }
- }
-}
-
-sub cacl_time_lag
-{
- my ($s_maxcsn, $c_maxcsn) = @_;
- my ($markcolor);
- my ($csn_str);
- my ($s_tm, $c_tm, $lag_tm, $lag_str, $hours, $minute);
-
- $csn_str = &to_string_csn ($c_maxcsn);
-
- if ($s_maxcsn && !$c_maxcsn) {
- $lag_str = "- ?:??:??";
- $markcolor = &get_color (36000); # assume consumer has big latency
- }
- elsif (!$s_maxcsn && $c_maxcsn) {
- $lag_str = "+ ?:??:??";
- $markcolor = &get_color (1); # consumer is ahead of supplier
- }
- elsif ($s_maxcsn le $c_maxcsn) {
- $lag_str = "0:00:00";
- $markcolor = &get_color (0);
- }
- else {
- my ($rawcsn, $decimalcsn) = split (/:/, $s_maxcsn);
- ($s_tm) = split(/ /, $decimalcsn);
-
- ($rawcsn, $decimalcsn) = split (/:/, $c_maxcsn);
- ($c_tm) = split(/ /, $decimalcsn);
- if ($s_tm > $c_tm) {
- $lag_tm = $s_tm - $c_tm;
- $lag_str = "- ";
- $markcolor = &get_color ($lag_tm);
- }
- else {
- $lag_tm = $c_tm - $s_tm;
- $lag_str = "+ ";
- $markcolor = $allcolors{ $colorkeys[0] }; # no delay
- }
- $hours = int ($lag_tm / 3600);
- $lag_str .= "$hours:";
-
- $lag_tm = $lag_tm % 3600;
- $minutes = int ($lag_tm / 60);
- $minutes = "0".$minutes if ($minutes < 10);
- $lag_str .= "$minutes:";
-
- $lag_tm = $lag_tm % 60;
- $lag_tm = "0".$lag_tm if ($lag_tm < 10);
- $lag_str .= "$lag_tm";
- }
- return ($csn_str, $lag_str, $markcolor);
-}
-
-#
-# The subroutine would append a new entry to the end of
-# @servers if the host and port are new to @servers.
-#
-sub add_server
-{
- my ($host, $port, $binddn, $bindpwd, $bindcert) = split (/:/, "@_");
- my ($shadowport) = $port;
- my ($domainpattern) = '\.[^:]+';
- my ($i);
-
- # Remove the domain name from the host name
- my ($hostnode) = $host;
- $hostnode = $1 if $host =~ /^(\w+)\./;
-
- # new host:port
- if ($binddn eq "" || $bindpwd eq "" && $bindcert eq "") {
- #
- # Look up connection parameter in the order of
- # host:port
- # host:*
- # *:port
- # *:*
- #
- my (@myconfig, $h, $p, $d, $w, $c);
- (@myconfig = grep (/^$hostnode($domainpattern)*:$port\D/i, @allconnections)) ||
- (@myconfig = grep (/^$hostnode($domainpattern)*:\*:/i, @allconnections)) ||
- (@myconfig = grep (/^\*:$port\D/, @allconnections)) ||
- (@myconfig = grep (/^\*:\*\D/, @allconnections));
- if ($#myconfig >= 0) {
- ($h, $p, $d, $w, $c) = split (/:/, $myconfig[0]);
- ($p, $shadowport) = split (/=/, $p);
- $p = "" if $p eq "*";
- $c = "" if $c eq "*";
- }
- if ($binddn eq "" || $binddn eq "*") {
- if ($d eq "" || $d eq "*") {
- $binddn = "cn=Directory Manager";
- }
- else {
- $binddn = $d;
- }
- }
- $bindpwd = $w if ($bindpwd eq "" || $bindpwd eq "*");
- $bindcert = $c if ($bindcert eq "" || $bindcert eq "*");
- }
-
- for ($i = 0; $i <= $#servers; $i++) {
- return $i if ($servers[$i] =~ /$hostnode($domainpattern)*:\d*=$shadowport\D/i);
- }
-
- push (@servers, "$host:$port=$shadowport:$binddn:$bindpwd:$bindcert");
- return $i;
-}
-
-sub get_ldap_url
-{
- my ($sidx, $conntype) = @_;
- my ($host, $port) = split(/:/, $servers[$sidx]);
- my ($shadowport);
- ($port, $shadowport) = split (/=/, $port);
- my ($protocol, $ldapurl);
-
- if ($port eq 636 && $conntype eq "0" || $conntype =~ /SSL/i) {
- $protocol = ldaps;
- }
- else {
- $protocol = ldap;
- }
- my ($instance) = $allaliases { "$host:$port" };
- $instance = "$host:$port" if !$instance;
- if ($conntype eq "n/a") {
- $ldapurl = $instance;
- }
- else {
- $ldapurl = "<a href=\"$protocol://$host:$port/\">$instance</a>";
- }
- return $ldapurl;
-}
-
-sub to_decimal_csn
-{
- my ($maxcsn) = @_;
- if (!$maxcsn || $maxcsn eq "") {
- return "none";
- }
-
- my ($tm, $seq, $masterid, $subseq) = unpack("a8 a4 a4 a4", $maxcsn);
-
- $tm = hex($tm);
- $seq = hex($seq);
- $masterid = hex($masterid);
- $subseq = hex($subseq);
-
- return "$tm $seq $masterid $subseq";
-}
-
-sub to_string_csn
-{
- my ($rawcsn, $decimalcsn) = split(/:/, "@_");
- if (!$rawcsn || $rawcsn eq "") {
- return "none";
- }
- my ($tm, $seq, $masterid, $subseq) = split(/ /, $decimalcsn);
- my ($sec, $min, $hour, $mday, $mon, $year) = localtime($tm);
- $mon++;
- $year += 1900;
- foreach ($sec, $min, $hour, $mday, $mon) {
- $_ = "0".$_ if ($_ < 10);
- }
- my ($csnstr) = "$mon/$mday/$year $hour:$min:$sec";
- $csnstr .= " $seq $subseq" if ( $seq != 0 || $subseq != 0 );
- return "$rawcsn ($csnstr)";
-}
-
-sub get_color
-{
- my ($lag_minute) = @_;
- $lag_minute /= 60;
- my ($color) = $allcolors { $colorkeys[0] };
- foreach (@colorkeys) {
- last if ($lag_minute < $_);
- $color = $allcolors {$_};
- }
- return $color;
-}
-
-# subroutine to remove escaped encoding
-
-sub unescape
-{
- #my ($_) = @_;
- tr/+/ /;
- s/%(..)/pack("c",hex($1))/ge;
- $_;
-}
-
-sub print_html_header
-{
- # print the HTML header
-
- print "Content-type: text/html\n\n";
- print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\"><html>\n";
- print "<head><title>Replication Status</title>\n";
- # print "<link type=text/css rel=stylesheet href=\"master-style.css\">\n";
- print "<style text/css>\n";
- print "Body, p, table, td, ul, li {color: #000000; font-family: Arial, Helvetica, sans-serif; font-size: 12px;}\n";
- print "A {color:blue; text-decoration: none;}\n";
- print "BODY {font-family: arial, helvetica, sans-serif}\n";
- print "P {font-family: arial, helvetica, sans-serif}\n";
- print "TH {font-weight: bold; font-family: arial, helvetica, sans-serif}\n";
- print "TD {font-family: arial, helvetica, sans-serif}\n";
- print ".bgColor1 {background-color: #003366;}\n";
- print ".bgColor4 {background-color: #cccccc;}\n";
- print ".bgColor5 {background-color: #999999;}\n";
- print ".bgColor9 {background-color: #336699;}\n";
- print ".bgColor13 {background-color: #ffffff;}\n";
- print ".bgColor16 {background-color: #6699cc;}\n";
- print ".text8 {color: #0099cc; font-size: 11px; font-weight: bold;}\n";
- print ".text28 {color: #ffcc33; font-size: 12px; font-weight: bold;}\n";
- print ".areatitle {font-weight: bold; color: #ffffff; font-family: arial, helvetica, sans-serif}\n";
- print ".page-title {font-weight: bold; font-size: larger; font-family: arial, helvetica, sans-serif}\n";
- print ".page-subtitle {font-weight: bold; font-family: arial, helvetica, sans-serif}\n";
-
- print "</style></head>\n<body class=bgColor4>\n";
-
- if ($opt_u) {
- print "<meta http-equiv=refresh content=$interval; URL=$opt_u>\n";
- }
-
- print "<table border=0 cellspacing=0 cellpadding=10 width=100% class=bgColor1>\n";
- print "<tr><td><font class=text8>$now</font></td>\n";
- print "<td align=center class=page-title><font color=#0099CC>";
- print "Directory Server Replication Status</font>\n";
-
- if ($opt_u) {
- print "<br><font class=text8>(This page updates every $interval seconds)</font>\n";
- }
-
- print "</td><td align=right valign=center width=25%><font class=text8>$version";
- print "</font></td></table>\n";
-}
-
-sub print_legend
-{
- my ($nlegends) = $#colorkeys + 1;
- print "\n<center><p><font class=page-subtitle color=#0099cc>Time Lag Legend:</font><p>\n";
- print "<table cellpadding=6 cols=$nlegends width=40%>\n<tr>\n";
- my ($i, $j);
- for ($i = 0; $i < $nlegends - 1; $i++) {
- $j = $colorkeys[$i];
- print "\n<td bgcolor=$allcolors{$j}><center>within $colorkeys[$i+1] min</center></td>\n";
- }
- $j = $colorkeys[$i];
- print "\n<td bgcolor=$allcolors{$j}><center>over $colorkeys[$i] min</center></td>\n";
- print "\n<td bgcolor=red><center>server n/a</center></td>\n";
- print "</table></center>\n";
-}
-
-sub print_supplier_end
-{
- print "</table>\n";
-}
-
-# given a string in generalized time format, convert to ascii time
-sub format_z_time
-{
- my $zstr = shift;
- return "n/a" if (! $zstr);
- my ($year, $mon, $day, $hour, $min, $sec) =
- ($zstr =~ /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/);
- my $time = timegm($sec, $min, $hour, $day, ($mon-1), $year);
- ($sec, $min, $hour, $day, $mon, $year) = localtime($time);
- $mon++;
- $year += 1900;
- foreach ($sec, $min, $hour, $day, $mon) {
- $_ = "0".$_ if ($_ < 10);
- }
-
- return "$mon/$day/$year $hour:$min:$sec";
-}
diff --git a/ldap/admin/src/scripts/template-restoreconfig b/ldap/admin/src/scripts/template-restoreconfig
deleted file mode 100644
index 0a8de6a4..00000000
--- a/ldap/admin/src/scripts/template-restoreconfig
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh
-
-prefix="{{DS-ROOT}}"
-LD_LIBRARY_PATH=$prefix/{{SERVER-DIR}}:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export LD_LIBRARY_PATH
-SHLIB_PATH=$prefix/{{SERVER-DIR}}:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export SHLIB_PATH
-
-cd {{SERVERBIN-DIR}}
-conf_ldif=`ls -1t {{BAK-DIR}}/{{SERV-ID}}-*.ldif | head -1`
-if [ -z "$conf_ldif" ]
-then
- echo No configuration to restore in {{BAK-DIR}} ; exit 1
-fi
-echo Restoring $conf_ldif
-./ns-slapd ldif2db -D {{CONFIG-DIR}} -i $conf_ldif -n NetscapeRoot 2>&1
-exit $?
diff --git a/ldap/admin/src/scripts/template-saveconfig b/ldap/admin/src/scripts/template-saveconfig
deleted file mode 100644
index 9ccf8aba..00000000
--- a/ldap/admin/src/scripts/template-saveconfig
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sh
-
-prefix="{{DS-ROOT}}"
-LD_LIBRARY_PATH=$prefix/{{SERVER-DIR}}:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export LD_LIBRARY_PATH
-SHLIB_PATH=$prefix/{{SERVER-DIR}}:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export SHLIB_PATH
-
-cd {{SERVERBIN-DIR}}
-echo saving configuration ...
-conf_ldif={{BAK-DIR}}/{{SERV-ID}}-`date +%Y_%m_%d_%H%M%S`.ldif
-./ns-slapd db2ldif -N -D {{CONFIG-DIR}} -s "o=NetscapeRoot" -a $conf_ldif -n NetscapeRoot 2>&1
-if [ "$?" -ge 1 ]
-then
- echo Error occurred while saving configuration
- exit 1
-fi
-exit 0
diff --git a/ldap/admin/src/scripts/template-start-slapd b/ldap/admin/src/scripts/template-start-slapd
deleted file mode 100644
index d640cf48..00000000
--- a/ldap/admin/src/scripts/template-start-slapd
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/bin/sh
-
-prefix="{{DS-ROOT}}"
-LD_LIBRARY_PATH=$prefix{{SERVER-DIR}}:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export LD_LIBRARY_PATH
-SHLIB_PATH=$prefix{{SERVER-DIR}}:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export SHLIB_PATH
-
-# Script that starts the ns-slapd server.
-# Exit status can be:
-# 0: Server started successfully
-# 1: Server could not be started
-# 2: Server already running
-
-DS_CONFIG_DIR={{CONFIG-DIR}}
-export DS_CONFIG_DIR
-PIDFILE={{RUN-DIR}}/{{PRODUCT-NAME}}-{{SERV-ID}}.pid
-STARTPIDFILE={{RUN-DIR}}/{{PRODUCT-NAME}}-{{SERV-ID}}.startpid
-if test -f $STARTPIDFILE ; then
- PID=`cat $STARTPIDFILE`
- if kill -0 $PID > /dev/null 2>&1 ; then
- echo There is an ns-slapd process already running: $PID
- exit 2;
- else
- rm -f $STARTPIDFILE
- fi
-fi
-if test -f $PIDFILE ; then
- PID=`cat $PIDFILE`
- if kill -0 $PID > /dev/null 2>&1 ; then
- echo There is an ns-slapd running: $PID
- exit 2;
- else
- rm -f $PIDFILE
- fi
-fi
-cd {{SERVERBIN-DIR}}; ./ns-slapd -D {{CONFIG-DIR}} -i $PIDFILE -w $STARTPIDFILE "$@"
-if [ $? -ne 0 ]; then
- exit 1
-fi
-
-loop_counter=1
-# wait for 10 seconds for the start pid file to appear
-max_count=10
-while test $loop_counter -le $max_count; do
- loop_counter=`expr $loop_counter + 1`
- if test ! -f $STARTPIDFILE ; then
- sleep 1;
- else
- PID=`cat $STARTPIDFILE`
- fi
-done
-if test ! -f $STARTPIDFILE ; then
- echo Server failed to start !!! Please check errors log for problems
- exit 1
-fi
-loop_counter=1
-# wait for 10 minutes (600 times 1 seconds)
-max_count=600
-while test $loop_counter -le $max_count; do
- loop_counter=`expr $loop_counter + 1`
- if test ! -f $PIDFILE ; then
- if kill -0 $PID > /dev/null 2>&1 ; then
- sleep 1
- else
- echo Server failed to start !!! Please check errors log for problems
- exit 1
- fi
- else
- PID=`cat $PIDFILE`
- exit 0;
- fi
-done
-echo Server not running!! Failed to start ns-slapd process. Please check the errors log for problems.
-exit 1
diff --git a/ldap/admin/src/scripts/template-stop-slapd b/ldap/admin/src/scripts/template-stop-slapd
deleted file mode 100644
index cc9f9681..00000000
--- a/ldap/admin/src/scripts/template-stop-slapd
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/sh
-
-# Script that stops the ns-slapd server.
-# Exit status can be:
-# 0: Server stopped successfully
-# 1: Server could not be stopped
-# 2: Server was not running
-
-PIDFILE={{RUN-DIR}}/{{PRODUCT-NAME}}-{{SERV-ID}}.pid
-if test ! -f $PIDFILE ; then
- echo No ns-slapd PID file found. Server is probably not running
- exit 2
-fi
-PID=`cat $PIDFILE`
-# see if the server is already stopped
-kill -0 $PID > /dev/null 2>&1 || {
- echo Server not running
- if test -f $PIDFILE ; then
- rm -f $PIDFILE
- fi
- exit 2
-}
-# server is running - kill it
-kill $PID
-loop_counter=1
-# wait for 10 minutes (600 times 1 second)
-max_count=600
-while test $loop_counter -le $max_count; do
- loop_counter=`expr $loop_counter + 1`
- if kill -0 $PID > /dev/null 2>&1 ; then
- sleep 1;
- else
- if test -f $PIDFILE ; then
- rm -f $PIDFILE
- fi
- exit 0
- fi
-done
-if test -f $PIDFILE ; then
- echo Server still running!! Failed to stop the ns-slapd process: $PID. Please check the errors log for problems.
-fi
-exit 1
diff --git a/ldap/admin/src/scripts/template-suffix2instance b/ldap/admin/src/scripts/template-suffix2instance
deleted file mode 100644
index 24b3385d..00000000
--- a/ldap/admin/src/scripts/template-suffix2instance
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-prefix="{{DS-ROOT}}"
-LD_LIBRARY_PATH=$prefix/{{SERVER-DIR}}:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export LD_LIBRARY_PATH
-SHLIB_PATH=$prefix/{{SERVER-DIR}}:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export SHLIB_PATH
-
-cd {{SERVERBIN-DIR}}
-if [ $# -lt 2 ]
-then
- echo Usage: suffix2instance {-s includesuffix}*
- exit 1
-fi
-
-./ns-slapd suffix2instance -D {{CONFIG-DIR}} "$@" 2>&1
diff --git a/ldap/admin/src/scripts/template-verify-db.pl b/ldap/admin/src/scripts/template-verify-db.pl
deleted file mode 100644
index 1a41b05c..00000000
--- a/ldap/admin/src/scripts/template-verify-db.pl
+++ /dev/null
@@ -1,240 +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) 2005 Red Hat, Inc.
-# All rights reserved.
-# END COPYRIGHT BLOCK
-#
-
-sub getDbDir
-{
- (my $here) = @_;
- my @dbdirs = ();
-
- opendir(DIR, $here) or die "can't opendir $here : $!";
- while (defined($dir = readdir(DIR)))
- {
- my $thisdir;
- if ("$here" eq ".")
- {
- $thisdir = $dir;
- }
- else
- {
- $thisdir = $here . "{{SEP}}" . $dir;
- }
- if (-d $thisdir)
- {
- if (!($thisdir =~ /\./))
- {
- opendir(SUBDIR, "$thisdir") or die "can't opendir $thisdir : $!";
- while (defined($file = readdir(SUBDIR)))
- {
- if ($file eq "DBVERSION")
- {
- $#dbdirs++;
- $dbdirs[$#dbdirs] = $thisdir;
- }
- }
- closedir(SUBDIR);
- }
- }
- }
- closedir(DIR);
-
- return \@dbdirs;
-}
-
-sub getLastLogfile
-{
- (my $here) = @_;
- my $logfile = "";
-
- opendir(DIR, $here) or die "can't opendir $here : $!";
- while (defined($file = readdir(DIR)))
- {
- if ($file =~ /log./)
- {
- $logfile = $file;
- }
- }
- closedir(DIR);
-
- return \$logfile;
-}
-
-$isWin = -d '\\';
-if ($isWin) {
- $NULL = "nul";
-} else {
- $NULL = "/dev/null";
-}
-
-print("*****************************************************************\n");
-print("verify-db: This tool should only be run if recovery start fails\n" .
- "and the server is down. If you run this tool while the server is\n" .
- "running, you may get false reports of corrupted files or other\n" .
- "false errors.\n");
-print("*****************************************************************\n");
-
-# get dirs having DBVERSION
-my $dbdirs = getDbDir(".");
-my $prefix = "{{DS-ROOT}}";
-
-$ENV{'PATH'} = "$prefix/usr/bin:$prefix/usr/bin:/usr/bin:/usr/bin";
-$ENV{'LD_LIBRARY_PATH'} = ":/usr/lib";
-$ENV{'SHLIB_PATH'} = ":/usr/lib";
-
-for (my $i = 0; $i < @$dbdirs; $i++)
-{
- # run db_printlog -h <dbdir> for each <dbdir>
- print "Verify log files in $$dbdirs[$i] ... ";
- open(PRINTLOG, "db_printlog -h $$dbdirs[$i] 2>&1 1> $NULL |");
- sleep 1;
- my $haserr = 0;
- while ($l = <PRINTLOG>)
- {
- if ("$l" ne "")
- {
- if ($haserr == 0)
- {
- print "\n";
- }
- print "LOG ERROR: $l";
- $haserr++;
- }
- }
- close(PRINTLOG);
- if ($haserr == 0 && $? == 0)
- {
- print "Good\n";
- }
- else
- {
- my $logfile = getLastLogfile($$dbdirs[$i]);
- print "Log file(s) in $$dbdirs[$i] could be corrupted.\n";
- print "Please delete a log file $$logfile, and try restarting the server.\n";
- }
-}
-
-for (my $i = 0; $i < @$dbdirs; $i++)
-{
- # changelog
- opendir(DB, $$dbdirs[$i]) or die "can't opendir $$dbdirs[$i] : $!";
- while (defined($db = readdir(DB)))
- {
- if ($db =~ /\.db/)
- {
- my $thisdb = $$dbdirs[$i] . "{{SEP}}" . $db;
- print "Verify $thisdb ... ";
- open(DBVERIFY, "db_verify $thisdb 2>&1 1> $NULL |");
- sleep 1;
- my $haserr = 0;
- while ($l = <DBVERIFY>)
- {
- if ($haserr == 0)
- {
- print "\n";
- }
- if ("$l" ne "")
- {
- $haserr++;
- print "DB ERROR: $l";
- }
- }
- close(DBVERIFY);
- if ($haserr == 0 && $? == 0)
- {
- print "Good\n";
- }
- else
- {
- print "changelog file $db in $$dbdirs[$i] is corrupted.\n";
- print "Please restore your backup and recover the database.\n";
- }
- }
- }
- closedir(DB);
-
- # backend: get instance dirs under <dbdir>
- my $instdirs = getDbDir($$dbdirs[$i]);
-
- for (my $j = 0; $j < @$instdirs; $j++)
- {
- opendir(DIR, $$instdirs[$j]) or die "can't opendir $here : $!";
- while (defined($db = readdir(DIR)))
- {
- if ($db =~ /\.db/)
- {
- my $thisdb = $$instdirs[$j] . "{{SEP}}" . $db;
- print "Verify $thisdb ... ";
- open(DBVERIFY, "db_verify $thisdb 2>&1 1> $NULL |");
- sleep 1;
- my $haserr = 0;
- while ($l = <DBVERIFY>)
- {
- if ($haserr == 0)
- {
- print "\n";
- }
- if ("$l" ne "")
- {
- $haserr++;
- print "DB ERROR: $l";
- }
- }
- close(DBVERIFY);
- if ($haserr == 0 && $? == 0)
- {
- print "Good\n";
- }
- else
- {
- if ("$db" =~ /id2entry.db/)
- {
- print "Primary db file $db in $$instdirs[$j] is corrupted.\n";
- print "Please restore your backup and recover the database.\n";
- }
- else
- {
- print "Secondary index file $db in $$instdirs[$j] is corrupted.\n";
- print "Please run db2index(.pl) for reindexing.\n";
- }
- }
- }
- }
- closedir(DIR);
- }
-}
diff --git a/ldap/admin/src/scripts/template-vlvindex b/ldap/admin/src/scripts/template-vlvindex
deleted file mode 100644
index ccd8797b..00000000
--- a/ldap/admin/src/scripts/template-vlvindex
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh
-
-prefix="{{DS-ROOT}}"
-LD_LIBRARY_PATH=$prefix/{{SERVER-DIR}}:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export LD_LIBRARY_PATH
-SHLIB_PATH=$prefix/{{SERVER-DIR}}:$prefix/usr/lib/dirsec:$prefix/usr/lib:/usr/lib/dirsec
-export SHLIB_PATH
-
-cd {{SERVERBIN-DIR}}
-if [ $# -lt 4 ]
-then
- echo "Usage: vlvindex -n backend_instance | {-s includesuffix}* -T attribute"
- echo Note: either \"-n backend_instance\" or \"-s includesuffix\" are required.
- exit 1
-fi
-
-./ns-slapd db2index -D {{CONFIG-DIR}} "$@"