Branch '389-ds-base-1.3.3' - ldap/admin
by Mark Reynolds
ldap/admin/src/scripts/dbverify.in | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
New commits:
commit 5f395ed204003fa3dc1c04e336e67ce7d7ca3b5f
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Thu Aug 6 10:13:40 2015 -0400
Ticket 48215 - update dbverify usage
Description: Need to add the "-a" argument usage
https://fedorahosted.org/389/ticket/48215
(cherry picked from commit 20284e6539f557efc0679d974d5156cdcd55c407)
diff --git a/ldap/admin/src/scripts/dbverify.in b/ldap/admin/src/scripts/dbverify.in
index 778a9ba..461cc16 100755
--- a/ldap/admin/src/scripts/dbverify.in
+++ b/ldap/admin/src/scripts/dbverify.in
@@ -14,15 +14,16 @@ PATH=$PATH:/bin
usage()
{
- echo "Usage: dbverify [-Z serverID] [-n backend_instance] [-V] [-v] [-d debuglevel] [-h]"
+ echo "Usage: dbverify [-Z serverID] [-n backend_instance] [-a db_directory ] [-V] [-v] [-d debuglevel] [-h]"
echo "Note if \"-n backend\" is not passed, verify all DBs."
echo "Options:"
- echo " -Z - Server instance identifier"
- echo " -n backend - Backend database name. Example: userRoot"
- echo " -V - Verbose output"
- echo " -d debuglevel - Debugging level"
- echo " -v - Display version"
- echo " -h - Display usage"
+ echo " -Z - Server instance identifier"
+ echo " -n backend - Backend database name. Example: userRoot"
+ echo " -a db_directory - Database directory"
+ echo " -V - Verbose output"
+ echo " -d debuglevel - Debugging level"
+ echo " -v - Display version"
+ echo " -h - Display usage"
}
display_version="no"
8 years, 8 months
Branch '389-ds-base-1.3.4' - ldap/admin
by Mark Reynolds
ldap/admin/src/scripts/dbverify.in | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
New commits:
commit 8e08c8b53641d807b63d87ee79564c596c5da4dd
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Thu Aug 6 10:13:40 2015 -0400
Ticket 48215 - update dbverify usage
Description: Need to add the "-a" argument usage
https://fedorahosted.org/389/ticket/48215
(cherry picked from commit 20284e6539f557efc0679d974d5156cdcd55c407)
diff --git a/ldap/admin/src/scripts/dbverify.in b/ldap/admin/src/scripts/dbverify.in
index 778a9ba..461cc16 100755
--- a/ldap/admin/src/scripts/dbverify.in
+++ b/ldap/admin/src/scripts/dbverify.in
@@ -14,15 +14,16 @@ PATH=$PATH:/bin
usage()
{
- echo "Usage: dbverify [-Z serverID] [-n backend_instance] [-V] [-v] [-d debuglevel] [-h]"
+ echo "Usage: dbverify [-Z serverID] [-n backend_instance] [-a db_directory ] [-V] [-v] [-d debuglevel] [-h]"
echo "Note if \"-n backend\" is not passed, verify all DBs."
echo "Options:"
- echo " -Z - Server instance identifier"
- echo " -n backend - Backend database name. Example: userRoot"
- echo " -V - Verbose output"
- echo " -d debuglevel - Debugging level"
- echo " -v - Display version"
- echo " -h - Display usage"
+ echo " -Z - Server instance identifier"
+ echo " -n backend - Backend database name. Example: userRoot"
+ echo " -a db_directory - Database directory"
+ echo " -V - Verbose output"
+ echo " -d debuglevel - Debugging level"
+ echo " -v - Display version"
+ echo " -h - Display usage"
}
display_version="no"
8 years, 8 months
ldap/admin
by Mark Reynolds
ldap/admin/src/scripts/dbverify.in | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
New commits:
commit 20284e6539f557efc0679d974d5156cdcd55c407
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Thu Aug 6 10:13:40 2015 -0400
Ticket 48215 - update dbverify usage
Description: Need to add the "-a" argument usage
https://fedorahosted.org/389/ticket/48215
diff --git a/ldap/admin/src/scripts/dbverify.in b/ldap/admin/src/scripts/dbverify.in
index 778a9ba..461cc16 100755
--- a/ldap/admin/src/scripts/dbverify.in
+++ b/ldap/admin/src/scripts/dbverify.in
@@ -14,15 +14,16 @@ PATH=$PATH:/bin
usage()
{
- echo "Usage: dbverify [-Z serverID] [-n backend_instance] [-V] [-v] [-d debuglevel] [-h]"
+ echo "Usage: dbverify [-Z serverID] [-n backend_instance] [-a db_directory ] [-V] [-v] [-d debuglevel] [-h]"
echo "Note if \"-n backend\" is not passed, verify all DBs."
echo "Options:"
- echo " -Z - Server instance identifier"
- echo " -n backend - Backend database name. Example: userRoot"
- echo " -V - Verbose output"
- echo " -d debuglevel - Debugging level"
- echo " -v - Display version"
- echo " -h - Display usage"
+ echo " -Z - Server instance identifier"
+ echo " -n backend - Backend database name. Example: userRoot"
+ echo " -a db_directory - Database directory"
+ echo " -V - Verbose output"
+ echo " -d debuglevel - Debugging level"
+ echo " -v - Display version"
+ echo " -h - Display usage"
}
display_version="no"
8 years, 8 months
Branch '389-ds-base-1.2.11' - ldap/admin ldap/servers
by Mark Reynolds
ldap/admin/src/scripts/template-dbverify.in | 6 +++++-
ldap/admin/src/scripts/template-verify-db.pl.in | 10 +++++++++-
ldap/servers/slapd/back-ldbm/dbverify.c | 13 +++++++++++++
ldap/servers/slapd/main.c | 18 +++++++++++++-----
ldap/servers/slapd/pblock.c | 10 ++++++++++
ldap/servers/slapd/slap.h | 2 ++
ldap/servers/slapd/slapi-plugin.h | 3 +++
7 files changed, 55 insertions(+), 7 deletions(-)
New commits:
commit cf8c8d78990b66fd7005839e843dfe795eb17327
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Wed Aug 5 16:31:49 2015 -0400
Ticket 48215 - verify_db.pl doesn't verify DB specified by -a option
Bug Description: verify_db.pl -a only uses the db location for
checking the transaction logs, because it ends up
calling "nsslapd dbverify" which only checks the
db files in the server configuration.
Fix Description: Allow a new argument to be passed to "nsslapd dbverify"
that specifies the db parent directory.
https://fedorahosted.org/389/ticket/48215
Reviewed by: nhosoi(Thanks!)
(cherry picked from commit 27fadb75ec1f3b252028ce715cd7fa16da1f6525)
Conflicts:
ldap/servers/slapd/pblock.c
(cherry picked from commit 6878a6cb355ff96fc390d71528978420ffc316e7)
Conflicts:
ldap/servers/slapd/pblock.c
ldap/servers/slapd/slapi-plugin.h
(cherry picked from commit bb704aac1868ab719d0823871cf0b677e67fcf41)
Conflicts:
ldap/admin/src/scripts/dbverify.in
ldap/admin/src/scripts/verify-db.pl.in
ldap/servers/slapd/main.c
man/man8/dbverify.8
diff --git a/ldap/admin/src/scripts/template-dbverify.in b/ldap/admin/src/scripts/template-dbverify.in
index 8c1a98e..04ef555 100755
--- a/ldap/admin/src/scripts/template-dbverify.in
+++ b/ldap/admin/src/scripts/template-dbverify.in
@@ -28,8 +28,12 @@ do
args=$args" "$1
elif [ "$1" = "-V" ]; then
args=$args" "$1
+ elif [ "$1" = "-a" ]; then
+ args=$args" "$1
+ shift
+ args=$args" "$1
else
- echo "Usage: dbverify [-n backend_instance] [-V]"
+ echo "Usage: dbverify [-n backend_instance] [-a db_file_directory] [-V]"
echo "Note : if \"-n backend_instance\" is not passed, verify all DBs."
echo " -V : verbose"
exit 1
diff --git a/ldap/admin/src/scripts/template-verify-db.pl.in b/ldap/admin/src/scripts/template-verify-db.pl.in
index c352eb2..f48d94f 100644
--- a/ldap/admin/src/scripts/template-verify-db.pl.in
+++ b/ldap/admin/src/scripts/template-verify-db.pl.in
@@ -38,6 +38,8 @@
# END COPYRIGHT BLOCK
#
+my $customer_dbdir = 0;
+
sub usage
{
print "Usage: $0 [ -a <fullpath_to_db_dir> ]\n";
@@ -164,6 +166,8 @@ print("*****************************************************************\n");
if ( "$startpoint" eq "" ) {
$startpoint = "{{DB-DIR}}";
+} else {
+ $custom_dbdir = 1;
}
# get dirs having DBVERSION
my $dbdirs = getDbDir($startpoint);
@@ -215,7 +219,11 @@ for (my $i = 0; "$$dbdirs[$i]" ne ""; $i++)
# Check db files by db_verify
print "Verify db files ... ";
-open(DBVERIFY, "dbverify $thisdb 2>&1 1> $NULL |");
+if ($custom_dbdir){
+ open(DBVERIFY, "dbverify $thisdb -a $startpoint 2>&1 1> $NULL |");
+} else {
+ open(DBVERIFY, "dbverify $thisdb 2>&1 1> $NULL |");
+}
sleep 1;
my $bad_index = 0;
my $bad_id2entry = 0;
diff --git a/ldap/servers/slapd/back-ldbm/dbverify.c b/ldap/servers/slapd/back-ldbm/dbverify.c
index ffd5900..b0b2d78 100644
--- a/ldap/servers/slapd/back-ldbm/dbverify.c
+++ b/ldap/servers/slapd/back-ldbm/dbverify.c
@@ -214,13 +214,16 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
int rval = 1;
int rval_main = 0;
char **instance_names = NULL;
+ char *dbdir = NULL;
slapi_log_error(SLAPI_LOG_TRACE, "verify DB", "Verifying db files...\n");
slapi_pblock_get(pb, SLAPI_BACKEND_INSTANCE_NAME, &instance_names);
slapi_pblock_get(pb, SLAPI_SEQ_TYPE, &verbose);
slapi_pblock_get(pb, SLAPI_PLUGIN_PRIVATE, &li);
+ slapi_pblock_get(pb, SLAPI_DBVERIFY_DBDIR, &dbdir);
ldbm_config_load_dse_info(li);
ldbm_config_internal_set(li, CONFIG_DB_TRANSACTION_LOGGING, "off");
+
/* no write needed; choose EXPORT MODE */
if (0 != dblayer_start(li, DBLAYER_EXPORT_MODE))
{
@@ -239,6 +242,11 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
inst = ldbm_instance_find_by_name(li, *inp);
if (inst)
{
+ if (dbdir){
+ /* verifying backup */
+ slapi_ch_free_string(&inst->inst_parent_dir_name);
+ inst->inst_parent_dir_name = slapi_ch_strdup(dbdir);
+ }
rval_main |= dbverify_ext(inst, verbose);
}
else
@@ -263,6 +271,11 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
inst->inst_name);
continue; /* skip this instance and go to the next*/
}
+ if (dbdir){
+ /* verifying backup */
+ slapi_ch_free_string(&inst->inst_parent_dir_name);
+ inst->inst_parent_dir_name = slapi_ch_strdup(dbdir);
+ }
rval_main |= dbverify_ext(inst, verbose);
}
}
diff --git a/ldap/servers/slapd/main.c b/ldap/servers/slapd/main.c
index 5d3e7e7..2442610 100644
--- a/ldap/servers/slapd/main.c
+++ b/ldap/servers/slapd/main.c
@@ -490,12 +490,14 @@ static int ldif_printkey = EXPORT_PRINTKEY|EXPORT_APPENDMODE;
static char *archive_name = NULL;
static int db2ldif_dump_replica = 0;
static int db2ldif_dump_uniqueid = 1;
-static int ldif2db_generate_uniqueid = SLAPI_UNIQUEID_GENERATE_TIME_BASED;
-static int dbverify_verbose = 0;
+static int ldif2db_generate_uniqueid = SLAPI_UNIQUEID_GENERATE_TIME_BASED;
static char *ldif2db_namespaceid = NULL;
int importexport_encrypt = 0;
static int upgradedb_flags = 0;
static int upgradednformat_dryrun = 0;
+/* dbverify options */
+static int dbverify_verbose = 0;
+static char *dbverify_dbdir = NULL;
/* taken from idsktune */
#if defined(__sun)
@@ -1449,13 +1451,14 @@ process_command_line(int argc, char **argv, char *myname,
{"dryrun",ArgNone,'N'},
{0,0,0}};
- char *opts_dbverify = "vVfd:n:D:";
+ char *opts_dbverify = "vVfd:n:D:a:";
struct opt_ext long_options_dbverify[] = {
{"version",ArgNone,'v'},
{"debug",ArgRequired,'d'},
{"backend",ArgRequired,'n'},
{"configDir",ArgRequired,'D'},
{"verbose",ArgNone,'V'},
+ {"dbdir",ArgRequired,'a'},
{0,0,0}};
char *opts_referral = "vd:p:r:SD:";
@@ -1841,7 +1844,11 @@ process_command_line(int argc, char **argv, char *myname,
break;
case 'a': /* archive pathname for db */
- archive_name = optarg_ext;
+ if ( slapd_exemode == SLAPD_EXEMODE_DBVERIFY ) {
+ dbverify_dbdir = optarg_ext;
+ } else {
+ archive_name = optarg_ext;
+ }
break;
case 'Z':
@@ -2850,7 +2857,8 @@ slapd_exemode_dbverify()
pb.pb_plugin = backend_plugin;
pb.pb_instance_name = (char *)cmd_line_instance_names;
pb.pb_task_flags = SLAPI_TASK_RUNNING_FROM_COMMANDLINE;
-
+ pb.pb_dbverify_dbdir = dbverify_dbdir;
+
if ( backend_plugin->plg_dbverify != NULL ) {
return_value = (*backend_plugin->plg_dbverify)( &pb );
} else {
diff --git a/ldap/servers/slapd/pblock.c b/ldap/servers/slapd/pblock.c
index 849c20e..b12881b 100644
--- a/ldap/servers/slapd/pblock.c
+++ b/ldap/servers/slapd/pblock.c
@@ -1699,6 +1699,11 @@ slapi_pblock_get( Slapi_PBlock *pblock, int arg, void *value )
(*(IFP*)value) = pblock->pb_txn_ruv_mods_fn;
break;
+ /* dbverify */
+ case SLAPI_DBVERIFY_DBDIR:
+ (*(char **)value) = pblock->pb_dbverify_dbdir;
+ break;
+
/* Search results set */
case SLAPI_SEARCH_RESULT_SET:
if(pblock->pb_op!=NULL)
@@ -3523,6 +3528,11 @@ slapi_pblock_set( Slapi_PBlock *pblock, int arg, void *value )
pblock->pb_paged_results_index = *(int *)value;
break;
+ /* dbverify */
+ case SLAPI_DBVERIFY_DBDIR:
+ pblock->pb_dbverify_dbdir = (char *) value;
+ break;
+
default:
LDAPDebug( LDAP_DEBUG_ANY,
"Unknown parameter block argument %d\n", arg, 0, 0 );
diff --git a/ldap/servers/slapd/slap.h b/ldap/servers/slapd/slap.h
index c298033..da90fe6 100644
--- a/ldap/servers/slapd/slap.h
+++ b/ldap/servers/slapd/slap.h
@@ -1548,6 +1548,8 @@ typedef struct slapi_pblock {
int pb_seq_type;
char *pb_seq_attrname;
char *pb_seq_val;
+ /* dbverify argument */
+ char *pb_dbverify_dbdir;
/* ldif2db arguments */
char *pb_ldif_file;
int pb_removedupvals;
diff --git a/ldap/servers/slapd/slapi-plugin.h b/ldap/servers/slapd/slapi-plugin.h
index b170271..35f5ef4 100644
--- a/ldap/servers/slapd/slapi-plugin.h
+++ b/ldap/servers/slapd/slapi-plugin.h
@@ -6893,6 +6893,9 @@ typedef struct slapi_plugindesc {
/* Simple paged results index */
#define SLAPI_PAGED_RESULTS_INDEX 1945
+/* dbverify */
+#define SLAPI_DBVERIFY_DBDIR 1947
+
/* convenience macros for checking modify operation types */
#define SLAPI_IS_MOD_ADD(x) (((x) & ~LDAP_MOD_BVALUES) == LDAP_MOD_ADD)
#define SLAPI_IS_MOD_DELETE(x) (((x) & ~LDAP_MOD_BVALUES) == LDAP_MOD_DELETE)
8 years, 8 months
Branch '389-ds-base-1.3.1' - ldap/admin ldap/servers man/man8
by Mark Reynolds
ldap/admin/src/scripts/dbverify.in | 3 ++-
ldap/admin/src/scripts/verify-db.pl.in | 17 +++++++++--------
ldap/servers/slapd/back-ldbm/dbverify.c | 13 +++++++++++++
ldap/servers/slapd/main.c | 18 +++++++++++++-----
ldap/servers/slapd/pblock.c | 10 ++++++++++
ldap/servers/slapd/slap.h | 2 ++
ldap/servers/slapd/slapi-plugin.h | 3 +++
man/man8/dbverify.8 | 3 +++
8 files changed, 55 insertions(+), 14 deletions(-)
New commits:
commit bb704aac1868ab719d0823871cf0b677e67fcf41
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Wed Aug 5 16:31:49 2015 -0400
Ticket 48215 - verify_db.pl doesn't verify DB specified by -a option
Bug Description: verify_db.pl -a only uses the db location for
checking the transaction logs, because it ends up
calling "nsslapd dbverify" which only checks the
db files in the server configuration.
Fix Description: Allow a new argument to be passed to "nsslapd dbverify"
that specifies the db parent directory.
https://fedorahosted.org/389/ticket/48215
Reviewed by: nhosoi(Thanks!)
(cherry picked from commit 27fadb75ec1f3b252028ce715cd7fa16da1f6525)
Conflicts:
ldap/servers/slapd/pblock.c
(cherry picked from commit 6878a6cb355ff96fc390d71528978420ffc316e7)
Conflicts:
ldap/servers/slapd/pblock.c
ldap/servers/slapd/slapi-plugin.h
diff --git a/ldap/admin/src/scripts/dbverify.in b/ldap/admin/src/scripts/dbverify.in
index 6306a07..778a9ba 100755
--- a/ldap/admin/src/scripts/dbverify.in
+++ b/ldap/admin/src/scripts/dbverify.in
@@ -26,7 +26,7 @@ usage()
}
display_version="no"
-while getopts "Z:n:hVvfd:n:D:" flag
+while getopts "Z:n:hVvfd:n:D:a:" flag
do
case $flag in
h) usage
@@ -39,6 +39,7 @@ do
display_version="yes";;
f) args=$args" -f";;
D) args=$args" -D $OPTARG";;
+ a) args=$args" -a $OPTARG";;
?) usage
exit 1;;
esac
diff --git a/ldap/admin/src/scripts/verify-db.pl.in b/ldap/admin/src/scripts/verify-db.pl.in
index b182f42..2f6a1a3 100644
--- a/ldap/admin/src/scripts/verify-db.pl.in
+++ b/ldap/admin/src/scripts/verify-db.pl.in
@@ -45,7 +45,7 @@ DSUtil::libpath_add("@db_libdir@");
DSUtil::libpath_add("@libdir@");
$ENV{'PATH'} = "@libdir@/@package_name@/slapd-$servid:@db_bindir@:/usr/bin:/";
$ENV{'SHLIB_PATH'} = "$ENV{'LD_LIBRARY_PATH'}";
-
+my $custom_dbdir = 0;
my $i = 0;
sub usage
@@ -147,12 +147,7 @@ sub getLastLogfile
return \$logfile;
}
-$isWin = -d '\\';
-if ($isWin) {
- $NULL = "nul";
-} else {
- $NULL = "/dev/null";
-}
+$NULL = "/dev/null";
while ($i <= $#ARGV) {
if ( "$ARGV[$i]" eq "-a" ) { # path to search the db files
@@ -178,6 +173,8 @@ print("*****************************************************************\n");
if ( "$startpoint" eq "" ) {
$startpoint = "@localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/db";
+} else {
+ $custom_dbdir = 1;
}
# get dirs having DBVERSION
my $dbdirs = getDbDir($startpoint);
@@ -221,7 +218,11 @@ for (my $i = 0; "$$dbdirs[$i]" ne ""; $i++)
# Check db files by db_verify
print "Verify db files ... ";
-open(DBVERIFY, "@sbindir@/dbverify -Z $servid 2>&1 1> $NULL |");
+if ($custom_dbdir){
+ open(DBVERIFY, "@sbindir@/dbverify -Z $servid -a $startpoint 2>&1 1> $NULL |");
+} else {
+ open(DBVERIFY, "@sbindir@/dbverify -Z $servid 2>&1 1> $NULL |");
+}
sleep 1;
my $bad_index = 0;
my $bad_id2entry = 0;
diff --git a/ldap/servers/slapd/back-ldbm/dbverify.c b/ldap/servers/slapd/back-ldbm/dbverify.c
index ffd5900..b0b2d78 100644
--- a/ldap/servers/slapd/back-ldbm/dbverify.c
+++ b/ldap/servers/slapd/back-ldbm/dbverify.c
@@ -214,13 +214,16 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
int rval = 1;
int rval_main = 0;
char **instance_names = NULL;
+ char *dbdir = NULL;
slapi_log_error(SLAPI_LOG_TRACE, "verify DB", "Verifying db files...\n");
slapi_pblock_get(pb, SLAPI_BACKEND_INSTANCE_NAME, &instance_names);
slapi_pblock_get(pb, SLAPI_SEQ_TYPE, &verbose);
slapi_pblock_get(pb, SLAPI_PLUGIN_PRIVATE, &li);
+ slapi_pblock_get(pb, SLAPI_DBVERIFY_DBDIR, &dbdir);
ldbm_config_load_dse_info(li);
ldbm_config_internal_set(li, CONFIG_DB_TRANSACTION_LOGGING, "off");
+
/* no write needed; choose EXPORT MODE */
if (0 != dblayer_start(li, DBLAYER_EXPORT_MODE))
{
@@ -239,6 +242,11 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
inst = ldbm_instance_find_by_name(li, *inp);
if (inst)
{
+ if (dbdir){
+ /* verifying backup */
+ slapi_ch_free_string(&inst->inst_parent_dir_name);
+ inst->inst_parent_dir_name = slapi_ch_strdup(dbdir);
+ }
rval_main |= dbverify_ext(inst, verbose);
}
else
@@ -263,6 +271,11 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
inst->inst_name);
continue; /* skip this instance and go to the next*/
}
+ if (dbdir){
+ /* verifying backup */
+ slapi_ch_free_string(&inst->inst_parent_dir_name);
+ inst->inst_parent_dir_name = slapi_ch_strdup(dbdir);
+ }
rval_main |= dbverify_ext(inst, verbose);
}
}
diff --git a/ldap/servers/slapd/main.c b/ldap/servers/slapd/main.c
index ae30f23..f301a67 100644
--- a/ldap/servers/slapd/main.c
+++ b/ldap/servers/slapd/main.c
@@ -490,13 +490,15 @@ static int ldif_printkey = EXPORT_PRINTKEY|EXPORT_APPENDMODE;
static char *archive_name = NULL;
static int db2ldif_dump_replica = 0;
static int db2ldif_dump_uniqueid = 1;
-static int ldif2db_generate_uniqueid = SLAPI_UNIQUEID_GENERATE_TIME_BASED;
-static int dbverify_verbose = 0;
+static int ldif2db_generate_uniqueid = SLAPI_UNIQUEID_GENERATE_TIME_BASED;
static char *ldif2db_namespaceid = NULL;
int importexport_encrypt = 0;
static int upgradedb_flags = 0;
static int upgradednformat_dryrun = 0;
static int is_quiet = 0;
+/* dbverify options */
+static int dbverify_verbose = 0;
+static char *dbverify_dbdir = NULL;
/* taken from idsktune */
#if defined(__sun)
@@ -1463,13 +1465,14 @@ process_command_line(int argc, char **argv, char *myname,
{"dryrun",ArgNone,'N'},
{0,0,0}};
- char *opts_dbverify = "vVfd:n:D:";
+ char *opts_dbverify = "vVfd:n:D:a:";
struct opt_ext long_options_dbverify[] = {
{"version",ArgNone,'v'},
{"debug",ArgRequired,'d'},
{"backend",ArgRequired,'n'},
{"configDir",ArgRequired,'D'},
{"verbose",ArgNone,'V'},
+ {"dbdir",ArgRequired,'a'},
{0,0,0}};
char *opts_referral = "vd:p:r:SD:";
@@ -1855,7 +1858,11 @@ process_command_line(int argc, char **argv, char *myname,
break;
case 'a': /* archive pathname for db */
- archive_name = optarg_ext;
+ if ( slapd_exemode == SLAPD_EXEMODE_DBVERIFY ) {
+ dbverify_dbdir = optarg_ext;
+ } else {
+ archive_name = optarg_ext;
+ }
break;
case 'Z':
@@ -2888,7 +2895,8 @@ slapd_exemode_dbverify()
pb.pb_plugin = backend_plugin;
pb.pb_instance_name = (char *)cmd_line_instance_names;
pb.pb_task_flags = SLAPI_TASK_RUNNING_FROM_COMMANDLINE;
-
+ pb.pb_dbverify_dbdir = dbverify_dbdir;
+
if ( backend_plugin->plg_dbverify != NULL ) {
return_value = (*backend_plugin->plg_dbverify)( &pb );
} else {
diff --git a/ldap/servers/slapd/pblock.c b/ldap/servers/slapd/pblock.c
index 9e6ade7..d804ea5 100644
--- a/ldap/servers/slapd/pblock.c
+++ b/ldap/servers/slapd/pblock.c
@@ -1700,6 +1700,11 @@ slapi_pblock_get( Slapi_PBlock *pblock, int arg, void *value )
(*(IFP*)value) = pblock->pb_txn_ruv_mods_fn;
break;
+ /* dbverify */
+ case SLAPI_DBVERIFY_DBDIR:
+ (*(char **)value) = pblock->pb_dbverify_dbdir;
+ break;
+
/* Search results set */
case SLAPI_SEARCH_RESULT_SET:
if(pblock->pb_op!=NULL)
@@ -3526,6 +3531,11 @@ slapi_pblock_set( Slapi_PBlock *pblock, int arg, void *value )
pblock->pb_paged_results_index = *(int *)value;
break;
+ /* dbverify */
+ case SLAPI_DBVERIFY_DBDIR:
+ pblock->pb_dbverify_dbdir = (char *) value;
+ break;
+
default:
LDAPDebug( LDAP_DEBUG_ANY,
"Unknown parameter block argument %d\n", arg, 0, 0 );
diff --git a/ldap/servers/slapd/slap.h b/ldap/servers/slapd/slap.h
index 87f0039..840c632 100644
--- a/ldap/servers/slapd/slap.h
+++ b/ldap/servers/slapd/slap.h
@@ -1611,6 +1611,8 @@ typedef struct slapi_pblock {
int pb_seq_type;
char *pb_seq_attrname;
char *pb_seq_val;
+ /* dbverify argument */
+ char *pb_dbverify_dbdir;
/* ldif2db arguments */
char *pb_ldif_file;
int pb_removedupvals;
diff --git a/ldap/servers/slapd/slapi-plugin.h b/ldap/servers/slapd/slapi-plugin.h
index 12ec290..184466d 100644
--- a/ldap/servers/slapd/slapi-plugin.h
+++ b/ldap/servers/slapd/slapi-plugin.h
@@ -7067,6 +7067,9 @@ typedef struct slapi_plugindesc {
/* Simple paged results index */
#define SLAPI_PAGED_RESULTS_INDEX 1945
+/* dbverify */
+#define SLAPI_DBVERIFY_DBDIR 1947
+
/* convenience macros for checking modify operation types */
#define SLAPI_IS_MOD_ADD(x) (((x) & ~LDAP_MOD_BVALUES) == LDAP_MOD_ADD)
#define SLAPI_IS_MOD_DELETE(x) (((x) & ~LDAP_MOD_BVALUES) == LDAP_MOD_DELETE)
diff --git a/man/man8/dbverify.8 b/man/man8/dbverify.8
index b0fbce0..92920f7 100644
--- a/man/man8/dbverify.8
+++ b/man/man8/dbverify.8
@@ -31,6 +31,9 @@ one instance on the system, this option can be skipped.
.B \fB\-n\fR \fIBackend Name\fR
The name of the LDBM database to reindex. Example: userRoot
.TP
+.B \fB\-a\fR \fIDatabase Directory\fR
+Location of database if it is different than what is in the server configuration(e.g. backup directories)
+.TP
.B \fB\-d\fR \fIDebug Level\fR
Sets the debugging level.
.TP
8 years, 8 months
Branch '389-ds-base-1.3.2' - ldap/admin ldap/servers man/man8
by Mark Reynolds
ldap/admin/src/scripts/dbverify.in | 3 ++-
ldap/admin/src/scripts/verify-db.pl.in | 17 +++++++++--------
ldap/servers/slapd/back-ldbm/dbverify.c | 13 +++++++++++++
ldap/servers/slapd/main.c | 18 +++++++++++++-----
ldap/servers/slapd/pblock.c | 10 ++++++++++
ldap/servers/slapd/slap.h | 2 ++
ldap/servers/slapd/slapi-plugin.h | 3 +++
man/man8/dbverify.8 | 3 +++
8 files changed, 55 insertions(+), 14 deletions(-)
New commits:
commit 1e736a7c04e7a5bbd649b9e28a1630f0167d0c1f
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Wed Aug 5 16:31:49 2015 -0400
Ticket 48215 - verify_db.pl doesn't verify DB specified by -a option
Bug Description: verify_db.pl -a only uses the db location for
checking the transaction logs, because it ends up
calling "nsslapd dbverify" which only checks the
db files in the server configuration.
Fix Description: Allow a new argument to be passed to "nsslapd dbverify"
that specifies the db parent directory.
https://fedorahosted.org/389/ticket/48215
Reviewed by: nhosoi(Thanks!)
(cherry picked from commit 27fadb75ec1f3b252028ce715cd7fa16da1f6525)
Conflicts:
ldap/servers/slapd/pblock.c
(cherry picked from commit 6878a6cb355ff96fc390d71528978420ffc316e7)
diff --git a/ldap/admin/src/scripts/dbverify.in b/ldap/admin/src/scripts/dbverify.in
index 6306a07..778a9ba 100755
--- a/ldap/admin/src/scripts/dbverify.in
+++ b/ldap/admin/src/scripts/dbverify.in
@@ -26,7 +26,7 @@ usage()
}
display_version="no"
-while getopts "Z:n:hVvfd:n:D:" flag
+while getopts "Z:n:hVvfd:n:D:a:" flag
do
case $flag in
h) usage
@@ -39,6 +39,7 @@ do
display_version="yes";;
f) args=$args" -f";;
D) args=$args" -D $OPTARG";;
+ a) args=$args" -a $OPTARG";;
?) usage
exit 1;;
esac
diff --git a/ldap/admin/src/scripts/verify-db.pl.in b/ldap/admin/src/scripts/verify-db.pl.in
index b182f42..2f6a1a3 100644
--- a/ldap/admin/src/scripts/verify-db.pl.in
+++ b/ldap/admin/src/scripts/verify-db.pl.in
@@ -45,7 +45,7 @@ DSUtil::libpath_add("@db_libdir@");
DSUtil::libpath_add("@libdir@");
$ENV{'PATH'} = "@libdir@/@package_name@/slapd-$servid:@db_bindir@:/usr/bin:/";
$ENV{'SHLIB_PATH'} = "$ENV{'LD_LIBRARY_PATH'}";
-
+my $custom_dbdir = 0;
my $i = 0;
sub usage
@@ -147,12 +147,7 @@ sub getLastLogfile
return \$logfile;
}
-$isWin = -d '\\';
-if ($isWin) {
- $NULL = "nul";
-} else {
- $NULL = "/dev/null";
-}
+$NULL = "/dev/null";
while ($i <= $#ARGV) {
if ( "$ARGV[$i]" eq "-a" ) { # path to search the db files
@@ -178,6 +173,8 @@ print("*****************************************************************\n");
if ( "$startpoint" eq "" ) {
$startpoint = "@localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/db";
+} else {
+ $custom_dbdir = 1;
}
# get dirs having DBVERSION
my $dbdirs = getDbDir($startpoint);
@@ -221,7 +218,11 @@ for (my $i = 0; "$$dbdirs[$i]" ne ""; $i++)
# Check db files by db_verify
print "Verify db files ... ";
-open(DBVERIFY, "@sbindir@/dbverify -Z $servid 2>&1 1> $NULL |");
+if ($custom_dbdir){
+ open(DBVERIFY, "@sbindir@/dbverify -Z $servid -a $startpoint 2>&1 1> $NULL |");
+} else {
+ open(DBVERIFY, "@sbindir@/dbverify -Z $servid 2>&1 1> $NULL |");
+}
sleep 1;
my $bad_index = 0;
my $bad_id2entry = 0;
diff --git a/ldap/servers/slapd/back-ldbm/dbverify.c b/ldap/servers/slapd/back-ldbm/dbverify.c
index ffd5900..b0b2d78 100644
--- a/ldap/servers/slapd/back-ldbm/dbverify.c
+++ b/ldap/servers/slapd/back-ldbm/dbverify.c
@@ -214,13 +214,16 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
int rval = 1;
int rval_main = 0;
char **instance_names = NULL;
+ char *dbdir = NULL;
slapi_log_error(SLAPI_LOG_TRACE, "verify DB", "Verifying db files...\n");
slapi_pblock_get(pb, SLAPI_BACKEND_INSTANCE_NAME, &instance_names);
slapi_pblock_get(pb, SLAPI_SEQ_TYPE, &verbose);
slapi_pblock_get(pb, SLAPI_PLUGIN_PRIVATE, &li);
+ slapi_pblock_get(pb, SLAPI_DBVERIFY_DBDIR, &dbdir);
ldbm_config_load_dse_info(li);
ldbm_config_internal_set(li, CONFIG_DB_TRANSACTION_LOGGING, "off");
+
/* no write needed; choose EXPORT MODE */
if (0 != dblayer_start(li, DBLAYER_EXPORT_MODE))
{
@@ -239,6 +242,11 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
inst = ldbm_instance_find_by_name(li, *inp);
if (inst)
{
+ if (dbdir){
+ /* verifying backup */
+ slapi_ch_free_string(&inst->inst_parent_dir_name);
+ inst->inst_parent_dir_name = slapi_ch_strdup(dbdir);
+ }
rval_main |= dbverify_ext(inst, verbose);
}
else
@@ -263,6 +271,11 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
inst->inst_name);
continue; /* skip this instance and go to the next*/
}
+ if (dbdir){
+ /* verifying backup */
+ slapi_ch_free_string(&inst->inst_parent_dir_name);
+ inst->inst_parent_dir_name = slapi_ch_strdup(dbdir);
+ }
rval_main |= dbverify_ext(inst, verbose);
}
}
diff --git a/ldap/servers/slapd/main.c b/ldap/servers/slapd/main.c
index dd1f88a..c642b85 100644
--- a/ldap/servers/slapd/main.c
+++ b/ldap/servers/slapd/main.c
@@ -490,13 +490,15 @@ static int ldif_printkey = EXPORT_PRINTKEY|EXPORT_APPENDMODE;
static char *archive_name = NULL;
static int db2ldif_dump_replica = 0;
static int db2ldif_dump_uniqueid = 1;
-static int ldif2db_generate_uniqueid = SLAPI_UNIQUEID_GENERATE_TIME_BASED;
-static int dbverify_verbose = 0;
+static int ldif2db_generate_uniqueid = SLAPI_UNIQUEID_GENERATE_TIME_BASED;
static char *ldif2db_namespaceid = NULL;
int importexport_encrypt = 0;
static int upgradedb_flags = 0;
static int upgradednformat_dryrun = 0;
static int is_quiet = 0;
+/* dbverify options */
+static int dbverify_verbose = 0;
+static char *dbverify_dbdir = NULL;
/* taken from idsktune */
#if defined(__sun)
@@ -1463,13 +1465,14 @@ process_command_line(int argc, char **argv, char *myname,
{"dryrun",ArgNone,'N'},
{0,0,0}};
- char *opts_dbverify = "vVfd:n:D:";
+ char *opts_dbverify = "vVfd:n:D:a:";
struct opt_ext long_options_dbverify[] = {
{"version",ArgNone,'v'},
{"debug",ArgRequired,'d'},
{"backend",ArgRequired,'n'},
{"configDir",ArgRequired,'D'},
{"verbose",ArgNone,'V'},
+ {"dbdir",ArgRequired,'a'},
{0,0,0}};
char *opts_referral = "vd:p:r:SD:";
@@ -1855,7 +1858,11 @@ process_command_line(int argc, char **argv, char *myname,
break;
case 'a': /* archive pathname for db */
- archive_name = optarg_ext;
+ if ( slapd_exemode == SLAPD_EXEMODE_DBVERIFY ) {
+ dbverify_dbdir = optarg_ext;
+ } else {
+ archive_name = optarg_ext;
+ }
break;
case 'Z':
@@ -2888,7 +2895,8 @@ slapd_exemode_dbverify()
pb.pb_plugin = backend_plugin;
pb.pb_instance_name = (char *)cmd_line_instance_names;
pb.pb_task_flags = SLAPI_TASK_RUNNING_FROM_COMMANDLINE;
-
+ pb.pb_dbverify_dbdir = dbverify_dbdir;
+
if ( backend_plugin->plg_dbverify != NULL ) {
return_value = (*backend_plugin->plg_dbverify)( &pb );
} else {
diff --git a/ldap/servers/slapd/pblock.c b/ldap/servers/slapd/pblock.c
index c1fac14..b126a6d 100644
--- a/ldap/servers/slapd/pblock.c
+++ b/ldap/servers/slapd/pblock.c
@@ -1700,6 +1700,11 @@ slapi_pblock_get( Slapi_PBlock *pblock, int arg, void *value )
(*(IFP*)value) = pblock->pb_txn_ruv_mods_fn;
break;
+ /* dbverify */
+ case SLAPI_DBVERIFY_DBDIR:
+ (*(char **)value) = pblock->pb_dbverify_dbdir;
+ break;
+
/* Search results set */
case SLAPI_SEARCH_RESULT_SET:
if(pblock->pb_op!=NULL)
@@ -3537,6 +3542,11 @@ slapi_pblock_set( Slapi_PBlock *pblock, int arg, void *value )
pblock->pb_aci_target_check = *((int *) value);
break;
+ /* dbverify */
+ case SLAPI_DBVERIFY_DBDIR:
+ pblock->pb_dbverify_dbdir = (char *) value;
+ break;
+
default:
LDAPDebug( LDAP_DEBUG_ANY,
"Unknown parameter block argument %d\n", arg, 0, 0 );
diff --git a/ldap/servers/slapd/slap.h b/ldap/servers/slapd/slap.h
index 45635d5..3e65def 100644
--- a/ldap/servers/slapd/slap.h
+++ b/ldap/servers/slapd/slap.h
@@ -1649,6 +1649,8 @@ typedef struct slapi_pblock {
int pb_seq_type;
char *pb_seq_attrname;
char *pb_seq_val;
+ /* dbverify argument */
+ char *pb_dbverify_dbdir;
/* ldif2db arguments */
char *pb_ldif_file;
int pb_removedupvals;
diff --git a/ldap/servers/slapd/slapi-plugin.h b/ldap/servers/slapd/slapi-plugin.h
index 1284a47..b872308 100644
--- a/ldap/servers/slapd/slapi-plugin.h
+++ b/ldap/servers/slapd/slapi-plugin.h
@@ -7230,6 +7230,9 @@ typedef struct slapi_plugindesc {
/* ACI Target Check */
#define SLAPI_ACI_TARGET_CHECK 1946
+/* dbverify */
+#define SLAPI_DBVERIFY_DBDIR 1947
+
/* convenience macros for checking modify operation types */
#define SLAPI_IS_MOD_ADD(x) (((x) & ~LDAP_MOD_BVALUES) == LDAP_MOD_ADD)
#define SLAPI_IS_MOD_DELETE(x) (((x) & ~LDAP_MOD_BVALUES) == LDAP_MOD_DELETE)
diff --git a/man/man8/dbverify.8 b/man/man8/dbverify.8
index b0fbce0..92920f7 100644
--- a/man/man8/dbverify.8
+++ b/man/man8/dbverify.8
@@ -31,6 +31,9 @@ one instance on the system, this option can be skipped.
.B \fB\-n\fR \fIBackend Name\fR
The name of the LDBM database to reindex. Example: userRoot
.TP
+.B \fB\-a\fR \fIDatabase Directory\fR
+Location of database if it is different than what is in the server configuration(e.g. backup directories)
+.TP
.B \fB\-d\fR \fIDebug Level\fR
Sets the debugging level.
.TP
8 years, 8 months
Branch '389-ds-base-1.3.3' - ldap/admin ldap/servers man/man8
by Mark Reynolds
ldap/admin/src/scripts/dbverify.in | 3 ++-
ldap/admin/src/scripts/verify-db.pl.in | 17 +++++++++--------
ldap/servers/slapd/back-ldbm/dbverify.c | 13 +++++++++++++
ldap/servers/slapd/main.c | 18 +++++++++++++-----
ldap/servers/slapd/pblock.c | 10 ++++++++++
ldap/servers/slapd/slap.h | 2 ++
ldap/servers/slapd/slapi-plugin.h | 3 +++
man/man8/dbverify.8 | 3 +++
8 files changed, 55 insertions(+), 14 deletions(-)
New commits:
commit 6878a6cb355ff96fc390d71528978420ffc316e7
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Wed Aug 5 16:31:49 2015 -0400
Ticket 48215 - verify_db.pl doesn't verify DB specified by -a option
Bug Description: verify_db.pl -a only uses the db location for
checking the transaction logs, because it ends up
calling "nsslapd dbverify" which only checks the
db files in the server configuration.
Fix Description: Allow a new argument to be passed to "nsslapd dbverify"
that specifies the db parent directory.
https://fedorahosted.org/389/ticket/48215
Reviewed by: nhosoi(Thanks!)
(cherry picked from commit 27fadb75ec1f3b252028ce715cd7fa16da1f6525)
Conflicts:
ldap/servers/slapd/pblock.c
diff --git a/ldap/admin/src/scripts/dbverify.in b/ldap/admin/src/scripts/dbverify.in
index 6306a07..778a9ba 100755
--- a/ldap/admin/src/scripts/dbverify.in
+++ b/ldap/admin/src/scripts/dbverify.in
@@ -26,7 +26,7 @@ usage()
}
display_version="no"
-while getopts "Z:n:hVvfd:n:D:" flag
+while getopts "Z:n:hVvfd:n:D:a:" flag
do
case $flag in
h) usage
@@ -39,6 +39,7 @@ do
display_version="yes";;
f) args=$args" -f";;
D) args=$args" -D $OPTARG";;
+ a) args=$args" -a $OPTARG";;
?) usage
exit 1;;
esac
diff --git a/ldap/admin/src/scripts/verify-db.pl.in b/ldap/admin/src/scripts/verify-db.pl.in
index b182f42..2f6a1a3 100644
--- a/ldap/admin/src/scripts/verify-db.pl.in
+++ b/ldap/admin/src/scripts/verify-db.pl.in
@@ -45,7 +45,7 @@ DSUtil::libpath_add("@db_libdir@");
DSUtil::libpath_add("@libdir@");
$ENV{'PATH'} = "@libdir@/@package_name@/slapd-$servid:@db_bindir@:/usr/bin:/";
$ENV{'SHLIB_PATH'} = "$ENV{'LD_LIBRARY_PATH'}";
-
+my $custom_dbdir = 0;
my $i = 0;
sub usage
@@ -147,12 +147,7 @@ sub getLastLogfile
return \$logfile;
}
-$isWin = -d '\\';
-if ($isWin) {
- $NULL = "nul";
-} else {
- $NULL = "/dev/null";
-}
+$NULL = "/dev/null";
while ($i <= $#ARGV) {
if ( "$ARGV[$i]" eq "-a" ) { # path to search the db files
@@ -178,6 +173,8 @@ print("*****************************************************************\n");
if ( "$startpoint" eq "" ) {
$startpoint = "@localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/db";
+} else {
+ $custom_dbdir = 1;
}
# get dirs having DBVERSION
my $dbdirs = getDbDir($startpoint);
@@ -221,7 +218,11 @@ for (my $i = 0; "$$dbdirs[$i]" ne ""; $i++)
# Check db files by db_verify
print "Verify db files ... ";
-open(DBVERIFY, "@sbindir@/dbverify -Z $servid 2>&1 1> $NULL |");
+if ($custom_dbdir){
+ open(DBVERIFY, "@sbindir@/dbverify -Z $servid -a $startpoint 2>&1 1> $NULL |");
+} else {
+ open(DBVERIFY, "@sbindir@/dbverify -Z $servid 2>&1 1> $NULL |");
+}
sleep 1;
my $bad_index = 0;
my $bad_id2entry = 0;
diff --git a/ldap/servers/slapd/back-ldbm/dbverify.c b/ldap/servers/slapd/back-ldbm/dbverify.c
index ffd5900..b0b2d78 100644
--- a/ldap/servers/slapd/back-ldbm/dbverify.c
+++ b/ldap/servers/slapd/back-ldbm/dbverify.c
@@ -214,13 +214,16 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
int rval = 1;
int rval_main = 0;
char **instance_names = NULL;
+ char *dbdir = NULL;
slapi_log_error(SLAPI_LOG_TRACE, "verify DB", "Verifying db files...\n");
slapi_pblock_get(pb, SLAPI_BACKEND_INSTANCE_NAME, &instance_names);
slapi_pblock_get(pb, SLAPI_SEQ_TYPE, &verbose);
slapi_pblock_get(pb, SLAPI_PLUGIN_PRIVATE, &li);
+ slapi_pblock_get(pb, SLAPI_DBVERIFY_DBDIR, &dbdir);
ldbm_config_load_dse_info(li);
ldbm_config_internal_set(li, CONFIG_DB_TRANSACTION_LOGGING, "off");
+
/* no write needed; choose EXPORT MODE */
if (0 != dblayer_start(li, DBLAYER_EXPORT_MODE))
{
@@ -239,6 +242,11 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
inst = ldbm_instance_find_by_name(li, *inp);
if (inst)
{
+ if (dbdir){
+ /* verifying backup */
+ slapi_ch_free_string(&inst->inst_parent_dir_name);
+ inst->inst_parent_dir_name = slapi_ch_strdup(dbdir);
+ }
rval_main |= dbverify_ext(inst, verbose);
}
else
@@ -263,6 +271,11 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
inst->inst_name);
continue; /* skip this instance and go to the next*/
}
+ if (dbdir){
+ /* verifying backup */
+ slapi_ch_free_string(&inst->inst_parent_dir_name);
+ inst->inst_parent_dir_name = slapi_ch_strdup(dbdir);
+ }
rval_main |= dbverify_ext(inst, verbose);
}
}
diff --git a/ldap/servers/slapd/main.c b/ldap/servers/slapd/main.c
index a3ba99b..9c4787c 100644
--- a/ldap/servers/slapd/main.c
+++ b/ldap/servers/slapd/main.c
@@ -490,13 +490,15 @@ static int ldif_printkey = EXPORT_PRINTKEY|EXPORT_APPENDMODE;
static char *archive_name = NULL;
static int db2ldif_dump_replica = 0;
static int db2ldif_dump_uniqueid = 1;
-static int ldif2db_generate_uniqueid = SLAPI_UNIQUEID_GENERATE_TIME_BASED;
-static int dbverify_verbose = 0;
+static int ldif2db_generate_uniqueid = SLAPI_UNIQUEID_GENERATE_TIME_BASED;
static char *ldif2db_namespaceid = NULL;
int importexport_encrypt = 0;
static int upgradedb_flags = 0;
static int upgradednformat_dryrun = 0;
static int is_quiet = 0;
+/* dbverify options */
+static int dbverify_verbose = 0;
+static char *dbverify_dbdir = NULL;
/* taken from idsktune */
#if defined(__sun)
@@ -1470,13 +1472,14 @@ process_command_line(int argc, char **argv, char *myname,
{"dryrun",ArgNone,'N'},
{0,0,0}};
- char *opts_dbverify = "vVfd:n:D:";
+ char *opts_dbverify = "vVfd:n:D:a:";
struct opt_ext long_options_dbverify[] = {
{"version",ArgNone,'v'},
{"debug",ArgRequired,'d'},
{"backend",ArgRequired,'n'},
{"configDir",ArgRequired,'D'},
{"verbose",ArgNone,'V'},
+ {"dbdir",ArgRequired,'a'},
{0,0,0}};
char *opts_referral = "vd:p:r:SD:";
@@ -1862,7 +1865,11 @@ process_command_line(int argc, char **argv, char *myname,
break;
case 'a': /* archive pathname for db */
- archive_name = optarg_ext;
+ if ( slapd_exemode == SLAPD_EXEMODE_DBVERIFY ) {
+ dbverify_dbdir = optarg_ext;
+ } else {
+ archive_name = optarg_ext;
+ }
break;
case 'Z':
@@ -2895,7 +2902,8 @@ slapd_exemode_dbverify()
pb.pb_plugin = backend_plugin;
pb.pb_instance_name = (char *)cmd_line_instance_names;
pb.pb_task_flags = SLAPI_TASK_RUNNING_FROM_COMMANDLINE;
-
+ pb.pb_dbverify_dbdir = dbverify_dbdir;
+
if ( backend_plugin->plg_dbverify != NULL ) {
return_value = (*backend_plugin->plg_dbverify)( &pb );
} else {
diff --git a/ldap/servers/slapd/pblock.c b/ldap/servers/slapd/pblock.c
index fd9ccb7..d331b57 100644
--- a/ldap/servers/slapd/pblock.c
+++ b/ldap/servers/slapd/pblock.c
@@ -1706,6 +1706,11 @@ slapi_pblock_get( Slapi_PBlock *pblock, int arg, void *value )
(*(IFP*)value) = pblock->pb_txn_ruv_mods_fn;
break;
+ /* dbverify */
+ case SLAPI_DBVERIFY_DBDIR:
+ (*(char **)value) = pblock->pb_dbverify_dbdir;
+ break;
+
/* Search results set */
case SLAPI_SEARCH_RESULT_SET:
if(pblock->pb_op!=NULL)
@@ -3549,6 +3554,11 @@ slapi_pblock_set( Slapi_PBlock *pblock, int arg, void *value )
pblock->pb_aci_target_check = *((int *) value);
break;
+ /* dbverify */
+ case SLAPI_DBVERIFY_DBDIR:
+ pblock->pb_dbverify_dbdir = (char *) value;
+ break;
+
default:
LDAPDebug( LDAP_DEBUG_ANY,
"Unknown parameter block argument %d\n", arg, 0, 0 );
diff --git a/ldap/servers/slapd/slap.h b/ldap/servers/slapd/slap.h
index 3612632..e2d2c90 100644
--- a/ldap/servers/slapd/slap.h
+++ b/ldap/servers/slapd/slap.h
@@ -1661,6 +1661,8 @@ typedef struct slapi_pblock {
int pb_seq_type;
char *pb_seq_attrname;
char *pb_seq_val;
+ /* dbverify argument */
+ char *pb_dbverify_dbdir;
/* ldif2db arguments */
char *pb_ldif_file;
int pb_removedupvals;
diff --git a/ldap/servers/slapd/slapi-plugin.h b/ldap/servers/slapd/slapi-plugin.h
index c420cce..364f68c 100644
--- a/ldap/servers/slapd/slapi-plugin.h
+++ b/ldap/servers/slapd/slapi-plugin.h
@@ -7327,6 +7327,9 @@ typedef struct slapi_plugindesc {
/* ACI Target Check */
#define SLAPI_ACI_TARGET_CHECK 1946
+/* dbverify */
+#define SLAPI_DBVERIFY_DBDIR 1947
+
/* convenience macros for checking modify operation types */
#define SLAPI_IS_MOD_ADD(x) (((x) & ~LDAP_MOD_BVALUES) == LDAP_MOD_ADD)
#define SLAPI_IS_MOD_DELETE(x) (((x) & ~LDAP_MOD_BVALUES) == LDAP_MOD_DELETE)
diff --git a/man/man8/dbverify.8 b/man/man8/dbverify.8
index 30d6933..c74747a 100644
--- a/man/man8/dbverify.8
+++ b/man/man8/dbverify.8
@@ -31,6 +31,9 @@ one instance on the system, this option can be skipped.
.B \fB\-n\fR \fIBackend Name\fR
The name of the LDBM database to reindex. Example: userRoot
.TP
+.B \fB\-a\fR \fIDatabase Directory\fR
+Location of database if it is different than what is in the server configuration(e.g. backup directories)
+.TP
.B \fB\-d\fR \fIDebug Level\fR
Sets the debugging level.
.TP
8 years, 8 months
Branch '389-ds-base-1.3.4' - ldap/admin ldap/servers man/man8
by Mark Reynolds
ldap/admin/src/scripts/dbverify.in | 3 ++-
ldap/admin/src/scripts/verify-db.pl.in | 17 +++++++++--------
ldap/servers/slapd/back-ldbm/dbverify.c | 13 +++++++++++++
ldap/servers/slapd/main.c | 18 +++++++++++++-----
ldap/servers/slapd/pblock.c | 12 +++++++++++-
ldap/servers/slapd/slap.h | 2 ++
ldap/servers/slapd/slapi-plugin.h | 3 +++
man/man8/dbverify.8 | 3 +++
8 files changed, 56 insertions(+), 15 deletions(-)
New commits:
commit 210071c682751897099e8eb138e5db1e47ac2bae
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Wed Aug 5 16:31:49 2015 -0400
Ticket 48215 - verify_db.pl doesn't verify DB specified by -a option
Bug Description: verify_db.pl -a only uses the db location for
checking the transaction logs, because it ends up
calling "nsslapd dbverify" which only checks the
db files in the server configuration.
Fix Description: Allow a new argument to be passed to "nsslapd dbverify"
that specifies the db parent directory.
https://fedorahosted.org/389/ticket/48215
Reviewed by: nhosoi(Thanks!)
(cherry picked from commit 27fadb75ec1f3b252028ce715cd7fa16da1f6525)
diff --git a/ldap/admin/src/scripts/dbverify.in b/ldap/admin/src/scripts/dbverify.in
index 6306a07..778a9ba 100755
--- a/ldap/admin/src/scripts/dbverify.in
+++ b/ldap/admin/src/scripts/dbverify.in
@@ -26,7 +26,7 @@ usage()
}
display_version="no"
-while getopts "Z:n:hVvfd:n:D:" flag
+while getopts "Z:n:hVvfd:n:D:a:" flag
do
case $flag in
h) usage
@@ -39,6 +39,7 @@ do
display_version="yes";;
f) args=$args" -f";;
D) args=$args" -D $OPTARG";;
+ a) args=$args" -a $OPTARG";;
?) usage
exit 1;;
esac
diff --git a/ldap/admin/src/scripts/verify-db.pl.in b/ldap/admin/src/scripts/verify-db.pl.in
index ae56a16..d481ecb 100644
--- a/ldap/admin/src/scripts/verify-db.pl.in
+++ b/ldap/admin/src/scripts/verify-db.pl.in
@@ -16,7 +16,7 @@ DSUtil::libpath_add("@db_libdir@");
DSUtil::libpath_add("@libdir@");
$ENV{'PATH'} = "@libdir@/@package_name@/slapd-$servid:@db_bindir@:/usr/bin:/";
$ENV{'SHLIB_PATH'} = "$ENV{'LD_LIBRARY_PATH'}";
-
+my $custom_dbdir = 0;
my $i = 0;
sub usage
@@ -118,12 +118,7 @@ sub getLastLogfile
return \$logfile;
}
-$isWin = -d '\\';
-if ($isWin) {
- $NULL = "nul";
-} else {
- $NULL = "/dev/null";
-}
+$NULL = "/dev/null";
while ($i <= $#ARGV) {
if ( "$ARGV[$i]" eq "-a" ) { # path to search the db files
@@ -149,6 +144,8 @@ print("*****************************************************************\n");
if ( "$startpoint" eq "" ) {
$startpoint = "@localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/db";
+} else {
+ $custom_dbdir = 1;
}
# get dirs having DBVERSION
my $dbdirs = getDbDir($startpoint);
@@ -192,7 +189,11 @@ for (my $i = 0; "$$dbdirs[$i]" ne ""; $i++)
# Check db files by db_verify
print "Verify db files ... ";
-open(DBVERIFY, "@sbindir@/dbverify -Z $servid 2>&1 1> $NULL |");
+if ($custom_dbdir){
+ open(DBVERIFY, "@sbindir@/dbverify -Z $servid -a $startpoint 2>&1 1> $NULL |");
+} else {
+ open(DBVERIFY, "@sbindir@/dbverify -Z $servid 2>&1 1> $NULL |");
+}
sleep 1;
my $bad_index = 0;
my $bad_id2entry = 0;
diff --git a/ldap/servers/slapd/back-ldbm/dbverify.c b/ldap/servers/slapd/back-ldbm/dbverify.c
index 85ee7a0..315ef93 100644
--- a/ldap/servers/slapd/back-ldbm/dbverify.c
+++ b/ldap/servers/slapd/back-ldbm/dbverify.c
@@ -186,13 +186,16 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
int rval = 1;
int rval_main = 0;
char **instance_names = NULL;
+ char *dbdir = NULL;
slapi_log_error(SLAPI_LOG_TRACE, "verify DB", "Verifying db files...\n");
slapi_pblock_get(pb, SLAPI_BACKEND_INSTANCE_NAME, &instance_names);
slapi_pblock_get(pb, SLAPI_SEQ_TYPE, &verbose);
slapi_pblock_get(pb, SLAPI_PLUGIN_PRIVATE, &li);
+ slapi_pblock_get(pb, SLAPI_DBVERIFY_DBDIR, &dbdir);
ldbm_config_load_dse_info(li);
ldbm_config_internal_set(li, CONFIG_DB_TRANSACTION_LOGGING, "off");
+
/* no write needed; choose EXPORT MODE */
if (0 != dblayer_start(li, DBLAYER_EXPORT_MODE))
{
@@ -211,6 +214,11 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
inst = ldbm_instance_find_by_name(li, *inp);
if (inst)
{
+ if (dbdir){
+ /* verifying backup */
+ slapi_ch_free_string(&inst->inst_parent_dir_name);
+ inst->inst_parent_dir_name = slapi_ch_strdup(dbdir);
+ }
rval_main |= dbverify_ext(inst, verbose);
}
else
@@ -235,6 +243,11 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
inst->inst_name);
continue; /* skip this instance and go to the next*/
}
+ if (dbdir){
+ /* verifying backup */
+ slapi_ch_free_string(&inst->inst_parent_dir_name);
+ inst->inst_parent_dir_name = slapi_ch_strdup(dbdir);
+ }
rval_main |= dbverify_ext(inst, verbose);
}
}
diff --git a/ldap/servers/slapd/main.c b/ldap/servers/slapd/main.c
index 9016144..922de97 100644
--- a/ldap/servers/slapd/main.c
+++ b/ldap/servers/slapd/main.c
@@ -435,13 +435,15 @@ static int ldif_printkey = EXPORT_PRINTKEY|EXPORT_APPENDMODE;
static char *archive_name = NULL;
static int db2ldif_dump_replica = 0;
static int db2ldif_dump_uniqueid = 1;
-static int ldif2db_generate_uniqueid = SLAPI_UNIQUEID_GENERATE_TIME_BASED;
-static int dbverify_verbose = 0;
+static int ldif2db_generate_uniqueid = SLAPI_UNIQUEID_GENERATE_TIME_BASED;
static char *ldif2db_namespaceid = NULL;
int importexport_encrypt = 0;
static int upgradedb_flags = 0;
static int upgradednformat_dryrun = 0;
static int is_quiet = 0;
+/* dbverify options */
+static int dbverify_verbose = 0;
+static char *dbverify_dbdir = NULL;
/* taken from idsktune */
#if defined(__sun)
@@ -1301,13 +1303,14 @@ process_command_line(int argc, char **argv, char *myname,
{"dryrun",ArgNone,'N'},
{0,0,0}};
- char *opts_dbverify = "vVfd:n:D:";
+ char *opts_dbverify = "vVfd:n:D:a:";
struct opt_ext long_options_dbverify[] = {
{"version",ArgNone,'v'},
{"debug",ArgRequired,'d'},
{"backend",ArgRequired,'n'},
{"configDir",ArgRequired,'D'},
{"verbose",ArgNone,'V'},
+ {"dbdir",ArgRequired,'a'},
{0,0,0}};
char *opts_referral = "vd:p:r:SD:";
@@ -1674,7 +1677,11 @@ process_command_line(int argc, char **argv, char *myname,
break;
case 'a': /* archive pathname for db */
- archive_name = optarg_ext;
+ if ( slapd_exemode == SLAPD_EXEMODE_DBVERIFY ) {
+ dbverify_dbdir = optarg_ext;
+ } else {
+ archive_name = optarg_ext;
+ }
break;
case 'Z':
@@ -2688,7 +2695,8 @@ slapd_exemode_dbverify()
pb.pb_plugin = backend_plugin;
pb.pb_instance_name = (char *)cmd_line_instance_names;
pb.pb_task_flags = SLAPI_TASK_RUNNING_FROM_COMMANDLINE;
-
+ pb.pb_dbverify_dbdir = dbverify_dbdir;
+
if ( backend_plugin->plg_dbverify != NULL ) {
return_value = (*backend_plugin->plg_dbverify)( &pb );
} else {
diff --git a/ldap/servers/slapd/pblock.c b/ldap/servers/slapd/pblock.c
index c10f788..bf57a33 100644
--- a/ldap/servers/slapd/pblock.c
+++ b/ldap/servers/slapd/pblock.c
@@ -5,7 +5,7 @@
* All rights reserved.
*
* License: GPL (version 3 or any later version).
- * See LICENSE for details.
+ * See LICENSE for details.
* END COPYRIGHT BLOCK **/
#ifdef HAVE_CONFIG_H
@@ -1677,6 +1677,11 @@ slapi_pblock_get( Slapi_PBlock *pblock, int arg, void *value )
(*(IFP*)value) = pblock->pb_txn_ruv_mods_fn;
break;
+ /* dbverify */
+ case SLAPI_DBVERIFY_DBDIR:
+ (*(char **)value) = pblock->pb_dbverify_dbdir;
+ break;
+
/* Search results set */
case SLAPI_SEARCH_RESULT_SET:
if(pblock->pb_op!=NULL)
@@ -3520,6 +3525,11 @@ slapi_pblock_set( Slapi_PBlock *pblock, int arg, void *value )
pblock->pb_aci_target_check = *((int *) value);
break;
+ /* dbverify */
+ case SLAPI_DBVERIFY_DBDIR:
+ pblock->pb_dbverify_dbdir = (char *) value;
+ break;
+
default:
LDAPDebug( LDAP_DEBUG_ANY,
"Unknown parameter block argument %d\n", arg, 0, 0 );
diff --git a/ldap/servers/slapd/slap.h b/ldap/servers/slapd/slap.h
index 6d1ad7b..823568d 100644
--- a/ldap/servers/slapd/slap.h
+++ b/ldap/servers/slapd/slap.h
@@ -1600,6 +1600,8 @@ typedef struct slapi_pblock {
int pb_seq_type;
char *pb_seq_attrname;
char *pb_seq_val;
+ /* dbverify argument */
+ char *pb_dbverify_dbdir;
/* ldif2db arguments */
char *pb_ldif_file;
int pb_removedupvals;
diff --git a/ldap/servers/slapd/slapi-plugin.h b/ldap/servers/slapd/slapi-plugin.h
index a8c7a4a..6b04610 100644
--- a/ldap/servers/slapd/slapi-plugin.h
+++ b/ldap/servers/slapd/slapi-plugin.h
@@ -7289,6 +7289,9 @@ typedef struct slapi_plugindesc {
/* ACI Target Check */
#define SLAPI_ACI_TARGET_CHECK 1946
+/* dbverify */
+#define SLAPI_DBVERIFY_DBDIR 1947
+
/* convenience macros for checking modify operation types */
#define SLAPI_IS_MOD_ADD(x) (((x) & ~LDAP_MOD_BVALUES) == LDAP_MOD_ADD)
#define SLAPI_IS_MOD_DELETE(x) (((x) & ~LDAP_MOD_BVALUES) == LDAP_MOD_DELETE)
diff --git a/man/man8/dbverify.8 b/man/man8/dbverify.8
index 30d6933..c74747a 100644
--- a/man/man8/dbverify.8
+++ b/man/man8/dbverify.8
@@ -31,6 +31,9 @@ one instance on the system, this option can be skipped.
.B \fB\-n\fR \fIBackend Name\fR
The name of the LDBM database to reindex. Example: userRoot
.TP
+.B \fB\-a\fR \fIDatabase Directory\fR
+Location of database if it is different than what is in the server configuration(e.g. backup directories)
+.TP
.B \fB\-d\fR \fIDebug Level\fR
Sets the debugging level.
.TP
8 years, 8 months
ldap/admin ldap/servers man/man8
by Mark Reynolds
ldap/admin/src/scripts/dbverify.in | 3 ++-
ldap/admin/src/scripts/verify-db.pl.in | 17 +++++++++--------
ldap/servers/slapd/back-ldbm/dbverify.c | 13 +++++++++++++
ldap/servers/slapd/main.c | 18 +++++++++++++-----
ldap/servers/slapd/pblock.c | 12 +++++++++++-
ldap/servers/slapd/slap.h | 2 ++
ldap/servers/slapd/slapi-plugin.h | 3 +++
man/man8/dbverify.8 | 3 +++
8 files changed, 56 insertions(+), 15 deletions(-)
New commits:
commit 27fadb75ec1f3b252028ce715cd7fa16da1f6525
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Wed Aug 5 16:31:49 2015 -0400
Ticket 48215 - verify_db.pl doesn't verify DB specified by -a option
Bug Description: verify_db.pl -a only uses the db location for
checking the transaction logs, because it ends up
calling "nsslapd dbverify" which only checks the
db files in the server configuration.
Fix Description: Allow a new argument to be passed to "nsslapd dbverify"
that specifies the db parent directory.
https://fedorahosted.org/389/ticket/48215
Reviewed by: nhosoi(Thanks!)
diff --git a/ldap/admin/src/scripts/dbverify.in b/ldap/admin/src/scripts/dbverify.in
index 6306a07..778a9ba 100755
--- a/ldap/admin/src/scripts/dbverify.in
+++ b/ldap/admin/src/scripts/dbverify.in
@@ -26,7 +26,7 @@ usage()
}
display_version="no"
-while getopts "Z:n:hVvfd:n:D:" flag
+while getopts "Z:n:hVvfd:n:D:a:" flag
do
case $flag in
h) usage
@@ -39,6 +39,7 @@ do
display_version="yes";;
f) args=$args" -f";;
D) args=$args" -D $OPTARG";;
+ a) args=$args" -a $OPTARG";;
?) usage
exit 1;;
esac
diff --git a/ldap/admin/src/scripts/verify-db.pl.in b/ldap/admin/src/scripts/verify-db.pl.in
index ae56a16..d481ecb 100644
--- a/ldap/admin/src/scripts/verify-db.pl.in
+++ b/ldap/admin/src/scripts/verify-db.pl.in
@@ -16,7 +16,7 @@ DSUtil::libpath_add("@db_libdir@");
DSUtil::libpath_add("@libdir@");
$ENV{'PATH'} = "@libdir@/@package_name@/slapd-$servid:@db_bindir@:/usr/bin:/";
$ENV{'SHLIB_PATH'} = "$ENV{'LD_LIBRARY_PATH'}";
-
+my $custom_dbdir = 0;
my $i = 0;
sub usage
@@ -118,12 +118,7 @@ sub getLastLogfile
return \$logfile;
}
-$isWin = -d '\\';
-if ($isWin) {
- $NULL = "nul";
-} else {
- $NULL = "/dev/null";
-}
+$NULL = "/dev/null";
while ($i <= $#ARGV) {
if ( "$ARGV[$i]" eq "-a" ) { # path to search the db files
@@ -149,6 +144,8 @@ print("*****************************************************************\n");
if ( "$startpoint" eq "" ) {
$startpoint = "@localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/db";
+} else {
+ $custom_dbdir = 1;
}
# get dirs having DBVERSION
my $dbdirs = getDbDir($startpoint);
@@ -192,7 +189,11 @@ for (my $i = 0; "$$dbdirs[$i]" ne ""; $i++)
# Check db files by db_verify
print "Verify db files ... ";
-open(DBVERIFY, "@sbindir@/dbverify -Z $servid 2>&1 1> $NULL |");
+if ($custom_dbdir){
+ open(DBVERIFY, "@sbindir@/dbverify -Z $servid -a $startpoint 2>&1 1> $NULL |");
+} else {
+ open(DBVERIFY, "@sbindir@/dbverify -Z $servid 2>&1 1> $NULL |");
+}
sleep 1;
my $bad_index = 0;
my $bad_id2entry = 0;
diff --git a/ldap/servers/slapd/back-ldbm/dbverify.c b/ldap/servers/slapd/back-ldbm/dbverify.c
index 85ee7a0..315ef93 100644
--- a/ldap/servers/slapd/back-ldbm/dbverify.c
+++ b/ldap/servers/slapd/back-ldbm/dbverify.c
@@ -186,13 +186,16 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
int rval = 1;
int rval_main = 0;
char **instance_names = NULL;
+ char *dbdir = NULL;
slapi_log_error(SLAPI_LOG_TRACE, "verify DB", "Verifying db files...\n");
slapi_pblock_get(pb, SLAPI_BACKEND_INSTANCE_NAME, &instance_names);
slapi_pblock_get(pb, SLAPI_SEQ_TYPE, &verbose);
slapi_pblock_get(pb, SLAPI_PLUGIN_PRIVATE, &li);
+ slapi_pblock_get(pb, SLAPI_DBVERIFY_DBDIR, &dbdir);
ldbm_config_load_dse_info(li);
ldbm_config_internal_set(li, CONFIG_DB_TRANSACTION_LOGGING, "off");
+
/* no write needed; choose EXPORT MODE */
if (0 != dblayer_start(li, DBLAYER_EXPORT_MODE))
{
@@ -211,6 +214,11 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
inst = ldbm_instance_find_by_name(li, *inp);
if (inst)
{
+ if (dbdir){
+ /* verifying backup */
+ slapi_ch_free_string(&inst->inst_parent_dir_name);
+ inst->inst_parent_dir_name = slapi_ch_strdup(dbdir);
+ }
rval_main |= dbverify_ext(inst, verbose);
}
else
@@ -235,6 +243,11 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
inst->inst_name);
continue; /* skip this instance and go to the next*/
}
+ if (dbdir){
+ /* verifying backup */
+ slapi_ch_free_string(&inst->inst_parent_dir_name);
+ inst->inst_parent_dir_name = slapi_ch_strdup(dbdir);
+ }
rval_main |= dbverify_ext(inst, verbose);
}
}
diff --git a/ldap/servers/slapd/main.c b/ldap/servers/slapd/main.c
index 9016144..922de97 100644
--- a/ldap/servers/slapd/main.c
+++ b/ldap/servers/slapd/main.c
@@ -435,13 +435,15 @@ static int ldif_printkey = EXPORT_PRINTKEY|EXPORT_APPENDMODE;
static char *archive_name = NULL;
static int db2ldif_dump_replica = 0;
static int db2ldif_dump_uniqueid = 1;
-static int ldif2db_generate_uniqueid = SLAPI_UNIQUEID_GENERATE_TIME_BASED;
-static int dbverify_verbose = 0;
+static int ldif2db_generate_uniqueid = SLAPI_UNIQUEID_GENERATE_TIME_BASED;
static char *ldif2db_namespaceid = NULL;
int importexport_encrypt = 0;
static int upgradedb_flags = 0;
static int upgradednformat_dryrun = 0;
static int is_quiet = 0;
+/* dbverify options */
+static int dbverify_verbose = 0;
+static char *dbverify_dbdir = NULL;
/* taken from idsktune */
#if defined(__sun)
@@ -1301,13 +1303,14 @@ process_command_line(int argc, char **argv, char *myname,
{"dryrun",ArgNone,'N'},
{0,0,0}};
- char *opts_dbverify = "vVfd:n:D:";
+ char *opts_dbverify = "vVfd:n:D:a:";
struct opt_ext long_options_dbverify[] = {
{"version",ArgNone,'v'},
{"debug",ArgRequired,'d'},
{"backend",ArgRequired,'n'},
{"configDir",ArgRequired,'D'},
{"verbose",ArgNone,'V'},
+ {"dbdir",ArgRequired,'a'},
{0,0,0}};
char *opts_referral = "vd:p:r:SD:";
@@ -1674,7 +1677,11 @@ process_command_line(int argc, char **argv, char *myname,
break;
case 'a': /* archive pathname for db */
- archive_name = optarg_ext;
+ if ( slapd_exemode == SLAPD_EXEMODE_DBVERIFY ) {
+ dbverify_dbdir = optarg_ext;
+ } else {
+ archive_name = optarg_ext;
+ }
break;
case 'Z':
@@ -2688,7 +2695,8 @@ slapd_exemode_dbverify()
pb.pb_plugin = backend_plugin;
pb.pb_instance_name = (char *)cmd_line_instance_names;
pb.pb_task_flags = SLAPI_TASK_RUNNING_FROM_COMMANDLINE;
-
+ pb.pb_dbverify_dbdir = dbverify_dbdir;
+
if ( backend_plugin->plg_dbverify != NULL ) {
return_value = (*backend_plugin->plg_dbverify)( &pb );
} else {
diff --git a/ldap/servers/slapd/pblock.c b/ldap/servers/slapd/pblock.c
index c10f788..bf57a33 100644
--- a/ldap/servers/slapd/pblock.c
+++ b/ldap/servers/slapd/pblock.c
@@ -5,7 +5,7 @@
* All rights reserved.
*
* License: GPL (version 3 or any later version).
- * See LICENSE for details.
+ * See LICENSE for details.
* END COPYRIGHT BLOCK **/
#ifdef HAVE_CONFIG_H
@@ -1677,6 +1677,11 @@ slapi_pblock_get( Slapi_PBlock *pblock, int arg, void *value )
(*(IFP*)value) = pblock->pb_txn_ruv_mods_fn;
break;
+ /* dbverify */
+ case SLAPI_DBVERIFY_DBDIR:
+ (*(char **)value) = pblock->pb_dbverify_dbdir;
+ break;
+
/* Search results set */
case SLAPI_SEARCH_RESULT_SET:
if(pblock->pb_op!=NULL)
@@ -3520,6 +3525,11 @@ slapi_pblock_set( Slapi_PBlock *pblock, int arg, void *value )
pblock->pb_aci_target_check = *((int *) value);
break;
+ /* dbverify */
+ case SLAPI_DBVERIFY_DBDIR:
+ pblock->pb_dbverify_dbdir = (char *) value;
+ break;
+
default:
LDAPDebug( LDAP_DEBUG_ANY,
"Unknown parameter block argument %d\n", arg, 0, 0 );
diff --git a/ldap/servers/slapd/slap.h b/ldap/servers/slapd/slap.h
index 6d1ad7b..823568d 100644
--- a/ldap/servers/slapd/slap.h
+++ b/ldap/servers/slapd/slap.h
@@ -1600,6 +1600,8 @@ typedef struct slapi_pblock {
int pb_seq_type;
char *pb_seq_attrname;
char *pb_seq_val;
+ /* dbverify argument */
+ char *pb_dbverify_dbdir;
/* ldif2db arguments */
char *pb_ldif_file;
int pb_removedupvals;
diff --git a/ldap/servers/slapd/slapi-plugin.h b/ldap/servers/slapd/slapi-plugin.h
index a8c7a4a..6b04610 100644
--- a/ldap/servers/slapd/slapi-plugin.h
+++ b/ldap/servers/slapd/slapi-plugin.h
@@ -7289,6 +7289,9 @@ typedef struct slapi_plugindesc {
/* ACI Target Check */
#define SLAPI_ACI_TARGET_CHECK 1946
+/* dbverify */
+#define SLAPI_DBVERIFY_DBDIR 1947
+
/* convenience macros for checking modify operation types */
#define SLAPI_IS_MOD_ADD(x) (((x) & ~LDAP_MOD_BVALUES) == LDAP_MOD_ADD)
#define SLAPI_IS_MOD_DELETE(x) (((x) & ~LDAP_MOD_BVALUES) == LDAP_MOD_DELETE)
diff --git a/man/man8/dbverify.8 b/man/man8/dbverify.8
index 30d6933..c74747a 100644
--- a/man/man8/dbverify.8
+++ b/man/man8/dbverify.8
@@ -31,6 +31,9 @@ one instance on the system, this option can be skipped.
.B \fB\-n\fR \fIBackend Name\fR
The name of the LDBM database to reindex. Example: userRoot
.TP
+.B \fB\-a\fR \fIDatabase Directory\fR
+Location of database if it is different than what is in the server configuration(e.g. backup directories)
+.TP
.B \fB\-d\fR \fIDebug Level\fR
Sets the debugging level.
.TP
8 years, 8 months
Branch '389-ds-base-1.3.3' - dirsrvtests/suites ldap/servers
by Mark Reynolds
dirsrvtests/suites/betxns/betxn_test.py | 70 +++++++++++++++++++++++++++++++
ldap/servers/plugins/memberof/memberof.c | 13 +++--
2 files changed, 77 insertions(+), 6 deletions(-)
New commits:
commit e2f6eebd8a004286bb049be81790e7af5289aff5
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Tue Aug 4 12:15:31 2015 -0400
Ticket 47810 - memberOf plugin not properly rejecting updates
Bug Description: When the memberOf plugin tries to add memberOf attribute to
an entry during a mod-replace on a group, even though the
update to the user entry fails, but plugin still allows
the member to be added to the group.
Fix Description: During a mod/replace check and return an error if the member
update fails.
https://fedorahosted.org/389/ticket/47810
Reviewed by: nhosoi(Thanks!)
(cherry picked from commit eb54f03e240402a4bd16f9cde1d66539805f56ea)
Conflicts:
dirsrvtests/suites/betxns/betxn_test.py
diff --git a/dirsrvtests/suites/betxns/betxn_test.py b/dirsrvtests/suites/betxns/betxn_test.py
index cee3d59..5da6e50 100644
--- a/dirsrvtests/suites/betxns/betxn_test.py
+++ b/dirsrvtests/suites/betxns/betxn_test.py
@@ -1,3 +1,11 @@
+# --- BEGIN COPYRIGHT BLOCK ---
+# Copyright (C) 2015 Red Hat, Inc.
+# All rights reserved.
+#
+# License: GPL (version 3 or any later version).
+# See LICENSE for details.
+# --- END COPYRIGHT BLOCK ---
+#
import os
import sys
import time
@@ -166,6 +174,67 @@ def test_betxn_attr_uniqueness(topology):
log.info('test_betxn_attr_uniqueness: PASSED')
+def test_betxn_memberof(topology):
+ ENTRY1_DN = 'cn=group1,' + DEFAULT_SUFFIX
+ ENTRY2_DN = 'cn=group2,' + DEFAULT_SUFFIX
+ PLUGIN_DN = 'cn=' + PLUGIN_MEMBER_OF + ',cn=plugins,cn=config'
+
+ # Enable and configure memberOf plugin
+ topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF)
+ try:
+ topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'memberofgroupattr', 'member')])
+ except ldap.LDAPError, e:
+ log.fatal('test_betxn_memberof: Failed to update config(member): error ' + e.message['desc'])
+ assert False
+
+ # Add our test entries
+ try:
+ topology.standalone.add_s(Entry((ENTRY1_DN, {'objectclass': "top groupofnames".split(),
+ 'cn': 'group1'})))
+ except ldap.LDAPError, e:
+ log.error('test_betxn_memberof: Failed to add group1:' +
+ ENTRY1_DN + ', error ' + e.message['desc'])
+ assert False
+
+ try:
+ topology.standalone.add_s(Entry((ENTRY2_DN, {'objectclass': "top groupofnames".split(),
+ 'cn': 'group1'})))
+ except ldap.LDAPError, e:
+ log.error('test_betxn_memberof: Failed to add group2:' +
+ ENTRY2_DN + ', error ' + e.message['desc'])
+ assert False
+
+ #
+ # Test mod replace
+ #
+
+ # Add group2 to group1 - it should fail with objectclass violation
+ try:
+ topology.standalone.modify_s(ENTRY1_DN, [(ldap.MOD_REPLACE, 'member', ENTRY2_DN)])
+ log.fatal('test_betxn_memberof: Group2 was incorrectly allowed to be added to group1')
+ assert False
+ except ldap.LDAPError, e:
+ log.info('test_betxn_memberof: Group2 was correctly rejected (mod replace): error ' + e.message['desc'])
+
+ #
+ # Test mod add
+ #
+
+ # Add group2 to group1 - it should fail with objectclass violation
+ try:
+ topology.standalone.modify_s(ENTRY1_DN, [(ldap.MOD_ADD, 'member', ENTRY2_DN)])
+ log.fatal('test_betxn_memberof: Group2 was incorrectly allowed to be added to group1')
+ assert False
+ except ldap.LDAPError, e:
+ log.info('test_betxn_memberof: Group2 was correctly rejected (mod add): error ' + e.message['desc'])
+
+ #
+ # Done
+ #
+
+ log.info('test_betxn_memberof: PASSED')
+
+
def test_betxn_final(topology):
topology.standalone.delete()
log.info('betxn test suite PASSED')
@@ -179,6 +248,7 @@ def run_isolated():
test_betxn_init(topo)
test_betxt_7bit(topo)
test_betxn_attr_uniqueness(topo)
+ test_betxn_memberof(topo)
test_betxn_final(topo)
diff --git a/ldap/servers/plugins/memberof/memberof.c b/ldap/servers/plugins/memberof/memberof.c
index f283b59..32af605 100644
--- a/ldap/servers/plugins/memberof/memberof.c
+++ b/ldap/servers/plugins/memberof/memberof.c
@@ -2405,6 +2405,7 @@ memberof_replace_list(Slapi_PBlock *pb, MemberOfConfig *config,
struct slapi_entry *post_e = NULL;
Slapi_Attr *pre_attr = 0;
Slapi_Attr *post_attr = 0;
+ int rc = 0;
int i = 0;
slapi_pblock_get( pb, SLAPI_ENTRY_PRE_OP, &pre_e );
@@ -2481,14 +2482,14 @@ memberof_replace_list(Slapi_PBlock *pb, MemberOfConfig *config,
in pre, not in post, delete from entry
not in pre, in post, add to entry
*/
- while(pre_index < pre_total || post_index < post_total)
+ while(rc == 0 && (pre_index < pre_total || post_index < post_total))
{
if(pre_index == pre_total)
{
/* add the rest of post */
slapi_sdn_set_normdn_byref(sdn,
slapi_value_get_string(post_array[post_index]));
- memberof_add_one(pb, config, group_sdn, sdn);
+ rc = memberof_add_one(pb, config, group_sdn, sdn);
post_index++;
}
@@ -2497,7 +2498,7 @@ memberof_replace_list(Slapi_PBlock *pb, MemberOfConfig *config,
/* delete the rest of pre */
slapi_sdn_set_normdn_byref(sdn,
slapi_value_get_string(pre_array[pre_index]));
- memberof_del_one(pb, config, group_sdn, sdn);
+ rc = memberof_del_one(pb, config, group_sdn, sdn);
pre_index++;
}
@@ -2514,7 +2515,7 @@ memberof_replace_list(Slapi_PBlock *pb, MemberOfConfig *config,
/* delete pre array */
slapi_sdn_set_normdn_byref(sdn,
slapi_value_get_string(pre_array[pre_index]));
- memberof_del_one(pb, config, group_sdn, sdn);
+ rc = memberof_del_one(pb, config, group_sdn, sdn);
pre_index++;
}
@@ -2523,7 +2524,7 @@ memberof_replace_list(Slapi_PBlock *pb, MemberOfConfig *config,
/* add post array */
slapi_sdn_set_normdn_byref(sdn,
slapi_value_get_string(post_array[post_index]));
- memberof_add_one(pb, config, group_sdn, sdn);
+ rc = memberof_add_one(pb, config, group_sdn, sdn);
post_index++;
}
@@ -2541,7 +2542,7 @@ memberof_replace_list(Slapi_PBlock *pb, MemberOfConfig *config,
}
}
- return 0;
+ return rc;
}
/* memberof_load_array()
8 years, 8 months