pacemaker  1.1.16-94ff4df
Scalable High-Availability cluster resource manager
Macros | Typedefs | Enumerations | Functions
xml.c File Reference
#include <crm_internal.h>
#include <sys/param.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <crm/crm.h>
#include <crm/msg_xml.h>
#include <crm/common/xml.h>
Include dependency graph for xml.c:

Go to the source code of this file.

Macros

#define XML_BUFFER_SIZE   4096
 
#define XML_PARSER_DEBUG   0
 
#define CHUNK_SIZE   1024
 
#define buffer_print(buffer, max, offset, fmt, args...)
 
#define XML_PRIVATE_MAGIC   (long) 0x81726354
 

Typedefs

typedef struct xml_private_s xml_private_t
 
typedef struct xml_acl_s xml_acl_t
 
typedef struct name_value_s name_value_t
 

Enumerations

enum  xml_private_flags {
  xpf_none = 0x0000, xpf_dirty = 0x0001, xpf_deleted = 0x0002, xpf_created = 0x0004,
  xpf_modified = 0x0008, xpf_tracking = 0x0010, xpf_processed = 0x0020, xpf_skip = 0x0040,
  xpf_moved = 0x0080, xpf_acl_enabled = 0x0100, xpf_acl_read = 0x0200, xpf_acl_write = 0x0400,
  xpf_acl_deny = 0x0800, xpf_acl_create = 0x1000, xpf_acl_denied = 0x2000
}
 

Functions

const char * __xml_acl_to_text (enum xml_private_flags flags)
 
int get_tag_name (const char *input, size_t offset, size_t max)
 
int get_attr_name (const char *input, size_t offset, size_t max)
 
int get_attr_value (const char *input, size_t offset, size_t max)
 
gboolean can_prune_leaf (xmlNode *xml_node)
 
void diff_filter_context (int context, int upper_bound, int lower_bound, xmlNode *xml_node, xmlNode *parent)
 
int in_upper_context (int depth, int context, xmlNode *xml_node)
 
int add_xml_object (xmlNode *parent, xmlNode *target, xmlNode *update, gboolean as_diff)
 
bool xml_acl_filtered_copy (const char *user, xmlNode *acl_source, xmlNode *xml, xmlNode **result)
 
bool xml_acl_denied (xmlNode *xml)
 
void xml_acl_disable (xmlNode *xml)
 
bool xml_acl_enabled (xmlNode *xml)
 
void xml_track_changes (xmlNode *xml, const char *user, xmlNode *acl_source, bool enforce_acls)
 
bool xml_tracking_changes (xmlNode *xml)
 
bool xml_document_dirty (xmlNode *xml)
 
xmlNode * xml_create_patchset (int format, xmlNode *source, xmlNode *target, bool *config_changed, bool manage_version)
 
void patchset_process_digest (xmlNode *patch, xmlNode *source, xmlNode *target, bool with_digest)
 
void xml_log_patchset (uint8_t log_level, const char *function, xmlNode *patchset)
 
void xml_log_changes (uint8_t log_level, const char *function, xmlNode *xml)
 
void xml_accept_changes (xmlNode *xml)
 
bool xml_patch_versions (xmlNode *patchset, int add[3], int del[3])
 
int xml_apply_patchset (xmlNode *xml, xmlNode *patchset, bool check_version)
 
xmlNode * find_xml_node (xmlNode *root, const char *search_path, gboolean must_find)
 
xmlNode * find_entity (xmlNode *parent, const char *node_name, const char *id)
 
void copy_in_properties (xmlNode *target, xmlNode *src)
 
void fix_plus_plus_recursive (xmlNode *target)
 
void expand_plus_plus (xmlNode *target, const char *name, const char *value)
 
xmlDoc * getDocPtr (xmlNode *node)
 
xmlNode * add_node_copy (xmlNode *parent, xmlNode *src_node)
 
int add_node_nocopy (xmlNode *parent, const char *name, xmlNode *child)
 
const char * crm_xml_add (xmlNode *node, const char *name, const char *value)
 
const char * crm_xml_replace (xmlNode *node, const char *name, const char *value)
 
const char * crm_xml_add_int (xmlNode *node, const char *name, int value)
 
xmlNode * create_xml_node (xmlNode *parent, const char *name)
 
char * xml_get_path (xmlNode *xml)
 
void free_xml (xmlNode *child)
 
xmlNode * copy_xml (xmlNode *src)
 
xmlNode * string2xml (const char *input)
 
xmlNode * stdin2xml (void)
 
