if(table_key == NULL)
if(result == TRUE && table_key == NULL)
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 *uid = NULL;	char *client_name = NULL;	char *major_version = NULL;	char *minor_version = NULL;	gpointer table_key = NULL;		FNIN();	if (sys_from != NULL) {		gboolean can_reply = FALSE; // no-one has registered with this id		const char *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_DEBUG3("Message reply can%s be routed from %s.",			   can_reply?"":" not", sys_from);		FNRET(can_reply);	}	// otherwise, check if it was a hello message	cl_log(LOG_INFO,	       "recieved client join msg: %s",	       (char*)client_msg->msg_body);	gboolean result = process_hello_message(client_msg,						&uid,						&client_name,						&major_version,						&minor_version);	CRM_DEBUG2("Auth result: %s", result?"good":"bad");	if (result == TRUE) {		// check version		int mav = atoi(major_version);		int miv = atoi(minor_version);		if (mav < 0 || miv < 0) {			cl_log(LOG_ERR,			       "Client version (%d:%d) is not acceptable",			       mav,			       miv);			result = FALSE;		}		ha_free(major_version);		ha_free(minor_version);	}	CRM_DEBUG2("Auth result: %s", result?"good":"bad");	if (result == TRUE) {		/* if we already have one of those clients		 * only applies to te, pe etc.  not admin clients		 */		struct crm_subsystem_s *the_subsystem = NULL;				if (client_name == NULL)			CRM_DEBUG("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;			set_bit_inplace(&fsa_input_register, the_subsystem->flag);			if(result) {				the_subsystem->ipc = curr_client->client_channel;			} // else we didnt ask for the client to start		} else			table_key = (gpointer)				generate_hash_key(client_name, uid);	}	CRM_DEBUG2("Auth result: %s", result?"good":"bad");	if(table_key == NULL)		table_key = (gpointer)ha_strdup(client_name);	if (result == TRUE) {		CRM_DEBUG2("Accepted client %s", (char*)table_key);		curr_client->table_key = table_key;		curr_client->sub_sys = ha_strdup(client_name);		curr_client->uid = ha_strdup(uid);			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");	} else {		CRM_DEBUG("Rejected client logon request");		curr_client->client_channel->ch_status = IPC_DISC_PENDING;	}		if(uid != NULL) ha_free(uid);	if(client_name != NULL) ha_free(client_name);		FNRET(result);}