]> git.ipfire.org Git - thirdparty/squid.git/blobdiff - src/acl/NoteData.cc
Source Format Enforcement (#1234)
[thirdparty/squid.git] / src / acl / NoteData.cc
index 3195971ee31f4afce8f045e00759609466852a39..c8f91f17199f845cd403219a32f30590677351b6 100644 (file)
@@ -1,13 +1,19 @@
+/*
+ * 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.
+ * Please see the COPYING and CONTRIBUTORS files for details.
+ */
+
 #include "squid.h"
 #include "acl/Acl.h"
 #include "acl/Checklist.h"
 #include "acl/NoteData.h"
 #include "acl/StringData.h"
-#include "cache_cf.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)
@@ -19,69 +25,35 @@ ACLNoteData::~ACLNoteData()
 }
 
 bool
-ACLNoteData::matchNotes(NotePairs *note)
+ACLNoteData::match(NotePairs::Entry *entry)
 {
-    if (note == NULL)
-        return false;
-
-    debugs(28, 3, "Checking " << name);
-
-    if (values->empty())
-        return (note->findFirst(name.termedBuf()) != NULL);
+    if (entry->name().cmp(name) != 0)
+        return false; // name mismatch
 
-    for (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;
+    // a name-only note ACL matches any value; others require a values match
+    return values->empty() ||
+           values->match(entry->value());
 }
 
-bool
-ACLNoteData::match(HttpRequest *request)
+SBufList
+ACLNoteData::dump() const
 {
-    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;
-}
-
-wordlist *
-ACLNoteData::dump()
-{
-    wordlist *W = NULL;
-    wordlistAdd(&W, name.termedBuf());
-    wordlist * dumpR = values->dump();
-    wordlistAddWl(&W, dumpR);
-    wordlistDestroy(&dumpR);
-    return W;
+    SBufList sl;
+    sl.push_back(name);
+    sl.splice(sl.end(), values->dump());
+    return sl;
 }
 
 void
 ACLNoteData::parse()
 {
-    char* t = strtokFile();
-    assert (t != NULL);
-    name = t;
+    ConfigParser::SetAclKey(name, "annotation name");
     values->parse();
 }
 
 bool
 ACLNoteData::empty() const
 {
-    return name.undefined();
+    return name.isEmpty();
 }
 
-ACLData<HttpRequest *> *
-ACLNoteData::clone() const
-{
-    ACLNoteData * result = new ACLNoteData;
-    result->values = values->clone();
-    result->name = name;
-    return result;
-}