~clint-fewbar/ubuntu/precise/squid3/ignore-sighup-early

« back to all changes in this revision

Viewing changes to src/ACLIntRange.cc

  • Committer: Bazaar Package Importer
  • Author(s): Luigi Gangitano
  • Date: 2009-09-24 14:51:06 UTC
  • mfrom: (1.1.12 upstream)
  • mto: (20.2.1 sid)
  • mto: This revision was merged to the branch mainline in revision 21.
  • Revision ID: james.westby@ubuntu.com-20090924145106-38jgrzmj0d73pha5
Tags: 3.1.0.13-1
* Upload to experimental

* New upstream release
  - Fixes Follow-X-Forwarded-For support (Closes: #523943)
  - Adds IPv6 support (Closes: #432351)

* debian/rules
  - Removed obsolete configuration options
  - Enable db and radius basic authentication modules

* debian/patches/01-cf.data.debian
  - Adapted to new upstream version

* debian/patches/02-makefile-defaults
  - Adapted to new upstream version

* debian/{squid.postinst,squid.rc,README.Debian,watch}
  - Updated references to squid 3.1

* debian/squid3.install
  - Install CSS file for error pages
  - Install manual pages for new authentication modules

* debian/squid3-common.install
  - Install documented version of configuration file in /usr/share/doc/squid3

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * $Id: ACLIntRange.cc,v 1.10 2007/04/28 22:26:37 hno Exp $
3
 
 *
4
 
 * DEBUG: section 28    Access Control
5
 
 * AUTHOR: Robert Collins
6
 
 *
7
 
 * SQUID Web Proxy Cache          http://www.squid-cache.org/
8
 
 * ----------------------------------------------------------
9
 
 *
10
 
 *  Squid is the result of efforts by numerous individuals from
11
 
 *  the Internet community; see the CONTRIBUTORS file for full
12
 
 *  details.   Many organizations have provided support for Squid's
13
 
 *  development; see the SPONSORS file for full details.  Squid is
14
 
 *  Copyrighted (C) 2001 by the Regents of the University of
15
 
 *  California; see the COPYRIGHT file for full details.  Squid
16
 
 *  incorporates software developed and/or copyrighted by other
17
 
 *  sources; see the CREDITS file for full details.
18
 
 *
19
 
 *  This program is free software; you can redistribute it and/or modify
20
 
 *  it under the terms of the GNU General Public License as published by
21
 
 *  the Free Software Foundation; either version 2 of the License, or
22
 
 *  (at your option) any later version.
23
 
 *  
24
 
 *  This program is distributed in the hope that it will be useful,
25
 
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
26
 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27
 
 *  GNU General Public License for more details.
28
 
 *  
29
 
 *  You should have received a copy of the GNU General Public License
30
 
 *  along with this program; if not, write to the Free Software
31
 
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
32
 
 *
33
 
 *
34
 
 * Copyright (c) 2003, Robert Collins <robertc@squid-cache.org>
35
 
 */
36
 
 
37
 
#include "squid.h"
38
 
#include "ACLIntRange.h"
39
 
#include "wordlist.h"
40
 
#include "Parsing.h"
41
 
 
42
 
/* explicit instantiation required for some systems */
43
 
 
44
 
template cbdata_type List<Range<int> >
45
 
::CBDATA_List;
46
 
 
47
 
void
48
 
ACLIntRange::parse()
49
 
{
50
 
    char *a;
51
 
 
52
 
    while ((a = strtokFile())) {
53
 
        char *b = strchr(a, '-');
54
 
        unsigned short port1, port2;
55
 
 
56
 
        if (b)
57
 
            *b++ = '\0';
58
 
 
59
 
        port1 = xatos(a);
60
 
 
61
 
        if (b)
62
 
            port2 = xatos(b);
63
 
        else
64
 
            port2 = port1;
65
 
 
66
 
        if (port2 >= port1) {
67
 
            RangeType temp (0,0);
68
 
            temp.start = port1;
69
 
            temp.end = port2+1;
70
 
            ranges.push_back(temp);
71
 
        } else {
72
 
            debugs(28, 0, "ACLIntRange::parse: Invalid port value");
73
 
            self_destruct();
74
 
        }
75
 
    }
76
 
}
77
 
 
78
 
bool
79
 
ACLIntRange::empty() const
80
 
{
81
 
    return ranges.empty();
82
 
}
83
 
 
84
 
bool
85
 
ACLIntRange::match(int i)
86
 
{
87
 
    RangeType const toFind (i, i+1);
88
 
    ListIterator<RangeType> iter(ranges);
89
 
 
90
 
    while (!iter.end()) {
91
 
        const RangeType & element = iter.next();
92
 
        RangeType result = element.intersection (toFind);
93
 
 
94
 
        if (result.size())
95
 
            return true;
96
 
    }
97
 
 
98
 
    return false;
99
 
}
100
 
 
101
 
ACLData<int> *
102
 
ACLIntRange::clone() const
103
 
{
104
 
    if (!ranges.empty())
105
 
        fatal("ACLIntRange::clone: attempt to clone used ACL");
106
 
 
107
 
    return new ACLIntRange (*this);
108
 
}
109
 
 
110
 
ACLIntRange::~ACLIntRange ()
111
 
{}
112
 
 
113
 
wordlist *
114
 
ACLIntRange::dump ()
115
 
{
116
 
    wordlist *W = NULL;
117
 
    char buf[32];
118
 
    ListIterator<RangeType> iter(ranges);
119
 
 
120
 
    while (!iter.end()) {
121
 
        const RangeType & element = iter.next();
122
 
 
123
 
        if (element.size() == 1)
124
 
            snprintf(buf, sizeof(buf), "%d", element.start);
125
 
        else
126
 
            snprintf(buf, sizeof(buf), "%d-%d", element.start, element.end-1);
127
 
 
128
 
        wordlistAdd(&W, buf);
129
 
    }
130
 
 
131
 
    return W;
132
 
}
133