void strip_text_nodes (xmlNode *xml)
 
xmlNode * filename2xml (const char *filename)
 
const char * crm_xml_add_last_written (xmlNode *xml_node)
 
int write_xml_fd (xmlNode *xml_node, const char *filename, int fd, gboolean compress)
 
int write_xml_file (xmlNode *xml_node, const char *filename, gboolean compress)
 
xmlNode * get_message_xml (xmlNode *msg, const char *field)
 
gboolean add_message_xml (xmlNode *msg, const char *field, xmlNode *xml)
 
char * crm_xml_escape (const char *text)
 
void log_data_element (int log_level, const char *file, const char *function, int line, const char *prefix, xmlNode *data, int depth, int options)
 
void crm_xml_dump (xmlNode *data, int options, char **buffer, int *offset, int *max, int depth)
 
void crm_buffer_add_char (char **buffer, int *offset, int *max, char c)
 
char * dump_xml_formatted_with_text (xmlNode *an_xml_node)
 
char * dump_xml_formatted (xmlNode *an_xml_node)
 
char * dump_xml_unformatted (xmlNode *an_xml_node)
 
gboolean xml_has_children (const xmlNode *xml_root)
 
int crm_element_value_int (xmlNode *data, const char *name, int *dest)
 
int crm_element_value_const_int (const xmlNode *data, const char *name, int *dest)
 
const char * crm_element_value_const (const xmlNode *data, const char *name)
 
char * crm_element_value_copy (xmlNode *data, const char *name)
 
void xml_remove_prop (xmlNode *obj, const char *name)
 
void purge_diff_markers (xmlNode *a_node)
 
void save_xml_to_file (xmlNode *xml, const char *desc, const char *filename)
 
gboolean apply_xml_diff (xmlNode *old, xmlNode *diff, xmlNode **new)
 
void xml_calculate_changes (xmlNode *old, xmlNode *new)
 
xmlNode * diff_xml_object (xmlNode *old, xmlNode *new, gboolean suppress)
 
xmlNode * subtract_xml_object (xmlNode *parent, xmlNode *left, xmlNode *right, gboolean full, gboolean *changed, const char *marker)
 
gboolean update_xml_child (xmlNode *child, xmlNode *to_update)
 
int find_xml_children (xmlNode **children, xmlNode *root, const char *tag, const char *field, const char *value, gboolean search_matches)
 
gboolean replace_xml_child (xmlNode *parent, xmlNode *child, xmlNode *update, gboolean delete_only)
 
void hash2nvpair (gpointer key, gpointer value, gpointer user_data)
 
void hash2smartfield (gpointer key, gpointer value, gpointer user_data)
 
void hash2field (gpointer key, gpointer value, gpointer user_data)
 
void hash2metafield (gpointer key, gpointer value, gpointer user_data)
 
GHashTable * xml2list (xmlNode *parent)
 
xmlNode * sorted_xml (xmlNode *input, xmlNode *parent, gboolean recursive)
 
xmlNode * first_named_child (xmlNode *parent, const char *name)
 
void crm_xml_init (void)
 
void crm_xml_cleanup (void)
 
xmlNode * expand_idref (xmlNode *input, xmlNode *top)
 
const char * crm_element_value (xmlNode *data, const char *name)
 

Macro Definition Documentation

§ buffer_print

