andykimpe / rpms / 389-ds-base

Forked from rpms/389-ds-base 4 months ago
Clone

Blame 0354-Ticket-48215-verify_db.pl-doesn-t-verify-DB-specifie.patch

dc8c34
From 217f5abb8cc586378fff66bbbb5dfb9d87a948f7 Mon Sep 17 00:00:00 2001
dc8c34
From: Mark Reynolds <mreynolds@redhat.com>
dc8c34
Date: Wed, 5 Aug 2015 16:31:49 -0400
dc8c34
Subject: [PATCH 354/363] Ticket 48215 - verify_db.pl doesn't verify DB
dc8c34
 specified by -a option
dc8c34
dc8c34
Bug Description:  verify_db.pl -a only uses the db location for
dc8c34
                  checking the transaction logs, because it ends up
dc8c34
                  calling "nsslapd dbverify" which only checks the
dc8c34
                  db files in the server configuration.
dc8c34
dc8c34
Fix Description:  Allow a new argument to be passed to "nsslapd dbverify"
dc8c34
                  that specifies the db parent directory.
dc8c34
dc8c34
https://fedorahosted.org/389/ticket/48215
dc8c34
dc8c34
Reviewed by: nhosoi(Thanks!)
dc8c34
dc8c34
(cherry picked from commit 27fadb75ec1f3b252028ce715cd7fa16da1f6525)
dc8c34
dc8c34
Conflicts:
dc8c34
	ldap/servers/slapd/pblock.c
dc8c34
dc8c34
(cherry picked from commit 6878a6cb355ff96fc390d71528978420ffc316e7)
dc8c34
dc8c34
Conflicts:
dc8c34
	ldap/servers/slapd/pblock.c
dc8c34
	ldap/servers/slapd/slapi-plugin.h
dc8c34
dc8c34
(cherry picked from commit bb704aac1868ab719d0823871cf0b677e67fcf41)
dc8c34
dc8c34
Conflicts:
dc8c34
	ldap/admin/src/scripts/dbverify.in
dc8c34
	ldap/admin/src/scripts/verify-db.pl.in
dc8c34
	ldap/servers/slapd/main.c
dc8c34
	man/man8/dbverify.8
dc8c34
dc8c34
(cherry picked from commit cf8c8d78990b66fd7005839e843dfe795eb17327)
dc8c34
---
dc8c34
 ldap/admin/src/scripts/template-dbverify.in     |  6 +++++-
dc8c34
 ldap/admin/src/scripts/template-verify-db.pl.in | 10 +++++++++-
dc8c34
 ldap/servers/slapd/back-ldbm/dbverify.c         | 13 +++++++++++++
dc8c34
 ldap/servers/slapd/main.c                       | 18 +++++++++++++-----
dc8c34
 ldap/servers/slapd/pblock.c                     | 10 ++++++++++
dc8c34
 ldap/servers/slapd/slap.h                       |  2 ++
dc8c34
 ldap/servers/slapd/slapi-plugin.h               |  3 +++
dc8c34
 7 files changed, 55 insertions(+), 7 deletions(-)
dc8c34
dc8c34
diff --git a/ldap/admin/src/scripts/template-dbverify.in b/ldap/admin/src/scripts/template-dbverify.in
dc8c34
index 8c1a98e..04ef555 100755
dc8c34
--- a/ldap/admin/src/scripts/template-dbverify.in
dc8c34
+++ b/ldap/admin/src/scripts/template-dbverify.in
dc8c34
@@ -28,8 +28,12 @@ do
dc8c34
         args=$args" "$1
dc8c34
     elif [ "$1" = "-V" ]; then
dc8c34
         args=$args" "$1
dc8c34
+    elif [ "$1" = "-a" ]; then
dc8c34
+        args=$args" "$1
dc8c34
+        shift
dc8c34
+        args=$args" "$1
dc8c34
     else
dc8c34
-        echo "Usage: dbverify [-n backend_instance] [-V]"
dc8c34
+        echo "Usage: dbverify [-n backend_instance] [-a db_file_directory] [-V]"
dc8c34
         echo "Note : if \"-n backend_instance\" is not passed, verify all DBs."
dc8c34
         echo "  -V : verbose"
