summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert James Kaes <rjkaes@users.sourceforge.net>2002-06-07 18:36:22 +0000
committerRobert James Kaes <rjkaes@users.sourceforge.net>2002-06-07 18:36:22 +0000
commit7e1de2012cd4e3f882be91557e8e7242ff0c478f (patch)
tree0b7ba81747dbc1bb74c5f04ba31ee677a7c41bca /src
parentff56e32e8ec8e546687f980a7d697a97bb82e74c (diff)
downloadtinyproxy-7e1de2012cd4e3f882be91557e8e7242ff0c478f.tar.gz
tinyproxy-7e1de2012cd4e3f882be91557e8e7242ff0c478f.zip
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.
Diffstat (limited to 'src')
-rw-r--r--src/filter.c55
-rw-r--r--src/filter.h9
2 files changed, 50 insertions, 14 deletions
diff --git a/src/filter.c b/src/filter.c
index 23275fc..c350975 100644
--- a/src/filter.c
+++ b/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;
}
diff --git a/src/filter.h b/src/filter.h
index 4d6364e..6785b08 100644
--- a/src/filter.h
+++ b/src/filter.h
@@ -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