mirror of
https://github.com/openappsec/openappsec.git
synced 2025-06-28 16:41:02 +03:00
70 lines
2.2 KiB
C
70 lines
2.2 KiB
C
/*
|
|
* Copyright (c) 2007-2014, Lloyd Hilaiel <me@lloyd.io>
|
|
*
|
|
* Permission to use, copy, modify, and/or distribute this software for any
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
* copyright notice and this permission notice appear in all copies.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#include "yajl/yajl_tree.h"
|
|
|
|
static unsigned char fileData[65536];
|
|
|
|
int
|
|
main(void)
|
|
{
|
|
size_t rd;
|
|
yajl_val node;
|
|
char errbuf[1024];
|
|
|
|
/* null plug buffers */
|
|
fileData[0] = errbuf[0] = 0;
|
|
|
|
/* read the entire config file */
|
|
rd = fread((void *) fileData, 1, sizeof(fileData) - 1, stdin);
|
|
|
|
/* file read error handling */
|
|
if (rd == 0 && !feof(stdin)) {
|
|
fprintf(stderr, "error encountered on file read\n");
|
|
return 1;
|
|
} else if (rd >= sizeof(fileData) - 1) {
|
|
fprintf(stderr, "config file too big\n");
|
|
return 1;
|
|
}
|
|
|
|
/* we have the whole config file in memory. let's parse it ... */
|
|
node = yajl_tree_parse((const char *) fileData, errbuf, sizeof(errbuf));
|
|
|
|
/* parse error handling */
|
|
if (node == NULL) {
|
|
fprintf(stderr, "parse_error: ");
|
|
if (strlen(errbuf)) fprintf(stderr, " %s", errbuf);
|
|
else fprintf(stderr, "unknown error");
|
|
fprintf(stderr, "\n");
|
|
return 1;
|
|
}
|
|
|
|
/* ... and extract a nested value from the config file */
|
|
{
|
|
const char * path[] = { "Logging", "timeFormat", (const char *) 0 };
|
|
yajl_val v = yajl_tree_get(node, path, yajl_t_string);
|
|
if (v) printf("%s/%s: %s\n", path[0], path[1], YAJL_GET_STRING(v));
|
|
else printf("no such node: %s/%s\n", path[0], path[1]);
|
|
}
|
|
|
|
yajl_tree_free(node);
|
|
|
|
return 0;
|
|
}
|