dc8c34
         exit 1
dc8c34
diff --git a/ldap/admin/src/scripts/template-verify-db.pl.in b/ldap/admin/src/scripts/template-verify-db.pl.in
dc8c34
index c352eb2..f48d94f 100644
dc8c34
--- a/ldap/admin/src/scripts/template-verify-db.pl.in
dc8c34
+++ b/ldap/admin/src/scripts/template-verify-db.pl.in
dc8c34
@@ -38,6 +38,8 @@
dc8c34
 # END COPYRIGHT BLOCK
dc8c34
 #
dc8c34
 
dc8c34
+my $customer_dbdir = 0;
dc8c34
+
dc8c34
 sub usage
dc8c34
 {
dc8c34
   print "Usage: $0 [ -a <fullpath_to_db_dir> ]\n";
dc8c34
@@ -164,6 +166,8 @@ print("*****************************************************************\n");
dc8c34
 
dc8c34
 if ( "$startpoint" eq "" ) {
dc8c34
   $startpoint = "{{DB-DIR}}";
dc8c34
+} else {
dc8c34
+  $custom_dbdir = 1;
dc8c34
 }
dc8c34
 # get dirs having DBVERSION
dc8c34
 my $dbdirs = getDbDir($startpoint);
dc8c34
@@ -215,7 +219,11 @@ for (my $i = 0; "$$dbdirs[$i]" ne ""; $i++)
dc8c34
 
dc8c34
 # Check db files by db_verify
dc8c34
 print "Verify db files ... ";
dc8c34
-open(DBVERIFY, "dbverify $thisdb 2>&1 1> $NULL |");
dc8c34
+if ($custom_dbdir){
dc8c34
+  open(DBVERIFY, "dbverify $thisdb -a $startpoint 2>&1 1> $NULL |");
dc8c34
+} else {
dc8c34
+  open(DBVERIFY, "dbverify $thisdb 2>&1 1> $NULL |");
dc8c34
+}
dc8c34
 sleep 1;
dc8c34
 my $bad_index = 0;
dc8c34
 my $bad_id2entry = 0;
dc8c34
diff --git a/ldap/servers/slapd/back-ldbm/dbverify.c b/ldap/servers/slapd/back-ldbm/dbverify.c
dc8c34
index ffd5900..b0b2d78 100644
dc8c34
--- a/ldap/servers/slapd/back-ldbm/dbverify.c
dc8c34
+++ b/ldap/servers/slapd/back-ldbm/dbverify.c
dc8c34
@@ -214,13 +214,16 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
dc8c34
     int rval              = 1;
dc8c34
     int rval_main         = 0;
dc8c34
     char **instance_names = NULL;
dc8c34
+    char *dbdir           = NULL;
dc8c34
 
dc8c34
     slapi_log_error(SLAPI_LOG_TRACE, "verify DB", "Verifying db files...\n");
dc8c34
     slapi_pblock_get(pb, SLAPI_BACKEND_INSTANCE_NAME, &instance_names);
dc8c34
     slapi_pblock_get(pb, SLAPI_SEQ_TYPE, &verbose);
dc8c34
     slapi_pblock_get(pb, SLAPI_PLUGIN_PRIVATE, &li;;
dc8c34
+    slapi_pblock_get(pb, SLAPI_DBVERIFY_DBDIR, &dbdir);
dc8c34
     ldbm_config_load_dse_info(li);
dc8c34
     ldbm_config_internal_set(li, CONFIG_DB_TRANSACTION_LOGGING, "off");
dc8c34
+
dc8c34
     /* no write needed; choose EXPORT MODE */
dc8c34
     if (0 != dblayer_start(li, DBLAYER_EXPORT_MODE))
dc8c34
     {
dc8c34
@@ -239,6 +242,11 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
dc8c34
             inst = ldbm_instance_find_by_name(li, *inp);
dc8c34
             if (inst)
dc8c34
             {
dc8c34
+                if (dbdir){
dc8c34
+                    /* verifying backup */
dc8c34
+                    slapi_ch_free_string(&inst->inst_parent_dir_name);
dc8c34
+                    inst->inst_parent_dir_name = slapi_ch_strdup(dbdir);
dc8c34
+                }
dc8c34
                 rval_main |= dbverify_ext(inst, verbose);
dc8c34
             }
dc8c34
             else
dc8c34
@@ -263,6 +271,11 @@ ldbm_back_dbverify( Slapi_PBlock *pb )
dc8c34
                             inst->inst_name);
dc8c34
                 continue; /* skip this instance and go to the next*/
dc8c34
             }
dc8c34
+            if (dbdir){
dc8c34
+                /* verifying backup */
dc8c34
+                slapi_ch_free_string(&inst->inst_parent_dir_name);
dc8c34
+                inst->inst_parent_dir_name = slapi_ch_strdup(dbdir);
dc8c34
+            }
dc8c34
             rval_main |= dbverify_ext(inst, verbose);
dc8c34
         }
