]> source.dussan.org Git - rspamd.git/commitdiff
Add ability to specify custom headers for rspamc client
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 19 Oct 2015 16:16:21 +0000 (17:16 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 19 Oct 2015 16:16:21 +0000 (17:16 +0100)
doc/rspamc.1.md
src/client/rspamc.c

index f4d089bc13b4a87f0034243f7dbcd85094f29830..99bfea376d856d3a3ad4591c6eac29649d0edda3 100644 (file)
@@ -111,6 +111,9 @@ requires input.
 \--mime
 :      Output the full mime message instead of scanning results only
 
+\--header=*header*
+:      Add custom HTTP header for a request. You may specify header in format `name=value` or just `name` for an empty header. This option can be repeated multiple times.
+
 \--commands
 :      List available commands
 
index 9be97cba0d632880787ad57798ff30d14b63ba03..7c0e76d5c4400d6f573f6ea9ffd6ca5215cf4eba 100644 (file)
@@ -48,6 +48,7 @@ static gchar *hostname = "localhost";
 static gchar *classifier = "bayes";
 static gchar *local_addr = NULL;
 static gchar *execute = NULL;
+static gchar **http_headers = NULL;
 static gint weight = 0;
 static gint flag = 0;
 static gint max_requests = 8;
@@ -118,6 +119,8 @@ static GOptionEntry entries[] =
           "Execute the specified command and pass output to it", NULL },
        { "mime", 'e', 0, G_OPTION_ARG_NONE, &mime_output,
           "Write mime body of message with headers instead of just a scan's result", NULL },
+       {"header", 0, 0, G_OPTION_ARG_STRING_ARRAY, &http_headers,
+               "Add custom HTTP header to query (can be repeated)", NULL},
        { NULL, 0, 0, G_OPTION_ARG_NONE, NULL, NULL, NULL }
 };
 
@@ -389,6 +392,7 @@ static void
 add_options (GHashTable *opts)
 {
        GString *numbuf;
+       gchar **hdr;
 
        if (ip != NULL) {
                g_hash_table_insert (opts, "Ip", ip);
@@ -430,6 +434,25 @@ add_options (GHashTable *opts)
        if (extended_urls) {
                g_hash_table_insert (opts, "URL-Format", "extended");
        }
+
+       hdr = http_headers;
+
+       while (*hdr != NULL) {
+               gchar **kv = g_strsplit_set (*hdr, ":=", 2);
+
+               if (kv == NULL || kv[1] == NULL) {
+                       g_hash_table_insert (opts, *hdr, "");
+
+                       if (kv) {
+                               g_strfreev (kv);
+                       }
+               }
+               else {
+                       g_hash_table_insert (opts, kv[0], kv[1]);
+               }
+
+               hdr ++;
+       }
 }
 
 static void