if(call_options & cib_discard_reply) {
if((call_options & cib_discard_reply) && cib_server_ops[call_type].modifies_cib == FALSE) {
cib_process_command(const HA_Message *request, HA_Message **reply,		    crm_data_t **cib_diff, gboolean privileged){	crm_data_t *output   = NULL;	crm_data_t *input    = NULL;	crm_data_t *input_fragment = NULL;	crm_data_t *current_cib = the_cib;	crm_data_t *result_cib  = NULL;	crm_data_t *local_diff  = NULL;		int call_type      = 0;	int call_options   = 0;	enum cib_errors rc = cib_ok;	const char *op = NULL;	const char *call_id = NULL;	const char *section = NULL;	const char *tmp = NULL;	gboolean global_update = crm_is_true(		cl_get_string(request, F_CIB_GLOBAL_UPDATE));	CRM_DEV_ASSERT(reply != NULL);	if(reply) { *reply = NULL; }		/* Start processing the request... */	op = cl_get_string(request, F_CIB_OPERATION);	call_id = cl_get_string(request, F_CIB_CALLID);	ha_msg_value_int(request, F_CIB_CALLOPTS, &call_options);	crm_debug_4("Processing call id: %s", call_id);		rc = cib_get_operation_id(request, &call_type);		if(rc == cib_ok &&	   cib_server_ops[call_type].needs_privileges	   && privileged == FALSE) {		/* abort */		rc = cib_not_authorized;	}		if(rc == cib_ok	   && global_update == FALSE	   && cib_server_ops[call_type].needs_quorum	   && can_write(call_options) == FALSE) {		rc = cib_no_quorum;	}	/* prevent NUMUPDATES from being incrimented - apply the change as-is */	if(global_update) {		call_options |= cib_inhibit_bcast;	}		if(rc == cib_ok && cib_server_ops[call_type].needs_section) {		section = cl_get_string(request, F_CIB_SECTION);	}	if(rc == cib_ok && safe_str_eq(op, CIB_OP_APPLY_DIFF)) {		crm_debug_4("Unpacking diff data in %s", F_CIB_UPDATE_DIFF);		input_fragment = get_message_xml(request, F_CIB_UPDATE_DIFF);		if(global_update) {			call_options |= cib_force_diff;		}			} else if(rc == cib_ok && safe_str_eq(op, CIB_OP_SYNC)) { 		input_fragment = ha_msg_copy(request);			} else if(rc == cib_ok && safe_str_eq(op, CIB_OP_SYNC_ONE)) { 		input_fragment = ha_msg_copy(request);			} else if(rc == cib_ok && cib_server_ops[call_type].needs_data) {		crm_debug_4("Unpacking data in %s", F_CIB_CALLDATA);		input_fragment = get_message_xml(request, F_CIB_CALLDATA);	}	/* extract the CIB from the fragment */	if(input_fragment != NULL	   && safe_str_eq(crm_element_name(input_fragment), XML_TAG_FRAGMENT)) {		input = find_xml_node(input_fragment, XML_TAG_CIB, TRUE);			} else {		input = input_fragment;	}	/* grab the section specified for the command */	if(input != NULL && safe_str_eq(crm_element_name(input), XML_TAG_CIB)){		rc = revision_check(input, current_cib, call_options);		if(rc == cib_ok) {			input = get_object_root(section, input);		}	}		if(cib_server_ops[call_type].modifies_cib) {		cib_pre_notify(			call_options, op,			get_object_root(section, current_cib), input);	}	if(rc == cib_ok) {		rc = cib_server_ops[call_type].fn(			op, call_options, section, input,			current_cib, &result_cib, &output);	}		if(cib_server_ops[call_type].modifies_cib) {		if(safe_str_eq(op, CIB_OP_APPLY_DIFF)) {			local_diff = copy_xml(input);		} else if(result_cib != NULL && current_cib != result_cib) {			local_diff = diff_cib_object(				current_cib, result_cib, FALSE);		}		if(rc != cib_ok) {			free_xml(result_cib);		} else if(activateCibXml(result_cib,CIB_FILENAME) < 0){			crm_warn("Activation failed");			rc = cib_ACTIVATION;		}		cib_post_notify(call_options, op, input, rc, the_cib);		cib_diff_notify(call_options, op, input, rc, local_diff);	} else if(result_cib != NULL) {		crm_err("%s call modified the CIB", op);		free_xml(result_cib);	}			crm_debug_4("Processing reply cases");	if(call_options & cib_discard_reply) {		crm_debug_3("No reply needed for call %s", call_id);		return rc;			} else if(reply == NULL) {		crm_debug("No reply possible for call %s", call_id);		return rc;	}	crm_debug_4("Creating a basic reply");	*reply = ha_msg_new(8);	ha_msg_add(*reply, F_TYPE, T_CIB);	ha_msg_add(*reply, F_CIB_OPERATION, op);	ha_msg_add(*reply, F_CIB_CALLID, call_id);	ha_msg_add_int(*reply, F_CIB_RC, rc);	tmp = cl_get_string(request, F_CIB_CLIENTID);	ha_msg_add(*reply, F_CIB_CLIENTID, tmp);		tmp = cl_get_string(request, F_CIB_CALLOPTS);	ha_msg_add(*reply, F_CIB_CALLOPTS, tmp);		crm_debug_4("Attaching output if necessary");	if(output != NULL) {		add_message_xml(*reply, F_CIB_CALLDATA, output);	} else {		crm_debug_3("No output for call %s", call_id);	}		crm_debug_4("Cleaning up");	if(cib_diff != NULL) {		*cib_diff = local_diff;	} else {		free_xml(local_diff);	}	free_xml(output);	free_xml(input_fragment);	return rc;}