IntRange.cc
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2023 The Squid Software Foundation and contributors
3  *
4  * Squid software is distributed under GPLv2+ license and includes
5  * contributions from numerous individuals and organizations.
6  * Please see the COPYING and CONTRIBUTORS files for details.
7  */
8 
9 /* DEBUG: section 28 Access Control */
10 
11 #include "squid.h"
12 #include "acl/IntRange.h"
13 #include "cache_cf.h"
14 #include "ConfigParser.h"
15 #include "debug/Stream.h"
16 #include "fatal.h"
17 #include "Parsing.h"
18 
19 void
21 {
22  while (char *a = ConfigParser::strtokFile()) {
23  char *b = strchr(a, '-');
24  unsigned short port1, port2;
25 
26  if (b) {
27  *b = '\0';
28  ++b;
29  }
30 
31  port1 = xatos(a);
32 
33  if (b)
34  port2 = xatos(b);
35  else
36  port2 = port1;
37 
38  if (port2 >= port1) {
39  RangeType temp(port1, port2+1);
40  ranges.push_back(temp);
41  } else {
42  debugs(28, DBG_CRITICAL, "ERROR: ACLIntRange::parse: Invalid port value");
43  self_destruct();
44  }
45  }
46 }
47 
48 bool
50 {
51  return ranges.empty();
52 }
53 
54 bool
56 {
57  RangeType const toFind(i, i+1);
58  for (const auto &element : ranges) {
59  RangeType result = element.intersection(toFind);
60  if (result.size())
61  return true;
62  }
63 
64  return false;
65 }
66 
68 {}
69 
72 {
73  SBufList sl;
74  for (const auto &element : ranges) {
75  SBuf sb;
76 
77  if (element.size() == 1)
78  sb.Printf("%d", element.start);
79  else
80  sb.Printf("%d-%d", element.start, element.end-1);
81 
82  sl.push_back(sb);
83  }
84 
85  return sl;
86 }
87 
SBufList dump() const override
Definition: IntRange.cc:71
void push_back(char)
Append a single character. The character may be NUL (\0).
Definition: SBuf.cc:208
#define DBG_CRITICAL
Definition: Stream.h:37
static char * strtokFile()
Definition: ConfigParser.cc:65
std::list< SBuf > SBufList
Definition: forward.h:22
Definition: SBuf.h:93
unsigned short xatos(const char *token)
Definition: Parsing.cc:114
void parse() override
Definition: IntRange.cc:20
S size() const
Definition: Range.h:61
void self_destruct(void)
Definition: cache_cf.cc:276
bool empty() const override
Definition: IntRange.cc:49
Definition: Range.h:18
bool match(int) override
Definition: IntRange.cc:55
SBuf & Printf(const char *fmt,...) PRINTF_FORMAT_ARG2
Definition: SBuf.cc:214
std::list< RangeType > ranges
Definition: IntRange.h:31
~ACLIntRange() override
Definition: IntRange.cc:67
Range intersection(Range const &) const
Definition: Range.h:46
#define debugs(SECTION, LEVEL, CONTENT)
Definition: Stream.h:192

 

Introduction

Documentation

Support

Miscellaneous