blob: 60c7f422db5479029d58247dec6b1809beddc846 [file] [log] [blame]
Willy Tarreaubaaee002006-06-26 02:48:02 +02001/*
Willy Tarreauf4f04122010-01-28 18:10:50 +01002 * include/common/regex.h
3 * This file defines everything related to regular expressions.
4 *
5 * Copyright (C) 2000-2010 Willy Tarreau - w@1wt.eu
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation, version 2.1
10 * exclusively.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
Willy Tarreaubaaee002006-06-26 02:48:02 +020021
Willy Tarreau2dd0d472006-06-29 17:53:05 +020022#ifndef _COMMON_REGEX_H
23#define _COMMON_REGEX_H
Willy Tarreaubaaee002006-06-26 02:48:02 +020024
Willy Tarreaue3ba5f02006-06-29 18:54:54 +020025#include <common/config.h>
Willy Tarreaubaaee002006-06-26 02:48:02 +020026
27#ifdef USE_PCRE
28#include <pcre.h>
29#include <pcreposix.h>
30#else
31#include <regex.h>
32#endif
33
34/* what to do when a header matches a regex */
35#define ACT_ALLOW 0 /* allow the request */
36#define ACT_REPLACE 1 /* replace the matching header */
37#define ACT_REMOVE 2 /* remove the matching header */
38#define ACT_DENY 3 /* deny the request */
39#define ACT_PASS 4 /* pass this header without allowing or denying the request */
Willy Tarreaub8750a82006-09-03 09:56:00 +020040#define ACT_TARPIT 5 /* tarpit the connection matching this request */
Willy Tarreaua496b602006-12-17 23:15:24 +010041#define ACT_SETBE 6 /* switch the backend */
Willy Tarreaubaaee002006-06-26 02:48:02 +020042
43struct hdr_exp {
44 struct hdr_exp *next;
Willy Tarreaub17916e2006-10-15 15:17:57 +020045 const regex_t *preg; /* expression to look for */
Willy Tarreaubaaee002006-06-26 02:48:02 +020046 int action; /* ACT_ALLOW, ACT_REPLACE, ACT_REMOVE, ACT_DENY */
Willy Tarreaub17916e2006-10-15 15:17:57 +020047 const char *replace; /* expression to set instead */
Willy Tarreauf4f04122010-01-28 18:10:50 +010048 void *cond; /* a possible condition or NULL */
Willy Tarreaubaaee002006-06-26 02:48:02 +020049};
50
51extern regmatch_t pmatch[MAX_MATCH];
52
Willy Tarreaub17916e2006-10-15 15:17:57 +020053int exp_replace(char *dst, char *src, const char *str, const regmatch_t *matches);
54const char *check_replace_string(const char *str);
55const char *chain_regex(struct hdr_exp **head, const regex_t *preg,
Willy Tarreauf4f04122010-01-28 18:10:50 +010056 int action, const char *replace, void *cond);
Willy Tarreaubaaee002006-06-26 02:48:02 +020057
Willy Tarreau2dd0d472006-06-29 17:53:05 +020058#endif /* _COMMON_REGEX_H */
Willy Tarreaubaaee002006-06-26 02:48:02 +020059
60/*
61 * Local variables:
62 * c-indent-level: 8
63 * c-basic-offset: 8
64 * End:
65 */