BUG/MAJOR: Broken parsing for valid keywords provided after 'source' setting.

Any valid keyword could not be parsed anymore if provided after 'source' keyword.
This was due to the fact that 'source' number of arguments is variable.
So, as its parser srv_parse_source() is the only one who may know how many arguments
was provided after 'source' keyword, it updates 'cur_arg' variable (the index
in the line of the current arg to be parsed), this is a good thing.
This variable is also incremented by one (to skip the 'source' keyword).
This patch disable this behavior.

Should have come with dba9707 commit.
diff --git a/src/server.c b/src/server.c
index 40a8d7f..878293f 100644
--- a/src/server.c
+++ b/src/server.c
@@ -1357,6 +1357,7 @@
  * Optional keywords are also declared with a NULL ->parse() function so that
  * the config parser can report an appropriate error when a known keyword was
  * not enabled.
+ * Note: -1 as ->skip value means that the number of arguments are variable.
  */
 static struct srv_kw_list srv_kws = { "ALL", { }, {
 	{ "addr",                srv_parse_addr,                1,  1 }, /* IP address to send health to or to probe from agent-check */
@@ -1380,12 +1381,7 @@
 	{ "redir",               srv_parse_redir,               1,  1 }, /* Enable redirection mode */
 	{ "send-proxy",          srv_parse_send_proxy,          0,  1 }, /* Enforce use of PROXY V1 protocol */
 	{ "send-proxy-v2",       srv_parse_send_proxy_v2,       0,  1 }, /* Enforce use of PROXY V2 protocol */
-	/*
-	 * Note: the following 'skip' field value is 0.
-	 * Here this does not mean that "source" setting does not need any argument.
-	 * This means that the number of argument is variable.
-	 */
-	{ "source",              srv_parse_source,              0,  1 }, /* Set the source address to be used to connect to the server */
+	{ "source",              srv_parse_source,             -1,  1 }, /* Set the source address to be used to connect to the server */
 	{ "stick",               srv_parse_stick,               0,  1 }, /* Enable stick-table persistence */
 	{ "track",               srv_parse_track,               1,  1 }, /* Set the current state of the server, tracking another one */
 	{ NULL, NULL, 0 },
@@ -2226,7 +2222,8 @@
 					if (!kw->parse) {
 						Alert("parsing [%s:%d] : '%s %s' : '%s' option is not implemented in this version (check build options).\n",
 						      file, linenum, args[0], args[1], args[cur_arg]);
-						cur_arg += 1 + kw->skip ;
+						if (kw->skip != -1)
+							cur_arg += 1 + kw->skip ;
 						err_code |= ERR_ALERT | ERR_FATAL;
 						goto out;
 					}
@@ -2234,7 +2231,8 @@
 					if (defsrv && !kw->default_ok) {
 						Alert("parsing [%s:%d] : '%s %s' : '%s' option is not accepted in default-server sections.\n",
 						      file, linenum, args[0], args[1], args[cur_arg]);
-						cur_arg += 1 + kw->skip ;
+						if (kw->skip != -1)
+							cur_arg += 1 + kw->skip ;
 						err_code |= ERR_ALERT;
 						continue;
 					}
@@ -2246,12 +2244,14 @@
 						display_parser_err(file, linenum, args, cur_arg, &err);
 						if (code & ERR_FATAL) {
 							free(err);
-							cur_arg += 1 + kw->skip;
+							if (kw->skip != -1)
+								cur_arg += 1 + kw->skip;
 							goto out;
 						}
 					}
 					free(err);
-					cur_arg += 1 + kw->skip;
+					if (kw->skip != -1)
+						cur_arg += 1 + kw->skip;
 					continue;
 				}