osaf/services/saf/clmsv/clms/clms_evt.c | 48 ++++++++++++++++++--------------
1 files changed, 27 insertions(+), 21 deletions(-)
When a node tries to join with a node name that is not configured
or just gets simply mis-configured, then CLM crashes causing due
to lack of null check during the processing of node join request.
When this issue happens, the following logging is done by CLM:
Mar 26 18:44:52 SC-1 local0.err osafclmd[418]: ER CLM NodeName: 'SC-3' doesn't
match entry in imm.xml.
Specify a correct node name in/etc/opensaf/node_name.
This patch 1 of 1 adds a null check such that CLM server doesn't crashes.
diff --git a/osaf/services/saf/clmsv/clms/clms_evt.c
b/osaf/services/saf/clmsv/clms/clms_evt.c
--- a/osaf/services/saf/clmsv/clms/clms_evt.c
+++ b/osaf/services/saf/clmsv/clms/clms_evt.c
@@ -286,34 +286,40 @@ uint32_t proc_node_up_msg(CLMS_CB * cb,
nodeup_info->node_name.value);
}
- /* Retrieve IP information */
- if ((ip = (IPLIST *)ncs_patricia_tree_get(&clms_cb->iplist, (uint8_t
*)&nodeid)) == NULL) {
- clm_msg.info.api_resp_info.rc = SA_AIS_ERR_NOT_EXIST;
- LOG_ER("IP information not found for: %s with node_id: %u",
nodeup_info->node_name.value, nodeid);
- } else {
- if (ip->addr.length) { /* If length = 0, it is AF_TIPC. So
process only IPv4 or 6 addresses */
- /* We might want to validate IP */
- if (ip_matched(ip->addr.family, ip->addr.value,
node->node_addr.family,node->node_addr.value)) {
- clm_msg.info.api_resp_info.rc = SA_AIS_OK;
- } else {
- clm_msg.info.api_resp_info.rc =
SA_AIS_ERR_NOT_EXIST;
- LOG_ER("IP address on %s is not matching the
ipaddress in" PKGSYSCONFDIR "/imm.xml",
+ if (node != NULL) {
+ /* Retrieve IP information */
+ if ((ip = (IPLIST *)ncs_patricia_tree_get(&clms_cb->iplist,
(uint8_t *)&nodeid)) == NULL) {
+ clm_msg.info.api_resp_info.rc = SA_AIS_ERR_NOT_EXIST;
+ LOG_ER("IP information not found for: %s with node_id:
%u",
+
nodeup_info->node_name.value, nodeid);
+ } else {
+ if (ip->addr.length) { /* If length = 0, it is AF_TIPC.
So process only IPv4 or 6 addresses */
+ /* We might want to validate IP */
+ if (ip_matched(ip->addr.family, ip->addr.value,
+
node->node_addr.family,node->node_addr.value)) {
+ clm_msg.info.api_resp_info.rc =
SA_AIS_OK;
+ } else {
+ clm_msg.info.api_resp_info.rc =
SA_AIS_ERR_NOT_EXIST;
+ LOG_ER("IP address on %s is not
matching the ipaddress in" PKGSYSCONFDIR "/imm.xml",
nodeup_info->node_name.value);
+ }
}
}
- }
- if ((cb->node_id != nodeup_info->node_id) && (node->nodeup == SA_TRUE)){
- clm_msg.info.api_resp_info.rc = SA_AIS_ERR_EXIST;
- LOG_ER("Duplicate node join request for CLM node: '%s'. Specify
a unique node name in" PKGSYSCONFDIR "/node_name",
- nodeup_info->node_name.value);
- } else
- clm_msg.info.api_resp_info.rc = SA_AIS_OK;
-
+ if ((cb->node_id != nodeup_info->node_id) && (node->nodeup ==
SA_TRUE)){
+ clm_msg.info.api_resp_info.rc = SA_AIS_ERR_EXIST;
+ LOG_ER("Duplicate node join request for CLM node: '%s'.
"
+ "Specify a unique node name in"
PKGSYSCONFDIR "/node_name",
+ nodeup_info->node_name.value);
+ } else
+ clm_msg.info.api_resp_info.rc = SA_AIS_OK;
+
+ } /* Node exists in DB */
+
if (clm_msg.info.api_resp_info.rc != SA_AIS_OK) {
clm_msg.evt_type = CLMSV_CLMS_TO_CLMA_API_RESP_MSG;
clm_msg.info.api_resp_info.type = CLMSV_CLUSTER_JOIN_RESP;
- clm_msg.info.api_resp_info.param.node_name = node_name;
+ clm_msg.info.api_resp_info.param.node_name =
nodeup_info->node_name;
rc = clms_mds_msg_send(cb, &clm_msg, &evt->fr_dest,
&evt->mds_ctxt, MDS_SEND_PRIORITY_HIGH,
NCSMDS_SVC_ID_CLMNA);
if (rc != NCSCC_RC_SUCCESS)
------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their
applications. Written by three acclaimed leaders in the field,
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/13534_NeoTech
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel