Skip to content

Commit

Permalink
Merge pull request elastic#29 from balabit/merge/f/value-pairs/sdata-…
Browse files Browse the repository at this point in the history
…enterprise-id

value-pairs: Handle SDATA enterprise IDs correctly
  • Loading branch information
bazsi committed Dec 6, 2013
2 parents 28914ed + e26d407 commit b81436f
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 1 deletion.
51 changes: 50 additions & 1 deletion lib/value-pairs.c
Original file line number Diff line number Diff line change
Expand Up @@ -484,14 +484,63 @@ vp_walker_stack_push (vp_walk_stack_t **stack,
return nt;
}

static void
vp_walker_name_value_split_add_name_token(GPtrArray *array, const gchar *name,
int *current_name_start_idx,
int *index)
{
gchar *token;

token = g_strndup(name + *current_name_start_idx, *index - *current_name_start_idx);
*current_name_start_idx = ++(*index);
g_ptr_array_add(array, (gpointer) token);
}

static gchar **
vp_walker_name_value_split(const gchar *name)
{
int i;
int current_name_start_idx = 0;
GPtrArray *array = g_ptr_array_new();
gchar **tokens;
size_t name_len = strlen(name);

for (i = 0; i < name_len; i++)
{
if (name[i] == '@')
{
i++;
while (g_ascii_isdigit(name[i]) || (name[i] == '.' && g_ascii_isdigit(name[i + 1])))
i++;
}
if (name[i] == '.')
vp_walker_name_value_split_add_name_token(array, name, &current_name_start_idx, &i);
}
if (current_name_start_idx <= i - 1)
vp_walker_name_value_split_add_name_token(array, name, &current_name_start_idx, &i);

if (array->len == 0)
return NULL;

tokens = (gchar **) g_malloc ((array->len + 1) * sizeof(gchar *));

for (i = 0; i < array->len; i++)
tokens[i] = g_ptr_array_index(array, i);
tokens[array->len] = NULL;

g_ptr_array_free(array, FALSE);

return tokens;
}

static gchar *
vp_walker_name_split(vp_walk_stack_t **stack, vp_walk_state_t *state,
const gchar *name)
{
gchar **tokens, *key = NULL;
guint token_cnt, i, start;

tokens = g_strsplit(name, ".", 0);
tokens = vp_walker_name_value_split(name);
token_cnt = g_strv_length(tokens);

start = g_trash_stack_height((GTrashStack **)stack);
Expand Down
2 changes: 2 additions & 0 deletions modules/json/tests/test_json.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ test_format_json(void)
"{\"kernel\":{\"SUBSYSTEM\":\"pci\",\"DEVICE\":{\"type\":\"pci\",\"name\":\"0000:02:00.0\"}},\"MSGID\":\"801\",\"MESSAGE\":\"test\"}");
assert_template_format("$(format-json .foo=bar)", "{\"_foo\":\"bar\"}");
assert_template_format("$(format-json --scope rfc3164,rfc3164)", "{\"PROGRAM\":\"syslog-ng\",\"PRIORITY\":\"err\",\"PID\":\"23323\",\"MESSAGE\":\"árvíztűrőtükörfúrógép\",\"HOST\":\"bzorp\",\"FACILITY\":\"local3\",\"DATE\":\"Feb 11 18:58:35\"}");
assert_template_format("$(format-json sdata.win@18372.4.fruit=\"pear\" sdata.win@18372.4.taste=\"good\")",
"{\"sdata\":{\"win@18372.4\":{\"taste\":\"good\",\"fruit\":\"pear\"}}}");
}

void
Expand Down

0 comments on commit b81436f

Please sign in to comment.