Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
libvmod-selector
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
uplex-varnish
libvmod-selector
Commits
3178d443
Commit
3178d443
authored
Jun 26, 2018
by
Geoff Simmons
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implement case-insensitive .match().
parent
92ef0fa9
Changes
2
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
812 additions
and
2 deletions
+812
-2
case.vtc
src/tests/case.vtc
+778
-0
vmod_selector.c
src/vmod_selector.c
+34
-2
No files found.
src/tests/case.vtc
0 → 100644
View file @
3178d443
This diff is collapsed.
Click to expand it.
src/vmod_selector.c
View file @
3178d443
...
...
@@ -33,6 +33,7 @@
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "cache/cache.h"
#include "vcl.h"
...
...
@@ -65,6 +66,7 @@ struct vmod_selector_set {
#define VMOD_SELECTOR_SET_MAGIC 0x838979ef
struct
entry
**
table
;
char
**
members
;
char
**
lomembers
;
struct
pt_y
*
origo
;
char
*
vcl_name
;
unsigned
nmembers
;
...
...
@@ -146,6 +148,7 @@ vmod_set_add(VRT_CTX, struct vmod_selector_set *set, VCL_STRING member,
vre_t
*
re
=
NULL
;
const
char
*
error
;
int
erroffset
;
char
**
members
;
CHECK_OBJ_NOTNULL
(
ctx
,
VRT_CTX_MAGIC
);
CHECK_OBJ_NOTNULL
(
set
,
VMOD_SELECTOR_SET_MAGIC
);
...
...
@@ -169,9 +172,20 @@ vmod_set_add(VRT_CTX, struct vmod_selector_set *set, VCL_STRING member,
AN
(
set
->
members
);
set
->
members
[
n
-
1
]
=
strdup
(
member
);
AN
(
set
->
members
[
n
-
1
]);
members
=
set
->
members
;
if
(
!
set
->
case_sensitive
)
{
set
->
lomembers
=
realloc
(
set
->
members
,
n
*
sizeof
(
VCL_STRING
));
AN
(
set
->
lomembers
);
set
->
lomembers
[
n
-
1
]
=
strdup
(
member
);
AN
(
set
->
lomembers
[
n
-
1
]);
for
(
char
*
m
=
set
->
lomembers
[
n
-
1
];
*
m
;
m
++
)
*
m
=
tolower
(
*
m
);
members
=
set
->
lomembers
;
}
errno
=
0
;
if
(
PT_Insert
(
&
set
->
origo
,
n
-
1
,
set
->
members
)
!=
0
)
{
if
(
PT_Insert
(
&
set
->
origo
,
n
-
1
,
members
)
!=
0
)
{
if
(
errno
==
EINVAL
)
VFAIL
(
ctx
,
"%s.add():
\"
%s
\"
added more than once"
,
set
->
vcl_name
,
member
);
...
...
@@ -240,6 +254,8 @@ vmod_set_match(VRT_CTX, struct vmod_selector_set *set, VCL_STRING subject)
{
unsigned
idx
;
struct
match_data
*
match
;
char
**
members
;
const
char
*
subj
;
CHECK_OBJ_NOTNULL
(
ctx
,
VRT_CTX_MAGIC
);
CHECK_OBJ_NOTNULL
(
set
,
VMOD_SELECTOR_SET_MAGIC
);
...
...
@@ -255,8 +271,24 @@ vmod_set_match(VRT_CTX, struct vmod_selector_set *set, VCL_STRING subject)
return
(
0
);
}
members
=
set
->
members
;
subj
=
subject
;
if
(
!
set
->
case_sensitive
)
{
char
*
copy
;
if
((
copy
=
WS_Copy
(
ctx
->
ws
,
subject
,
-
1
))
==
NULL
)
{
VERRNOMEM
(
ctx
,
"%s.match(): copying subject for "
"case-insensitive match"
,
set
->
vcl_name
);
return
(
0
);
}
for
(
char
*
c
=
copy
;
*
c
;
c
++
)
*
c
=
tolower
(
*
c
);
subj
=
copy
;
members
=
set
->
lomembers
;
}
match
=
get_match_data
(
ctx
,
set
,
"match"
);
if
((
idx
=
PT_Lookup
(
set
->
origo
,
set
->
members
,
subject
))
==
UINT_MAX
)
{
if
((
idx
=
PT_Lookup
(
set
->
origo
,
members
,
subj
))
==
UINT_MAX
)
{
match
->
n
=
0
;
return
(
0
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment