Hi Hung, Reviewed the code. Ack from me.
Thanks, Zoran -----Original Message----- From: Hung Nguyen [mailto:[email protected]] Sent: Thursday, January 21, 2016 10:09 AM To: Zoran Milinkovic; [email protected] Cc: [email protected] Subject: [PATCH 1 of 1] imm: Add duplicates checking for pbe audit [#1665] 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
