|
|
a2f18f |
From a117d87aac507e4002429e5f7aebe61a867da06d Mon Sep 17 00:00:00 2001
|
|
|
a2f18f |
From: Mark Reynolds <mreynolds@redhat.com>
|
|
|
a2f18f |
Date: Wed, 5 Aug 2015 16:31:49 -0400
|
|
|
a2f18f |
Subject: [PATCH 34/39] Ticket 48215 - verify_db.pl doesn't verify DB specified
|
|
|
a2f18f |
by -a option
|
|
|
a2f18f |
|
|
|
a2f18f |
Bug Description: verify_db.pl -a only uses the db location for
|
|
|
a2f18f |
checking the transaction logs, because it ends up
|
|
|
a2f18f |
calling "nsslapd dbverify" which only checks the
|
|
|
a2f18f |
db files in the server configuration.
|
|
|
a2f18f |
|
|
|
a2f18f |
Fix Description: Allow a new argument to be passed to "nsslapd dbverify"
|
|
|
a2f18f |
that specifies the db parent directory.
|
|
|
a2f18f |
|
|
|
a2f18f |
https://fedorahosted.org/389/ticket/48215
|
|
|
a2f18f |
|
|
|
a2f18f |
Reviewed by: nhosoi(Thanks!)
|
|
|
a2f18f |
|
|
|
a2f18f |
(cherry picked from commit 27fadb75ec1f3b252028ce715cd7fa16da1f6525)
|
|
|
a2f18f |
(cherry picked from commit 210071c682751897099e8eb138e5db1e47ac2bae)
|
|
|
a2f18f |
---
|
|
|
a2f18f |
ldap/admin/src/scripts/dbverify.in | 3 ++-
|
|
|
a2f18f |
ldap/admin/src/scripts/verify-db.pl.in | 17 +++++++++--------
|
|
|
a2f18f |
ldap/servers/slapd/back-ldbm/dbverify.c | 13 +++++++++++++
|
|
|
a2f18f |
ldap/servers/slapd/main.c | 18 +++++++++++++-----
|
|
|
a2f18f |
ldap/servers/slapd/pblock.c | 12 +++++++++++-
|
|
|
a2f18f |
ldap/servers/slapd/slap.h | 2 ++
|
|
|
a2f18f |
ldap/servers/slapd/slapi-plugin.h | 3 +++
|
|
|
a2f18f |
man/man8/dbverify.8 | 3 +++
|
|
|
a2f18f |
8 files changed, 56 insertions(+), 15 deletions(-)
|
|
|
a2f18f |
|
|
|
a2f18f |
diff --git a/ldap/admin/src/scripts/dbverify.in b/ldap/admin/src/scripts/dbverify.in
|
|
|
a2f18f |
index 6306a07..778a9ba 100755
|
|
|
a2f18f |
--- a/ldap/admin/src/scripts/dbverify.in
|
|
|
a2f18f |
+++ b/ldap/admin/src/scripts/dbverify.in
|
|
|
a2f18f |
@@ -26,7 +26,7 @@ usage()
|
|
|
a2f18f |
}
|
|
|
a2f18f |
|
|
|
a2f18f |
display_version="no"
|
|
|
a2f18f |
-while getopts "Z:n:hVvfd:n:D:" flag
|
|
|
a2f18f |
+while getopts "Z:n:hVvfd:n:D:a:" flag
|
|
|
a2f18f |
do
|
|
|
a2f18f |
case $flag in
|
|
|
a2f18f |
h) usage
|
|
|
a2f18f |
@@ -39,6 +39,7 @@ do
|
|
|
a2f18f |
display_version="yes";;
|
|
|
a2f18f |
f) args=$args" -f";;
|
|
|
a2f18f |
D) args=$args" -D $OPTARG";;
|
|
|
a2f18f |
+ a) args=$args" -a $OPTARG";;
|
|
|
a2f18f |
?) usage
|
|
|
a2f18f |
exit 1;;
|
|
|
a2f18f |
esac
|
|
|
a2f18f |
diff --git a/ldap/admin/src/scripts/verify-db.pl.in b/ldap/admin/src/scripts/verify-db.pl.in
|
|
|
a2f18f |
index ae56a16..d481ecb 100644
|
|
|
a2f18f |
--- a/ldap/admin/src/scripts/verify-db.pl.in
|
|
|
a2f18f |
+++ b/ldap/admin/src/scripts/verify-db.pl.in
|
|
|
a2f18f |
@@ -16,7 +16,7 @@ DSUtil::libpath_add("@db_libdir@");
|
|
|
a2f18f |
DSUtil::libpath_add("@libdir@");
|
|
|
a2f18f |
$ENV{'PATH'} = "@libdir@/@package_name@/slapd-$servid:@db_bindir@:/usr/bin:/";
|
|
|
a2f18f |
$ENV{'SHLIB_PATH'} = "$ENV{'LD_LIBRARY_PATH'}";
|
|
|
a2f18f |
-
|
|
|
a2f18f |
+my $custom_dbdir = 0;
|
|
|
a2f18f |
my $i = 0;
|
|
|
a2f18f |
|
|
|
a2f18f |
sub usage
|
|
|
a2f18f |
@@ -118,12 +118,7 @@ sub getLastLogfile
|
|
|
a2f18f |
return \$logfile;
|
|
|
a2f18f |
}
|
|
|
a2f18f |
|
|
|
a2f18f |
-$isWin = -d '\\';
|
|
|
a2f18f |
-if ($isWin) {
|
|
|
a2f18f |
- $NULL = "nul";
|
|
|
a2f18f |
-} else {
|
|
|
a2f18f |
- $NULL = "/dev/null";
|
|
|
a2f18f |
-}
|
|
|
a2f18f |
+$NULL = "/dev/null";
|
|
|
a2f18f |
|
|
|
a2f18f |
while ($i <= $#ARGV) {
|
|
|
a2f18f |
if ( "$ARGV[$i]" eq "-a" ) { # path to search the db files
|
|
|
a2f18f |
@@ -149,6 +144,8 @@ print("*****************************************************************\n");
|
|
|
a2f18f |
|
|
|
a2f18f |
if ( "$startpoint" eq "" ) {
|
|
|
a2f18f |
$startpoint = "@localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/db";
|
|
|
a2f18f |
+} else {
|
|
|
a2f18f |
+ $custom_dbdir = 1;
|
|
|
a2f18f |
}
|
|
|
a2f18f |
# get dirs having DBVERSION
|
|
|
a2f18f |
my $dbdirs = getDbDir($startpoint);
|
|
|
a2f18f |
@@ -192,7 +189,11 @@ for (my $i = 0; "$$dbdirs[$i]" ne ""; $i++)
|
|
|
a2f18f |
|
|
|
a2f18f |
# Check db files by db_verify
|
|
|
a2f18f |
print "Verify db files ... ";
|
|
|
a2f18f |
-open(DBVERIFY, "@sbindir@/dbverify -Z $servid 2>&1 1> $NULL |");
|
|
|
a2f18f |
+if ($custom_dbdir){
|
|
|
a2f18f |
+ open(DBVERIFY, "@sbindir@/dbverify -Z $servid -a $startpoint 2>&1 1> $NULL |");
|
|
|
a2f18f |
+} else {
|
|
|
a2f18f |
+ open(DBVERIFY, "@sbindir@/dbverify -Z $servid 2>&1 1> $NULL |");
|
|
|
a2f18f |
+}
|
|
|
a2f18f |
sleep 1;
|
|
|
a2f18f |
my $bad_index = 0;
|
|
|
a2f18f |
my $bad_id2entry = 0;
|
|
|
a2f18f |
diff --git a/ldap/servers/slapd/back-ldbm/dbverify.c b/ldap/servers/slapd/back-ldbm/dbverify.c
|
|
|
a2f18f |
index 85ee7a0..315ef93 100644
|
|
|
a2f18f |
--- a/ldap/servers/slapd/back-ldbm/dbverify.c
|
|
|
a2f18f |
+++ b/ldap/servers/slapd/back-ldbm/dbverify.c
|
|
|
a2f18f |
@@ -186,13 +186,16 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
|
|
|
a2f18f |
int rval = 1;
|
|
|
a2f18f |
int rval_main = 0;
|
|
|
a2f18f |
char **instance_names = NULL;
|
|
|
a2f18f |
+ char *dbdir = NULL;
|
|
|
a2f18f |
|
|
|
a2f18f |
slapi_log_error(SLAPI_LOG_TRACE, "verify DB", "Verifying db files...\n");
|
|
|
a2f18f |
slapi_pblock_get(pb, SLAPI_BACKEND_INSTANCE_NAME, &instance_names);
|
|
|
a2f18f |
slapi_pblock_get(pb, SLAPI_SEQ_TYPE, &verbose);
|
|
|
a2f18f |
slapi_pblock_get(pb, SLAPI_PLUGIN_PRIVATE, &li;;
|
|
|
a2f18f |
+ slapi_pblock_get(pb, SLAPI_DBVERIFY_DBDIR, &dbdir);
|
|
|
a2f18f |
ldbm_config_load_dse_info(li);
|
|
|
a2f18f |
ldbm_config_internal_set(li, CONFIG_DB_TRANSACTION_LOGGING, "off");
|
|
|
a2f18f |
+
|
|
|
a2f18f |
/* no write needed; choose EXPORT MODE */
|
|
|
a2f18f |
if (0 != dblayer_start(li, DBLAYER_EXPORT_MODE))
|
|
|
a2f18f |
{
|
|
|
a2f18f |
@@ -211,6 +214,11 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
|
|
|
a2f18f |
inst = ldbm_instance_find_by_name(li, *inp);
|
|
|
a2f18f |
if (inst)
|
|
|
a2f18f |
{
|
|
|
a2f18f |
+ if (dbdir){
|
|
|
a2f18f |
+ /* verifying backup */
|
|
|
a2f18f |
+ slapi_ch_free_string(&inst->inst_parent_dir_name);
|
|
|
a2f18f |
+ inst->inst_parent_dir_name = slapi_ch_strdup(dbdir);
|
|
|
a2f18f |
+ }
|
|
|
a2f18f |
rval_main |= dbverify_ext(inst, verbose);
|
|
|
a2f18f |
}
|
|
|
a2f18f |
else
|
|
|
a2f18f |
@@ -235,6 +243,11 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
|
|
|
a2f18f |
inst->inst_name);
|
|
|
a2f18f |
continue; /* skip this instance and go to the next*/
|
|
|
a2f18f |
}
|
|
|
a2f18f |
+ if (dbdir){
|
|
|
a2f18f |
+ /* verifying backup */
|
|
|
a2f18f |
+ slapi_ch_free_string(&inst->inst_parent_dir_name);
|
|
|
a2f18f |
+ inst->inst_parent_dir_name = slapi_ch_strdup(dbdir);
|
|
|
a2f18f |
+ }
|
|
|
a2f18f |
rval_main |= dbverify_ext(inst, verbose);
|
|
|
a2f18f |
}
|
|
|
a2f18f |
}
|
|
|
a2f18f |
diff --git a/ldap/servers/slapd/main.c b/ldap/servers/slapd/main.c
|
|
|
a2f18f |
index 9016144..922de97 100644
|
|
|
a2f18f |
--- a/ldap/servers/slapd/main.c
|
|
|
a2f18f |
+++ b/ldap/servers/slapd/main.c
|
|
|
a2f18f |
@@ -435,13 +435,15 @@ static int ldif_printkey = EXPORT_PRINTKEY|EXPORT_APPENDMODE;
|
|
|
a2f18f |
static char *archive_name = NULL;
|
|
|
a2f18f |
static int db2ldif_dump_replica = 0;
|
|
|
a2f18f |
static int db2ldif_dump_uniqueid = 1;
|
|
|
a2f18f |
-static int ldif2db_generate_uniqueid = SLAPI_UNIQUEID_GENERATE_TIME_BASED;
|
|
|
a2f18f |
-static int dbverify_verbose = 0;
|
|
|
a2f18f |
+static int ldif2db_generate_uniqueid = SLAPI_UNIQUEID_GENERATE_TIME_BASED;
|
|
|
a2f18f |
static char *ldif2db_namespaceid = NULL;
|
|
|
a2f18f |
int importexport_encrypt = 0;
|
|
|
a2f18f |
static int upgradedb_flags = 0;
|
|
|
a2f18f |
static int upgradednformat_dryrun = 0;
|
|
|
a2f18f |
static int is_quiet = 0;
|
|
|
a2f18f |
+/* dbverify options */
|
|
|
a2f18f |
+static int dbverify_verbose = 0;
|
|
|
a2f18f |
+static char *dbverify_dbdir = NULL;
|
|
|
a2f18f |
|
|
|
a2f18f |
/* taken from idsktune */
|
|
|
a2f18f |
#if defined(__sun)
|
|
|
a2f18f |
@@ -1301,13 +1303,14 @@ process_command_line(int argc, char **argv, char *myname,
|
|
|
a2f18f |
{"dryrun",ArgNone,'N'},
|
|
|
a2f18f |
{0,0,0}};
|
|
|
a2f18f |
|
|
|
a2f18f |
- char *opts_dbverify = "vVfd:n:D:";
|
|
|
a2f18f |
+ char *opts_dbverify = "vVfd:n:D:a:";
|
|
|
a2f18f |
struct opt_ext long_options_dbverify[] = {
|
|
|
a2f18f |
{"version",ArgNone,'v'},
|
|
|
a2f18f |
{"debug",ArgRequired,'d'},
|
|
|
a2f18f |
{"backend",ArgRequired,'n'},
|
|
|
a2f18f |
{"configDir",ArgRequired,'D'},
|
|
|
a2f18f |
{"verbose",ArgNone,'V'},
|
|
|
a2f18f |
+ {"dbdir",ArgRequired,'a'},
|
|
|
a2f18f |
{0,0,0}};
|
|
|
a2f18f |
|
|
|
a2f18f |
char *opts_referral = "vd:p:r:SD:";
|
|
|
a2f18f |
@@ -1674,7 +1677,11 @@ process_command_line(int argc, char **argv, char *myname,
|
|
|
a2f18f |
break;
|
|
|
a2f18f |
|
|
|
a2f18f |
case 'a': /* archive pathname for db */
|
|
|
a2f18f |
- archive_name = optarg_ext;
|
|
|
a2f18f |
+ if ( slapd_exemode == SLAPD_EXEMODE_DBVERIFY ) {
|
|
|
a2f18f |
+ dbverify_dbdir = optarg_ext;
|
|
|
a2f18f |
+ } else {
|
|
|
a2f18f |
+ archive_name = optarg_ext;
|
|
|
a2f18f |
+ }
|
|
|
a2f18f |
break;
|
|
|
a2f18f |
|
|
|
a2f18f |
case 'Z':
|
|
|
a2f18f |
@@ -2688,7 +2695,8 @@ slapd_exemode_dbverify()
|
|
|
a2f18f |
pb.pb_plugin = backend_plugin;
|
|
|
a2f18f |
pb.pb_instance_name = (char *)cmd_line_instance_names;
|
|
|
a2f18f |
pb.pb_task_flags = SLAPI_TASK_RUNNING_FROM_COMMANDLINE;
|
|
|
a2f18f |
-
|
|
|
a2f18f |
+ pb.pb_dbverify_dbdir = dbverify_dbdir;
|
|
|
a2f18f |
+
|
|
|
a2f18f |
if ( backend_plugin->plg_dbverify != NULL ) {
|
|
|
a2f18f |
return_value = (*backend_plugin->plg_dbverify)( &pb );
|
|
|
a2f18f |
} else {
|
|
|
a2f18f |
diff --git a/ldap/servers/slapd/pblock.c b/ldap/servers/slapd/pblock.c
|
|
|
a2f18f |
index c10f788..bf57a33 100644
|
|
|
a2f18f |
--- a/ldap/servers/slapd/pblock.c
|
|
|
a2f18f |
+++ b/ldap/servers/slapd/pblock.c
|
|
|
a2f18f |
@@ -5,7 +5,7 @@
|
|
|
a2f18f |
* All rights reserved.
|
|
|
a2f18f |
*
|
|
|
a2f18f |
* License: GPL (version 3 or any later version).
|
|
|
a2f18f |
- * See LICENSE for details.
|
|
|
a2f18f |
+ * See LICENSE for details.
|
|
|
a2f18f |
* END COPYRIGHT BLOCK **/
|
|
|
a2f18f |
|
|
|
a2f18f |
#ifdef HAVE_CONFIG_H
|
|
|
a2f18f |
@@ -1677,6 +1677,11 @@ slapi_pblock_get( Slapi_PBlock *pblock, int arg, void *value )
|
|
|
a2f18f |
(*(IFP*)value) = pblock->pb_txn_ruv_mods_fn;
|
|
|
a2f18f |
break;
|
|
|
a2f18f |
|
|
|
a2f18f |
+ /* dbverify */
|
|
|
a2f18f |
+ case SLAPI_DBVERIFY_DBDIR:
|
|
|
a2f18f |
+ (*(char **)value) = pblock->pb_dbverify_dbdir;
|
|
|
a2f18f |
+ break;
|
|
|
a2f18f |
+
|
|
|
a2f18f |
/* Search results set */
|
|
|
a2f18f |
case SLAPI_SEARCH_RESULT_SET:
|
|
|
a2f18f |
if(pblock->pb_op!=NULL)
|
|
|
a2f18f |
@@ -3520,6 +3525,11 @@ slapi_pblock_set( Slapi_PBlock *pblock, int arg, void *value )
|
|
|
a2f18f |
pblock->pb_aci_target_check = *((int *) value);
|
|
|
a2f18f |
break;
|
|
|
a2f18f |
|
|
|
a2f18f |
+ /* dbverify */
|
|
|
a2f18f |
+ case SLAPI_DBVERIFY_DBDIR:
|
|
|
a2f18f |
+ pblock->pb_dbverify_dbdir = (char *) value;
|
|
|
a2f18f |
+ break;
|
|
|
a2f18f |
+
|
|
|
a2f18f |
default:
|
|
|
a2f18f |
LDAPDebug( LDAP_DEBUG_ANY,
|
|
|
a2f18f |
"Unknown parameter block argument %d\n", arg, 0, 0 );
|
|
|
a2f18f |
diff --git a/ldap/servers/slapd/slap.h b/ldap/servers/slapd/slap.h
|
|
|
a2f18f |
index 6d1ad7b..823568d 100644
|
|
|
a2f18f |
--- a/ldap/servers/slapd/slap.h
|
|
|
a2f18f |
+++ b/ldap/servers/slapd/slap.h
|
|
|
a2f18f |
@@ -1600,6 +1600,8 @@ typedef struct slapi_pblock {
|
|
|
a2f18f |
int pb_seq_type;
|
|
|
a2f18f |
char *pb_seq_attrname;
|
|
|
a2f18f |
char *pb_seq_val;
|
|
|
a2f18f |
+ /* dbverify argument */
|
|
|
a2f18f |
+ char *pb_dbverify_dbdir;
|
|
|
a2f18f |
/* ldif2db arguments */
|
|
|
a2f18f |
char *pb_ldif_file;
|
|
|
a2f18f |
int pb_removedupvals;
|
|
|
a2f18f |
diff --git a/ldap/servers/slapd/slapi-plugin.h b/ldap/servers/slapd/slapi-plugin.h
|
|
|
a2f18f |
index a8c7a4a..6b04610 100644
|
|
|
a2f18f |
--- a/ldap/servers/slapd/slapi-plugin.h
|
|
|
a2f18f |
+++ b/ldap/servers/slapd/slapi-plugin.h
|
|
|
a2f18f |
@@ -7289,6 +7289,9 @@ typedef struct slapi_plugindesc {
|
|
|
a2f18f |
/* ACI Target Check */
|
|
|
a2f18f |
#define SLAPI_ACI_TARGET_CHECK 1946
|
|
|
a2f18f |
|
|
|
a2f18f |
+/* dbverify */
|
|
|
a2f18f |
+#define SLAPI_DBVERIFY_DBDIR 1947
|
|
|
a2f18f |
+
|
|
|
a2f18f |
/* convenience macros for checking modify operation types */
|
|
|
a2f18f |
#define SLAPI_IS_MOD_ADD(x) (((x) & ~LDAP_MOD_BVALUES) == LDAP_MOD_ADD)
|
|
|
a2f18f |
#define SLAPI_IS_MOD_DELETE(x) (((x) & ~LDAP_MOD_BVALUES) == LDAP_MOD_DELETE)
|
|
|
a2f18f |
diff --git a/man/man8/dbverify.8 b/man/man8/dbverify.8
|
|
|
a2f18f |
index 30d6933..c74747a 100644
|
|
|
a2f18f |
--- a/man/man8/dbverify.8
|
|
|
a2f18f |
+++ b/man/man8/dbverify.8
|
|
|
a2f18f |
@@ -31,6 +31,9 @@ one instance on the system, this option can be skipped.
|
|
|
a2f18f |
.B \fB\-n\fR \fIBackend Name\fR
|
|
|
a2f18f |
The name of the LDBM database to reindex. Example: userRoot
|
|
|
a2f18f |
.TP
|
|
|
a2f18f |
+.B \fB\-a\fR \fIDatabase Directory\fR
|
|
|
a2f18f |
+Location of database if it is different than what is in the server configuration(e.g. backup directories)
|
|
|
a2f18f |
+.TP
|
|
|
a2f18f |
.B \fB\-d\fR \fIDebug Level\fR
|
|
|
a2f18f |
Sets the debugging level.
|
|
|
a2f18f |
.TP
|
|
|
a2f18f |
--
|
|
|
a2f18f |
1.9.3
|
|
|
a2f18f |
|