MINOR: vars: store flags into variables and add VF_PERMANENT

In order to continue to honor the ifexist Lua option and prevent rogue
SPOA agents from creating too many variables, we'll need to keep the
ability to mark certain proc.* variables as permanent when they're
known from the config file.

Let's add a flag there for this. It's added to the variable when the
variable is created with this flag set by the caller.

Another approach could have been to use a distinct list or distinct
scope but that sounds complicated and bug-prone.
diff --git a/include/haproxy/vars-t.h b/include/haproxy/vars-t.h
index 06f2712..ab83b4e 100644
--- a/include/haproxy/vars-t.h
+++ b/include/haproxy/vars-t.h
@@ -28,6 +28,7 @@
 /* flags used when setting/clearing variables */
 #define VF_UPDATEONLY 0x00000001   // SCOPE_PROC variables are only updated
 #define VF_CREATEONLY 0x00000002   // do nothing if the variable already exists
+#define VF_PERMANENT  0x00000004   // variables known to the config parser
 
 enum vars_scope {
 	SCOPE_SESS = 0,
@@ -54,6 +55,8 @@
 struct var {
 	struct list l; /* Used for chaining vars. */
 	const char *name; /* Contains the variable name. */
+	uint flags;       // VF_*
+	/* 32-bit hole here */
 	struct sample_data data; /* data storage. */
 };
 
diff --git a/src/vars.c b/src/vars.c
index 52f19c5..30aff97 100644
--- a/src/vars.c
+++ b/src/vars.c
@@ -357,6 +357,7 @@
  *   - VF_UPDATEONLY: if the scope is SCOPE_PROC, the variable may only be
  *     updated but not created.
  *   - VF_CREATEONLY: do nothing if the variable already exists (success).
+ *   - VF_PERMANENT: this flag will be passed to the variable upon creation
  *
  * It returns 0 on failure, non-zero on success.
  */
@@ -408,6 +409,7 @@
 			goto unlock;
 		LIST_APPEND(&vars->head, &var->l);
 		var->name = name;
+		var->flags = flags & VF_PERMANENT;
 	}
 
 	/* Set type. */