#define buffer_print (   buffer,
  max,
  offset,
  fmt,
  args... 
)
Value:
do { \
int rc = (max); \
if(buffer) { \
rc = snprintf((buffer) + (offset), (max) - (offset), fmt, ##args); \
} \
if(buffer && rc < 0) { \
crm_perror(LOG_ERR, "snprintf failed at offset %d", offset); \
(buffer)[(offset)] = 0; \
} else if(rc >= ((max) - (offset))) { \
char *tmp = NULL; \
(max) = QB_MAX(CHUNK_SIZE, (max) * 2); \
tmp = realloc_safe((buffer), (max) + 1); \
CRM_ASSERT(tmp); \
(buffer) = tmp; \
} else { \
offset += rc; \
break; \
} \
} while(1);
#define CHUNK_SIZE
Definition: xml.c:106

Definition at line 117 of file xml.c.

§ CHUNK_SIZE

#define CHUNK_SIZE   1024

Definition at line 106 of file xml.c.

§ XML_BUFFER_SIZE

#define XML_BUFFER_SIZE   4096

Definition at line 43 of file xml.c.

§ XML_PARSER_DEBUG

#define XML_PARSER_DEBUG   0

Definition at line 44 of file xml.c.

§ XML_PRIVATE_MAGIC

#define XML_PRIVATE_MAGIC   (long) 0x81726354

Definition at line 264 of file xml.c.

Typedef Documentation

§ name_value_t

typedef struct name_value_s name_value_t

§ xml_acl_t

typedef struct xml_acl_s xml_acl_t

§ xml_private_t

typedef struct xml_private_s xml_private_t

Enumeration Type Documentation

§ xml_private_flags

Enumerator
xpf_none 
xpf_dirty 
xpf_deleted 
xpf_created 
xpf_modified 
xpf_tracking 
xpf_processed 
xpf_skip 
xpf_moved 
xpf_acl_enabled 
xpf_acl_read 
xpf_acl_write 
xpf_acl_deny 
xpf_acl_create 
xpf_acl_denied 

Definition at line 54 of file xml.c.

Function Documentation

§ __xml_acl_to_text()

const char * __xml_acl_to_text ( enum xml_private_flags  flags)

Definition at line 505 of file xml.c.

§ add_message_xml()

gboolean add_message_xml ( xmlNode *  msg,
const char *  field,
xmlNode *  xml 
)

Definition at line 3072 of file xml.c.

§ add_node_copy()

xmlNode* add_node_copy ( xmlNode *  parent,
xmlNode *  src_node 
)

Definition at line 2349 of file xml.c.

§ add_node_nocopy()

int add_node_nocopy ( xmlNode *  parent,
const char *  name,
xmlNode *  child 
)

Definition at line 2363 of file xml.c.

§ add_xml_object()

int add_xml_object ( xmlNode *  parent,
xmlNode *  target,
xmlNode *  update,
gboolean  as_diff 
)

Definition at line 4477 of file xml.c.

§ apply_xml_diff()

gboolean apply_xml_diff ( xmlNode *  old,
xmlNode *  diff,
xmlNode **  new 
)

Definition at line 3834 of file xml.c.

§ can_prune_leaf()

gboolean can_prune_leaf ( xmlNode *  xml_node)

Definition at line 4128 of file xml.c.

§ copy_in_properties()

void copy_in_properties ( xmlNode *  target,
xmlNode *  src 
)

Definition at line 2231 of file xml.c.

§ copy_xml()

xmlNode* copy_xml ( xmlNode *  src)

Definition at line 2633 of file xml.c.

§ create_xml_node()

xmlNode* create_xml_node ( xmlNode *  parent,
const char *  name 
)

Definition at line 2532 of file xml.c.

§ crm_buffer_add_char()

void crm_buffer_add_char ( char **  buffer,
int *  offset,
int *  max,
char  c 
)

Definition at line 3700 of file xml.c.

§ crm_element_value()

const char* crm_element_value ( xmlNode *  data,
const char *  name 
)

Definition at line 4987 of file xml.c.

§ crm_element_value_const()

const char* crm_element_value_const ( const xmlNode *  data,
const char *  name 
)

Definition at line 3764 of file xml.c.

§ crm_element_value_const_int()

int crm_element_value_const_int ( const xmlNode *  data,
const char *  name,
int *  dest 
)

Definition at line 3758 of file xml.c.

§ crm_element_value_copy()

char* crm_element_value_copy ( xmlNode *  data,
const char *  name 
)

Definition at line 3770 of file xml.c.

§ crm_element_value_int()

int crm_element_value_int ( xmlNode *  data,
const char *  name,
int *  dest 
)

Definition at line 3745 of file xml.c.

§ crm_xml_add()

const char* crm_xml_add ( xmlNode *  node,
const char *  name,
const char *  value 
)

Definition at line 2434 of file xml.c.

§ crm_xml_add_int()

const char* crm_xml_add_int ( xmlNode *  node,
const char *  name,
int  value 
)

Definition at line 2522 of file xml.c.

§ crm_xml_add_last_written()

const char* crm_xml_add_last_written ( xmlNode *  xml_node)

Definition at line 2952 of file xml.c.

§ crm_xml_cleanup()

void crm_xml_cleanup ( void  )

Definition at line 4939 of file xml.c.

§ crm_xml_dump()

void crm_xml_dump ( xmlNode *  data,
int  options,
char **  buffer,
int *  offset,
int *  max,
int  depth 
)

Definition at line 3597 of file xml.c.

§ crm_xml_escape()

char* crm_xml_escape ( const char *  text)

Definition at line 3098 of file xml.c.

§ crm_xml_init()

void crm_xml_init ( void  )

Definition at line 4917 of file xml.c.

§ crm_xml_replace()

const char* crm_xml_replace ( xmlNode *  node,
const char *  name,
const char *  value 
)

Definition at line 2480 of file xml.c.

§ diff_filter_context()

void diff_filter_context ( int  context,
int  upper_bound,
int  lower_bound,
xmlNode *  xml_node,
xmlNode *  parent 
)

Definition at line 4166 of file xml.c.

§ diff_xml_object()

xmlNode* diff_xml_object ( xmlNode *  old,
xmlNode *  new,
gboolean  suppress 
)

Definition at line 4100 of file xml.c.

§ dump_xml_formatted()

char* dump_xml_formatted ( xmlNode *  an_xml_node)

Definition at line 3716 of file xml.c.

§ dump_xml_formatted_with_text()

char* dump_xml_formatted_with_text ( xmlNode *  an_xml_node)

Definition at line 3706 of file xml.c.

§ dump_xml_unformatted()

char* dump_xml_unformatted ( xmlNode *  an_xml_node)

Definition at line 3726 of file xml.c.

§ expand_idref()

xmlNode* expand_idref ( xmlNode *  input,
xmlNode *  top 
)

Definition at line 4947 of file xml.c.

§ expand_plus_plus()

void expand_plus_plus ( xmlNode *  target,
const char *  name,
const char *  value 
)

Definition at line 2272 of file xml.c.

§ filename2xml()

xmlNode* filename2xml ( const char *  filename)

Definition at line 2880 of file xml.c.

§ find_entity()

xmlNode* find_entity ( xmlNode *  parent,
const char *  node_name,
const char *  id 
)

Definition at line 2212 of file xml.c.

§ find_xml_children()

int find_xml_children ( xmlNode **  children,
xmlNode *  root,
const char *  tag,
const char *  field,
const char *  value,
gboolean  search_matches 
)

Definition at line 4588 of file xml.c.

§ find_xml_node()

xmlNode* find_xml_node ( xmlNode *  root,
const char *  search_path,
gboolean  must_find 
)

Definition at line 2179 of file xml.c.

§ first_named_child()

xmlNode* first_named_child ( xmlNode *  parent,
const char *  name 
)

Definition at line 4899 of file xml.c.

§ fix_plus_plus_recursive()

void fix_plus_plus_recursive ( xmlNode *  target)

Definition at line 2254 of file xml.c.

§ free_xml()

void free_xml ( xmlNode *  child)

Definition at line 2587 of file xml.c.

§ get_attr_name()

int get_attr_name ( const char *  input,
size_t  offset,
size_t  max 
)

§ get_attr_value()

int get_attr_value ( const char *  input,
size_t  offset,
size_t  max 
)

§ get_message_xml()

xmlNode* get_message_xml ( xmlNode *  msg,
const char *  field 
)

Definition at line 3064 of file xml.c.

§ get_tag_name()

int get_tag_name ( const char *  input,
size_t  offset,
size_t  max 
)

§ getDocPtr()

xmlDoc* getDocPtr ( xmlNode *  node)

Definition at line 2333 of file xml.c.

§ hash2field()

void hash2field ( gpointer  key,
gpointer  value,
gpointer  user_data 
)

Definition at line 4742 of file xml.c.

§ hash2metafield()

void hash2metafield ( gpointer  key,
gpointer  value,
gpointer  user_data 
)

Definition at line 4758 of file xml.c.

§ hash2nvpair()

void hash2nvpair ( gpointer  key,
gpointer  value,
gpointer  user_data 
)

Definition at line 4703 of file xml.c.

§ hash2smartfield()

void hash2smartfield ( gpointer  key,
gpointer  value,
gpointer  user_data 
)

Definition at line 4719 of file xml.c.

§ in_upper_context()

int in_upper_context ( int  depth,
int  context,
xmlNode *  xml_node 
)

Definition at line 4207 of file xml.c.

§ log_data_element()

void log_data_element ( int  log_level,
const char *  file,
const char *  function,
int  line,
const char *  prefix,
xmlNode *  data,
int  depth,
int  options 
)

Definition at line 3397 of file xml.c.

§ patchset_process_digest()

void patchset_process_digest ( xmlNode *  patch,
xmlNode *  source,
xmlNode *  target,
bool  with_digest 
)

Definition at line 1331 of file xml.c.

§ purge_diff_markers()

void purge_diff_markers ( xmlNode *  a_node)

Definition at line 3803 of file xml.c.

§ replace_xml_child()

gboolean replace_xml_child ( xmlNode *  parent,
xmlNode *  child,
xmlNode *  update,
gboolean  delete_only 
)

Definition at line 4620 of file xml.c.

§ save_xml_to_file()

void save_xml_to_file ( xmlNode *  xml,
const char *  desc,
const char *  filename 
)

Definition at line 3816 of file xml.c.

§ sorted_xml()

xmlNode* sorted_xml ( xmlNode *  input,
xmlNode *  parent,
gboolean  recursive 
)

Definition at line 4855 of file xml.c.

§ stdin2xml()

xmlNode* stdin2xml ( void  )

Definition at line 2761 of file xml.c.

§ string2xml()

xmlNode* string2xml ( const char *  input)

Definition at line 2696 of file xml.c.

§ strip_text_nodes()

void strip_text_nodes ( xmlNode *  xml)

Definition at line 2851 of file xml.c.

§ subtract_xml_object()

xmlNode* subtract_xml_object ( xmlNode *  parent,
xmlNode *  left,
xmlNode *  right,
gboolean  full,
gboolean *  changed,
const char *  marker 
)

Definition at line 4268 of file xml.c.

§ update_xml_child()

gboolean update_xml_child ( xmlNode *  child,
xmlNode *  to_update 
)

Definition at line 4554 of file xml.c.

§ write_xml_fd()

int write_xml_fd ( xmlNode *  xml_node,
const char *  filename,
int  fd,
gboolean  compress 
)

Definition at line 3044 of file xml.c.

§ write_xml_file()

int write_xml_file ( xmlNode *  xml_node,
const char *  filename,
gboolean  compress 
)

Definition at line 3054 of file xml.c.

§ xml2list()

GHashTable* xml2list ( xmlNode *  parent)

Definition at line 4776 of file xml.c.

§ xml_accept_changes()

void xml_accept_changes ( xmlNode *  xml)

Definition at line 1533 of file xml.c.

§ xml_acl_denied()

bool xml_acl_denied ( xmlNode *  xml)

Definition at line 803 of file xml.c.

§ xml_acl_disable()

void xml_acl_disable ( xmlNode *  xml)

Definition at line 814 of file xml.c.

§ xml_acl_enabled()

bool xml_acl_enabled ( xmlNode *  xml)

Definition at line 827 of file xml.c.

§ xml_acl_filtered_copy()

bool xml_acl_filtered_copy ( const char *  user,
xmlNode *  acl_source,
xmlNode *  xml,
xmlNode **  result 
)

Definition at line 682 of file xml.c.

§ xml_apply_patchset()

int xml_apply_patchset ( xmlNode *  xml,
xmlNode *  patchset,
bool  check_version 
)

Definition at line 2102 of file xml.c.

§ xml_calculate_changes()

void xml_calculate_changes ( xmlNode *  old,
xmlNode *  new 
)

Definition at line 4087 of file xml.c.

§ xml_create_patchset()

xmlNode* xml_create_patchset ( int  format,
xmlNode *  source,
xmlNode *  target,
bool *  config_changed,
bool  manage_version 
)

Definition at line 1271 of file xml.c.

§ xml_document_dirty()

bool xml_document_dirty ( xmlNode *  xml)

Definition at line 864 of file xml.c.

§ xml_get_path()

char* xml_get_path ( xmlNode *  xml)

Definition at line 2575 of file xml.c.

§ xml_has_children()

gboolean xml_has_children ( const xmlNode *  xml_root)

Definition at line 3736 of file xml.c.

§ xml_log_changes()

void xml_log_changes ( uint8_t  log_level,
const char *  function,
xmlNode *  xml 
)

Definition at line 1511 of file xml.c.

§ xml_log_patchset()

void xml_log_patchset ( uint8_t  log_level,
const char *  function,
xmlNode *  patchset 
)

Definition at line 1364 of file xml.c.

§ xml_patch_versions()

bool xml_patch_versions ( xmlNode *  patchset,
int  add[3],
int  del[3] 
)

Definition at line 1725 of file xml.c.

§ xml_remove_prop()

void xml_remove_prop ( xmlNode *  obj,
const char *  name 
)

Definition at line 3782 of file xml.c.

§ xml_track_changes()

void xml_track_changes ( xmlNode *  xml,
const char *  user,
xmlNode *  acl_source,
bool  enforce_acls 
)

Definition at line 838 of file xml.c.

§ xml_tracking_changes()

bool xml_tracking_changes ( xmlNode *  xml)

Definition at line 853 of file xml.c.