]> source.dussan.org Git - rspamd.git/commitdiff
Add function to parse inet address.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 30 Mar 2015 14:04:56 +0000 (15:04 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 30 Mar 2015 14:04:56 +0000 (15:04 +0100)
src/libserver/cfg_rcl.c

index 0fe869a08228a25882bb57e979822606508569d9..66247cf61c78334c973adcd0247a0e018391b62e 100644 (file)
@@ -1971,6 +1971,41 @@ rspamd_rcl_parse_struct_boolean (rspamd_mempool_t *pool,
        return TRUE;
 }
 
+gboolean
+rspamd_rcl_parse_struct_addr (rspamd_mempool_t *pool,
+       const ucl_object_t *obj,
+       gpointer ud,
+       struct rspamd_rcl_section *section,
+       GError **err)
+{
+       struct rspamd_rcl_struct_parser *pd = ud;
+       rspamd_inet_addr_t **target;
+       const gchar *val;
+
+       target = (rspamd_inet_addr_t **)(((gchar *)pd->user_struct) + pd->offset);
+
+       if (obj->type == UCL_STRING) {
+               val = ucl_object_tostring (obj);
+
+               if (!rspamd_parse_inet_address (target, val)) {
+                       g_set_error (err,
+                               CFG_RCL_ERROR,
+                               EINVAL,
+                               "cannot parse inet address: %s", val);
+                       return FALSE;
+               }
+       }
+       else {
+               g_set_error (err,
+                       CFG_RCL_ERROR,
+                       EINVAL,
+                       "cannot convert an object to inet address");
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
 void
 rspamd_rcl_register_worker_option (struct rspamd_config *cfg,
        gint type,