dc8c34
     }
dc8c34
diff --git a/ldap/servers/slapd/main.c b/ldap/servers/slapd/main.c
dc8c34
index 5d3e7e7..2442610 100644
dc8c34
--- a/ldap/servers/slapd/main.c
dc8c34
+++ b/ldap/servers/slapd/main.c
dc8c34
@@ -490,12 +490,14 @@ static int ldif_printkey = EXPORT_PRINTKEY|EXPORT_APPENDMODE;
dc8c34
 static char *archive_name = NULL;
dc8c34
 static int db2ldif_dump_replica = 0;
dc8c34
 static int db2ldif_dump_uniqueid = 1;
dc8c34
-static int ldif2db_generate_uniqueid = SLAPI_UNIQUEID_GENERATE_TIME_BASED;	
dc8c34
-static int dbverify_verbose = 0;
dc8c34
+static int ldif2db_generate_uniqueid = SLAPI_UNIQUEID_GENERATE_TIME_BASED;
dc8c34
 static char *ldif2db_namespaceid = NULL;
dc8c34
 int importexport_encrypt = 0;
dc8c34
 static int upgradedb_flags = 0;
dc8c34
 static int upgradednformat_dryrun = 0;
dc8c34
+/* dbverify options */
dc8c34
+static int dbverify_verbose = 0;
dc8c34
+static char *dbverify_dbdir = NULL;
dc8c34
 
dc8c34
 /* taken from idsktune */
dc8c34
 #if defined(__sun)
dc8c34
@@ -1449,13 +1451,14 @@ process_command_line(int argc, char **argv, char *myname,
dc8c34
 		{"dryrun",ArgNone,'N'},
dc8c34
 		{0,0,0}};
dc8c34
 
dc8c34
-	char *opts_dbverify = "vVfd:n:D:"; 
dc8c34
+	char *opts_dbverify = "vVfd:n:D:a:";
dc8c34
 	struct opt_ext long_options_dbverify[] = {
dc8c34
 		{"version",ArgNone,'v'},
dc8c34
 		{"debug",ArgRequired,'d'},
dc8c34
 		{"backend",ArgRequired,'n'},
dc8c34
 		{"configDir",ArgRequired,'D'},
dc8c34
 		{"verbose",ArgNone,'V'},
dc8c34
+		{"dbdir",ArgRequired,'a'},
dc8c34
 		{0,0,0}};
dc8c34
 
dc8c34
 	char *opts_referral = "vd:p:r:SD:"; 
