]> source.dussan.org Git - rspamd.git/commitdiff
Add flags to rcl parser creation.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 23 Aug 2013 01:14:45 +0000 (02:14 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 23 Aug 2013 01:14:45 +0000 (02:14 +0100)
Allow RSPAMD_CL_FLAG_KEY_LOWERCASE flag to force all keys in rcl objects
to be lowercased which is useful for parsing.

src/rcl/rcl.h
src/rcl/rcl_internal.h
src/rcl/rcl_parser.c

index 61ce88add6c9729dab8153cd7086834d33928032..50555e2489b437720d635c1e559ce2a469beabe0 100644 (file)
@@ -62,6 +62,10 @@ enum rspamd_cl_emitter {
        RSPAMD_CL_EMIT_CONFIG
 };
 
+enum rspamd_cl_flags {
+       RSPAMD_CL_FLAG_KEY_LOWERCASE = 0x1
+};
+
 typedef struct rspamd_cl_object_s {
        gchar *key;                                                             /**< the key of an object */
        union {
@@ -249,7 +253,7 @@ struct rspamd_cl_parser;
  * @param pool pool to allocate memory from
  * @return new parser object
  */
-struct rspamd_cl_parser* rspamd_cl_parser_new (void);
+struct rspamd_cl_parser* rspamd_cl_parser_new (gint flags);
 
 /**
  * Register new handler for a macro
index dda08ddba68aacdbe62ee9c96e48b5561667ff4a..4d3294e770401cea1a5b6a5683ba24c5da54c61e 100644 (file)
@@ -95,12 +95,13 @@ struct rspamd_cl_pubkey {
 struct rspamd_cl_parser {
        enum rspamd_cl_parser_state state;
        enum rspamd_cl_parser_state prev_state;
+       guint recursion;
+       gint flags;
        rspamd_cl_object_t *top_obj;
        rspamd_cl_object_t *cur_obj;
        struct rspamd_cl_macro *macroes;
        struct rspamd_cl_stack *stack;
        struct rspamd_cl_chunk *chunks;
-       guint recursion;
        struct rspamd_cl_pubkey *keys;
 };
 
index 797c8850c24c3346965afc6b6630569d858655db..7ba9bb6bb3f83615b4ea4ef074b638a6de29377d 100644 (file)
@@ -658,7 +658,12 @@ rspamd_cl_parse_key (struct rspamd_cl_parser *parser,
        /* Create a new object */
        nobj = rspamd_cl_object_new ();
        nobj->key = g_malloc (end - c + 1);
-       rspamd_strlcpy (nobj->key, c, end - c + 1);
+       if (parser->flags & RSPAMD_CL_FLAG_KEY_LOWERCASE) {
+               rspamd_strlcpy_tolower (nobj->key, c, end - c + 1);
+       }
+       else {
+               rspamd_strlcpy (nobj->key, c, end - c + 1);
+       }
 
        if (got_quote) {
                rspamd_cl_unescape_json_string (nobj->key);
@@ -1187,7 +1192,7 @@ rspamd_cl_state_machine (struct rspamd_cl_parser *parser, GError **err)
 }
 
 struct rspamd_cl_parser*
-rspamd_cl_parser_new (void)
+rspamd_cl_parser_new (gint flags)
 {
        struct rspamd_cl_parser *new;
 
@@ -1196,6 +1201,8 @@ rspamd_cl_parser_new (void)
        rspamd_cl_parser_register_macro (new, "include", rspamd_cl_include_handler, new);
        rspamd_cl_parser_register_macro (new, "includes", rspamd_cl_includes_handler, new);
 
+       new->flags = flags;
+
        return new;
 }