osaf/libs/common/immsv/immpbe_dump.cc |  65 +++++++++++++++++++++++++++++++++++
 1 files changed, 65 insertions(+), 0 deletions(-)


Check duplicate values for attributes defined as SA_NO_DUPLICATES.

diff --git a/osaf/libs/common/immsv/immpbe_dump.cc 
b/osaf/libs/common/immsv/immpbe_dump.cc
--- a/osaf/libs/common/immsv/immpbe_dump.cc
+++ b/osaf/libs/common/immsv/immpbe_dump.cc
@@ -3632,6 +3632,70 @@ done:
        return err;
 }
 
+static int pbeAuditNoDuplicates(sqlite3 *dbHandle) {
+       sqlite3_stmt *stmt = NULL;
+       int rc;
+       int err = 0;
+       /* SA_IMM_ATTR_NO_DUPLICATES = 16777216 */
+       const char *sql =
+                       "select obj.dn, ad.attr_name, oim.int_val as val, 
count(oim.int_val) as num "
+                       "from attr_def ad, objects obj, objects_int_multi oim "
+                       "where (ad.attr_flags & 16777216) = 16777216 "
+                       "and obj.class_id = ad.class_id and oim.obj_id = 
obj.obj_id and oim.attr_name = ad.attr_name "
+                       "group by obj.dn, ad.attr_name, oim.int_val "
+                       "having num > 1 "
+                       "union all "
+                       "select obj.dn, ad.attr_name, otm.text_val as val, 
count(otm.text_val) as num "
+                       "from attr_def ad, objects obj, objects_text_multi otm "
+                       "where (ad.attr_flags & 16777216) = 16777216 "
+                       "and obj.class_id = ad.class_id and otm.obj_id = 
obj.obj_id and otm.attr_name = ad.attr_name "
+                       "group by obj.dn, ad.attr_name, otm.text_val "
+                       "having num > 1 "
+                       "union all "
+                       "select obj.dn, ad.attr_name, orm.real_val as val, 
count(orm.real_val) as num "
+                       "from attr_def ad, objects obj, objects_real_multi orm "
+                       "where (ad.attr_flags & 16777216) = 16777216 "
+                       "and obj.class_id = ad.class_id and orm.obj_id = 
obj.obj_id and orm.attr_name = ad.attr_name "
+                       "group by obj.dn, ad.attr_name, orm.real_val "
+                       "having num > 1 "
+                       "union all "
+                       "select obj.dn, ad.attr_name, obm.blob_val as val, 
count(obm.blob_val) as num "
+                       "from attr_def ad, objects obj, objects_blob_multi obm "
+                       "where (ad.attr_flags & 16777216) = 16777216 "
+                       "and obj.class_id = ad.class_id and obm.obj_id = 
obj.obj_id and obm.attr_name = ad.attr_name "
+                       "group by obj.dn, ad.attr_name, obm.blob_val "
+                       "having num > 1";
+
+       /* Audit NO_DUPLICATES for multi-valued attributes */
+       rc = sqlite3_prepare_v2(dbHandle, sql, -1, &stmt, NULL);
+       if(rc != SQLITE_OK) {
+               LOG_ER("Failed to prepare SQL statement for(%d): %s", rc, sql);
+               err = 1;
+               goto end;
+       }
+
+       while((rc = sqlite3_step(stmt)) == SQLITE_ROW) {
+               LOG_ER("NO_DUPLICATES: '%s:%s' has %s values of '%s'",
+                               sqlite3_column_text(stmt, 0),
+                               sqlite3_column_text(stmt, 1),
+                               sqlite3_column_text(stmt, 3),
+                               sqlite3_column_text(stmt, 2));
+               err = 1;
+       }
+
+       if(rc != SQLITE_DONE) {
+               LOG_ER("SQL statement ('%s') failed with error code: %d\n", 
sql, rc);
+               err = 1;
+       }
+
+end:
+       if(stmt) {
+               sqlite3_finalize(stmt);
+       }
+
+       return err;
+}
+
 int pbeAudit(void *db_handle) {
        int rc;
 
@@ -3640,6 +3704,7 @@ int pbeAudit(void *db_handle) {
        rc |= pbeAuditObjectRdnFlag((sqlite3 *)db_handle);
        rc |= pbeAuditObjectDn((sqlite3 *)db_handle);
        rc |= pbeAuditClasses((sqlite3 *)db_handle);
+       rc |= pbeAuditNoDuplicates((sqlite3 *)db_handle);
 
        return rc;
 }

------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to