dc8c34
@@ -1841,7 +1844,11 @@ process_command_line(int argc, char **argv, char *myname,
dc8c34
 			break;
dc8c34
 
dc8c34
 		case 'a':	/* archive pathname for db */
dc8c34
-			archive_name = optarg_ext;
dc8c34
+			if ( slapd_exemode == SLAPD_EXEMODE_DBVERIFY ) {
dc8c34
+				dbverify_dbdir = optarg_ext;
dc8c34
+			} else {
dc8c34
+				archive_name = optarg_ext;
dc8c34
+			}
dc8c34
 			break;
dc8c34
 
dc8c34
 		case 'Z':
dc8c34
@@ -2850,7 +2857,8 @@ slapd_exemode_dbverify()
dc8c34
     pb.pb_plugin = backend_plugin;
dc8c34
     pb.pb_instance_name = (char *)cmd_line_instance_names;
dc8c34
     pb.pb_task_flags = SLAPI_TASK_RUNNING_FROM_COMMANDLINE;
dc8c34
-    
dc8c34
+    pb.pb_dbverify_dbdir = dbverify_dbdir;
dc8c34
+
dc8c34
     if ( backend_plugin->plg_dbverify != NULL ) {
dc8c34
         return_value = (*backend_plugin->plg_dbverify)( &pb );
dc8c34
     } else {
dc8c34
diff --git a/ldap/servers/slapd/pblock.c b/ldap/servers/slapd/pblock.c
dc8c34
index 849c20e..b12881b 100644
dc8c34
--- a/ldap/servers/slapd/pblock.c
dc8c34
+++ b/ldap/servers/slapd/pblock.c
dc8c34
@@ -1699,6 +1699,11 @@ slapi_pblock_get( Slapi_PBlock *pblock, int arg, void *value )
dc8c34
 		(*(IFP*)value) = pblock->pb_txn_ruv_mods_fn;
dc8c34
 		break;
dc8c34
 
dc8c34
+	/* dbverify */
dc8c34
+	case SLAPI_DBVERIFY_DBDIR:
dc8c34
+		(*(char **)value) = pblock->pb_dbverify_dbdir;
dc8c34
+		break;
dc8c34
+
dc8c34
 	/* Search results set */
dc8c34
 	case SLAPI_SEARCH_RESULT_SET:
dc8c34
 		if(pblock->pb_op!=NULL)
dc8c34
@@ -3523,6 +3528,11 @@ slapi_pblock_set( Slapi_PBlock *pblock, int arg, void *value )
dc8c34
 		pblock->pb_paged_results_index = *(int *)value;
dc8c34
 		break;
dc8c34
 
dc8c34
+	/* dbverify */
dc8c34
+	case SLAPI_DBVERIFY_DBDIR:
dc8c34
+		pblock->pb_dbverify_dbdir = (char *) value;
dc8c34
+		break;
dc8c34
+
dc8c34
 	default:
dc8c34
 		LDAPDebug( LDAP_DEBUG_ANY,
dc8c34
 		    "Unknown parameter block argument %d\n", arg, 0, 0 );
dc8c34
diff --git a/ldap/servers/slapd/slap.h b/ldap/servers/slapd/slap.h
dc8c34
index c298033..da90fe6 100644
dc8c34
--- a/ldap/servers/slapd/slap.h
dc8c34
+++ b/ldap/servers/slapd/slap.h
dc8c34
@@ -1548,6 +1548,8 @@ typedef struct slapi_pblock {
dc8c34
 	int             pb_seq_type;
dc8c34
 	char            *pb_seq_attrname;
dc8c34
 	char            *pb_seq_val;
dc8c34
+	/* dbverify argument */
dc8c34
+	char *pb_dbverify_dbdir;
dc8c34
 	/* ldif2db arguments */
dc8c34
 	char		*pb_ldif_file;
dc8c34
 	int		pb_removedupvals;
dc8c34
diff --git a/ldap/servers/slapd/slapi-plugin.h b/ldap/servers/slapd/slapi-plugin.h
dc8c34
index 5c737ad..75d5aa9 100644
dc8c34
--- a/ldap/servers/slapd/slapi-plugin.h
dc8c34
+++ b/ldap/servers/slapd/slapi-plugin.h
dc8c34
@@ -6889,6 +6889,9 @@ typedef struct slapi_plugindesc {
dc8c34
 /* Simple paged results index */
dc8c34
 #define SLAPI_PAGED_RESULTS_INDEX   1945
dc8c34
 
dc8c34
+/* dbverify */
dc8c34
+#define SLAPI_DBVERIFY_DBDIR		1947
dc8c34
+
dc8c34
 /* convenience macros for checking modify operation types */
dc8c34
 #define SLAPI_IS_MOD_ADD(x) (((x) & ~LDAP_MOD_BVALUES) == LDAP_MOD_ADD)
dc8c34
 #define SLAPI_IS_MOD_DELETE(x) (((x) & ~LDAP_MOD_BVALUES) == LDAP_MOD_DELETE)
dc8c34
-- 
dc8c34
2.4.3
dc8c34