ldap/admin
by Richard Allen Megginson
ldap/admin/src/scripts/DSSharedLib.in | 177 +++++++++++++--------
ldap/admin/src/scripts/DSUtil.pm.in | 115 +++++++++----
ldap/admin/src/scripts/bak2db.in | 12 -
ldap/admin/src/scripts/bak2db.pl.in | 4
ldap/admin/src/scripts/cleanallruv.pl.in | 4
ldap/admin/src/scripts/db2bak.in | 13 -
ldap/admin/src/scripts/db2bak.pl.in | 6
ldap/admin/src/scripts/db2index.in | 15 -
ldap/admin/src/scripts/db2index.pl.in | 4
ldap/admin/src/scripts/db2ldif.in | 15 -
ldap/admin/src/scripts/db2ldif.pl.in | 4
ldap/admin/src/scripts/dbverify.in | 12 -
ldap/admin/src/scripts/dn2rdn.in | 13 -
ldap/admin/src/scripts/fixup-linkedattrs.pl.in | 4
ldap/admin/src/scripts/fixup-memberof.pl.in | 4
ldap/admin/src/scripts/ldif2db.in | 12 -
ldap/admin/src/scripts/ldif2db.pl.in | 4
ldap/admin/src/scripts/ldif2ldap.in | 12 -
ldap/admin/src/scripts/monitor.in | 11 -
ldap/admin/src/scripts/ns-accountstatus.pl.in | 4
ldap/admin/src/scripts/ns-activate.pl.in | 4
ldap/admin/src/scripts/ns-inactivate.pl.in | 4
ldap/admin/src/scripts/ns-newpwpolicy.pl.in | 4
ldap/admin/src/scripts/restart-dirsrv.in | 28 ---
ldap/admin/src/scripts/restoreconfig.in | 13 -
ldap/admin/src/scripts/saveconfig.in | 13 -
ldap/admin/src/scripts/schema-reload.pl.in | 4
ldap/admin/src/scripts/start-dirsrv.in | 38 +---
ldap/admin/src/scripts/stop-dirsrv.in | 33 +--
ldap/admin/src/scripts/suffix2instance.in | 12 -
ldap/admin/src/scripts/syntax-validate.pl.in | 4
ldap/admin/src/scripts/upgradedb.in | 13 -
ldap/admin/src/scripts/upgradednformat.in | 12 -
ldap/admin/src/scripts/usn-tombstone-cleanup.pl.in | 4
ldap/admin/src/scripts/verify-db.pl.in | 4
ldap/admin/src/scripts/vlvindex.in | 12 -
36 files changed, 359 insertions(+), 288 deletions(-)
New commits:
commit 6fb5b261d8a97a761b52e57bf8ccdc203c74ea8c
Author: Rich Megginson <rmeggins(a)redhat.com>
Date: Mon Apr 15 21:26:49 2013 -0600
Ticket #47299 - allow cmdline scripts to work with non-root user
https://fedorahosted.org/389/ticket/47299
Reviewed by: nhosoi (Thanks!)
Branch: master
Fix Description: Handle the case where the directory server userid is a real
user on the system, and allow that user to run the command line scripts against
that server without using sudo. I also centralized the handling of the
initconfig (/etc/sysconfig/dirsrv-*) files in DSSharedLib and DSUtil.pm.
I changed the way the scripts work - the sh scripts need the "normalized"
server id and the CONFIG_DIR (/etc/dirsrv/slapd-$servid) - we first find the
initconfig file for the given instance, then we just source it - CONFIG_DIR
is one of the settings in the file - no need to parse in sh because source
does that.
In perl, do the same thing, except have to parse the initconfig file to get
the CONFIG_DIR.
Platforms tested: RHEL6 x86_64
Flag Day: no
Doc impact: no
diff --git a/ldap/admin/src/scripts/DSSharedLib.in b/ldap/admin/src/scripts/DSSharedLib.in
index 1a66e28..8d2edc4 100644
--- a/ldap/admin/src/scripts/DSSharedLib.in
+++ b/ldap/admin/src/scripts/DSSharedLib.in
@@ -4,23 +4,45 @@ libpath_add()
LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$1
}
-#
-# get_server_id()
-#
-# First grab all the server instances
-# Then check if a server id was provided, if not, set
-# the server id if there is only one instance.
-# If a servid was provided, make sure its a valid instance name.
-#
-get_server_id()
+# pass in a string that ends in dirsrv-name or slapd-name
+# and convert it to just "name"
+# the string could be a path name or not
+# if the string did not match @package_name@-name or slapd-name it
+# will be returned as is
+# want to be able to handle weird cases like /slapd-@package_name@-foo
+# that should normalize to the strange @package_name@-foo e.g.
+# someone named the instance "@package_name@-foo"
+normalize_server_id()
{
- dir=$1
- servid=$2
- first="yes"
- inst_count=0
- instances="<none>"
- rc=0
+ echo "$1" | sed '
+# save the current line
+h
+# delete leading path components if any (i.e. basename)
+s/^.*\///;ta
+:a
+# begins with @package_name@- ; remove it and exit
+s/^@package_name@-//;tx
+# begins with slapd- ; remove it and exit
+s/^slapd-//;tx
+# no match - return original string
+g
+:x
+'
+}
+# look for all initconfig files in the given directory
+# the initconfig files are the files used in the startup scripts
+# to start each instance
+# e.g. /etc/sysconfig/dirsrv-INST
+# these scripts contain the pointer CONFIG_DIR to where the instance
+# configuration files are to be found
+# if the given directory is empty, look in @initconfigdir@
+# if not running as root, look for non-system instances in
+# $HOME/.dirsrv
+# ignore the dirsrv-admin admin server config file
+get_initconfig_files()
+{
+ dir=${1:-@initconfigdir@}
# convert
# uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),.....
# to
@@ -29,61 +51,96 @@ get_server_id()
userid=`id | awk -F'[=(]+' '{print $2}'`
if [ "$userid" -ne 0 ] ; then
# magic - see start-dirsrv, DSCreate.pm::get_initconfigdir, etc.
- dir=$HOME/.@package_name@
+ extradir=$HOME/.@package_name@
+ if [ -d $extradir ] ; then
+ extra="$extradir/@package_name@-*"
+ fi
fi
+ # setting the env var forces the use of it and nothing else
if [ -n "$INITCONFIGDIR" ] ; then
dir=$INITCONFIGDIR
+ extra=
fi
-
- # look first in user provided INITCONFIGDIR, then in the system/build location,
- # then in the users home dir - cases
- # 1. system install but running as non-root user
- # in this case, we want to use the instance from $dir - it will
- # fallback to $homedir in that case, and if that is a problem, the user will
- # just have to temporarily move $homedir/dirsrv-sysinstancename out of the way
- # while working on the system instance
- # 2. prefix/non-system install
- # in this case, we want to use $homedir - if for some reason there is a system
- # instance in $dir with the same name, the user can use INITCONFIGDIR to
- # override that and force the use of the one from $homedir
- for i in `ls $dir/@package_name@-* 2>/dev/null`
- do
- if [ $i != "$dir/@package_name@-admin" ]
- then
- inst_count=`expr $inst_count + 1`
- id=$(expr "$i" : ".*@package_name(a)-\([^)]*\).*")
- if [ $first == "yes" ]
- then
- instances=$id
- first="no"
- else
- instances=$instances", $id"
- fi
- name=$id
+ retfiles=
+ found=1
+ for file in $dir/@package_name@-* $extra ; do
+ if [ ! -r "$file" ] ; then continue ; fi
+ case "$file" in */@package_name@-admin) continue ;; esac
+ if [ -z "$retfiles" ] ; then
+ retfiles=$file
+ else
+ retfiles="$retfiles $file"
fi
+ found=0
done
+ echo $retfiles
+ return $found # 0 return means success - at least one found
+}
+
+#
+# get_init_file()
+#
+# The init file is the instance specific file under
+# the @initconfig@ directory e.g.
+# /etc/sysconfig/dirsrv-instance
+# The presence and readability of this file means this is a
+# valid instance of directory server (except @package_name@-admin)
+# The CONFIG_DIR directive in this file tells us where to
+# look for the main server config
+# First grab all the @package_name@ init files
+# Then check if a server id was provided, if not, return the
+# one found if there is only one
+# If a servid was provided, make sure there is an init file
+# for that instance
+# Return the @initconfigdir@/@package_name@-$servid file name
+#
+get_init_file()
+{
+ dir=$1
+ servid=$2
+ first="yes"
+ inst_count=0
+ instances="<none>"
+ rc=0
- if [ -z $servid ]
+ # normalize servid, if given
+ if [ -n "$servid" ]
then
- # server id not provided, check if there is only one instance
- if [ $inst_count -eq 1 ]
+ servid=`normalize_server_id $servid`
+ fi
+
+ for i in `get_initconfig_files $dir`
+ do
+ inst_count=`expr $inst_count + 1`
+ id=`normalize_server_id $i`
+ if [ -n "$servid" -a "$id" = "$servid" ]
then
- servid=$name
- else
- # multiple instances, can not set server id. Return list of instances
- servid=$instances
- rc=1;
+ # found it
+ echo $i
+ exit 0
fi
- elif [ $servid == slapd-* ]
- then
- servid=`echo "$servid" | sed -e 's/slapd-//'`
- elif [ $servid == @package_name@-* ]
- then
- servid=`echo "$servid" | sed -e 's/@package_name@-//'`
+ if [ $first == "yes" ]
+ then
+ instances=$id
+ first="no"
+ else
+ instances=$instances", $id"
+ fi
+ name=$i
+ done
+
+ if [ -n $servid ] ; then
+ # if we got here, we did not find a match
+ echo $instances
+ exit 1
fi
- if ! [ -a "$dir/@package_name@-$servid" ]
+
+ # server id not provided, check if there is only one instance
+ if [ $inst_count -eq 1 ]
then
- # invalid instance name, return the "valid" instance names
+ servid=$name
+ else
+ # multiple instances, can not set server id. Return list of instances
servid=$instances
rc=1
fi
@@ -97,9 +154,9 @@ get_server_id()
#
process_dse ()
{
- servid=$1
+ configdir=$1
pid=$2
- file="@instconfigdir(a)/slapd-$servid/dse.ldif"
+ file="$configdir/dse.ldif"
shopt -s nocasematch
OLD_IFC=$IFC
IFS=""
diff --git a/ldap/admin/src/scripts/DSUtil.pm.in b/ldap/admin/src/scripts/DSUtil.pm.in
index b69cbb5..e439ea4 100644
--- a/ldap/admin/src/scripts/DSUtil.pm.in
+++ b/ldap/admin/src/scripts/DSUtil.pm.in
@@ -1205,11 +1205,10 @@ sub libpath_add {
sub get_info {
my %info = ();
my $dir = shift;
- my $servID = shift;
$info{host} = shift;
$info{port} = shift;
$info{rootdn} = shift;
- my $dse_file = "$dir/slapd-$servID/dse.ldif";
+ my $dse_file = "$dir/dse.ldif";
my $foundcfg = "no";
my $value;
my $entry;
@@ -1277,7 +1276,7 @@ sub get_info {
}
#
-# Grab the server instance ID
+# return the normalized server id and the server config dir (contains dse.ldif)
#
sub get_server_id {
my $servid = shift;
@@ -1287,54 +1286,106 @@ sub get_server_id {
my $instances = "<none>";
my $name;
my $file;
+ my @extra = ();
+ my $extradir = "";
if (getLogin ne 'root') {
- $dir = "$ENV{HOME}/.@package_name@";
+ $extradir = "$ENV{HOME}/.@package_name@";
+ if (-d $extradir) {
+ opendir(EXTRADIR, $extradir);
+ @extra = map {$_ = "$extradir/$_"} readdir(EXTRADIR);
+ closedir(EXTRADIR);
+ }
}
if (defined $ENV{INITCONFIGDIR}) {
$dir = $ENV{INITCONFIGDIR};
+ @extra = (); # only use what was provided
+ $extradir = "";
}
-
- opendir(DIR, "$dir");
- my @files = readdir(DIR);
- foreach $file (@files){
- if($file =~ /^@package_name@-/ && $file ne "@package_name@-admin"){
- $instance_count++;
- if($file =~ /@package_name(a)-(.*)/){
- if($first eq "yes"){
- $instances=$1;
- $first = "no";
- } else {
- $instances=$instances . ", $1";
- }
- $name = $1;
- }
- }
- }
- if($servid eq ""){
- if ($instance_count == 1){
- $servid = $name;
- } else {
- print "You must supply a valid server instance identifier. Use -Z to specify instance name\n";
- print "Available instances: $instances\n";
- exit (1);
- }
+
+ # normalize the given servid
+ if (!$servid) {
+ # not given
} elsif ($servid =~ /^@package_name@-/){
# strip off "@package_name@-"
$servid =~ s/^@package_name@-//;
} elsif ($servid =~ /^slapd-/){
# strip off "slapd-"
$servid =~ s/^slapd-//;
+ } # else assume already normalized
+
+ opendir(DIR, "$dir");
+ my @files = map {$_ = "$dir/$_"} readdir(DIR);
+ closedir(DIR);
+ push @files, @extra;
+ my $found = 0;
+ foreach $file (@files){
+ next if(! -r $file); # skip unreadable files
+ # skip admin server
+ if($file =~ m,/@package_name@-([^/]+)$, && $file !~ m,/@package_name@-admin$,){
+ $name = $file;
+ my $inst = $1;
+ $instance_count++;
+ if ($servid && ($servid eq $inst)) {
+ $found = 1;
+ last;
+ }
+ if($first eq "yes"){
+ $instances=$inst;
+ $first = "no";
+ } else {
+ $instances=$instances . ", $inst";
+ }
+ }
+ }
+
+ if ($servid && !$found) { # if we got here, did not find given serverid
+ print (STDERR "Invalid server identifer: $servid\n");
+ print (STDERR "Available instances in $dir $extradir: $instances\n");
+ exit (1);
+ }
+
+ if ($instance_count == 0){
+ print "No instances found in $dir\n";
+ exit (1);
+ }
+
+ if ($instance_count > 1){
+ print "You must supply a valid server instance identifier. Use -Z to specify instance name\n";
+ print "Available instances: $instances\n";
+ exit (1);
}
- unless ( -e "$dir/@package_name@-$servid" ){
+ unless ( -e "$file" ){
print (STDERR "Invalid server identifer: $servid\n");
- print (STDERR "Available instances in $dir: $instances\n");
+ print (STDERR "Available instances in $dir $extradir: $instances\n");
+ exit (1);
+ }
+
+ # now grab the CONFIG_DIR from the file $name
+ if (open(INSTFILE, "$name")) {
+ print (STDERR "Error: could not open $name: $!");
+ exit (1);
+ }
+
+ my $confdir;
+ while (<INSTFILE>) {
+ if (/^CONFIG_DIR=/) {
+ s/^CONFIG_DIR=//;
+ s/ ; export CONFIG_DIR//;
+ $confdir = $_;
+ last;
+ }
+ }
+ close INSTFILE;
+
+ if (!$confdir) {
+ print (STDERR "Error: no CONFIG_DIR found in $name\n");
exit (1);
}
- return $servid;
+ return ($servid, $confdir);
}
#
diff --git a/ldap/admin/src/scripts/bak2db.in b/ldap/admin/src/scripts/bak2db.in
index aef7f5b..f0cede4 100755
--- a/ldap/admin/src/scripts/bak2db.in
+++ b/ldap/admin/src/scripts/bak2db.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@nss_libdir@"
libpath_add "@libdir@"
libpath_add "@pcre_libdir@"
@@ -54,16 +54,16 @@ do
esac
done
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+. $initfile
if [ 1 = `expr $archivedir : "\/"` ]
then
@@ -73,4 +73,4 @@ else
archivedir=`pwd`/$archivedir
fi
-@sbindir@/ns-slapd archive2db -D $configdir -a $archivedir $args
+@sbindir@/ns-slapd archive2db -D $CONFIG_DIR -a $archivedir $args
diff --git a/ldap/admin/src/scripts/bak2db.pl.in b/ldap/admin/src/scripts/bak2db.pl.in
index 3ecd7cb..7e76838 100644
--- a/ldap/admin/src/scripts/bak2db.pl.in
+++ b/ldap/admin/src/scripts/bak2db.pl.in
@@ -99,8 +99,8 @@ while ($i <= $#ARGV) {
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
if ($verbose == 1){
diff --git a/ldap/admin/src/scripts/cleanallruv.pl.in b/ldap/admin/src/scripts/cleanallruv.pl.in
index 0fe89b6..79b8f2b 100644
--- a/ldap/admin/src/scripts/cleanallruv.pl.in
+++ b/ldap/admin/src/scripts/cleanallruv.pl.in
@@ -108,8 +108,8 @@ while ($i <= $#ARGV)
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
if ($verbose == 1){
diff --git a/ldap/admin/src/scripts/db2bak.in b/ldap/admin/src/scripts/db2bak.in
index 79cf59a..dacd7b0 100755
--- a/ldap/admin/src/scripts/db2bak.in
+++ b/ldap/admin/src/scripts/db2bak.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@nss_libdir@"
libpath_add "@libdir@"
libpath_add "@pcre_libdir@"
@@ -55,16 +55,17 @@ do
done
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+servid=`normalize_server_id $initfile`
+. $initfile
if [ -z $bak_dir ]
then
@@ -72,4 +73,4 @@ then
fi
echo "Back up directory: $bak_dir"
-@sbindir@/ns-slapd db2archive -D $configdir -a $bak_dir $args
+@sbindir@/ns-slapd db2archive -D $CONFIG_DIR -a $bak_dir $args
diff --git a/ldap/admin/src/scripts/db2bak.pl.in b/ldap/admin/src/scripts/db2bak.pl.in
index 8e57c9d..aee8486 100644
--- a/ldap/admin/src/scripts/db2bak.pl.in
+++ b/ldap/admin/src/scripts/db2bak.pl.in
@@ -96,8 +96,8 @@ while ($i <= $#ARGV) {
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
if ($verbose == 1){
@@ -136,4 +136,4 @@ if($rc == 0){
print "Failed to add task entry \"$dn\" error ($rc)\n";
}
-exit($rc);
\ No newline at end of file
+exit($rc);
diff --git a/ldap/admin/src/scripts/db2index.in b/ldap/admin/src/scripts/db2index.in
index 6f524d8..a1321ea 100755
--- a/ldap/admin/src/scripts/db2index.in
+++ b/ldap/admin/src/scripts/db2index.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@nss_libdir@"
libpath_add "@libdir@"
libpath_add "@pcre_libdir@"
@@ -58,25 +58,26 @@ then
exit 1;
fi
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+servid=`normalize_server_id $initfile`
+. $initfile
if [ $# -eq 0 ]
then
bak_dir=@localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/bak/reindex_`date +%Y_%m_%d_%H_%M_%S`
- @sbindir@/ns-slapd upgradedb -D $configdir -a "$bak_dir"
+ @sbindir@/ns-slapd upgradedb -D $CONFIG_DIR -a "$bak_dir"
elif [ $# -lt 2 ]
then
usage
exit 1
else
- @sbindir@/ns-slapd db2index -D $configdir $args
+ @sbindir@/ns-slapd db2index -D $CONFIG_DIR $args
fi
diff --git a/ldap/admin/src/scripts/db2index.pl.in b/ldap/admin/src/scripts/db2index.pl.in
index f640f4c..ad60045 100644
--- a/ldap/admin/src/scripts/db2index.pl.in
+++ b/ldap/admin/src/scripts/db2index.pl.in
@@ -105,8 +105,8 @@ while ($i <= $#ARGV) {
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
if ($verbose){
diff --git a/ldap/admin/src/scripts/db2ldif.in b/ldap/admin/src/scripts/db2ldif.in
index 4e12d15..cca4e95 100755
--- a/ldap/admin/src/scripts/db2ldif.in
+++ b/ldap/admin/src/scripts/db2ldif.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@nss_libdir@"
libpath_add "@libdir@"
libpath_add "@pcre_libdir@"
@@ -137,16 +137,17 @@ then
exit 1
fi
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+servid=`normalize_server_id $initfile`
+. $initfile
ldif_file=`make_ldiffile $@`
rn=$?
@@ -154,7 +155,7 @@ rn=$?
echo "Exported ldif file: $ldif_file"
if [ $rn -eq 1 ]
then
- @sbindir@/ns-slapd db2ldif -D $configdir $benameopt $includeSuffix $excludeSuffix $outputFile $args
+ @sbindir@/ns-slapd db2ldif -D $CONFIG_DIR $benameopt $includeSuffix $excludeSuffix $outputFile $args
else
- @sbindir@/ns-slapd db2ldif -D $configdir $benameopt $includeSuffix $excludeSuffix $args -a $ldif_file
+ @sbindir@/ns-slapd db2ldif -D $CONFIG_DIR $benameopt $includeSuffix $excludeSuffix $args -a $ldif_file
fi
diff --git a/ldap/admin/src/scripts/db2ldif.pl.in b/ldap/admin/src/scripts/db2ldif.pl.in
index a846fd9..baece55 100644
--- a/ldap/admin/src/scripts/db2ldif.pl.in
+++ b/ldap/admin/src/scripts/db2ldif.pl.in
@@ -190,8 +190,8 @@ while ($i <= $#ARGV) {
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$ldifdir = "@localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/ldif";
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
diff --git a/ldap/admin/src/scripts/dbverify.in b/ldap/admin/src/scripts/dbverify.in
index 58c238c..6306a07 100755
--- a/ldap/admin/src/scripts/dbverify.in
+++ b/ldap/admin/src/scripts/dbverify.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@nss_libdir@"
libpath_add "@libdir@"
libpath_add "@pcre_libdir@"
@@ -44,18 +44,18 @@ do
esac
done
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+. $initfile
-@sbindir@/ns-slapd dbverify -D $configdir $args
+@sbindir@/ns-slapd dbverify -D $CONFIG_DIR $args
if [ $display_version == "yes" ]; then
exit 0
fi
diff --git a/ldap/admin/src/scripts/dn2rdn.in b/ldap/admin/src/scripts/dn2rdn.in
index 2379afe..32a70c8 100755
--- a/ldap/admin/src/scripts/dn2rdn.in
+++ b/ldap/admin/src/scripts/dn2rdn.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@nss_libdir@"
libpath_add "@libdir@"
@@ -38,20 +38,21 @@ do
esac
done
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+servid=`normalize_server_id $initfile`
+. $initfile
if [ "$archive" != "provided" ]; then
bak_dir=@localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/bak/reindex_`date +%Y_%m_%d_%H_%M_%S`
args=$args"-a $bak_dir"
fi
-@sbindir@/ns-slapd upgradedb -D $configdir -r $args
+@sbindir@/ns-slapd upgradedb -D $CONFIG_DIR -r $args
diff --git a/ldap/admin/src/scripts/fixup-linkedattrs.pl.in b/ldap/admin/src/scripts/fixup-linkedattrs.pl.in
index 93c697c..36f4dd8 100644
--- a/ldap/admin/src/scripts/fixup-linkedattrs.pl.in
+++ b/ldap/admin/src/scripts/fixup-linkedattrs.pl.in
@@ -102,8 +102,8 @@ while ($i <= $#ARGV)
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
if ($verbose == 1){
diff --git a/ldap/admin/src/scripts/fixup-memberof.pl.in b/ldap/admin/src/scripts/fixup-memberof.pl.in
index a495249..c7038f6 100644
--- a/ldap/admin/src/scripts/fixup-memberof.pl.in
+++ b/ldap/admin/src/scripts/fixup-memberof.pl.in
@@ -106,8 +106,8 @@ while ($i <= $#ARGV)
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info[9] = $protocol;
if ($verbose == 1){
diff --git a/ldap/admin/src/scripts/ldif2db.in b/ldap/admin/src/scripts/ldif2db.in
index 2db3287..ce15349 100755
--- a/ldap/admin/src/scripts/ldif2db.in
+++ b/ldap/admin/src/scripts/ldif2db.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@nss_libdir@"
libpath_add "@libdir@"
libpath_add "@pcre_libdir@"
@@ -81,16 +81,16 @@ do
esac
done
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+. $initfile
if [ $# -lt 4 ]
then
@@ -104,6 +104,6 @@ if [ $quiet -eq 0 ]; then
echo importing data ...
fi
-@sbindir@/ns-slapd ldif2db -D $configdir $args 2>&1
+@sbindir@/ns-slapd ldif2db -D $CONFIG_DIR $args 2>&1
exit $?
diff --git a/ldap/admin/src/scripts/ldif2db.pl.in b/ldap/admin/src/scripts/ldif2db.pl.in
index 68af2a4..390f739 100644
--- a/ldap/admin/src/scripts/ldif2db.pl.in
+++ b/ldap/admin/src/scripts/ldif2db.pl.in
@@ -175,8 +175,8 @@ while ($i <= $#ARGV) {
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
if ($verbose == 1){
diff --git a/ldap/admin/src/scripts/ldif2ldap.in b/ldap/admin/src/scripts/ldif2ldap.in
index 2ce1cde..874b1bb 100755
--- a/ldap/admin/src/scripts/ldif2ldap.in
+++ b/ldap/admin/src/scripts/ldif2ldap.in
@@ -1,11 +1,11 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
libpath_add "@ldapsdk_libdir@"
libpath_add "@libdir@"
libpath_add "@nss_libdir@"
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
export LD_LIBRARY_PATH
SHLIB_PATH=$LD_LIBRARY_PATH
@@ -46,16 +46,18 @@ then
exit 1
fi
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-process_dse $servid $$
+. $initfile
+
+process_dse $CONFIG_DIR $$
file="/tmp/DSSharedLib.$$"
port=$(grep -i 'nsslapd-port' $file | awk '{print $2}' )
host=$(grep -i 'nsslapd-localhost' $file | awk '{print $2}' )
diff --git a/ldap/admin/src/scripts/monitor.in b/ldap/admin/src/scripts/monitor.in
index abe0366..7b2058b 100755
--- a/ldap/admin/src/scripts/monitor.in
+++ b/ldap/admin/src/scripts/monitor.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@ldapsdk_libdir@"
libpath_add "@libdir@"
libpath_add "@nss_libdir@"
@@ -40,12 +40,12 @@ do
esac
done
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
@@ -54,8 +54,9 @@ then
MDN="cn=monitor"
fi
+. $initfile
-process_dse $servid $$
+process_dse $CONFIG_DIR $$
file="/tmp/DSSharedLib.$$"
port=$(grep -i 'nsslapd-port' $file | awk '{print $2}' )
host=$(grep -i 'nsslapd-localhost' $file | awk '{print $2}' )
diff --git a/ldap/admin/src/scripts/ns-accountstatus.pl.in b/ldap/admin/src/scripts/ns-accountstatus.pl.in
index 7e492f3..a4234f7 100644
--- a/ldap/admin/src/scripts/ns-accountstatus.pl.in
+++ b/ldap/admin/src/scripts/ns-accountstatus.pl.in
@@ -413,8 +413,8 @@ while( $arg = shift){
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($rootpw, $pwfile);
$info{protocol} = $protocol;
$info{args} = "-c -a";
diff --git a/ldap/admin/src/scripts/ns-activate.pl.in b/ldap/admin/src/scripts/ns-activate.pl.in
index 7497caf..985f13f 100644
--- a/ldap/admin/src/scripts/ns-activate.pl.in
+++ b/ldap/admin/src/scripts/ns-activate.pl.in
@@ -413,8 +413,8 @@ while( $arg = shift)
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($rootpw, $pwfile);
$info{protocol} = $protocol;
$info{args} = "-c";
diff --git a/ldap/admin/src/scripts/ns-inactivate.pl.in b/ldap/admin/src/scripts/ns-inactivate.pl.in
index 6340324..c92f0ec 100644
--- a/ldap/admin/src/scripts/ns-inactivate.pl.in
+++ b/ldap/admin/src/scripts/ns-inactivate.pl.in
@@ -413,8 +413,8 @@ while( $arg = shift)
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($rootpw, $pwfile);
$info{protocol} = $protocol;
$info{args} = "-c";
diff --git a/ldap/admin/src/scripts/ns-newpwpolicy.pl.in b/ldap/admin/src/scripts/ns-newpwpolicy.pl.in
index 001d052..cf6500c 100755
--- a/ldap/admin/src/scripts/ns-newpwpolicy.pl.in
+++ b/ldap/admin/src/scripts/ns-newpwpolicy.pl.in
@@ -97,8 +97,8 @@ sub usage {
{
usage() if (!getopts('vD:w:j:p:P:h:U:S:Z:'));
- $opt_Z = DSUtil::get_server_id($opt_Z, "@initconfigdir@");
- %info = DSUtil::get_info("@instconfigdir@", $opt_Z, $opt_h, $opt_p, $opt_D);
+ ($opt_Z, $confdir) = DSUtil::get_server_id($opt_Z, "@initconfigdir@");
+ %info = DSUtil::get_info($confdir, $opt_h, $opt_p, $opt_D);
$info{rootdnpw} = $opt_w;
$info{protocol} = $opt_P;
if ($opt_j ne ""){
diff --git a/ldap/admin/src/scripts/restart-dirsrv.in b/ldap/admin/src/scripts/restart-dirsrv.in
index d782124..130e06e 100644
--- a/ldap/admin/src/scripts/restart-dirsrv.in
+++ b/ldap/admin/src/scripts/restart-dirsrv.in
@@ -7,6 +7,8 @@
# 2: Server started successfully (was not running)
# 3: Server could not be stopped
+source @datadir@/@package_name@/data/DSSharedLib
+
restart_instance() {
SERV_ID=$1
@@ -37,33 +39,15 @@ done
shift $(($OPTIND-1))
if [ "$initconfig_dir" = "" ]; then
- # convert
- # uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),.....
- # to
- # 0
- # this is the only portable, secure way to determine the id number
- userid=`id | awk -F'[=(]+' '{print $2}'`
- if [ "$userid" -eq 0 ] ; then
- initconfig_dir=@initconfigdir@
- else
- initconfig_dir=$HOME/.@package_name@
- fi
+ initconfig_dir=@initconfigdir@
fi
if [ "$#" -eq 0 ]; then
# We're restarting all instances.
ret=0
- for i in $initconfig_dir/@package_name@-*; do
- if [ ! -f "$i" ] ; then
- echo No instances found in $initconfig_dir
- exit 1
- fi
- regex=s,$initconfig_dir/@package_name@-,,g
- inst=`echo $i | sed -e $regex`
- # check for admin server ID used by 389-admin pkg, and ignore it
- if [ "$inst" = "admin" ]; then
- continue
- fi
+ initfiles=`get_initconfig_files $initconfig_dir` || { echo No instances found in $initconfig_dir ; exit 1 ; }
+ for i in $initfiles; do
+ inst=`normalize_server_id $i`
echo Restarting instance \"$inst\"
restart_instance $inst
rv=$?
diff --git a/ldap/admin/src/scripts/restoreconfig.in b/ldap/admin/src/scripts/restoreconfig.in
index 929f96f..9bb1acf 100755
--- a/ldap/admin/src/scripts/restoreconfig.in
+++ b/ldap/admin/src/scripts/restoreconfig.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@nss_libdir@"
libpath_add "@libdir@"
libpath_add "@pcre_libdir@"
@@ -30,20 +30,23 @@ do
esac
done
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
+servid=`normalize_server_id $initfile`
+. $initfile
+
conf_ldif=`ls -1t @localstatedir@/lib/@PACKAGE_NAME(a)/slapd-$servid/bak/$servid-*.ldif 2>/dev/null | head -1 `
if [ -z "$conf_ldif" ]
then
echo No configuration to restore in @localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/bak/ ; exit 1
fi
echo Restoring $conf_ldif...
-@sbindir@/ns-slapd ldif2db -D $configdir -i $conf_ldif -n NetscapeRoot 2>&1
+@sbindir@/ns-slapd ldif2db -D $CONFIG_DIR -i $conf_ldif -n NetscapeRoot 2>&1
exit $?
diff --git a/ldap/admin/src/scripts/saveconfig.in b/ldap/admin/src/scripts/saveconfig.in
index 1fa16ff..65d80f3 100755
--- a/ldap/admin/src/scripts/saveconfig.in
+++ b/ldap/admin/src/scripts/saveconfig.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@libdir@"
libpath_add "@nss_libdir@"
libpath_add "@pcre_libdir@"
@@ -30,20 +30,21 @@ do
esac
done
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+servid=`normalize_server_id $initfile`
+. $initfile
echo saving configuration...
conf_ldif=@localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/bak/$servid-`date +%Y_%m_%d_%H%M%S`.ldif
-@sbindir@/ns-slapd db2ldif -N -D $configdir -s "o=NetscapeRoot" -a $conf_ldif -n NetscapeRoot 2>&1
+@sbindir@/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
diff --git a/ldap/admin/src/scripts/schema-reload.pl.in b/ldap/admin/src/scripts/schema-reload.pl.in
index f46324f..f46bc43 100644
--- a/ldap/admin/src/scripts/schema-reload.pl.in
+++ b/ldap/admin/src/scripts/schema-reload.pl.in
@@ -101,8 +101,8 @@ while ($i <= $#ARGV)
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
if ($verbose == 1){
diff --git a/ldap/admin/src/scripts/start-dirsrv.in b/ldap/admin/src/scripts/start-dirsrv.in
index 2173b67..a163cef 100755
--- a/ldap/admin/src/scripts/start-dirsrv.in
+++ b/ldap/admin/src/scripts/start-dirsrv.in
@@ -6,10 +6,7 @@
# 1: Server could not be started
# 2: Server already running
-libpath_add() {
- [ -z "$1" ] && return
- LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$1
-}
+source @datadir@/@package_name@/data/DSSharedLib
# Starts a single instance
start_instance() {
@@ -18,9 +15,11 @@ start_instance() {
SERV_ID=$1
shift
+ initfile=`get_init_file $initconfig_dir $SERV_ID` || { echo Instance $SERV_ID not found. ; return 1 ; }
+
# source env. for this instance
- if [ -f $initconfig_dir/@package_name@-$SERV_ID ] ; then
- . $initconfig_dir/@package_name@-$SERV_ID
+ if [ -f $initfile ] ; then
+ . $initfile
else
echo Instance $SERV_ID not found.
return 1
@@ -115,33 +114,16 @@ done
shift $(($OPTIND-1))
if [ "$initconfig_dir" = "" ]; then
- # convert
- # uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),.....
- # to
- # 0
- # this is the only portable, secure way to determine the id number
- userid=`id | awk -F'[=(]+' '{print $2}'`
- if [ "$userid" -eq 0 ] ; then
- initconfig_dir=@initconfigdir@
- else
- initconfig_dir=$HOME/.@package_name@
- fi
+ initconfig_dir=@initconfigdir@
fi
+found=0
if [ "$#" -eq 0 ]; then
# We're starting all instances.
ret=0
- for i in $initconfig_dir/@package_name@-*; do
- if [ ! -f "$i" ] ; then
- echo No instances found in $initconfig_dir
- exit 1
- fi
- regex=s,$initconfig_dir/@package_name@-,,g
- inst=`echo $i | sed -e $regex`
- # check for admin server ID used by 389-admin pkg, and ignore it
- if [ "$inst" = "admin" ]; then
- continue
- fi
+ initfiles=`get_initconfig_files $initconfig_dir` || { echo No instances found in $initconfig_dir ; exit 1 ; }
+ for i in $initfiles; do
+ inst=`normalize_server_id $i`
echo Starting instance \"$inst\"
start_instance $inst
rv=$?
diff --git a/ldap/admin/src/scripts/stop-dirsrv.in b/ldap/admin/src/scripts/stop-dirsrv.in
index 708c277..bc38134 100755
--- a/ldap/admin/src/scripts/stop-dirsrv.in
+++ b/ldap/admin/src/scripts/stop-dirsrv.in
@@ -6,17 +6,16 @@
# 1: Server could not be stopped
# 2: Server was not running
-libpath_add() {
- [ -z "$1" ] && return
- LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$1
-}
+source @datadir@/@package_name@/data/DSSharedLib
stop_instance() {
SERV_ID=$1
+ initfile=`get_init_file $initconfig_dir $SERV_ID` || { echo Instance $SERV_ID not found. ; return 1 ; }
+
# source env. for this instance
- if [ -f $initconfig_dir/@package_name@-$SERV_ID ] ; then
- . $initconfig_dir/@package_name@-$SERV_ID
+ if [ -f $initfile ] ; then
+ . $initfile
else
echo Instance $SERV_ID not found.
return 1
@@ -67,33 +66,19 @@ done
shift $(($OPTIND-1))
if [ "$initconfig_dir" = "" ]; then
- # convert
- # uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),.....
- # to
- # 0
- # this is the only portable, secure way to determine the id number
- userid=`id | awk -F'[=(]+' '{print $2}'`
- if [ "$userid" -eq 0 ] ; then
- initconfig_dir=@initconfigdir@
- else
- initconfig_dir=$HOME/.@package_name@
- fi
+ initconfig_dir=@initconfigdir@
fi
if [ "$#" -eq 0 ]; then
# We're stopping all instances.
ret=0
- for i in $initconfig_dir/@package_name@-*; do
+ initfiles=`get_initconfig_files $initconfig_dir` || { echo No instances found in $initconfig_dir ; exit 1 ; }
+ for i in $initfiles; do
if [ ! -f "$i" ] ; then
echo No instances found in $initconfig_dir
exit 1
fi
- regex=s,$initconfig_dir/@package_name@-,,g
- inst=`echo $i | sed -e $regex`
- # check for admin server ID used by 389-admin pkg, and ignore it
- if [ "$inst" = "admin" ]; then
- continue
- fi
+ inst=`normalize_server_id $i`
echo Stopping instance \"$inst\"
stop_instance $inst
rv=$?
diff --git a/ldap/admin/src/scripts/suffix2instance.in b/ldap/admin/src/scripts/suffix2instance.in
index 528f28e..e2f73c3 100755
--- a/ldap/admin/src/scripts/suffix2instance.in
+++ b/ldap/admin/src/scripts/suffix2instance.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@libdir@"
libpath_add "@nss_libdir@"
libpath_add "@pcre_libdir@"
@@ -38,16 +38,16 @@ then
exit 1
fi
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+. $initfile
if [ $# -lt 2 ]
then
@@ -55,4 +55,4 @@ then
exit 1
fi
-@sbindir@/ns-slapd suffix2instance -D $configdir $args 2>&1
+@sbindir@/ns-slapd suffix2instance -D $CONFIG_DIR $args 2>&1
diff --git a/ldap/admin/src/scripts/syntax-validate.pl.in b/ldap/admin/src/scripts/syntax-validate.pl.in
index 2e261c6..5ceaada 100644
--- a/ldap/admin/src/scripts/syntax-validate.pl.in
+++ b/ldap/admin/src/scripts/syntax-validate.pl.in
@@ -108,8 +108,8 @@ while ($i <= $#ARGV)
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
if ($verbose == 1){
diff --git a/ldap/admin/src/scripts/upgradedb.in b/ldap/admin/src/scripts/upgradedb.in
index b7d36f3..211bdce 100755
--- a/ldap/admin/src/scripts/upgradedb.in
+++ b/ldap/admin/src/scripts/upgradedb.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@libdir@"
libpath_add "@nss_libdir@"
libpath_add "@pcre_libdir@"
@@ -38,15 +38,16 @@ do
esac
done
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+servid=`normalize_server_id $initfile`
+. $initfile
if [ "$archive_provided" != "yes" ]
then
@@ -55,4 +56,4 @@ then
fi
echo upgrade index files ...
-@sbindir@/ns-slapd upgradedb -D $configdir $args
+@sbindir@/ns-slapd upgradedb -D $CONFIG_DIR $args
diff --git a/ldap/admin/src/scripts/upgradednformat.in b/ldap/admin/src/scripts/upgradednformat.in
index 560db96..e9d8cab 100755
--- a/ldap/admin/src/scripts/upgradednformat.in
+++ b/ldap/admin/src/scripts/upgradednformat.in
@@ -1,6 +1,6 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
# upgradednformat -- upgrade DN format to the new style (RFC 4514)
# Usgae: upgradednformat [-N] -n backend_instance -a db_instance_directory
@@ -10,7 +10,7 @@ source @datadir@/dirsrv/data/DSSharedLib
# -a db_instance_directory -- full path to the db instance dir
# e.g., /var/lib/dirsrv/slapd-ID/db/userRoot
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@nss_libdir@"
libpath_add "@libdir@"
libpath_add "@pcre_libdir@"
@@ -54,18 +54,18 @@ if [ "$be" = "" ] || [ "$dir" = "" ]; then
exit 1
fi
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+. $initfile
-@sbindir@/ns-slapd upgradednformat -D $configdir $args
+@sbindir@/ns-slapd upgradednformat -D $CONFIG_DIR $args
rc=$?
exit $rc
diff --git a/ldap/admin/src/scripts/usn-tombstone-cleanup.pl.in b/ldap/admin/src/scripts/usn-tombstone-cleanup.pl.in
index d9a876d..98e962f 100644
--- a/ldap/admin/src/scripts/usn-tombstone-cleanup.pl.in
+++ b/ldap/admin/src/scripts/usn-tombstone-cleanup.pl.in
@@ -109,8 +109,8 @@ while ($i <= $#ARGV)
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
if ($verbose == 1){
diff --git a/ldap/admin/src/scripts/verify-db.pl.in b/ldap/admin/src/scripts/verify-db.pl.in
index 1bf5fb5..b182f42 100644
--- a/ldap/admin/src/scripts/verify-db.pl.in
+++ b/ldap/admin/src/scripts/verify-db.pl.in
@@ -43,7 +43,7 @@ use DSUtil;
DSUtil::libpath_add("@db_libdir@");
DSUtil::libpath_add("@libdir@");
-$ENV{'PATH'} = "@libdir@/dirsrv/slapd-$servid:@db_bindir@:/usr/bin:/";
+$ENV{'PATH'} = "@libdir@/@package_name@/slapd-$servid:@db_bindir@:/usr/bin:/";
$ENV{'SHLIB_PATH'} = "$ENV{'LD_LIBRARY_PATH'}";
my $i = 0;
@@ -167,7 +167,7 @@ while ($i <= $#ARGV) {
$i++;
}
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
+($servid, $notused_configdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
print("*****************************************************************\n");
print("verify-db: This tool should only be run if recovery start fails\n" .
diff --git a/ldap/admin/src/scripts/vlvindex.in b/ldap/admin/src/scripts/vlvindex.in
index a776581..0b46b27 100755
--- a/ldap/admin/src/scripts/vlvindex.in
+++ b/ldap/admin/src/scripts/vlvindex.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@libdir@"
libpath_add "@nss_libdir@"
libpath_add "@pcre_libdir@"
@@ -44,16 +44,16 @@ do
esac
done
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+. $initfile
if [ $# -lt 4 ]
then
@@ -61,4 +61,4 @@ then
exit 1
fi
-@sbindir@/ns-slapd db2index -D $configdir $args
+@sbindir@/ns-slapd db2index -D $CONFIG_DIR $args
10 years, 11 months
Branch '389-ds-base-1.3.1' - ldap/admin
by Richard Allen Megginson
ldap/admin/src/scripts/DSSharedLib.in | 177 +++++++++++++--------
ldap/admin/src/scripts/DSUtil.pm.in | 115 +++++++++----
ldap/admin/src/scripts/bak2db.in | 12 -
ldap/admin/src/scripts/bak2db.pl.in | 4
ldap/admin/src/scripts/cleanallruv.pl.in | 4
ldap/admin/src/scripts/db2bak.in | 13 -
ldap/admin/src/scripts/db2bak.pl.in | 6
ldap/admin/src/scripts/db2index.in | 15 -
ldap/admin/src/scripts/db2index.pl.in | 4
ldap/admin/src/scripts/db2ldif.in | 15 -
ldap/admin/src/scripts/db2ldif.pl.in | 4
ldap/admin/src/scripts/dbverify.in | 12 -
ldap/admin/src/scripts/dn2rdn.in | 13 -
ldap/admin/src/scripts/fixup-linkedattrs.pl.in | 4
ldap/admin/src/scripts/fixup-memberof.pl.in | 4
ldap/admin/src/scripts/ldif2db.in | 12 -
ldap/admin/src/scripts/ldif2db.pl.in | 4
ldap/admin/src/scripts/ldif2ldap.in | 12 -
ldap/admin/src/scripts/monitor.in | 11 -
ldap/admin/src/scripts/ns-accountstatus.pl.in | 4
ldap/admin/src/scripts/ns-activate.pl.in | 4
ldap/admin/src/scripts/ns-inactivate.pl.in | 4
ldap/admin/src/scripts/ns-newpwpolicy.pl.in | 4
ldap/admin/src/scripts/restart-dirsrv.in | 28 ---
ldap/admin/src/scripts/restoreconfig.in | 13 -
ldap/admin/src/scripts/saveconfig.in | 13 -
ldap/admin/src/scripts/schema-reload.pl.in | 4
ldap/admin/src/scripts/start-dirsrv.in | 38 +---
ldap/admin/src/scripts/stop-dirsrv.in | 33 +--
ldap/admin/src/scripts/suffix2instance.in | 12 -
ldap/admin/src/scripts/syntax-validate.pl.in | 4
ldap/admin/src/scripts/upgradedb.in | 13 -
ldap/admin/src/scripts/upgradednformat.in | 12 -
ldap/admin/src/scripts/usn-tombstone-cleanup.pl.in | 4
ldap/admin/src/scripts/verify-db.pl.in | 4
ldap/admin/src/scripts/vlvindex.in | 12 -
36 files changed, 359 insertions(+), 288 deletions(-)
New commits:
commit 5aba964b4574c42b3deb0272be3a52c881cdf95c
Author: Rich Megginson <rmeggins(a)redhat.com>
Date: Mon Apr 15 21:26:49 2013 -0600
Ticket #47299 - allow cmdline scripts to work with non-root user
https://fedorahosted.org/389/ticket/47299
Reviewed by: nhosoi (Thanks!)
Branch: 389-ds-base-1.3.1
Fix Description: Handle the case where the directory server userid is a real
user on the system, and allow that user to run the command line scripts against
that server without using sudo. I also centralized the handling of the
initconfig (/etc/sysconfig/dirsrv-*) files in DSSharedLib and DSUtil.pm.
I changed the way the scripts work - the sh scripts need the "normalized"
server id and the CONFIG_DIR (/etc/dirsrv/slapd-$servid) - we first find the
initconfig file for the given instance, then we just source it - CONFIG_DIR
is one of the settings in the file - no need to parse in sh because source
does that.
In perl, do the same thing, except have to parse the initconfig file to get
the CONFIG_DIR.
Platforms tested: RHEL6 x86_64
Flag Day: no
Doc impact: no
(cherry picked from commit 6fb5b261d8a97a761b52e57bf8ccdc203c74ea8c)
diff --git a/ldap/admin/src/scripts/DSSharedLib.in b/ldap/admin/src/scripts/DSSharedLib.in
index 1a66e28..8d2edc4 100644
--- a/ldap/admin/src/scripts/DSSharedLib.in
+++ b/ldap/admin/src/scripts/DSSharedLib.in
@@ -4,23 +4,45 @@ libpath_add()
LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$1
}
-#
-# get_server_id()
-#
-# First grab all the server instances
-# Then check if a server id was provided, if not, set
-# the server id if there is only one instance.
-# If a servid was provided, make sure its a valid instance name.
-#
-get_server_id()
+# pass in a string that ends in dirsrv-name or slapd-name
+# and convert it to just "name"
+# the string could be a path name or not
+# if the string did not match @package_name@-name or slapd-name it
+# will be returned as is
+# want to be able to handle weird cases like /slapd-@package_name@-foo
+# that should normalize to the strange @package_name@-foo e.g.
+# someone named the instance "@package_name@-foo"
+normalize_server_id()
{
- dir=$1
- servid=$2
- first="yes"
- inst_count=0
- instances="<none>"
- rc=0
+ echo "$1" | sed '
+# save the current line
+h
+# delete leading path components if any (i.e. basename)
+s/^.*\///;ta
+:a
+# begins with @package_name@- ; remove it and exit
+s/^@package_name@-//;tx
+# begins with slapd- ; remove it and exit
+s/^slapd-//;tx
+# no match - return original string
+g
+:x
+'
+}
+# look for all initconfig files in the given directory
+# the initconfig files are the files used in the startup scripts
+# to start each instance
+# e.g. /etc/sysconfig/dirsrv-INST
+# these scripts contain the pointer CONFIG_DIR to where the instance
+# configuration files are to be found
+# if the given directory is empty, look in @initconfigdir@
+# if not running as root, look for non-system instances in
+# $HOME/.dirsrv
+# ignore the dirsrv-admin admin server config file
+get_initconfig_files()
+{
+ dir=${1:-@initconfigdir@}
# convert
# uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),.....
# to
@@ -29,61 +51,96 @@ get_server_id()
userid=`id | awk -F'[=(]+' '{print $2}'`
if [ "$userid" -ne 0 ] ; then
# magic - see start-dirsrv, DSCreate.pm::get_initconfigdir, etc.
- dir=$HOME/.@package_name@
+ extradir=$HOME/.@package_name@
+ if [ -d $extradir ] ; then
+ extra="$extradir/@package_name@-*"
+ fi
fi
+ # setting the env var forces the use of it and nothing else
if [ -n "$INITCONFIGDIR" ] ; then
dir=$INITCONFIGDIR
+ extra=
fi
-
- # look first in user provided INITCONFIGDIR, then in the system/build location,
- # then in the users home dir - cases
- # 1. system install but running as non-root user
- # in this case, we want to use the instance from $dir - it will
- # fallback to $homedir in that case, and if that is a problem, the user will
- # just have to temporarily move $homedir/dirsrv-sysinstancename out of the way
- # while working on the system instance
- # 2. prefix/non-system install
- # in this case, we want to use $homedir - if for some reason there is a system
- # instance in $dir with the same name, the user can use INITCONFIGDIR to
- # override that and force the use of the one from $homedir
- for i in `ls $dir/@package_name@-* 2>/dev/null`
- do
- if [ $i != "$dir/@package_name@-admin" ]
- then
- inst_count=`expr $inst_count + 1`
- id=$(expr "$i" : ".*@package_name(a)-\([^)]*\).*")
- if [ $first == "yes" ]
- then
- instances=$id
- first="no"
- else
- instances=$instances", $id"
- fi
- name=$id
+ retfiles=
+ found=1
+ for file in $dir/@package_name@-* $extra ; do
+ if [ ! -r "$file" ] ; then continue ; fi
+ case "$file" in */@package_name@-admin) continue ;; esac
+ if [ -z "$retfiles" ] ; then
+ retfiles=$file
+ else
+ retfiles="$retfiles $file"
fi
+ found=0
done
+ echo $retfiles
+ return $found # 0 return means success - at least one found
+}
+
+#
+# get_init_file()
+#
+# The init file is the instance specific file under
+# the @initconfig@ directory e.g.
+# /etc/sysconfig/dirsrv-instance
+# The presence and readability of this file means this is a
+# valid instance of directory server (except @package_name@-admin)
+# The CONFIG_DIR directive in this file tells us where to
+# look for the main server config
+# First grab all the @package_name@ init files
+# Then check if a server id was provided, if not, return the
+# one found if there is only one
+# If a servid was provided, make sure there is an init file
+# for that instance
+# Return the @initconfigdir@/@package_name@-$servid file name
+#
+get_init_file()
+{
+ dir=$1
+ servid=$2
+ first="yes"
+ inst_count=0
+ instances="<none>"
+ rc=0
- if [ -z $servid ]
+ # normalize servid, if given
+ if [ -n "$servid" ]
then
- # server id not provided, check if there is only one instance
- if [ $inst_count -eq 1 ]
+ servid=`normalize_server_id $servid`
+ fi
+
+ for i in `get_initconfig_files $dir`
+ do
+ inst_count=`expr $inst_count + 1`
+ id=`normalize_server_id $i`
+ if [ -n "$servid" -a "$id" = "$servid" ]
then
- servid=$name
- else
- # multiple instances, can not set server id. Return list of instances
- servid=$instances
- rc=1;
+ # found it
+ echo $i
+ exit 0
fi
- elif [ $servid == slapd-* ]
- then
- servid=`echo "$servid" | sed -e 's/slapd-//'`
- elif [ $servid == @package_name@-* ]
- then
- servid=`echo "$servid" | sed -e 's/@package_name@-//'`
+ if [ $first == "yes" ]
+ then
+ instances=$id
+ first="no"
+ else
+ instances=$instances", $id"
+ fi
+ name=$i
+ done
+
+ if [ -n $servid ] ; then
+ # if we got here, we did not find a match
+ echo $instances
+ exit 1
fi
- if ! [ -a "$dir/@package_name@-$servid" ]
+
+ # server id not provided, check if there is only one instance
+ if [ $inst_count -eq 1 ]
then
- # invalid instance name, return the "valid" instance names
+ servid=$name
+ else
+ # multiple instances, can not set server id. Return list of instances
servid=$instances
rc=1
fi
@@ -97,9 +154,9 @@ get_server_id()
#
process_dse ()
{
- servid=$1
+ configdir=$1
pid=$2
- file="@instconfigdir(a)/slapd-$servid/dse.ldif"
+ file="$configdir/dse.ldif"
shopt -s nocasematch
OLD_IFC=$IFC
IFS=""
diff --git a/ldap/admin/src/scripts/DSUtil.pm.in b/ldap/admin/src/scripts/DSUtil.pm.in
index b69cbb5..e439ea4 100644
--- a/ldap/admin/src/scripts/DSUtil.pm.in
+++ b/ldap/admin/src/scripts/DSUtil.pm.in
@@ -1205,11 +1205,10 @@ sub libpath_add {
sub get_info {
my %info = ();
my $dir = shift;
- my $servID = shift;
$info{host} = shift;
$info{port} = shift;
$info{rootdn} = shift;
- my $dse_file = "$dir/slapd-$servID/dse.ldif";
+ my $dse_file = "$dir/dse.ldif";
my $foundcfg = "no";
my $value;
my $entry;
@@ -1277,7 +1276,7 @@ sub get_info {
}
#
-# Grab the server instance ID
+# return the normalized server id and the server config dir (contains dse.ldif)
#
sub get_server_id {
my $servid = shift;
@@ -1287,54 +1286,106 @@ sub get_server_id {
my $instances = "<none>";
my $name;
my $file;
+ my @extra = ();
+ my $extradir = "";
if (getLogin ne 'root') {
- $dir = "$ENV{HOME}/.@package_name@";
+ $extradir = "$ENV{HOME}/.@package_name@";
+ if (-d $extradir) {
+ opendir(EXTRADIR, $extradir);
+ @extra = map {$_ = "$extradir/$_"} readdir(EXTRADIR);
+ closedir(EXTRADIR);
+ }
}
if (defined $ENV{INITCONFIGDIR}) {
$dir = $ENV{INITCONFIGDIR};
+ @extra = (); # only use what was provided
+ $extradir = "";
}
-
- opendir(DIR, "$dir");
- my @files = readdir(DIR);
- foreach $file (@files){
- if($file =~ /^@package_name@-/ && $file ne "@package_name@-admin"){
- $instance_count++;
- if($file =~ /@package_name(a)-(.*)/){
- if($first eq "yes"){
- $instances=$1;
- $first = "no";
- } else {
- $instances=$instances . ", $1";
- }
- $name = $1;
- }
- }
- }
- if($servid eq ""){
- if ($instance_count == 1){
- $servid = $name;
- } else {
- print "You must supply a valid server instance identifier. Use -Z to specify instance name\n";
- print "Available instances: $instances\n";
- exit (1);
- }
+
+ # normalize the given servid
+ if (!$servid) {
+ # not given
} elsif ($servid =~ /^@package_name@-/){
# strip off "@package_name@-"
$servid =~ s/^@package_name@-//;
} elsif ($servid =~ /^slapd-/){
# strip off "slapd-"
$servid =~ s/^slapd-//;
+ } # else assume already normalized
+
+ opendir(DIR, "$dir");
+ my @files = map {$_ = "$dir/$_"} readdir(DIR);
+ closedir(DIR);
+ push @files, @extra;
+ my $found = 0;
+ foreach $file (@files){
+ next if(! -r $file); # skip unreadable files
+ # skip admin server
+ if($file =~ m,/@package_name@-([^/]+)$, && $file !~ m,/@package_name@-admin$,){
+ $name = $file;
+ my $inst = $1;
+ $instance_count++;
+ if ($servid && ($servid eq $inst)) {
+ $found = 1;
+ last;
+ }
+ if($first eq "yes"){
+ $instances=$inst;
+ $first = "no";
+ } else {
+ $instances=$instances . ", $inst";
+ }
+ }
+ }
+
+ if ($servid && !$found) { # if we got here, did not find given serverid
+ print (STDERR "Invalid server identifer: $servid\n");
+ print (STDERR "Available instances in $dir $extradir: $instances\n");
+ exit (1);
+ }
+
+ if ($instance_count == 0){
+ print "No instances found in $dir\n";
+ exit (1);
+ }
+
+ if ($instance_count > 1){
+ print "You must supply a valid server instance identifier. Use -Z to specify instance name\n";
+ print "Available instances: $instances\n";
+ exit (1);
}
- unless ( -e "$dir/@package_name@-$servid" ){
+ unless ( -e "$file" ){
print (STDERR "Invalid server identifer: $servid\n");
- print (STDERR "Available instances in $dir: $instances\n");
+ print (STDERR "Available instances in $dir $extradir: $instances\n");
+ exit (1);
+ }
+
+ # now grab the CONFIG_DIR from the file $name
+ if (open(INSTFILE, "$name")) {
+ print (STDERR "Error: could not open $name: $!");
+ exit (1);
+ }
+
+ my $confdir;
+ while (<INSTFILE>) {
+ if (/^CONFIG_DIR=/) {
+ s/^CONFIG_DIR=//;
+ s/ ; export CONFIG_DIR//;
+ $confdir = $_;
+ last;
+ }
+ }
+ close INSTFILE;
+
+ if (!$confdir) {
+ print (STDERR "Error: no CONFIG_DIR found in $name\n");
exit (1);
}
- return $servid;
+ return ($servid, $confdir);
}
#
diff --git a/ldap/admin/src/scripts/bak2db.in b/ldap/admin/src/scripts/bak2db.in
index aef7f5b..f0cede4 100755
--- a/ldap/admin/src/scripts/bak2db.in
+++ b/ldap/admin/src/scripts/bak2db.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@nss_libdir@"
libpath_add "@libdir@"
libpath_add "@pcre_libdir@"
@@ -54,16 +54,16 @@ do
esac
done
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+. $initfile
if [ 1 = `expr $archivedir : "\/"` ]
then
@@ -73,4 +73,4 @@ else
archivedir=`pwd`/$archivedir
fi
-@sbindir@/ns-slapd archive2db -D $configdir -a $archivedir $args
+@sbindir@/ns-slapd archive2db -D $CONFIG_DIR -a $archivedir $args
diff --git a/ldap/admin/src/scripts/bak2db.pl.in b/ldap/admin/src/scripts/bak2db.pl.in
index 3ecd7cb..7e76838 100644
--- a/ldap/admin/src/scripts/bak2db.pl.in
+++ b/ldap/admin/src/scripts/bak2db.pl.in
@@ -99,8 +99,8 @@ while ($i <= $#ARGV) {
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
if ($verbose == 1){
diff --git a/ldap/admin/src/scripts/cleanallruv.pl.in b/ldap/admin/src/scripts/cleanallruv.pl.in
index 0fe89b6..79b8f2b 100644
--- a/ldap/admin/src/scripts/cleanallruv.pl.in
+++ b/ldap/admin/src/scripts/cleanallruv.pl.in
@@ -108,8 +108,8 @@ while ($i <= $#ARGV)
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
if ($verbose == 1){
diff --git a/ldap/admin/src/scripts/db2bak.in b/ldap/admin/src/scripts/db2bak.in
index 79cf59a..dacd7b0 100755
--- a/ldap/admin/src/scripts/db2bak.in
+++ b/ldap/admin/src/scripts/db2bak.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@nss_libdir@"
libpath_add "@libdir@"
libpath_add "@pcre_libdir@"
@@ -55,16 +55,17 @@ do
done
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+servid=`normalize_server_id $initfile`
+. $initfile
if [ -z $bak_dir ]
then
@@ -72,4 +73,4 @@ then
fi
echo "Back up directory: $bak_dir"
-@sbindir@/ns-slapd db2archive -D $configdir -a $bak_dir $args
+@sbindir@/ns-slapd db2archive -D $CONFIG_DIR -a $bak_dir $args
diff --git a/ldap/admin/src/scripts/db2bak.pl.in b/ldap/admin/src/scripts/db2bak.pl.in
index 8e57c9d..aee8486 100644
--- a/ldap/admin/src/scripts/db2bak.pl.in
+++ b/ldap/admin/src/scripts/db2bak.pl.in
@@ -96,8 +96,8 @@ while ($i <= $#ARGV) {
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
if ($verbose == 1){
@@ -136,4 +136,4 @@ if($rc == 0){
print "Failed to add task entry \"$dn\" error ($rc)\n";
}
-exit($rc);
\ No newline at end of file
+exit($rc);
diff --git a/ldap/admin/src/scripts/db2index.in b/ldap/admin/src/scripts/db2index.in
index 6f524d8..a1321ea 100755
--- a/ldap/admin/src/scripts/db2index.in
+++ b/ldap/admin/src/scripts/db2index.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@nss_libdir@"
libpath_add "@libdir@"
libpath_add "@pcre_libdir@"
@@ -58,25 +58,26 @@ then
exit 1;
fi
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+servid=`normalize_server_id $initfile`
+. $initfile
if [ $# -eq 0 ]
then
bak_dir=@localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/bak/reindex_`date +%Y_%m_%d_%H_%M_%S`
- @sbindir@/ns-slapd upgradedb -D $configdir -a "$bak_dir"
+ @sbindir@/ns-slapd upgradedb -D $CONFIG_DIR -a "$bak_dir"
elif [ $# -lt 2 ]
then
usage
exit 1
else
- @sbindir@/ns-slapd db2index -D $configdir $args
+ @sbindir@/ns-slapd db2index -D $CONFIG_DIR $args
fi
diff --git a/ldap/admin/src/scripts/db2index.pl.in b/ldap/admin/src/scripts/db2index.pl.in
index f640f4c..ad60045 100644
--- a/ldap/admin/src/scripts/db2index.pl.in
+++ b/ldap/admin/src/scripts/db2index.pl.in
@@ -105,8 +105,8 @@ while ($i <= $#ARGV) {
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
if ($verbose){
diff --git a/ldap/admin/src/scripts/db2ldif.in b/ldap/admin/src/scripts/db2ldif.in
index 4e12d15..cca4e95 100755
--- a/ldap/admin/src/scripts/db2ldif.in
+++ b/ldap/admin/src/scripts/db2ldif.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@nss_libdir@"
libpath_add "@libdir@"
libpath_add "@pcre_libdir@"
@@ -137,16 +137,17 @@ then
exit 1
fi
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+servid=`normalize_server_id $initfile`
+. $initfile
ldif_file=`make_ldiffile $@`
rn=$?
@@ -154,7 +155,7 @@ rn=$?
echo "Exported ldif file: $ldif_file"
if [ $rn -eq 1 ]
then
- @sbindir@/ns-slapd db2ldif -D $configdir $benameopt $includeSuffix $excludeSuffix $outputFile $args
+ @sbindir@/ns-slapd db2ldif -D $CONFIG_DIR $benameopt $includeSuffix $excludeSuffix $outputFile $args
else
- @sbindir@/ns-slapd db2ldif -D $configdir $benameopt $includeSuffix $excludeSuffix $args -a $ldif_file
+ @sbindir@/ns-slapd db2ldif -D $CONFIG_DIR $benameopt $includeSuffix $excludeSuffix $args -a $ldif_file
fi
diff --git a/ldap/admin/src/scripts/db2ldif.pl.in b/ldap/admin/src/scripts/db2ldif.pl.in
index a846fd9..baece55 100644
--- a/ldap/admin/src/scripts/db2ldif.pl.in
+++ b/ldap/admin/src/scripts/db2ldif.pl.in
@@ -190,8 +190,8 @@ while ($i <= $#ARGV) {
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$ldifdir = "@localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/ldif";
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
diff --git a/ldap/admin/src/scripts/dbverify.in b/ldap/admin/src/scripts/dbverify.in
index 58c238c..6306a07 100755
--- a/ldap/admin/src/scripts/dbverify.in
+++ b/ldap/admin/src/scripts/dbverify.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@nss_libdir@"
libpath_add "@libdir@"
libpath_add "@pcre_libdir@"
@@ -44,18 +44,18 @@ do
esac
done
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+. $initfile
-@sbindir@/ns-slapd dbverify -D $configdir $args
+@sbindir@/ns-slapd dbverify -D $CONFIG_DIR $args
if [ $display_version == "yes" ]; then
exit 0
fi
diff --git a/ldap/admin/src/scripts/dn2rdn.in b/ldap/admin/src/scripts/dn2rdn.in
index 2379afe..32a70c8 100755
--- a/ldap/admin/src/scripts/dn2rdn.in
+++ b/ldap/admin/src/scripts/dn2rdn.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@nss_libdir@"
libpath_add "@libdir@"
@@ -38,20 +38,21 @@ do
esac
done
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+servid=`normalize_server_id $initfile`
+. $initfile
if [ "$archive" != "provided" ]; then
bak_dir=@localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/bak/reindex_`date +%Y_%m_%d_%H_%M_%S`
args=$args"-a $bak_dir"
fi
-@sbindir@/ns-slapd upgradedb -D $configdir -r $args
+@sbindir@/ns-slapd upgradedb -D $CONFIG_DIR -r $args
diff --git a/ldap/admin/src/scripts/fixup-linkedattrs.pl.in b/ldap/admin/src/scripts/fixup-linkedattrs.pl.in
index 93c697c..36f4dd8 100644
--- a/ldap/admin/src/scripts/fixup-linkedattrs.pl.in
+++ b/ldap/admin/src/scripts/fixup-linkedattrs.pl.in
@@ -102,8 +102,8 @@ while ($i <= $#ARGV)
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
if ($verbose == 1){
diff --git a/ldap/admin/src/scripts/fixup-memberof.pl.in b/ldap/admin/src/scripts/fixup-memberof.pl.in
index a495249..c7038f6 100644
--- a/ldap/admin/src/scripts/fixup-memberof.pl.in
+++ b/ldap/admin/src/scripts/fixup-memberof.pl.in
@@ -106,8 +106,8 @@ while ($i <= $#ARGV)
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info[9] = $protocol;
if ($verbose == 1){
diff --git a/ldap/admin/src/scripts/ldif2db.in b/ldap/admin/src/scripts/ldif2db.in
index 2db3287..ce15349 100755
--- a/ldap/admin/src/scripts/ldif2db.in
+++ b/ldap/admin/src/scripts/ldif2db.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@nss_libdir@"
libpath_add "@libdir@"
libpath_add "@pcre_libdir@"
@@ -81,16 +81,16 @@ do
esac
done
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+. $initfile
if [ $# -lt 4 ]
then
@@ -104,6 +104,6 @@ if [ $quiet -eq 0 ]; then
echo importing data ...
fi
-@sbindir@/ns-slapd ldif2db -D $configdir $args 2>&1
+@sbindir@/ns-slapd ldif2db -D $CONFIG_DIR $args 2>&1
exit $?
diff --git a/ldap/admin/src/scripts/ldif2db.pl.in b/ldap/admin/src/scripts/ldif2db.pl.in
index 68af2a4..390f739 100644
--- a/ldap/admin/src/scripts/ldif2db.pl.in
+++ b/ldap/admin/src/scripts/ldif2db.pl.in
@@ -175,8 +175,8 @@ while ($i <= $#ARGV) {
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
if ($verbose == 1){
diff --git a/ldap/admin/src/scripts/ldif2ldap.in b/ldap/admin/src/scripts/ldif2ldap.in
index 2ce1cde..874b1bb 100755
--- a/ldap/admin/src/scripts/ldif2ldap.in
+++ b/ldap/admin/src/scripts/ldif2ldap.in
@@ -1,11 +1,11 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
libpath_add "@ldapsdk_libdir@"
libpath_add "@libdir@"
libpath_add "@nss_libdir@"
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
export LD_LIBRARY_PATH
SHLIB_PATH=$LD_LIBRARY_PATH
@@ -46,16 +46,18 @@ then
exit 1
fi
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-process_dse $servid $$
+. $initfile
+
+process_dse $CONFIG_DIR $$
file="/tmp/DSSharedLib.$$"
port=$(grep -i 'nsslapd-port' $file | awk '{print $2}' )
host=$(grep -i 'nsslapd-localhost' $file | awk '{print $2}' )
diff --git a/ldap/admin/src/scripts/monitor.in b/ldap/admin/src/scripts/monitor.in
index abe0366..7b2058b 100755
--- a/ldap/admin/src/scripts/monitor.in
+++ b/ldap/admin/src/scripts/monitor.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@ldapsdk_libdir@"
libpath_add "@libdir@"
libpath_add "@nss_libdir@"
@@ -40,12 +40,12 @@ do
esac
done
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
@@ -54,8 +54,9 @@ then
MDN="cn=monitor"
fi
+. $initfile
-process_dse $servid $$
+process_dse $CONFIG_DIR $$
file="/tmp/DSSharedLib.$$"
port=$(grep -i 'nsslapd-port' $file | awk '{print $2}' )
host=$(grep -i 'nsslapd-localhost' $file | awk '{print $2}' )
diff --git a/ldap/admin/src/scripts/ns-accountstatus.pl.in b/ldap/admin/src/scripts/ns-accountstatus.pl.in
index 7e492f3..a4234f7 100644
--- a/ldap/admin/src/scripts/ns-accountstatus.pl.in
+++ b/ldap/admin/src/scripts/ns-accountstatus.pl.in
@@ -413,8 +413,8 @@ while( $arg = shift){
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($rootpw, $pwfile);
$info{protocol} = $protocol;
$info{args} = "-c -a";
diff --git a/ldap/admin/src/scripts/ns-activate.pl.in b/ldap/admin/src/scripts/ns-activate.pl.in
index 7497caf..985f13f 100644
--- a/ldap/admin/src/scripts/ns-activate.pl.in
+++ b/ldap/admin/src/scripts/ns-activate.pl.in
@@ -413,8 +413,8 @@ while( $arg = shift)
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($rootpw, $pwfile);
$info{protocol} = $protocol;
$info{args} = "-c";
diff --git a/ldap/admin/src/scripts/ns-inactivate.pl.in b/ldap/admin/src/scripts/ns-inactivate.pl.in
index 6340324..c92f0ec 100644
--- a/ldap/admin/src/scripts/ns-inactivate.pl.in
+++ b/ldap/admin/src/scripts/ns-inactivate.pl.in
@@ -413,8 +413,8 @@ while( $arg = shift)
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($rootpw, $pwfile);
$info{protocol} = $protocol;
$info{args} = "-c";
diff --git a/ldap/admin/src/scripts/ns-newpwpolicy.pl.in b/ldap/admin/src/scripts/ns-newpwpolicy.pl.in
index 001d052..cf6500c 100755
--- a/ldap/admin/src/scripts/ns-newpwpolicy.pl.in
+++ b/ldap/admin/src/scripts/ns-newpwpolicy.pl.in
@@ -97,8 +97,8 @@ sub usage {
{
usage() if (!getopts('vD:w:j:p:P:h:U:S:Z:'));
- $opt_Z = DSUtil::get_server_id($opt_Z, "@initconfigdir@");
- %info = DSUtil::get_info("@instconfigdir@", $opt_Z, $opt_h, $opt_p, $opt_D);
+ ($opt_Z, $confdir) = DSUtil::get_server_id($opt_Z, "@initconfigdir@");
+ %info = DSUtil::get_info($confdir, $opt_h, $opt_p, $opt_D);
$info{rootdnpw} = $opt_w;
$info{protocol} = $opt_P;
if ($opt_j ne ""){
diff --git a/ldap/admin/src/scripts/restart-dirsrv.in b/ldap/admin/src/scripts/restart-dirsrv.in
index d782124..130e06e 100644
--- a/ldap/admin/src/scripts/restart-dirsrv.in
+++ b/ldap/admin/src/scripts/restart-dirsrv.in
@@ -7,6 +7,8 @@
# 2: Server started successfully (was not running)
# 3: Server could not be stopped
+source @datadir@/@package_name@/data/DSSharedLib
+
restart_instance() {
SERV_ID=$1
@@ -37,33 +39,15 @@ done
shift $(($OPTIND-1))
if [ "$initconfig_dir" = "" ]; then
- # convert
- # uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),.....
- # to
- # 0
- # this is the only portable, secure way to determine the id number
- userid=`id | awk -F'[=(]+' '{print $2}'`
- if [ "$userid" -eq 0 ] ; then
- initconfig_dir=@initconfigdir@
- else
- initconfig_dir=$HOME/.@package_name@
- fi
+ initconfig_dir=@initconfigdir@
fi
if [ "$#" -eq 0 ]; then
# We're restarting all instances.
ret=0
- for i in $initconfig_dir/@package_name@-*; do
- if [ ! -f "$i" ] ; then
- echo No instances found in $initconfig_dir
- exit 1
- fi
- regex=s,$initconfig_dir/@package_name@-,,g
- inst=`echo $i | sed -e $regex`
- # check for admin server ID used by 389-admin pkg, and ignore it
- if [ "$inst" = "admin" ]; then
- continue
- fi
+ initfiles=`get_initconfig_files $initconfig_dir` || { echo No instances found in $initconfig_dir ; exit 1 ; }
+ for i in $initfiles; do
+ inst=`normalize_server_id $i`
echo Restarting instance \"$inst\"
restart_instance $inst
rv=$?
diff --git a/ldap/admin/src/scripts/restoreconfig.in b/ldap/admin/src/scripts/restoreconfig.in
index 929f96f..9bb1acf 100755
--- a/ldap/admin/src/scripts/restoreconfig.in
+++ b/ldap/admin/src/scripts/restoreconfig.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@nss_libdir@"
libpath_add "@libdir@"
libpath_add "@pcre_libdir@"
@@ -30,20 +30,23 @@ do
esac
done
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
+servid=`normalize_server_id $initfile`
+. $initfile
+
conf_ldif=`ls -1t @localstatedir@/lib/@PACKAGE_NAME(a)/slapd-$servid/bak/$servid-*.ldif 2>/dev/null | head -1 `
if [ -z "$conf_ldif" ]
then
echo No configuration to restore in @localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/bak/ ; exit 1
fi
echo Restoring $conf_ldif...
-@sbindir@/ns-slapd ldif2db -D $configdir -i $conf_ldif -n NetscapeRoot 2>&1
+@sbindir@/ns-slapd ldif2db -D $CONFIG_DIR -i $conf_ldif -n NetscapeRoot 2>&1
exit $?
diff --git a/ldap/admin/src/scripts/saveconfig.in b/ldap/admin/src/scripts/saveconfig.in
index 1fa16ff..65d80f3 100755
--- a/ldap/admin/src/scripts/saveconfig.in
+++ b/ldap/admin/src/scripts/saveconfig.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@libdir@"
libpath_add "@nss_libdir@"
libpath_add "@pcre_libdir@"
@@ -30,20 +30,21 @@ do
esac
done
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+servid=`normalize_server_id $initfile`
+. $initfile
echo saving configuration...
conf_ldif=@localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/bak/$servid-`date +%Y_%m_%d_%H%M%S`.ldif
-@sbindir@/ns-slapd db2ldif -N -D $configdir -s "o=NetscapeRoot" -a $conf_ldif -n NetscapeRoot 2>&1
+@sbindir@/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
diff --git a/ldap/admin/src/scripts/schema-reload.pl.in b/ldap/admin/src/scripts/schema-reload.pl.in
index f46324f..f46bc43 100644
--- a/ldap/admin/src/scripts/schema-reload.pl.in
+++ b/ldap/admin/src/scripts/schema-reload.pl.in
@@ -101,8 +101,8 @@ while ($i <= $#ARGV)
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
if ($verbose == 1){
diff --git a/ldap/admin/src/scripts/start-dirsrv.in b/ldap/admin/src/scripts/start-dirsrv.in
index 2173b67..a163cef 100755
--- a/ldap/admin/src/scripts/start-dirsrv.in
+++ b/ldap/admin/src/scripts/start-dirsrv.in
@@ -6,10 +6,7 @@
# 1: Server could not be started
# 2: Server already running
-libpath_add() {
- [ -z "$1" ] && return
- LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$1
-}
+source @datadir@/@package_name@/data/DSSharedLib
# Starts a single instance
start_instance() {
@@ -18,9 +15,11 @@ start_instance() {
SERV_ID=$1
shift
+ initfile=`get_init_file $initconfig_dir $SERV_ID` || { echo Instance $SERV_ID not found. ; return 1 ; }
+
# source env. for this instance
- if [ -f $initconfig_dir/@package_name@-$SERV_ID ] ; then
- . $initconfig_dir/@package_name@-$SERV_ID
+ if [ -f $initfile ] ; then
+ . $initfile
else
echo Instance $SERV_ID not found.
return 1
@@ -115,33 +114,16 @@ done
shift $(($OPTIND-1))
if [ "$initconfig_dir" = "" ]; then
- # convert
- # uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),.....
- # to
- # 0
- # this is the only portable, secure way to determine the id number
- userid=`id | awk -F'[=(]+' '{print $2}'`
- if [ "$userid" -eq 0 ] ; then
- initconfig_dir=@initconfigdir@
- else
- initconfig_dir=$HOME/.@package_name@
- fi
+ initconfig_dir=@initconfigdir@
fi
+found=0
if [ "$#" -eq 0 ]; then
# We're starting all instances.
ret=0
- for i in $initconfig_dir/@package_name@-*; do
- if [ ! -f "$i" ] ; then
- echo No instances found in $initconfig_dir
- exit 1
- fi
- regex=s,$initconfig_dir/@package_name@-,,g
- inst=`echo $i | sed -e $regex`
- # check for admin server ID used by 389-admin pkg, and ignore it
- if [ "$inst" = "admin" ]; then
- continue
- fi
+ initfiles=`get_initconfig_files $initconfig_dir` || { echo No instances found in $initconfig_dir ; exit 1 ; }
+ for i in $initfiles; do
+ inst=`normalize_server_id $i`
echo Starting instance \"$inst\"
start_instance $inst
rv=$?
diff --git a/ldap/admin/src/scripts/stop-dirsrv.in b/ldap/admin/src/scripts/stop-dirsrv.in
index 708c277..bc38134 100755
--- a/ldap/admin/src/scripts/stop-dirsrv.in
+++ b/ldap/admin/src/scripts/stop-dirsrv.in
@@ -6,17 +6,16 @@
# 1: Server could not be stopped
# 2: Server was not running
-libpath_add() {
- [ -z "$1" ] && return
- LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$1
-}
+source @datadir@/@package_name@/data/DSSharedLib
stop_instance() {
SERV_ID=$1
+ initfile=`get_init_file $initconfig_dir $SERV_ID` || { echo Instance $SERV_ID not found. ; return 1 ; }
+
# source env. for this instance
- if [ -f $initconfig_dir/@package_name@-$SERV_ID ] ; then
- . $initconfig_dir/@package_name@-$SERV_ID
+ if [ -f $initfile ] ; then
+ . $initfile
else
echo Instance $SERV_ID not found.
return 1
@@ -67,33 +66,19 @@ done
shift $(($OPTIND-1))
if [ "$initconfig_dir" = "" ]; then
- # convert
- # uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),.....
- # to
- # 0
- # this is the only portable, secure way to determine the id number
- userid=`id | awk -F'[=(]+' '{print $2}'`
- if [ "$userid" -eq 0 ] ; then
- initconfig_dir=@initconfigdir@
- else
- initconfig_dir=$HOME/.@package_name@
- fi
+ initconfig_dir=@initconfigdir@
fi
if [ "$#" -eq 0 ]; then
# We're stopping all instances.
ret=0
- for i in $initconfig_dir/@package_name@-*; do
+ initfiles=`get_initconfig_files $initconfig_dir` || { echo No instances found in $initconfig_dir ; exit 1 ; }
+ for i in $initfiles; do
if [ ! -f "$i" ] ; then
echo No instances found in $initconfig_dir
exit 1
fi
- regex=s,$initconfig_dir/@package_name@-,,g
- inst=`echo $i | sed -e $regex`
- # check for admin server ID used by 389-admin pkg, and ignore it
- if [ "$inst" = "admin" ]; then
- continue
- fi
+ inst=`normalize_server_id $i`
echo Stopping instance \"$inst\"
stop_instance $inst
rv=$?
diff --git a/ldap/admin/src/scripts/suffix2instance.in b/ldap/admin/src/scripts/suffix2instance.in
index 528f28e..e2f73c3 100755
--- a/ldap/admin/src/scripts/suffix2instance.in
+++ b/ldap/admin/src/scripts/suffix2instance.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@libdir@"
libpath_add "@nss_libdir@"
libpath_add "@pcre_libdir@"
@@ -38,16 +38,16 @@ then
exit 1
fi
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+. $initfile
if [ $# -lt 2 ]
then
@@ -55,4 +55,4 @@ then
exit 1
fi
-@sbindir@/ns-slapd suffix2instance -D $configdir $args 2>&1
+@sbindir@/ns-slapd suffix2instance -D $CONFIG_DIR $args 2>&1
diff --git a/ldap/admin/src/scripts/syntax-validate.pl.in b/ldap/admin/src/scripts/syntax-validate.pl.in
index 2e261c6..5ceaada 100644
--- a/ldap/admin/src/scripts/syntax-validate.pl.in
+++ b/ldap/admin/src/scripts/syntax-validate.pl.in
@@ -108,8 +108,8 @@ while ($i <= $#ARGV)
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
if ($verbose == 1){
diff --git a/ldap/admin/src/scripts/upgradedb.in b/ldap/admin/src/scripts/upgradedb.in
index b7d36f3..211bdce 100755
--- a/ldap/admin/src/scripts/upgradedb.in
+++ b/ldap/admin/src/scripts/upgradedb.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@libdir@"
libpath_add "@nss_libdir@"
libpath_add "@pcre_libdir@"
@@ -38,15 +38,16 @@ do
esac
done
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+servid=`normalize_server_id $initfile`
+. $initfile
if [ "$archive_provided" != "yes" ]
then
@@ -55,4 +56,4 @@ then
fi
echo upgrade index files ...
-@sbindir@/ns-slapd upgradedb -D $configdir $args
+@sbindir@/ns-slapd upgradedb -D $CONFIG_DIR $args
diff --git a/ldap/admin/src/scripts/upgradednformat.in b/ldap/admin/src/scripts/upgradednformat.in
index 560db96..e9d8cab 100755
--- a/ldap/admin/src/scripts/upgradednformat.in
+++ b/ldap/admin/src/scripts/upgradednformat.in
@@ -1,6 +1,6 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
# upgradednformat -- upgrade DN format to the new style (RFC 4514)
# Usgae: upgradednformat [-N] -n backend_instance -a db_instance_directory
@@ -10,7 +10,7 @@ source @datadir@/dirsrv/data/DSSharedLib
# -a db_instance_directory -- full path to the db instance dir
# e.g., /var/lib/dirsrv/slapd-ID/db/userRoot
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@nss_libdir@"
libpath_add "@libdir@"
libpath_add "@pcre_libdir@"
@@ -54,18 +54,18 @@ if [ "$be" = "" ] || [ "$dir" = "" ]; then
exit 1
fi
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+. $initfile
-@sbindir@/ns-slapd upgradednformat -D $configdir $args
+@sbindir@/ns-slapd upgradednformat -D $CONFIG_DIR $args
rc=$?
exit $rc
diff --git a/ldap/admin/src/scripts/usn-tombstone-cleanup.pl.in b/ldap/admin/src/scripts/usn-tombstone-cleanup.pl.in
index d9a876d..98e962f 100644
--- a/ldap/admin/src/scripts/usn-tombstone-cleanup.pl.in
+++ b/ldap/admin/src/scripts/usn-tombstone-cleanup.pl.in
@@ -109,8 +109,8 @@ while ($i <= $#ARGV)
#
# Gather all our config settings
#
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
-%info = DSUtil::get_info("@instconfigdir@", $servid, $host, $port, $rootdn);
+($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
+%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
if ($verbose == 1){
diff --git a/ldap/admin/src/scripts/verify-db.pl.in b/ldap/admin/src/scripts/verify-db.pl.in
index 1bf5fb5..b182f42 100644
--- a/ldap/admin/src/scripts/verify-db.pl.in
+++ b/ldap/admin/src/scripts/verify-db.pl.in
@@ -43,7 +43,7 @@ use DSUtil;
DSUtil::libpath_add("@db_libdir@");
DSUtil::libpath_add("@libdir@");
-$ENV{'PATH'} = "@libdir@/dirsrv/slapd-$servid:@db_bindir@:/usr/bin:/";
+$ENV{'PATH'} = "@libdir@/@package_name@/slapd-$servid:@db_bindir@:/usr/bin:/";
$ENV{'SHLIB_PATH'} = "$ENV{'LD_LIBRARY_PATH'}";
my $i = 0;
@@ -167,7 +167,7 @@ while ($i <= $#ARGV) {
$i++;
}
-$servid = DSUtil::get_server_id($servid, "@initconfigdir@");
+($servid, $notused_configdir) = DSUtil::get_server_id($servid, "@initconfigdir@");
print("*****************************************************************\n");
print("verify-db: This tool should only be run if recovery start fails\n" .
diff --git a/ldap/admin/src/scripts/vlvindex.in b/ldap/admin/src/scripts/vlvindex.in
index a776581..0b46b27 100755
--- a/ldap/admin/src/scripts/vlvindex.in
+++ b/ldap/admin/src/scripts/vlvindex.in
@@ -1,8 +1,8 @@
#!/bin/sh
-source @datadir@/dirsrv/data/DSSharedLib
+source @datadir@/@package_name@/data/DSSharedLib
-libpath_add "@libdir@/dirsrv/"
+libpath_add "@libdir@/@package_name@/"
libpath_add "@libdir@"
libpath_add "@nss_libdir@"
libpath_add "@pcre_libdir@"
@@ -44,16 +44,16 @@ do
esac
done
-servid=$(get_server_id "@initconfigdir@" $servid)
+initfile=$(get_init_file "@initconfigdir@" $servid)
if [ $? == 1 ]
then
usage
echo "You must supply a valid server instance identifier. Use -Z to specify instance name"
- echo "Available instances: $servid"
+ echo "Available instances: $initfile"
exit 1
fi
-configdir="@instconfigdir@/slapd-$servid"
+. $initfile
if [ $# -lt 4 ]
then
@@ -61,4 +61,4 @@ then
exit 1
fi
-@sbindir@/ns-slapd db2index -D $configdir $args
+@sbindir@/ns-slapd db2index -D $CONFIG_DIR $args
10 years, 11 months
Branch '389-ds-base-1.3.1' - ldap/servers
by Noriko Hosoi
ldap/servers/plugins/replication/cl5_api.c | 66 +++++++++++++++++------------
1 file changed, 40 insertions(+), 26 deletions(-)
New commits:
commit de4bed7f6bd902e6b0b0623e999fae87c313b930
Author: Noriko Hosoi <nhosoi(a)redhat.com>
Date: Tue Apr 16 17:20:40 2013 -0700
Ticket #47330 - changelog db extension / upgrade is obsolete
Bug Description: Upgrading from db4 to db5 was not implemented
in changelog db code.
Fix Description: Implemented upgrading changelog db from db4
to db5. The db extension for db4 is ".db4"; for the newer
BDB version, it is ".db" without the major version number.
This is the same format as the main db.
Reviewed by Rich (Thank you!!)
https://fedorahosted.org/389/ticket/47330
(cherry picked from commit 845a221350bc58166773f50526adfd186bdc86e6)
diff --git a/ldap/servers/plugins/replication/cl5_api.c b/ldap/servers/plugins/replication/cl5_api.c
index 74bf6d6..6b621e5 100644
--- a/ldap/servers/plugins/replication/cl5_api.c
+++ b/ldap/servers/plugins/replication/cl5_api.c
@@ -88,7 +88,12 @@
used to store upper boundary RUV vector */
#define DB_EXTENSION_DB3 "db3"
+#define DB_EXTENSION_DB4 "db4"
+#if 1000*DB_VERSION_MAJOR + 100*DB_VERSION_MINOR >= 5000
+#define DB_EXTENSION "db"
+#else
#define DB_EXTENSION "db4"
+#endif
#define HASH_BACKETS_COUNT 16 /* number of buckets in a hash table */
@@ -2873,7 +2878,7 @@ static int _cl5WriteBervals (struct berval **bv, char** buff, unsigned int *size
* 3. Remove any Berkeley DB transaction log files
* 4. extention .db3 -> .db4
*/
-static int _cl5Upgrade3_4(char *fromVersion, char *toVersion)
+static int _cl5UpgradeMajor(char *fromVersion, char *toVersion)
{
PRDir *dir = NULL;
PRDirEntry *entry = NULL;
@@ -2888,7 +2893,7 @@ static int _cl5Upgrade3_4(char *fromVersion, char *toVersion)
if (rc != CL5_SUCCESS)
{
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name_cl,
- "_cl5Upgrade3_4: failed to open the db env\n");
+ "_cl5UpgradeMajor: failed to open the db env\n");
return rc;
}
s_cl5Desc.dbOpenMode = backup;
@@ -2897,7 +2902,7 @@ static int _cl5Upgrade3_4(char *fromVersion, char *toVersion)
if (dir == NULL)
{
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name_cl,
- "_cl5Upgrade3_4: failed to open changelog dir %s; NSPR error - %d\n",
+ "_cl5UpgradeMajor: failed to open changelog dir %s; NSPR error - %d\n",
s_cl5Desc.dbDir, PR_GetError ());
goto out;
}
@@ -2908,7 +2913,8 @@ static int _cl5Upgrade3_4(char *fromVersion, char *toVersion)
{
break;
}
- if (_cl5FileEndsWith(entry->name, DB_EXTENSION_DB3))
+ if (_cl5FileEndsWith(entry->name, DB_EXTENSION_DB3) ||
+ _cl5FileEndsWith(entry->name, DB_EXTENSION_DB4))
{
char oName [MAXPATHLEN + 1];
char nName [MAXPATHLEN + 1];
@@ -2919,13 +2925,17 @@ static int _cl5Upgrade3_4(char *fromVersion, char *toVersion)
p = strstr(oName, DB_EXTENSION_DB3);
if (NULL == p)
{
- continue;
+ p = strstr(oName, DB_EXTENSION_DB4);
+ if (NULL == p) {
+ continue;
+ }
}
+
/* db->rename closes DB; need to create every time */
rc = db_create(&thisdb, s_cl5Desc.dbEnv, 0);
if (0 != rc) {
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name_cl,
- "_cl5Upgrade3_4: failed to get db handle\n");
+ "_cl5UpgradeMajor: failed to get db handle\n");
goto out;
}
@@ -2936,13 +2946,13 @@ static int _cl5Upgrade3_4(char *fromVersion, char *toVersion)
PR_snprintf(nName + baselen, MAXPATHLEN+1-baselen, "%s", DB_EXTENSION);
*p = c;
slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name_cl,
- "_cl5Upgrade3_4: renaming %s to %s\n", oName, nName);
+ "_cl5UpgradeMajor: renaming %s to %s\n", oName, nName);
rc = thisdb->rename(thisdb, (const char *)oName, NULL /* subdb */,
(const char *)nName, 0);
if (rc != PR_SUCCESS)
{
slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name_cl,
- "_cl5Upgrade3_4: failed to rename file (%s -> %s); "
+ "_cl5UpgradeMajor: failed to rename file (%s -> %s); "
"db error - %d %s\n", oName, nName, rc, db_strerror(rc));
break;
}
@@ -2966,7 +2976,7 @@ out:
* 2. Remove any Berkeley DB environment using the DB_ENV->remove method
* 3. Remove any Berkeley DB transaction log files
*/
-static int _cl5Upgrade4_4(char *fromVersion, char *toVersion)
+static int _cl5UpgradeMinor(char *fromVersion, char *toVersion)
{
CL5OpenMode backup;
int rc = 0;
@@ -2978,7 +2988,7 @@ static int _cl5Upgrade4_4(char *fromVersion, char *toVersion)
if (rc != CL5_SUCCESS)
{
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name_cl,
- "_cl5Upgrade4_4: failed to open the db env\n");
+ "_cl5UpgradeMinor: failed to open the db env\n");
return rc;
}
s_cl5Desc.dbOpenMode = backup;
@@ -3058,7 +3068,7 @@ static int _cl5CheckDBVersion ()
if (dbmajor < DB_VERSION_MAJOR)
{
/* upgrade */
- rc = _cl5Upgrade3_4(dbVersion, clVersion);
+ rc = _cl5UpgradeMajor(dbVersion, clVersion);
if (rc != CL5_SUCCESS)
{
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name_cl,
@@ -3070,7 +3080,7 @@ static int _cl5CheckDBVersion ()
else if (dbminor < DB_VERSION_MINOR)
{
/* minor upgrade */
- rc = _cl5Upgrade4_4(dbVersion, clVersion);
+ rc = _cl5UpgradeMajor(dbVersion, clVersion);
if (rc != CL5_SUCCESS)
{
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name_cl,
@@ -5532,32 +5542,35 @@ static int _cl5CheckMissingCSN (const CSN *csn, const RUV *supplierRuv, CL5DBFil
/* Helper functions that work with individual changelog files */
/* file name format : <replica name>_<replica generation>db{2,3,...} */
-static PRBool _cl5FileName2Replica (const char *file_name, Object **replica)
+static PRBool
+_cl5FileName2Replica (const char *file_name, Object **replica)
{
Replica *r;
char *repl_name, *file_gen, *repl_gen;
int len;
- PR_ASSERT (file_name && replica);
+ PR_ASSERT (file_name && replica);
*replica = NULL;
/* this is database file */
if (_cl5FileEndsWith (file_name, DB_EXTENSION) ||
+ _cl5FileEndsWith (file_name, DB_EXTENSION_DB4) ||
_cl5FileEndsWith (file_name, DB_EXTENSION_DB3) )
{
- repl_name = slapi_ch_strdup (file_name);
+ repl_name = slapi_ch_strdup (file_name);
file_gen = strstr(repl_name, FILE_SEP);
if (file_gen)
{
- int extlen = strlen(DB_EXTENSION);
+ int extlen = strlen(DB_EXTENSION);
*file_gen = '\0';
file_gen += strlen (FILE_SEP);
len = strlen (file_gen);
if (len <= extlen + 1)
{
- slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name_cl, "_cl5FileName2Replica "
- "invalid file name (%s)\n", file_name);
+ slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name_cl,
+ "_cl5FileName2Replica "
+ "invalid file name (%s)\n", file_name);
}
else
{
@@ -5572,8 +5585,9 @@ static PRBool _cl5FileName2Replica (const char *file_name, Object **replica)
PR_ASSERT (repl_gen);
if (strcmp (file_gen, repl_gen) != 0)
{
- slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name_cl, "_cl5FileName2Replica "
- "replica generation mismatch for replica at (%s), "
+ slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name_cl,
+ "_cl5FileName2Replica "
+ "replica generation mismatch for replica at (%s), "
"file generation %s, new replica generation %s\n",
slapi_sdn_get_dn (replica_get_root (r)), file_gen, repl_gen);
@@ -5588,7 +5602,7 @@ static PRBool _cl5FileName2Replica (const char *file_name, Object **replica)
else
{
slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name_cl, "_cl5FileName2Replica "
- "malformed file name - %s\n", file_name);
+ "malformed file name - %s\n", file_name);
}
return PR_TRUE;
@@ -5604,7 +5618,7 @@ static char* _cl5Replica2FileName (Object *replica)
char *replGen, *fileName;
Replica *r;
- PR_ASSERT (replica);
+ PR_ASSERT (replica);
r = (Replica*)object_get_data (replica);
PR_ASSERT (r);
@@ -5657,7 +5671,7 @@ static int _cl5DBOpenFileByReplicaName (const char *replName, const char *replGe
int rc = CL5_SUCCESS;
Object *tmpObj;
CL5DBFile *file;
- char *file_name;
+ char *file_name;
PR_ASSERT (replName && replGen);
@@ -5751,7 +5765,7 @@ static int _cl5AddDBFile (CL5DBFile *file, Object **obj)
int rc;
Object *tmpObj;
- PR_ASSERT (file);
+ PR_ASSERT (file);
tmpObj = object_new (file, _cl5DBCloseFile);
rc = objset_add_obj(s_cl5Desc.dbFiles, tmpObj);
@@ -5797,7 +5811,7 @@ static int _cl5NewDBFile (const char *replName, const char *replGen, CL5DBFile**
return CL5_UNKNOWN_ERROR;
}
- (*dbFile) = (CL5DBFile *)slapi_ch_calloc (1, sizeof (CL5DBFile));
+ (*dbFile) = (CL5DBFile *)slapi_ch_calloc (1, sizeof (CL5DBFile));
if (*dbFile == NULL)
{
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name_cl,
@@ -5805,7 +5819,7 @@ static int _cl5NewDBFile (const char *replName, const char *replGen, CL5DBFile**
return CL5_MEMORY_ERROR;
}
- name = _cl5MakeFileName (replName, replGen);
+ name = _cl5MakeFileName (replName, replGen);
{
/* The subname argument allows applications to have
* subdatabases, i.e., multiple databases inside of a single
10 years, 11 months
ldap/servers
by Noriko Hosoi
ldap/servers/plugins/replication/cl5_api.c | 66 +++++++++++++++++------------
1 file changed, 40 insertions(+), 26 deletions(-)
New commits:
commit 845a221350bc58166773f50526adfd186bdc86e6
Author: Noriko Hosoi <nhosoi(a)redhat.com>
Date: Tue Apr 16 17:20:40 2013 -0700
Ticket #47330 - changelog db extension / upgrade is obsolete
Bug Description: Upgrading from db4 to db5 was not implemented
in changelog db code.
Fix Description: Implemented upgrading changelog db from db4
to db5. The db extension for db4 is ".db4"; for the newer
BDB version, it is ".db" without the major version number.
This is the same format as the main db.
Reviewed by Rich (Thank you!!)
https://fedorahosted.org/389/ticket/47330
diff --git a/ldap/servers/plugins/replication/cl5_api.c b/ldap/servers/plugins/replication/cl5_api.c
index 74bf6d6..6b621e5 100644
--- a/ldap/servers/plugins/replication/cl5_api.c
+++ b/ldap/servers/plugins/replication/cl5_api.c
@@ -88,7 +88,12 @@
used to store upper boundary RUV vector */
#define DB_EXTENSION_DB3 "db3"
+#define DB_EXTENSION_DB4 "db4"
+#if 1000*DB_VERSION_MAJOR + 100*DB_VERSION_MINOR >= 5000
+#define DB_EXTENSION "db"
+#else
#define DB_EXTENSION "db4"
+#endif
#define HASH_BACKETS_COUNT 16 /* number of buckets in a hash table */
@@ -2873,7 +2878,7 @@ static int _cl5WriteBervals (struct berval **bv, char** buff, unsigned int *size
* 3. Remove any Berkeley DB transaction log files
* 4. extention .db3 -> .db4
*/
-static int _cl5Upgrade3_4(char *fromVersion, char *toVersion)
+static int _cl5UpgradeMajor(char *fromVersion, char *toVersion)
{
PRDir *dir = NULL;
PRDirEntry *entry = NULL;
@@ -2888,7 +2893,7 @@ static int _cl5Upgrade3_4(char *fromVersion, char *toVersion)
if (rc != CL5_SUCCESS)
{
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name_cl,
- "_cl5Upgrade3_4: failed to open the db env\n");
+ "_cl5UpgradeMajor: failed to open the db env\n");
return rc;
}
s_cl5Desc.dbOpenMode = backup;
@@ -2897,7 +2902,7 @@ static int _cl5Upgrade3_4(char *fromVersion, char *toVersion)
if (dir == NULL)
{
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name_cl,
- "_cl5Upgrade3_4: failed to open changelog dir %s; NSPR error - %d\n",
+ "_cl5UpgradeMajor: failed to open changelog dir %s; NSPR error - %d\n",
s_cl5Desc.dbDir, PR_GetError ());
goto out;
}
@@ -2908,7 +2913,8 @@ static int _cl5Upgrade3_4(char *fromVersion, char *toVersion)
{
break;
}
- if (_cl5FileEndsWith(entry->name, DB_EXTENSION_DB3))
+ if (_cl5FileEndsWith(entry->name, DB_EXTENSION_DB3) ||
+ _cl5FileEndsWith(entry->name, DB_EXTENSION_DB4))
{
char oName [MAXPATHLEN + 1];
char nName [MAXPATHLEN + 1];
@@ -2919,13 +2925,17 @@ static int _cl5Upgrade3_4(char *fromVersion, char *toVersion)
p = strstr(oName, DB_EXTENSION_DB3);
if (NULL == p)
{
- continue;
+ p = strstr(oName, DB_EXTENSION_DB4);
+ if (NULL == p) {
+ continue;
+ }
}
+
/* db->rename closes DB; need to create every time */
rc = db_create(&thisdb, s_cl5Desc.dbEnv, 0);
if (0 != rc) {
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name_cl,
- "_cl5Upgrade3_4: failed to get db handle\n");
+ "_cl5UpgradeMajor: failed to get db handle\n");
goto out;
}
@@ -2936,13 +2946,13 @@ static int _cl5Upgrade3_4(char *fromVersion, char *toVersion)
PR_snprintf(nName + baselen, MAXPATHLEN+1-baselen, "%s", DB_EXTENSION);
*p = c;
slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name_cl,
- "_cl5Upgrade3_4: renaming %s to %s\n", oName, nName);
+ "_cl5UpgradeMajor: renaming %s to %s\n", oName, nName);
rc = thisdb->rename(thisdb, (const char *)oName, NULL /* subdb */,
(const char *)nName, 0);
if (rc != PR_SUCCESS)
{
slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name_cl,
- "_cl5Upgrade3_4: failed to rename file (%s -> %s); "
+ "_cl5UpgradeMajor: failed to rename file (%s -> %s); "
"db error - %d %s\n", oName, nName, rc, db_strerror(rc));
break;
}
@@ -2966,7 +2976,7 @@ out:
* 2. Remove any Berkeley DB environment using the DB_ENV->remove method
* 3. Remove any Berkeley DB transaction log files
*/
-static int _cl5Upgrade4_4(char *fromVersion, char *toVersion)
+static int _cl5UpgradeMinor(char *fromVersion, char *toVersion)
{
CL5OpenMode backup;
int rc = 0;
@@ -2978,7 +2988,7 @@ static int _cl5Upgrade4_4(char *fromVersion, char *toVersion)
if (rc != CL5_SUCCESS)
{
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name_cl,
- "_cl5Upgrade4_4: failed to open the db env\n");
+ "_cl5UpgradeMinor: failed to open the db env\n");
return rc;
}
s_cl5Desc.dbOpenMode = backup;
@@ -3058,7 +3068,7 @@ static int _cl5CheckDBVersion ()
if (dbmajor < DB_VERSION_MAJOR)
{
/* upgrade */
- rc = _cl5Upgrade3_4(dbVersion, clVersion);
+ rc = _cl5UpgradeMajor(dbVersion, clVersion);
if (rc != CL5_SUCCESS)
{
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name_cl,
@@ -3070,7 +3080,7 @@ static int _cl5CheckDBVersion ()
else if (dbminor < DB_VERSION_MINOR)
{
/* minor upgrade */
- rc = _cl5Upgrade4_4(dbVersion, clVersion);
+ rc = _cl5UpgradeMajor(dbVersion, clVersion);
if (rc != CL5_SUCCESS)
{
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name_cl,
@@ -5532,32 +5542,35 @@ static int _cl5CheckMissingCSN (const CSN *csn, const RUV *supplierRuv, CL5DBFil
/* Helper functions that work with individual changelog files */
/* file name format : <replica name>_<replica generation>db{2,3,...} */
-static PRBool _cl5FileName2Replica (const char *file_name, Object **replica)
+static PRBool
+_cl5FileName2Replica (const char *file_name, Object **replica)
{
Replica *r;
char *repl_name, *file_gen, *repl_gen;
int len;
- PR_ASSERT (file_name && replica);
+ PR_ASSERT (file_name && replica);
*replica = NULL;
/* this is database file */
if (_cl5FileEndsWith (file_name, DB_EXTENSION) ||
+ _cl5FileEndsWith (file_name, DB_EXTENSION_DB4) ||
_cl5FileEndsWith (file_name, DB_EXTENSION_DB3) )
{
- repl_name = slapi_ch_strdup (file_name);
+ repl_name = slapi_ch_strdup (file_name);
file_gen = strstr(repl_name, FILE_SEP);
if (file_gen)
{
- int extlen = strlen(DB_EXTENSION);
+ int extlen = strlen(DB_EXTENSION);
*file_gen = '\0';
file_gen += strlen (FILE_SEP);
len = strlen (file_gen);
if (len <= extlen + 1)
{
- slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name_cl, "_cl5FileName2Replica "
- "invalid file name (%s)\n", file_name);
+ slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name_cl,
+ "_cl5FileName2Replica "
+ "invalid file name (%s)\n", file_name);
}
else
{
@@ -5572,8 +5585,9 @@ static PRBool _cl5FileName2Replica (const char *file_name, Object **replica)
PR_ASSERT (repl_gen);
if (strcmp (file_gen, repl_gen) != 0)
{
- slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name_cl, "_cl5FileName2Replica "
- "replica generation mismatch for replica at (%s), "
+ slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name_cl,
+ "_cl5FileName2Replica "
+ "replica generation mismatch for replica at (%s), "
"file generation %s, new replica generation %s\n",
slapi_sdn_get_dn (replica_get_root (r)), file_gen, repl_gen);
@@ -5588,7 +5602,7 @@ static PRBool _cl5FileName2Replica (const char *file_name, Object **replica)
else
{
slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name_cl, "_cl5FileName2Replica "
- "malformed file name - %s\n", file_name);
+ "malformed file name - %s\n", file_name);
}
return PR_TRUE;
@@ -5604,7 +5618,7 @@ static char* _cl5Replica2FileName (Object *replica)
char *replGen, *fileName;
Replica *r;
- PR_ASSERT (replica);
+ PR_ASSERT (replica);
r = (Replica*)object_get_data (replica);
PR_ASSERT (r);
@@ -5657,7 +5671,7 @@ static int _cl5DBOpenFileByReplicaName (const char *replName, const char *replGe
int rc = CL5_SUCCESS;
Object *tmpObj;
CL5DBFile *file;
- char *file_name;
+ char *file_name;
PR_ASSERT (replName && replGen);
@@ -5751,7 +5765,7 @@ static int _cl5AddDBFile (CL5DBFile *file, Object **obj)
int rc;
Object *tmpObj;
- PR_ASSERT (file);
+ PR_ASSERT (file);
tmpObj = object_new (file, _cl5DBCloseFile);
rc = objset_add_obj(s_cl5Desc.dbFiles, tmpObj);
@@ -5797,7 +5811,7 @@ static int _cl5NewDBFile (const char *replName, const char *replGen, CL5DBFile**
return CL5_UNKNOWN_ERROR;
}
- (*dbFile) = (CL5DBFile *)slapi_ch_calloc (1, sizeof (CL5DBFile));
+ (*dbFile) = (CL5DBFile *)slapi_ch_calloc (1, sizeof (CL5DBFile));
if (*dbFile == NULL)
{
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name_cl,
@@ -5805,7 +5819,7 @@ static int _cl5NewDBFile (const char *replName, const char *replGen, CL5DBFile**
return CL5_MEMORY_ERROR;
}
- name = _cl5MakeFileName (replName, replGen);
+ name = _cl5MakeFileName (replName, replGen);
{
/* The subname argument allows applications to have
* subdatabases, i.e., multiple databases inside of a single
10 years, 11 months
ldap/servers
by thierry bordaz
ldap/servers/plugins/cos/cos_cache.c | 2
ldap/servers/slapd/entry.c | 238 ++++++++++++++++-------------------
ldap/servers/slapd/slapi-plugin.h | 1
ldap/servers/slapd/slapi-private.h | 2
ldap/servers/slapd/vattr.c | 14 +-
5 files changed, 123 insertions(+), 134 deletions(-)
New commits:
commit 86f8b9ff6cc7aa25f5424aa4661f20f9aeea9aad
Author: Thierry bordaz (tbordaz) <tbordaz(a)redhat.com>
Date: Tue Apr 9 16:33:37 2013 +0200
Ticket 512 - improve performance of vattr code
Bug Description:
Description of virtual attribute evaluation for a search:
1 - create a list of candidate
2 - For each candidate entry the filter is evaluated (slapi_vattr_filter_test).
For a given filter component, if the attribute is a virtual attribute (it exists a Service Provider for it)
the computed valueset is cached into the entry "e_virtual_attrs" (slapi_entry_vattrcache_merge_sv).
The condition to cache the value is that the attribute should be cachable.
3 - The entries matching the filter are returned
attributes values are retrieved from "e_virtual_attrs" (slapi_vattr_namespace_values_get_sp),
if they have been cached
In DS 389 implementation, only 'nsrole' attribute is cachable. So service provide like 'COS'
are not cached. If a filter contains multiple times the same vattr, the vattr is evaluated (cos evaluated)
several time. The same way if the set of returned attribute contains a vattr it is evaluated even if
it was already evaluated during filter analyze.
Fix Description:
When a Service Provider evaluates a vattr, the fix consists to provide to the SP a mechanism
to say if the returned valueset is or not cachable.
If the valueset is cachable, it is stored into the entry (e->e_virtual_attrs).
If the vattr is cached and appears several times in the filter or is a returned attribute, then
its valueset is looked up from e_virtual_attrs.
In order to keep the same plugin interface, I added a new value to the buffer_flag parameter.
This new value (SLAPI_VIRTUALATTRS_VALUES_CACHEABLE) is not related to buffer but to the fact
that the returned valueset is cachable.
In term of performance, the search throughput is equivalent or better. If the search does not
use vattr or use vattr that are evaluate only once, I still measure a gain 5-20%.
In the best condition (vattr in the filter/returned and the same vattr appears several times (10))
the throughput is > 2times more (1800/s vs 700/s)
ticket: https://fedorahosted.org/389/ticket/512
Reviewed by: Rich Megginson and Noriko Hosoi (thanks Rich, thanks Noriko !)
Platforms tested: Fedora 17
Flag Day: no
Doc impact: no
diff --git a/ldap/servers/plugins/cos/cos_cache.c b/ldap/servers/plugins/cos/cos_cache.c
index fed2aa9..4a3a23a 100644
--- a/ldap/servers/plugins/cos/cos_cache.c
+++ b/ldap/servers/plugins/cos/cos_cache.c
@@ -2096,7 +2096,7 @@ static int cos_cache_vattr_get(vattr_sp_handle *handle, vattr_context *c, Slapi_
ret = cos_cache_query_attr(pCache, c, e, type, results, NULL, NULL, NULL);
if(ret == 0)
{
- *free_flags = SLAPI_VIRTUALATTRS_RETURNED_COPIES;
+ *free_flags = SLAPI_VIRTUALATTRS_RETURNED_COPIES | SLAPI_VIRTUALATTRS_VALUES_CACHEABLE;
*actual_type_name = slapi_ch_strdup(type);
*type_name_disposition = SLAPI_VIRTUALATTRS_TYPE_NAME_MATCHED_EXACTLY_OR_ALIAS;
}
diff --git a/ldap/servers/slapd/entry.c b/ldap/servers/slapd/entry.c
index d7dbf61..01446ff 100644
--- a/ldap/servers/slapd/entry.c
+++ b/ldap/servers/slapd/entry.c
@@ -2443,49 +2443,47 @@ slapi_entry_vattrcache_findAndTest( const Slapi_Entry *e, const char *type,
int r= SLAPI_ENTRY_VATTR_NOT_RESOLVED; /* assume not resolved yet */
*rc = -1;
- if( slapi_vattrcache_iscacheable(type) &&
- slapi_entry_vattrcache_watermark_isvalid(e) ) {
-
- if(e->e_virtual_lock == NULL) {
- return r;
- }
+ if ((e->e_virtual_attrs == NULL) || ! slapi_entry_vattrcache_watermark_isvalid(e)) {
+ /* there is not virtual attribute cached or they are all invalid
+ * just return
+ */
+ return r;
+ }
- vattrcache_entry_READ_LOCK(e);
- if (e->e_virtual_attrs) {
- tmp_attr = attrlist_find( e->e_virtual_attrs, type );
- if (tmp_attr != NULL) {
- if(valueset_isempty(&(tmp_attr->a_present_values))) {
- /*
- * this is a vattr that has been
- * cached already but does not exist
- */
- /* hard coded for prototype */
- r= SLAPI_ENTRY_VATTR_RESOLVED_ABSENT;
- } else {
- /*
- * this is a cached vattr--test the filter on it.
- */
- r= SLAPI_ENTRY_VATTR_RESOLVED_EXISTS;
- if ( filter_type == FILTER_TYPE_AVA ) {
- *rc = plugin_call_syntax_filter_ava(tmp_attr,
- f->f_choice,
- &f->f_ava);
- } else if ( filter_type == FILTER_TYPE_SUBSTRING) {
- *rc = plugin_call_syntax_filter_sub(NULL, tmp_attr,
- &f->f_sub);
- } else if ( filter_type == FILTER_TYPE_PRES ) {
- /* type is there, that's all we need to know. */
- *rc = 0;
- }
- }
- }
- } else {
- r= SLAPI_ENTRY_VATTR_RESOLVED_ABSENT;
- }
- vattrcache_entry_READ_UNLOCK(e);
- }
+ /* Check if the attribute is already cached */
+ vattrcache_entry_READ_LOCK(e);
+ if (e->e_virtual_attrs) {
+ tmp_attr = attrlist_find(e->e_virtual_attrs, type);
+ if (tmp_attr != NULL) {
+ if (valueset_isempty(&(tmp_attr->a_present_values))) {
+ /*
+ * this is a vattr that has been
+ * cached already but does not exist
+ */
+ /* hard coded for prototype */
+ r = SLAPI_ENTRY_VATTR_RESOLVED_ABSENT;
+ } else {
+ /*
+ * this is a cached vattr--test the filter on it.
+ */
+ r = SLAPI_ENTRY_VATTR_RESOLVED_EXISTS;
+ if (filter_type == FILTER_TYPE_AVA) {
+ *rc = plugin_call_syntax_filter_ava(tmp_attr,
+ f->f_choice,
+ &f->f_ava);
+ } else if (filter_type == FILTER_TYPE_SUBSTRING) {
+ *rc = plugin_call_syntax_filter_sub(NULL, tmp_attr,
+ &f->f_sub);
+ } else if (filter_type == FILTER_TYPE_PRES) {
+ /* type is there, that's all we need to know. */
+ *rc = 0;
+ }
+ }
+ } /* tmp_attr != NULL */
+ }
+ vattrcache_entry_READ_UNLOCK(e);
- return r;
+ return r;
}
/*
@@ -2512,49 +2510,46 @@ slapi_entry_vattrcache_find_values_and_type_ex( const Slapi_Entry *e,
{
Slapi_Attr *tmp_attr = NULL;
- int r= SLAPI_ENTRY_VATTR_NOT_RESOLVED; /* assume not resolved yet */
+ int r = SLAPI_ENTRY_VATTR_NOT_RESOLVED; /* assume not resolved yet */
- if( slapi_vattrcache_iscacheable(type) &&
- slapi_entry_vattrcache_watermark_isvalid(e) && e->e_virtual_attrs)
- {
+ if ((e->e_virtual_attrs == NULL) || ! slapi_entry_vattrcache_watermark_isvalid(e)) {
+ /* there is not virtual attribute cached or they are all invalid
+ * just return
+ */
+ return r;
+ }
- if(e->e_virtual_lock == NULL) {
- return r;
- }
+ /* check if the attribute is not already cached */
+ vattrcache_entry_READ_LOCK(e);
+ if (e->e_virtual_attrs) {
+ tmp_attr = attrlist_find(e->e_virtual_attrs, type);
+ if (tmp_attr != NULL) {
+ if (valueset_isempty(&(tmp_attr->a_present_values))) {
+ /*
+ * this is a vattr that has been
+ * cached already but does not exist
+ */
+ r = SLAPI_ENTRY_VATTR_RESOLVED_ABSENT; /* hard coded for prototype */
+ } else {
+ /*
+ * this is a cached vattr
+ * return a duped copy of the values and type
+ */
+ char *vattr_type = NULL;
+
+ r = SLAPI_ENTRY_VATTR_RESOLVED_EXISTS;
+ *results = (Slapi_ValueSet**) slapi_ch_calloc(1, sizeof (**results));
+ **results = valueset_dup(&(tmp_attr->a_present_values));
+
+ *actual_type_name =
+ (char**) slapi_ch_malloc(sizeof (**actual_type_name));
+ slapi_attr_get_type(tmp_attr, &vattr_type);
+ **actual_type_name = slapi_ch_strdup(vattr_type);
- vattrcache_entry_READ_LOCK(e);
- tmp_attr = attrlist_find( e->e_virtual_attrs, type );
- if (tmp_attr != NULL)
- {
- if(valueset_isempty(&(tmp_attr->a_present_values)))
- {
- /*
- * this is a vattr that has been
- * cached already but does not exist
- */
- r= SLAPI_ENTRY_VATTR_RESOLVED_ABSENT; /* hard coded for prototype */
- }
- else
- {
- /*
- * this is a cached vattr
- * return a duped copy of the values and type
- */
- char *vattr_type=NULL;
-
- r= SLAPI_ENTRY_VATTR_RESOLVED_EXISTS;
- *results = (Slapi_ValueSet**)slapi_ch_calloc(1, sizeof(**results));
- **results = valueset_dup(&(tmp_attr->a_present_values));
-
- *actual_type_name =
- (char**)slapi_ch_malloc(sizeof(**actual_type_name));
- slapi_attr_get_type( tmp_attr, &vattr_type );
- **actual_type_name = slapi_ch_strdup(vattr_type);
-
- }
- }
- vattrcache_entry_READ_UNLOCK(e);
- }
+ }
+ } /* tmp_attr != NULL */
+ }
+ vattrcache_entry_READ_UNLOCK(e);
return r;
}
@@ -2573,45 +2568,42 @@ slapi_entry_vattrcache_find_values_and_type( const Slapi_Entry *e,
int r= SLAPI_ENTRY_VATTR_NOT_RESOLVED; /* assume not resolved yet */
- if( slapi_vattrcache_iscacheable(type) &&
- slapi_entry_vattrcache_watermark_isvalid(e) && e->e_virtual_attrs)
- {
-
- if(e->e_virtual_lock == NULL) {
- return r;
- }
-
- vattrcache_entry_READ_LOCK(e);
- tmp_attr = attrlist_find( e->e_virtual_attrs, type );
- if (tmp_attr != NULL)
- {
- if(valueset_isempty(&(tmp_attr->a_present_values)))
- {
- /*
- * this is a vattr that has been
- * cached already but does not exist
- */
- r= SLAPI_ENTRY_VATTR_RESOLVED_ABSENT; /* hard coded for prototype */
- }
- else
- {
- /*
- * this is a cached vattr
- * return a duped copy of the values and type
- */
- char *vattr_type=NULL;
-
- r= SLAPI_ENTRY_VATTR_RESOLVED_EXISTS;
- *results = valueset_dup(&(tmp_attr->a_present_values));
-
- slapi_attr_get_type( tmp_attr, &vattr_type );
- *actual_type_name = slapi_ch_strdup(vattr_type);
-
- }
- }
- vattrcache_entry_READ_UNLOCK(e);
- }
+ if ((e->e_virtual_attrs == NULL) || ! slapi_entry_vattrcache_watermark_isvalid(e)) {
+ /* there is not virtual attribute cached or they are all invalid
+ * just return
+ */
+ return r;
+ }
+
+ /* Check if the attribute is already cached */
+ vattrcache_entry_READ_LOCK(e);
+ if (e->e_virtual_attrs) {
+ tmp_attr = attrlist_find(e->e_virtual_attrs, type);
+ if (tmp_attr != NULL) {
+ if (valueset_isempty(&(tmp_attr->a_present_values))) {
+ /*
+ * this is a vattr that has been
+ * cached already but does not exist
+ */
+ r = SLAPI_ENTRY_VATTR_RESOLVED_ABSENT; /* hard coded for prototype */
+ } else {
+ /*
+ * this is a cached vattr
+ * return a duped copy of the values and type
+ */
+ char *vattr_type = NULL;
+
+ r = SLAPI_ENTRY_VATTR_RESOLVED_EXISTS;
+ *results = valueset_dup(&(tmp_attr->a_present_values));
+
+ slapi_attr_get_type(tmp_attr, &vattr_type);
+ *actual_type_name = slapi_ch_strdup(vattr_type);
+ }
+ }
+ }
+ vattrcache_entry_READ_UNLOCK(e);
+
return r;
}
@@ -2642,16 +2634,12 @@ slapi_entry_attr_merge_sv(Slapi_Entry *e, const char *type, Slapi_Value **vals )
int
slapi_entry_vattrcache_merge_sv(Slapi_Entry *e, const char *type,
- Slapi_ValueSet *valset)
+ Slapi_ValueSet *valset, int buffer_flags)
{
Slapi_Value **vals = NULL;
/* only attempt to merge if it's a cacheable attribute */
- if ( slapi_vattrcache_iscacheable(type) ) {
-
- if(e->e_virtual_lock == NULL) {
- return 0;
- }
+ if ( slapi_vattrcache_iscacheable(type) || (buffer_flags & SLAPI_VIRTUALATTRS_VALUES_CACHEABLE)) {
vattrcache_entry_WRITE_LOCK(e);
diff --git a/ldap/servers/slapd/slapi-plugin.h b/ldap/servers/slapd/slapi-plugin.h
index 25ccb00..05b9742 100644
--- a/ldap/servers/slapd/slapi-plugin.h
+++ b/ldap/servers/slapd/slapi-plugin.h
@@ -6120,6 +6120,7 @@ int slapi_unregister_backend_state_change(void * handle);
#define SLAPI_VIRTUALATTRS_RETURNED_POINTERS 1
#define SLAPI_VIRTUALATTRS_RETURNED_COPIES 2
#define SLAPI_VIRTUALATTRS_REALATTRS_ONLY 4
+#define SLAPI_VIRTUALATTRS_VALUES_CACHEABLE 8
/* Attribute type name disposition values (type_name_disposition parameter) */
#define SLAPI_VIRTUALATTRS_TYPE_NAME_MATCHED_EXACTLY_OR_ALIAS 1
diff --git a/ldap/servers/slapd/slapi-private.h b/ldap/servers/slapd/slapi-private.h
index 375c33f..a77c9f4 100644
--- a/ldap/servers/slapd/slapi-private.h
+++ b/ldap/servers/slapd/slapi-private.h
@@ -495,7 +495,7 @@ typedef enum{
#define SLAPI_ENTRY_VATTR_RESOLVED_ABSENT -2
#define SLAPI_ENTRY_VATTR_RESOLVED_EXISTS 0
-int slapi_entry_vattrcache_merge_sv(Slapi_Entry *e, const char *type, Slapi_ValueSet *vals);
+int slapi_entry_vattrcache_merge_sv(Slapi_Entry *e, const char *type, Slapi_ValueSet *vals, int buffer_flags);
int slapi_entry_vattrcache_find_values_and_type_ex( const Slapi_Entry *e,
const char *type,
Slapi_ValueSet ***results,
diff --git a/ldap/servers/slapd/vattr.c b/ldap/servers/slapd/vattr.c
index 3360852..b04fca7 100644
--- a/ldap/servers/slapd/vattr.c
+++ b/ldap/servers/slapd/vattr.c
@@ -508,7 +508,7 @@ int vattr_test_filter( Slapi_PBlock *pb,
* entry itself.
* but first lets cache the no result
*/
- slapi_entry_vattrcache_merge_sv(e, type, NULL );
+ slapi_entry_vattrcache_merge_sv(e, type, NULL, buffer_flags);
}
else
{
@@ -548,7 +548,7 @@ int vattr_test_filter( Slapi_PBlock *pb,
* Cache stuff: dups results
*/
slapi_entry_vattrcache_merge_sv(e, actual_type_name[i],
- results[i] );
+ results[i], buffer_flags);
/*
* Free stuff, just in case we did not
* get pointers.
@@ -577,7 +577,7 @@ int vattr_test_filter( Slapi_PBlock *pb,
while(results[i])
{
slapi_entry_vattrcache_merge_sv(e, actual_type_name[i],
- results[i] );
+ results[i], buffer_flags);
/*
* Free stuff, just in case we did not
* get pointers.
@@ -730,7 +730,7 @@ slapi_vattr_values_get_sp(vattr_context *c,
* But first lets cache the no result
* Creates the type (if necessary).
*/
- slapi_entry_vattrcache_merge_sv(e, type, NULL );
+ slapi_entry_vattrcache_merge_sv(e, type, NULL, *buffer_flags);
}
else
@@ -741,7 +741,7 @@ slapi_vattr_values_get_sp(vattr_context *c,
* results.
*/
slapi_entry_vattrcache_merge_sv(e, *actual_type_name,
- *results );
+ *results, *buffer_flags);
}
break;
@@ -953,7 +953,7 @@ int slapi_vattr_namespace_values_get_sp(vattr_context *c,
* But first lets cache the no result
* dups the type (if necessary).
*/
- slapi_entry_vattrcache_merge_sv(e, type, NULL );
+ slapi_entry_vattrcache_merge_sv(e, type, NULL, *buffer_flags);
}
else
@@ -967,7 +967,7 @@ int slapi_vattr_namespace_values_get_sp(vattr_context *c,
* when we do real batched attributes
*/
slapi_entry_vattrcache_merge_sv(e, **actual_type_name,
- **results );
+ **results, *buffer_flags);
}
}
}
10 years, 11 months
Branch '389-ds-base-1.3.1' - ldap/admin
by Noriko Hosoi
ldap/admin/src/scripts/dbverify.in | 1 +
1 file changed, 1 insertion(+)
New commits:
commit 2566c96dd9fc84d9da910738fd0b9f87bbd62e0d
Author: Noriko Hosoi <nhosoi(a)redhat.com>
Date: Fri Apr 12 13:03:57 2013 -0700
Ticket 528 - RFE - get rid of instance specific scripts
Description:
Fixing a minor bug: line 58: [: ==: unary operator expected
Initializing a variable display_version with "no".
(cherry picked from commit 4b2ee49b32344894d4d5a399f36b3744bb8390db)
diff --git a/ldap/admin/src/scripts/dbverify.in b/ldap/admin/src/scripts/dbverify.in
index c62168b..58c238c 100755
--- a/ldap/admin/src/scripts/dbverify.in
+++ b/ldap/admin/src/scripts/dbverify.in
@@ -25,6 +25,7 @@ usage()
echo " -h - Display usage"
}
+display_version="no"
while getopts "Z:n:hVvfd:n:D:" flag
do
case $flag in
10 years, 11 months
ldap/admin
by Noriko Hosoi
ldap/admin/src/scripts/dbverify.in | 1 +
1 file changed, 1 insertion(+)
New commits:
commit 4b2ee49b32344894d4d5a399f36b3744bb8390db
Author: Noriko Hosoi <nhosoi(a)redhat.com>
Date: Fri Apr 12 13:03:57 2013 -0700
Ticket 528 - RFE - get rid of instance specific scripts
Description:
Fixing a minor bug: line 58: [: ==: unary operator expected
Initializing a variable display_version with "no".
diff --git a/ldap/admin/src/scripts/dbverify.in b/ldap/admin/src/scripts/dbverify.in
index c62168b..58c238c 100755
--- a/ldap/admin/src/scripts/dbverify.in
+++ b/ldap/admin/src/scripts/dbverify.in
@@ -25,6 +25,7 @@ usage()
echo " -h - Display usage"
}
+display_version="no"
while getopts "Z:n:hVvfd:n:D:" flag
do
case $flag in
10 years, 11 months
Branch '389-ds-base-1.3.1' - ldap/servers
by Noriko Hosoi
ldap/servers/slapd/back-ldbm/ldif2ldbm.c | 1 -
1 file changed, 1 deletion(-)
New commits:
commit 9da5558ef719b56845baf541515d46d54437e3c6
Author: Noriko Hosoi <nhosoi(a)redhat.com>
Date: Thu Apr 11 16:25:35 2013 -0700
Ticket #529 - dn normalization must handle multiple space characters in attributes
Description: commit 69ff83598d517bed84922b1c7dd67cab023b4d99
introduced a compiler warning: unused variable 'dnformat_len'.
This patch fixes it.
(cherry picked from commit e53d6de87af2a370be1238a348769b19c5f429b6)
diff --git a/ldap/servers/slapd/back-ldbm/ldif2ldbm.c b/ldap/servers/slapd/back-ldbm/ldif2ldbm.c
index 0793041..85ad12d 100644
--- a/ldap/servers/slapd/back-ldbm/ldif2ldbm.c
+++ b/ldap/servers/slapd/back-ldbm/ldif2ldbm.c
@@ -3628,7 +3628,6 @@ int ldbm_back_upgradednformat(Slapi_PBlock *pb)
if (ldbmversion) {
char *ptr = PL_strstr(ldbmversion, BDB_DNFORMAT);
if (ptr) {
- size_t dnformat_len = strlen(ptr);
/* DN format is RFC 4514 compliant */
if (strlen(ptr) == strlen(BDB_DNFORMAT)) { /* no version */
/*
10 years, 11 months
ldap/servers
by Noriko Hosoi
ldap/servers/slapd/back-ldbm/ldif2ldbm.c | 1 -
1 file changed, 1 deletion(-)
New commits:
commit e53d6de87af2a370be1238a348769b19c5f429b6
Author: Noriko Hosoi <nhosoi(a)redhat.com>
Date: Thu Apr 11 16:25:35 2013 -0700
Ticket #529 - dn normalization must handle multiple space characters in attributes
Description: commit 69ff83598d517bed84922b1c7dd67cab023b4d99
introduced a compiler warning: unused variable 'dnformat_len'.
This patch fixes it.
diff --git a/ldap/servers/slapd/back-ldbm/ldif2ldbm.c b/ldap/servers/slapd/back-ldbm/ldif2ldbm.c
index 0793041..85ad12d 100644
--- a/ldap/servers/slapd/back-ldbm/ldif2ldbm.c
+++ b/ldap/servers/slapd/back-ldbm/ldif2ldbm.c
@@ -3628,7 +3628,6 @@ int ldbm_back_upgradednformat(Slapi_PBlock *pb)
if (ldbmversion) {
char *ptr = PL_strstr(ldbmversion, BDB_DNFORMAT);
if (ptr) {
- size_t dnformat_len = strlen(ptr);
/* DN format is RFC 4514 compliant */
if (strlen(ptr) == strlen(BDB_DNFORMAT)) { /* no version */
/*
10 years, 11 months
VERSION.sh
by Noriko Hosoi
VERSION.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
New commits:
commit e00e3e7dd31bb247eade539e21064541153e43db
Author: Noriko Hosoi <nhosoi(a)redhat.com>
Date: Thu Apr 11 10:28:33 2013 -0700
bump version to 1.3.2.pre.a1
diff --git a/VERSION.sh b/VERSION.sh
index d9ddd32..7b914db 100644
--- a/VERSION.sh
+++ b/VERSION.sh
@@ -10,7 +10,7 @@ vendor="389 Project"
# PACKAGE_VERSION is constructed from these
VERSION_MAJOR=1
VERSION_MINOR=3
-VERSION_MAINT=1
+VERSION_MAINT=2
# if this is a PRERELEASE, set VERSION_PREREL
# otherwise, comment it out
# be sure to include the dot prefix in the prerel
10 years, 11 months