SourceDomain.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/Checklist.h"
13 #include "acl/DomainData.h"
14 #include "acl/FilledChecklist.h"
15 #include "acl/RegexData.h"
16 #include "acl/SourceDomain.h"
17 #include "fqdncache.h"
18 #include "HttpRequest.h"
19 
20 static void LookupDone(const char *, const Dns::LookupDetails &, void *data);
21 
22 static void
24 {
25  fqdncache_nbgethostbyaddr(checklist.src_addr, LookupDone, &checklist);
26 }
27 
28 static void
29 LookupDone(const char *, const Dns::LookupDetails &details, void *data)
30 {
31  ACLFilledChecklist *checklist = Filled((ACLChecklist*)data);
32  checklist->markSourceDomainChecked();
33  if (checklist->request)
34  checklist->request->recordLookup(details);
35  else
36  debugs(28, 3, "no request to recordLookup()");
37 
38  checklist->resumeNonBlockingCheck();
39 }
40 
41 int
43 {
44  const auto checklist = Filled(ch);
45 
46  const char *fqdn = nullptr;
47  fqdn = fqdncache_gethostbyaddr(checklist->src_addr, FQDN_LOOKUP_IF_MISS);
48 
49  if (fqdn) {
50  return data->match(fqdn);
51  } else if (!checklist->sourceDomainChecked()) {
52  debugs(28, 3, "aclMatchAcl: Can't yet compare '" << name << "' ACL for '" << checklist->src_addr << "'");
53  if (checklist->goAsync(StartLookup, *this))
54  return -1;
55  // else fall through to "none" match, hiding the lookup failure (XXX)
56  }
57 
58  return data->match("none");
59 }
60 
#define FQDN_LOOKUP_IF_MISS
Definition: defines.h:34
Ip::Address src_addr
static void LookupDone(const char *, const Dns::LookupDetails &, void *data)
Definition: SourceDomain.cc:29
static void StartLookup(ACLFilledChecklist &checklist, const Acl::Node &)
Definition: SourceDomain.cc:23
const char * fqdncache_gethostbyaddr(const Ip::Address &addr, int flags)
Definition: fqdncache.cc:481
void recordLookup(const Dns::LookupDetails &detail)
Definition: HttpRequest.cc:580
ACLFilledChecklist * Filled(ACLChecklist *checklist)
convenience and safety wrapper for dynamic_cast<ACLFilledChecklist*>
HttpRequest::Pointer request
encapsulates DNS lookup results
Definition: LookupDetails.h:22
void fqdncache_nbgethostbyaddr(const Ip::Address &addr, FQDNH *handler, void *handlerData)
Definition: fqdncache.cc:414
int match(ACLChecklist *) override
Matches the actual data in checklist against this Acl::Node.
Definition: SourceDomain.cc:42
Definition: Node.h:25
#define debugs(SECTION, LEVEL, CONTENT)
Definition: Stream.h:192
void resumeNonBlockingCheck()
Definition: Checklist.cc:230
SBuf name
Definition: Node.h:81

 

Introduction

Documentation

Support

Miscellaneous