]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/acl/SourceDomain.cc
2 * Copyright (C) 1996-2014 The Squid Software Foundation and contributors
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.
9 /* DEBUG: section 28 Access Control */
12 #include "acl/Checklist.h"
13 #include "acl/DomainData.h"
14 #include "acl/RegexData.h"
15 #include "acl/SourceDomain.h"
16 #include "fqdncache.h"
17 #include "HttpRequest.h"
19 SourceDomainLookup
SourceDomainLookup::instance_
;
22 SourceDomainLookup::Instance()
28 SourceDomainLookup::checkForAsync(ACLChecklist
*checklist
) const
30 fqdncache_nbgethostbyaddr(Filled(checklist
)->src_addr
, LookupDone
, checklist
);
34 SourceDomainLookup::LookupDone(const char *fqdn
, const DnsLookupDetails
&details
, void *data
)
36 ACLFilledChecklist
*checklist
= Filled((ACLChecklist
*)data
);
37 checklist
->markSourceDomainChecked();
38 checklist
->request
->recordLookup(details
);
39 checklist
->resumeNonBlockingCheck(SourceDomainLookup::Instance());
43 ACLSourceDomainStrategy::match (ACLData
<MatchType
> * &data
, ACLFilledChecklist
*checklist
, ACLFlags
&)
45 const char *fqdn
= NULL
;
46 fqdn
= fqdncache_gethostbyaddr(checklist
->src_addr
, FQDN_LOOKUP_IF_MISS
);
49 return data
->match(fqdn
);
50 } else if (!checklist
->sourceDomainChecked()) {
51 /* FIXME: Using AclMatchedName here is not OO correct. Should find a way to the current acl */
52 debugs(28, 3, "aclMatchAcl: Can't yet compare '" << AclMatchedName
<< "' ACL for '" << checklist
->src_addr
<< "'");
53 if (checklist
->goAsync(SourceDomainLookup::Instance()))
55 // else fall through to "none" match, hiding the lookup failure (XXX)
58 return data
->match("none");
61 ACLSourceDomainStrategy
*
62 ACLSourceDomainStrategy::Instance()
67 ACLSourceDomainStrategy
ACLSourceDomainStrategy::Instance_
;