Revert "MEDIUM: sink: add global statement to create a new ring (sink buffer)"

This reverts commit 957ec59571ce7eead86fb138e506c937c271e0b6.

As discussed with Emeric, the current syntax is not extensible enough,
this will be turned to a section instead in a forthcoming patch.
diff --git a/doc/configuration.txt b/doc/configuration.txt
index 6e86a0a..e434a47 100644
--- a/doc/configuration.txt
+++ b/doc/configuration.txt
@@ -614,7 +614,6 @@
    - pidfile
    - presetenv
    - resetenv
-   - ring
    - uid
    - ulimit-n
    - user
@@ -1194,51 +1193,6 @@
   next line in the configuration file sees the new environment. See also
   "setenv", "presetenv", and "unsetenv".
 
-ring <name> [desc <desc>] [format <format>] [size <size>] [maxlen <length>]
-  Creates a named ring buffer which could be used on log line for instance.
-
-  <desc> is an optionnal description string of the ring. It will appear on
-         CLI. By default, <name> is reused to fill this field.
-
-  <format> is the log format used when generating syslog messages. It may be
-           one of the following :
-
-    iso       A message containing only the ISO date, followed by the text.
-              The PID, process name and system name are omitted. This is
-              designed to be used with a local log server.
-
-    raw       A message containing only the text. The level, PID, date, time,
-              process name and system name are omitted. This is designed to be
-              used in containers or during development, where the severity only
-              depends on the file descriptor used (stdout/stderr). This is
-              the default.
-
-    rfc3164   The RFC3164 syslog message format. This is the default.
-              (https://tools.ietf.org/html/rfc3164)
-
-    rfc5424   The RFC5424 syslog message format.
-              (https://tools.ietf.org/html/rfc5424)
-
-    short     A message containing only a level between angle brackets such as
-              '<3>', followed by the text. The PID, date, time, process name
-              and system name are omitted. This is designed to be used with a
-              local log server. This format is compatible with what the systemd
-              logger consumes.
-
-    timed     A message containing only a level between angle brackets such as
-              '<3>', followed by ISO date and by the text. The PID, process
-              name and system name are omitted. This is designed to be
-              used with a local log server.
-
-  <length> is the maximum length of an event message stored into the ring,
-           including formatted header. If an event message is longer than
-           <length>, it will be truncated to this length.
-
-  <name> is the ring identifier, which follows the same naming convention as
-         proxies and servers.
-
-  <size> is the optionnal size in bytes. Default value is set to BUFSIZE.
-
 stats bind-process [ all | odd | even | <process_num>[-[process_num>]] ] ...
   Limits the stats socket to a certain set of processes numbers. By default the
   stats socket is bound to all processes, causing a warning to be emitted when
diff --git a/include/common/cfgparse.h b/include/common/cfgparse.h
index 286099b..1a28816 100644
--- a/include/common/cfgparse.h
+++ b/include/common/cfgparse.h
@@ -28,7 +28,6 @@
 #include <common/mini-clist.h>
 
 #include <proto/log.h>
-#include <proto/sink.h>
 #include <proto/proxy.h>
 
 /* configuration sections */
diff --git a/include/proto/sink.h b/include/proto/sink.h
index c312185..d30f30a 100644
--- a/include/proto/sink.h
+++ b/include/proto/sink.h
@@ -78,9 +78,6 @@
 	return sent;
 }
 
-
-int parse_sinkbuf(char **args, char **err);
-
 #endif /* _PROTO_SINK_H */
 
 /*
diff --git a/include/types/sink.h b/include/types/sink.h
index ef11096..28b0379 100644
--- a/include/types/sink.h
+++ b/include/types/sink.h
@@ -52,8 +52,8 @@
 /* describes the configuration and current state of an event sink */
 struct sink {
 	struct list sink_list;     // position in the sink list
-	char *name;                // sink name
-	char *desc;                // sink description
+	const char *name;          // sink name
+	const char *desc;          // sink description
 	enum sink_fmt fmt;         // format expected by the sink
 	enum sink_type type;       // type of storage
 	uint32_t maxlen;           // max message length (truncated above)
diff --git a/src/cfgparse-global.c b/src/cfgparse-global.c
index d971c11..2b32497 100644
--- a/src/cfgparse-global.c
+++ b/src/cfgparse-global.c
@@ -905,13 +905,6 @@
 		free(global.log_send_hostname);
 		global.log_send_hostname = strdup(name);
 	}
-	else if (!strcmp(args[0], "ring")) {
-		if (!parse_sinkbuf(args, &errmsg)) {
-			ha_alert("parsing [%s:%d] : %s : %s\n", file, linenum, args[0], errmsg);
-			err_code |= ERR_ALERT | ERR_FATAL;
-			goto out;
-		}
-	}
 	else if (!strcmp(args[0], "server-state-base")) { /* path base where HAProxy can find server state files */
 		if (global.server_state_base != NULL) {
 			ha_alert("parsing [%s:%d] : '%s' already specified. Continuing.\n", file, linenum, args[0]);
diff --git a/src/sink.c b/src/sink.c
index 34bc97c..15595cd 100644
--- a/src/sink.c
+++ b/src/sink.c
@@ -58,8 +58,8 @@
 	if (!sink)
 		goto end;
 
-	sink->name = strdup(name);
-	sink->desc = strdup(desc);
+	sink->name = name;
+	sink->desc = desc;
 	sink->fmt  = fmt;
 	sink->type = SINK_TYPE_NEW;
 	sink->maxlen = BUFSIZE;
@@ -123,8 +123,6 @@
 	sink->ctx.ring = ring_new(size);
 	if (!sink->ctx.ring) {
 		LIST_DEL(&sink->sink_list);
-		free(sink->name);
-		free(sink->desc);
 		free(sink);
 		goto fail;
 	}
@@ -328,130 +326,10 @@
 		if (sink->type == SINK_TYPE_BUFFER)
 			ring_free(sink->ctx.ring);
 		LIST_DEL(&sink->sink_list);
-		free(sink->name);
-		free(sink->desc);
 		free(sink);
 	}
 }
 
-/*
- * Parse "ring" keyword and create corresponding sink buffer.
- *
- * The function returns 1 in success case, otherwise, it returns 0 and err is
- * filled.
- */
-
-int parse_sinkbuf(char **args, char **err)
-{
-	int myidx = 2;
-	size_t size = BUFSIZE;
-	size_t maxlen = size;
-	int format = SINK_FMT_RAW;
-	struct sink *sink = NULL;
-	char *desc, *name = args[1];
-	const char *inv;
-
-	if (!*name) {
-		memprintf(err, "missing sink name");
-		goto error;
-	}
-
-	inv = invalid_char(name);
-	if (inv) {
-		memprintf(err, "invalid sink name '%s' (character '%c' is not permitted)", name, *inv);
-		goto error;
-	}
-
-	desc = name;
-
-	while (*args[myidx]) {
-		if (!strcmp(args[myidx], "size")) {
-			myidx++;
-			size = atol(args[myidx]);
-			if (!size) {
-				memprintf(err, "invalid size '%s' for new sink buffer for ring '%s'", args[myidx], name);
-				goto error;
-			}
-		}
-		else if (!strcmp(args[myidx], "maxlen")) {
-			myidx++;
-			maxlen = atol(args[myidx]);
-			if (!maxlen) {
-				memprintf(err, "invalid size '%s' for new sink buffer for ring '%s'", args[myidx], name);
-				goto error;
-			}
-		}
-		else if (!strcmp(args[myidx], "maxlen")) {
-			myidx++;
-			maxlen = atol(args[myidx]);
-			if (!maxlen) {
-				memprintf(err, "invalid size '%s' for new sink buffer for ring '%s'", args[myidx], name);
-				goto error;
-			}
-		}
-		else if (!strcmp(args[myidx], "desc")) {
-			myidx++;
-			desc = args[myidx];
-		}
-		else if (!strcmp(args[myidx],"format")) {
-			myidx++;
-			if (!strcmp(args[myidx], "raw")) {
-				format = SINK_FMT_RAW;
-			}
-			else if (!strcmp(args[myidx], "short")) {
-				format = SINK_FMT_SHORT;
-			}
-			else if (!strcmp(args[myidx], "iso")) {
-				format = SINK_FMT_ISO;
-			}
-			else if (!strcmp(args[myidx], "timed")) {
-				format = SINK_FMT_TIMED;
-			}
-			else if (!strcmp(args[myidx], "rfc3164")) {
-				format = SINK_FMT_RFC3164;
-			}
-			else if (!strcmp(args[myidx], "rfc5424")) {
-				format = SINK_FMT_RFC5424;
-			}
-			else {
-				memprintf(err, "unknown format '%s' for new sink buffer for ring '%s'", args[myidx], name);
-				goto error;
-			}
-		}
-		else {
-			memprintf(err, "unknown parameter '%s' for new sink buffer for ring '%s'", args[myidx], name);
-			goto error;
-		}
-		myidx++;
-	}
-
-	if (maxlen > size) {
-		memprintf(err, "maxlen '%lu' exceeds size of the new sink buffer for ring '%s'", maxlen, name);
-		goto error;
-	}
-
-	sink = sink_new_buf(name, desc, format, size);
-	if (!sink || sink->type != SINK_TYPE_BUFFER) {
-		memprintf(err, "failed to create a new sink buffer for ring '%s'", name);
-		goto error;
-	}
-
-	sink->maxlen = maxlen;
-
-	return 1;
-error:
-	if (sink) {
-		if (sink->type == SINK_TYPE_BUFFER)
-			ring_free(sink->ctx.ring);
-		LIST_DEL(&sink->sink_list);
-		free(sink->name);
-		free(sink->desc);
-		free(sink);
-	}
-	return 0;
-
-}
-
 INITCALL0(STG_REGISTER, sink_init);
 REGISTER_POST_DEINIT(sink_deinit);