]> git.ipfire.org Git - thirdparty/squid.git/blobdiff - src/acl/NoteData.cc
Source Format Enforcement (#1234)
[thirdparty/squid.git] / src / acl / NoteData.cc
index f81de96b8070d04e79afe671fa0a0aaf48c63c0d..c8f91f17199f845cd403219a32f30590677351b6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1996-2015 The Squid Software Foundation and contributors
+ * Copyright (C) 1996-2023 The Squid Software Foundation and contributors
  *
  * Squid software is distributed under GPLv2+ license and includes
  * contributions from numerous individuals and organizations.
@@ -12,9 +12,8 @@
 #include "acl/NoteData.h"
 #include "acl/StringData.h"
 #include "ConfigParser.h"
-#include "Debug.h"
-#include "HttpRequest.h"
-#include "Notes.h"
+#include "debug/Stream.h"
+#include "sbuf/StringConvert.h"
 #include "wordlist.h"
 
 ACLNoteData::ACLNoteData() : values(new ACLStringData)
@@ -26,74 +25,35 @@ ACLNoteData::~ACLNoteData()
 }
 
 bool
-ACLNoteData::matchNotes(NotePairs *note)
+ACLNoteData::match(NotePairs::Entry *entry)
 {
-    if (note == NULL)
-        return false;
+    if (entry->name().cmp(name) != 0)
+        return false; // name mismatch
 
-    debugs(28, 3, "Checking " << name);
-
-    if (values->empty())
-        return (note->findFirst(name.termedBuf()) != NULL);
-
-    for (std::vector<NotePairs::Entry *>::iterator i = note->entries.begin(); i!= note->entries.end(); ++i) {
-        if ((*i)->name.cmp(name.termedBuf()) == 0) {
-            if (values->match((*i)->value.termedBuf()))
-                return true;
-        }
-    }
-    return false;
-}
-
-bool
-ACLNoteData::match(HttpRequest *request)
-{
-    if (request->notes != NULL && matchNotes(request->notes.getRaw()))
-        return true;
-#if USE_ADAPTATION
-    const Adaptation::History::Pointer ah = request->adaptLogHistory();
-    if (ah != NULL && ah->metaHeaders != NULL && matchNotes(ah->metaHeaders.getRaw()))
-        return true;
-#endif
-    return false;
+    // a name-only note ACL matches any value; others require a values match
+    return values->empty() ||
+           values->match(entry->value());
 }
 
 SBufList
 ACLNoteData::dump() const
 {
     SBufList sl;
-    sl.push_back(SBuf(name));
-#if __cplusplus >= 201103L
+    sl.push_back(name);
     sl.splice(sl.end(), values->dump());
-#else
-    // temp is needed until c++11 move constructor
-    SBufList temp = values->dump();
-    sl.splice(sl.end(), temp);
-#endif
     return sl;
 }
 
 void
 ACLNoteData::parse()
 {
-    char* t = ConfigParser::strtokFile();
-    assert (t != NULL);
-    name = t;
+    ConfigParser::SetAclKey(name, "annotation name");
     values->parse();
 }
 
 bool
 ACLNoteData::empty() const
 {
-    return name.size() == 0;
-}
-
-ACLData<HttpRequest *> *
-ACLNoteData::clone() const
-{
-    ACLNoteData * result = new ACLNoteData;
-    result->values = values->clone();
-    result->name = name;
-    return result;
+    return name.isEmpty();
 }