osaf/libs/agents/saf/imma/imma_om_api.c | 64 +++++++++++++++++++++++++++-----
osaf/libs/saf/include/saImmOm_A_2_13.h | 13 ++++++
2 files changed, 66 insertions(+), 11 deletions(-)
diff --git a/osaf/libs/agents/saf/imma/imma_om_api.c
b/osaf/libs/agents/saf/imma/imma_om_api.c
--- a/osaf/libs/agents/saf/imma/imma_om_api.c
+++ b/osaf/libs/agents/saf/imma/imma_om_api.c
@@ -6027,6 +6027,7 @@ SaAisErrorT saImmOmSearchInitialize_2(Sa
uint32_t proc_rc = NCSCC_RC_SUCCESS;
bool locked = true;
bool isAccGetConfigAttrs = false;
+ bool isNoDanglingSearch = searchOptions &
SA_IMM_SEARCH_NO_DANGLING_DEPENDENTS;
IMMA_CB *cb = &imma_cb;
IMMSV_EVT evt;
IMMSV_EVT *out_evt = NULL;
@@ -6059,8 +6060,9 @@ SaAisErrorT saImmOmSearchInitialize_2(Sa
return SA_AIS_ERR_INVALID_PARAM;
}
- if ((searchParam) && ((searchParam->searchOneAttr.attrName == NULL) &&
- (searchParam->searchOneAttr.attrValue != NULL))) {
+ if ((searchParam) && !isNoDanglingSearch &&
+ ((searchParam->searchOneAttr.attrName == NULL) &&
+ (searchParam->searchOneAttr.attrValue != NULL))) {
TRACE_2("ERR_INVALID_PARAM: attrName is NULL but attrValue is
not NULL");
TRACE_LEAVE();
return SA_AIS_ERR_INVALID_PARAM;
@@ -6132,6 +6134,40 @@ SaAisErrorT saImmOmSearchInitialize_2(Sa
goto release_lock;
}
+ if (isNoDanglingSearch) {
+ if(!cl_node->isImmA2d) {
+ TRACE("ERR_VERSION: search option
SA_IMM_SEARCH_NO_DANGLING_DEPENDENTS "
+ "requires IMM version A.02.13 or
higher");
+ rc = SA_AIS_ERR_VERSION;
+ goto release_lock;
+ }
+ if(scope == SA_IMM_ONE) {
+ TRACE("ERR_INVALID_PARAM:
SA_IMM_SEARCH_NO_DANGLING_DEPENDENTS "
+ "flag cannot be used with SA_IMM_ONE
scope");
+ rc = SA_AIS_ERR_INVALID_PARAM;
+ goto release_lock;
+ }
+ if(!searchParam || !searchParam->searchOneAttr.attrValue) {
+ TRACE("ERR_INVALID_PARAM: DN of an object must be
specified "
+ "when
SA_IMM_SEARCH_NO_DANGLING_DEPENDENTS flag is used");
+ rc = SA_AIS_ERR_INVALID_PARAM;
+ goto release_lock;
+ }
+ if(searchParam->searchOneAttr.attrName) {
+ TRACE("ERR_INVALID_PARAM: attrName must be NULL "
+ "when
SA_IMM_SEARCH_NO_DANGLING_DEPENDENTS flag is used");
+ rc = SA_AIS_ERR_INVALID_PARAM;
+ goto release_lock;
+ }
+ if(searchParam->searchOneAttr.attrValueType !=
SA_IMM_ATTR_SANAMET
+ && searchParam->searchOneAttr.attrValueType !=
SA_IMM_ATTR_SASTRINGT) {
+ TRACE("ERR_INVALID_PARAM: attrValueType must be
SA_IMM_ATTR_SANAMET or "
+ "SA_IMM_ATTR_SASTRINGT when
SA_IMM_SEARCH_NO_DANGLING_DEPENDENTS flag is used");
+ rc = SA_AIS_ERR_INVALID_PARAM;
+ goto release_lock;
+ }
+ }
+
/*Create search-node & handle */
search_node = (IMMA_SEARCH_NODE *)
calloc(1, sizeof(IMMA_SEARCH_NODE));
@@ -6188,18 +6224,24 @@ SaAisErrorT saImmOmSearchInitialize_2(Sa
req->scope = scope;
req->searchOptions = searchOptions;
- if (!searchParam || (!searchParam->searchOneAttr.attrName)) {
+ if (!searchParam || (!searchParam->searchOneAttr.attrName &&
!isNoDanglingSearch)) {
req->searchParam.present = ImmOmSearchParameter_PR_NOTHING;
} else {
req->searchParam.present = ImmOmSearchParameter_PR_oneAttrParam;
- req->searchParam.choice.oneAttrParam.attrName.size =
strlen(searchParam->searchOneAttr.attrName) + 1;
- req->searchParam.choice.oneAttrParam.attrName.buf =
/*alloc-2 */
-
malloc(req->searchParam.choice.oneAttrParam.attrName.size);
- strncpy(req->searchParam.choice.oneAttrParam.attrName.buf,
- (char *)searchParam->searchOneAttr.attrName,
-
(size_t)req->searchParam.choice.oneAttrParam.attrName.size);
-
req->searchParam.choice.oneAttrParam.attrName.buf[req->searchParam.choice.oneAttrParam.attrName.size
-
- 1] = 0;
+
+ if(searchParam->searchOneAttr.attrName) {
+ req->searchParam.choice.oneAttrParam.attrName.size =
strlen(searchParam->searchOneAttr.attrName) + 1;
+ req->searchParam.choice.oneAttrParam.attrName.buf =
/*alloc-2 */
+
malloc(req->searchParam.choice.oneAttrParam.attrName.size);
+
strncpy(req->searchParam.choice.oneAttrParam.attrName.buf,
+ (char
*)searchParam->searchOneAttr.attrName,
+
(size_t)req->searchParam.choice.oneAttrParam.attrName.size);
+
req->searchParam.choice.oneAttrParam.attrName.buf[req->searchParam.choice.oneAttrParam.attrName.size
- 1] = 0;
+ } else {
+ req->searchParam.choice.oneAttrParam.attrName.size = 0;
+ req->searchParam.choice.oneAttrParam.attrName.buf =
NULL;
+ }
+
if (searchParam->searchOneAttr.attrValue) {
req->searchParam.choice.oneAttrParam.attrValueType =
searchParam->searchOneAttr.attrValueType;
/*alloc-3 */
diff --git a/osaf/libs/saf/include/saImmOm_A_2_13.h
b/osaf/libs/saf/include/saImmOm_A_2_13.h
--- a/osaf/libs/saf/include/saImmOm_A_2_13.h
+++ b/osaf/libs/saf/include/saImmOm_A_2_13.h
@@ -53,6 +53,19 @@ extern "C" {
#define SA_IMM_ATTR_NO_DANGLING 0x0000000004000000 /* See:
https://sourceforge.net/p/opensaf/tickets/49/ */
+ /* 4.2.12 SaImmSearchOptionsT */
+ /*
+#define SA_IMM_SEARCH_ONE_ATTR 0x0001
+#define SA_IMM_SEARCH_GET_ALL_ATTR 0x0100
+#define SA_IMM_SEARCH_GET_NO_ATTR 0x0200
+#define SA_IMM_SEARCH_GET_SOME_ATTR 0x0400
+#define SA_IMM_SEARCH_GET_CONFIG_ATTR 0x0000000000010000 / * See:
http://devel.opensaf.org/ticket/1897
+ Supported in OpenSaf 4.3 * /
+ */
+#define SA_IMM_SEARCH_NO_DANGLING_DEPENDENTS 0x0000000100000000 /* See:
https://sourceforge.net/p/opensaf/tickets/50/
+
Supported in OpenSaf 4.4 */
+
+
#ifdef __cplusplus
}
#endif
------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT
organizations don't have a clear picture of how application performance
affects their revenue. With AppDynamics, you get 100% visibility into your
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel