MEDIUM: pattern: add sample lookup function.

Some functions needs to change the sample associated to pattern. This
new pointer permit to return the a pointer to the sample pointer. The
caller can use or change the value.
diff --git a/include/proto/pattern.h b/include/proto/pattern.h
index 1424820..361ae49 100644
--- a/include/proto/pattern.h
+++ b/include/proto/pattern.h
@@ -89,6 +89,20 @@
 
 /*
  *
+ * The following function lookup the pattern and return a pointer on the
+ * pointer containing the sample expression. This is useful to replace
+ * the sample.
+ *
+ */
+struct sample_storage **pat_find_smp_list_val(struct pattern_expr *expr, struct pattern *pattern);
+struct sample_storage **pat_find_smp_tree_ip(struct pattern_expr *expr, struct pattern *pattern);
+struct sample_storage **pat_find_smp_list_ptr(struct pattern_expr *expr, struct pattern *pattern);
+struct sample_storage **pat_find_smp_tree_str(struct pattern_expr *expr, struct pattern *pattern);
+struct sample_storage **pat_find_smp_list_str(struct pattern_expr *expr, struct pattern *pattern);
+struct sample_storage **pat_find_smp_list_reg(struct pattern_expr *expr, struct pattern *pattern);
+
+/*
+ *
  * The following functions clean all entries of a pattern expression and
  * reset the tree and list root.
  *
@@ -184,6 +198,7 @@
 int pattern_read_from_file(struct pattern_expr *expr, const char *filename, int patflags, char **err);
 void pattern_init_expr(struct pattern_expr *expr);
 int pattern_lookup(const char *args, struct pattern_expr *expr, struct pattern_list **pat_elt, struct pattern_tree **idx_elt, char **err);
+struct sample_storage **pattern_find_smp(const char *key, struct pattern_expr *expr, char **err);
 int pattern_delete(const char *key, struct pattern_expr *expr, char **err);
 void pattern_prune(struct pattern_expr *expr);
 
diff --git a/include/types/acl.h b/include/types/acl.h
index 0a89c99..2221761 100644
--- a/include/types/acl.h
+++ b/include/types/acl.h
@@ -95,6 +95,7 @@
 	int (*parse)(const char *text, struct pattern *pattern, char **err);
 	int (*index)(struct pattern_expr *expr, struct pattern *pattern, char **err);
 	void (*delete)(struct pattern_expr *expr, struct pattern *pattern);
+	struct sample_storage **(*find_smp)(struct pattern_expr *, struct pattern *);
 	void (*prune)(struct pattern_expr *expr);
 	struct pattern *(*match)(struct sample *smp, struct pattern_expr *expr, int fill);
 	/* must be after the config params */
diff --git a/include/types/pattern.h b/include/types/pattern.h
index 966c83e..7b9f8fd 100644
--- a/include/types/pattern.h
+++ b/include/types/pattern.h
@@ -157,6 +157,7 @@
 	int (*parse)(const char *text, struct pattern *pattern, char **err);
 	int (*index)(struct pattern_expr *, struct pattern *, char **);
 	void (*delete)(struct pattern_expr *, struct pattern *);
+	struct sample_storage **(*find_smp)(struct pattern_expr *, struct pattern *);
 	void (*prune)(struct pattern_expr *);
 	struct pattern *(*match)(struct sample *, struct pattern_expr *, int);
 	struct list patterns;         /* list of acl_patterns */
@@ -168,6 +169,7 @@
 extern int (*pat_parse_fcts[PAT_MATCH_NUM])(const char *, struct pattern *, char **);
 extern int (*pat_index_fcts[PAT_MATCH_NUM])(struct pattern_expr *, struct pattern *, char **);
 extern void (*pat_delete_fcts[PAT_MATCH_NUM])(struct pattern_expr *, struct pattern *);
+extern struct sample_storage **(*pat_find_smp_fcts[PAT_MATCH_NUM])(struct pattern_expr *, struct pattern *);
 void (*pat_prune_fcts[PAT_MATCH_NUM])(struct pattern_expr *);
 extern struct pattern *(*pat_match_fcts[PAT_MATCH_NUM])(struct sample *, struct pattern_expr *, int);
 extern int pat_match_types[PAT_MATCH_NUM];