Added code to handle the "FilterDefaultDeny" directive. The filter_set_default_policy() function is used to select the default policy (either default allow or default deny) for the filtering code. Also, the two filtering functions now support the policy code.
This commit is contained in:
parent
ff56e32e8e
commit
7e1de2012c
55
src/filter.c
55
src/filter.c
@ -1,4 +1,4 @@
|
||||
/* $Id: filter.c,v 1.12 2002-06-06 20:30:04 rjkaes Exp $
|
||||
/* $Id: filter.c,v 1.13 2002-06-07 18:36:22 rjkaes Exp $
|
||||
*
|
||||
* Copyright (c) 1999 George Talusan (gstalusan@uwaterloo.ca)
|
||||
* Copyright (c) 2002 James E. Flemer (jflemer@acm.jhu.edu)
|
||||
@ -37,6 +37,7 @@ struct filter_list {
|
||||
|
||||
static struct filter_list *fl = NULL;
|
||||
static int already_init = 0;
|
||||
static filter_policy_t default_policy = FILTER_DEFAULT_ALLOW;
|
||||
|
||||
/*
|
||||
* Initializes a linked list of strings containing hosts/urls to be filtered
|
||||
@ -129,7 +130,7 @@ filter_destroy(void)
|
||||
}
|
||||
}
|
||||
|
||||
/* returns 0 if host is not an element of filter list, non-zero otherwise */
|
||||
/* Return 0 to allow, non-zero to block */
|
||||
int
|
||||
filter_domain(const char *host)
|
||||
{
|
||||
@ -137,31 +138,59 @@ filter_domain(const char *host)
|
||||
int result;
|
||||
|
||||
if (!fl || !already_init)
|
||||
return (0);
|
||||
goto COMMON_EXIT;
|
||||
|
||||
result = 0;
|
||||
for (p = fl; p; p = p->next) {
|
||||
result = !regexec(p->cpat, host, (size_t) 0, (regmatch_t *) 0, 0);
|
||||
result = regexec(p->cpat, host, (size_t) 0, (regmatch_t *) 0, 0);
|
||||
|
||||
if (result)
|
||||
break;
|
||||
if (result == 0) {
|
||||
if (default_policy == FILTER_DEFAULT_ALLOW)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return (result);
|
||||
|
||||
COMMON_EXIT:
|
||||
if (default_policy == FILTER_DEFAULT_ALLOW)
|
||||
return 0;
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* returns 0 if url is not an element of filter list, non-zero otherwise */
|
||||
/* returns 0 to allow, non-zero to block */
|
||||
int
|
||||
filter_url(const char *url)
|
||||
{
|
||||
struct filter_list *p;
|
||||
int result;
|
||||
|
||||
if (!fl || !already_init)
|
||||
return (0);
|
||||
goto COMMON_EXIT;
|
||||
|
||||
for (p = fl; p; p = p->next) {
|
||||
if (!regexec(p->cpat, url, (size_t) 0, (regmatch_t *) 0, 0)) {
|
||||
return 1;
|
||||
result = regexec(p->cpat, url, (size_t) 0, (regmatch_t *) 0, 0);
|
||||
|
||||
if (result == 0) {
|
||||
if (default_policy == FILTER_DEFAULT_ALLOW)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
COMMON_EXIT:
|
||||
if (default_policy == FILTER_DEFAULT_ALLOW)
|
||||
return 0;
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set the default filtering policy
|
||||
*/
|
||||
void
|
||||
filter_set_default_policy(filter_policy_t policy)
|
||||
{
|
||||
default_policy = policy;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: filter.h,v 1.4 2002-05-27 01:56:22 rjkaes Exp $
|
||||
/* $Id: filter.h,v 1.5 2002-06-07 18:36:21 rjkaes Exp $
|
||||
*
|
||||
* See 'filter.c' for a detailed description.
|
||||
*
|
||||
@ -18,9 +18,16 @@
|
||||
#ifndef _TINYPROXY_FILTER_H_
|
||||
#define _TINYPROXY_FILTER_H_
|
||||
|
||||
typedef enum {
|
||||
FILTER_DEFAULT_ALLOW,
|
||||
FILTER_DEFAULT_DENY,
|
||||
} filter_policy_t;
|
||||
|
||||
extern void filter_init(void);
|
||||
extern void filter_destroy(void);
|
||||
extern int filter_domain(const char *host);
|
||||
extern int filter_url(const char *url);
|
||||
|
||||
extern void filter_set_default_policy(filter_policy_t policy);
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user