gboolean result;
gboolean auth_result = FALSE;
crmd_authorize_message(	xmlNodePtr root_xml_node,	IPC_Message *client_msg, crmd_client_t *curr_client){	/* check the best case first */	const char *sys_from   = xmlGetProp(root_xml_node,					    XML_ATTR_SYSFROM);	char *uuid = NULL;	char *client_name = NULL;	char *major_version = NULL;	char *minor_version = NULL;	const char *filtered_from;	gpointer table_key = NULL;	gboolean result;	struct crm_subsystem_s *the_subsystem = NULL;	gboolean can_reply = FALSE; /* no-one has registered with this id */	const char *op = get_xml_attr(		root_xml_node, XML_TAG_OPTIONS, XML_ATTR_OP, TRUE);	if (safe_str_neq(CRM_OP_HELLO, op)) {		if(sys_from == NULL) {			crm_warn("Message [%s] was had no value for %s... discarding",				 xmlGetProp(root_xml_node, XML_ATTR_REFERENCE),				XML_ATTR_SYSFROM);			return FALSE;		}				filtered_from = sys_from;		/* The CIB can have two names on the DC */		if(strcmp(sys_from, CRM_SYSTEM_DCIB) == 0)			filtered_from = CRM_SYSTEM_CIB;				if (g_hash_table_lookup (ipc_clients, filtered_from) != NULL) {			can_reply = TRUE;  /* reply can be routed */		}				crm_verbose("Message reply can%s be routed from %s.",			   can_reply?"":" not", sys_from);		if(can_reply == FALSE) {			crm_warn("Message [%s] not authorized",				 xmlGetProp(root_xml_node, XML_ATTR_REFERENCE));		}				register_fsa_input(			C_IPC_MESSAGE, I_ROUTER, root_xml_node);				s_crmd_fsa(C_IPC_MESSAGE);				return can_reply;	}		crm_debug("received client join msg: %s",		 (char*)client_msg->msg_body);	result = process_hello_message(root_xml_node,				       &uuid,				       &client_name,				       &major_version,				       &minor_version);	if (result == TRUE) {		/* check version */		int mav = atoi(major_version);		int miv = atoi(minor_version);		if (mav < 0 || miv < 0) {			crm_err("Client version (%d:%d) is not acceptable",				mav, miv);			result = FALSE;		}		crm_free(major_version);		crm_free(minor_version);	}	if (result == TRUE) {		/* if we already have one of those clients		 * only applies to te, pe etc.  not admin clients		 */				if (client_name == NULL) {			crm_warn("Client had not registered with us yet");		} else if (strcmp(CRM_SYSTEM_PENGINE, client_name) == 0) {			the_subsystem = pe_subsystem;					} else if (strcmp(CRM_SYSTEM_TENGINE, client_name) == 0) {			the_subsystem = te_subsystem;					} else if (strcmp(CRM_SYSTEM_CIB, client_name) == 0) {			the_subsystem = cib_subsystem;		}		if (the_subsystem != NULL) {			/* do we already have one? */			result =(fsa_input_register & the_subsystem->flag)==0;			if(result) {				the_subsystem->ipc =					curr_client->client_channel;			} /* else we didnt ask for the client to start */		} else if(client_name != NULL && uuid != NULL) {			table_key = (gpointer)				generate_hash_key(client_name, uuid);		} else {			result = FALSE;			crm_err("Bad client details (client_name=%s, uuid=%s)",				crm_str(client_name), uuid);		}	}		if(result == TRUE && table_key == NULL) {		table_key = (gpointer)crm_strdup(client_name);	}		if (result == TRUE) {		crm_info("Accepted client %s", crm_str(table_key));		curr_client->table_key = table_key;		curr_client->sub_sys = crm_strdup(client_name);		curr_client->uuid = crm_strdup(uuid);			g_hash_table_insert (ipc_clients,				     table_key,				     curr_client->client_channel);		send_hello_message(curr_client->client_channel,				   "n/a", CRM_SYSTEM_CRMD,				   "0", "1");		crm_debug("Updated client list with %s",			  crm_str(table_key));				if(the_subsystem != NULL) {			set_bit_inplace(				fsa_input_register, the_subsystem->flag);		}		s_crmd_fsa(C_SUBSYSTEM_CONNECT);	} else {		crm_err("Rejected client logon request");		curr_client->client_channel->ch_status = IPC_DISC_PENDING;	}		if(uuid != NULL) crm_free(uuid);	if(client_name != NULL) crm_free(client_name);	/* hello messages should never be processed further */	return FALSE;}