crm_trace("Unpacked section as: %s", section);
cib_process_command(const struct ha_msg *request, struct ha_msg **reply,		    gboolean privileged){	xmlNodePtr input    = NULL;	const char *input_s = NULL;	char *output_s    = NULL;	xmlNodePtr output = 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;	/* 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_trace("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 && cib_server_ops[call_type].needs_section) {		crm_trace("Unpacking section");		section = cl_get_string(request, F_CIB_SECTION);	}	if(rc == cib_ok && cib_server_ops[call_type].needs_data) {		crm_trace("Unpacking data in %s", F_CIB_CALLDATA);		input_s = cl_get_string(request, F_CIB_CALLDATA);		if(input_s != NULL) {			crm_trace("Converting to xmlNodePtr");						input = string2xml(input_s);			if(input == NULL) {				crm_err("Invalid XML input");				rc = CIBRES_CORRUPT;			}		}	}			if(rc == cib_ok) {		rc = cib_server_ops[call_type].fn(			op, call_options, section, input, &output);	}		if(call_options & cib_discard_reply || reply == NULL) {		if(reply) *reply = NULL;		return rc;	}	/* make the 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);	{		const char *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);		tmp = cl_get_string(request, F_CIB_CALLID);		ha_msg_add(*reply, F_CIB_CALLID, tmp);	}		/* attach the output if necessary */	output_s = dump_xml_unformatted(output);	if(output != NULL && output_s == NULL) {		crm_err("Currupt output in reply to \"%s\" op",op);		rc = cib_output_data;	} else if(output_s != NULL		  && ha_msg_add(*reply, F_CIB_CALLDATA, output_s) != HA_OK) {		rc = cib_msg_field_add;	}	crm_free(output_s);	free_xml(output);	free_xml(input);	return rc;}