From ace0dc341cf3a206345702029165e44fb6e8efd9 Mon Sep 17 00:00:00 2001
From: Valery Kharseko <vharseko@3a-systems.ru>
Date: Tue, 04 Aug 2026 08:30:04 +0000
Subject: [PATCH] Fix CodeQL note-severity alerts: calls to the deprecated Entry compatibility methods (#826)

---
 opendj-server-legacy/src/main/java/org/opends/server/protocols/internal/InternalClientConnection.java                |    3 +
 opendj-server-legacy/src/main/java/org/opends/server/crypto/CryptoManagerImpl.java                                   |    4 +-
 opendj-server-legacy/src/main/java/org/opends/server/replication/plugin/FractionalLDIFImportPlugin.java              |    4 +
 opendj-server-legacy/src/main/java/org/opends/server/authorization/dseecompat/AciEffectiveRights.java                |    9 ++--
 opendj-server-legacy/src/main/java/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java   |    7 ++-
 opendj-server-legacy/src/main/java/org/opends/server/backends/ChangelogBackend.java                                  |    2 
 opendj-server-legacy/src/main/java/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java |    9 ++--
 opendj-server-legacy/src/main/java/org/opends/server/replication/plugin/EntryHistorical.java                         |    2 
 opendj-server-legacy/src/main/java/org/opends/server/authorization/dseecompat/TargAttrFilters.java                   |    3 -
 opendj-server-legacy/src/main/java/org/forgerock/opendj/adapter/server3x/Converters.java                             |    7 ++-
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryContainer.java                          |    2 
 opendj-server-legacy/src/main/java/org/opends/server/types/Entry.java                                                |   19 ++++++++-
 opendj-server-legacy/src/main/java/org/opends/server/authorization/dseecompat/AciHandler.java                        |    4 +-
 13 files changed, 48 insertions(+), 27 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/forgerock/opendj/adapter/server3x/Converters.java b/opendj-server-legacy/src/main/java/org/forgerock/opendj/adapter/server3x/Converters.java
index a1c58aa..57a7052 100644
--- a/opendj-server-legacy/src/main/java/org/forgerock/opendj/adapter/server3x/Converters.java
+++ b/opendj-server-legacy/src/main/java/org/forgerock/opendj/adapter/server3x/Converters.java
@@ -12,6 +12,7 @@
  * information: "Portions Copyright [year] [name of copyright owner]".
  *
  * Copyright 2013-2016 ForgeRock AS.
+ * Portions Copyright 2026 3A Systems, LLC.
  */
 package org.forgerock.opendj.adapter.server3x;
 
@@ -94,7 +95,7 @@
             org.opends.server.types.Entry entry =
                 new org.opends.server.types.Entry(sdkEntry.getName(), null, null, null);
             Schema schema = DirectoryServer.getInstance().getServerContext().getSchema();
-            List<ByteString> duplicateValues = new ArrayList<>();
+            Collection<ByteString> duplicateValues = new ArrayList<>();
             for (org.opends.server.types.Attribute attribute : toAttributes(sdkEntry.getAllAttributes())) {
                 if (attribute.getAttributeDescription().getAttributeType().isObjectClass()) {
                     for (ByteString attrName : attribute) {
@@ -128,7 +129,7 @@
                 new org.opends.server.types.Entry(value.getName(), null, null, null);
             org.opends.server.types.SearchResultEntry searchResultEntry =
                 new org.opends.server.types.SearchResultEntry(entry, to(value.getControls()));
-            List<ByteString> duplicateValues = new ArrayList<>();
+            Collection<ByteString> duplicateValues = new ArrayList<>();
             for (org.opends.server.types.Attribute attribute : toAttributes(value.getAllAttributes())) {
                 searchResultEntry.addAttribute(attribute, duplicateValues);
             }
@@ -672,7 +673,7 @@
 
             @Override
             public int getAttributeCount() {
-                return srvResultEntry.getAttributes().size();
+                return Iterables.size(srvResultEntry.getAllAttributes());
             }
 
             @Override
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/authorization/dseecompat/AciEffectiveRights.java b/opendj-server-legacy/src/main/java/org/opends/server/authorization/dseecompat/AciEffectiveRights.java
index 679b8df..1bbde2a 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/authorization/dseecompat/AciEffectiveRights.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/authorization/dseecompat/AciEffectiveRights.java
@@ -13,6 +13,7 @@
  *
  * Copyright 2008 Sun Microsystems, Inc.
  * Portions Copyright 2011-2016 ForgeRock AS.
+ * Portions Copyright 2026 3A Systems, LLC.
  */
 package org.opends.server.authorization.dseecompat;
 
@@ -382,7 +383,7 @@
         //Only try to add the attribute type if it already hasn't been added.
         if (!retEntry.hasAttribute(attr.getAttributeDescription().getAttributeType()))
         {
-          retEntry.addAttribute(attr,null);
+          retEntry.addAttribute(attr);
         }
       }
     }
@@ -508,7 +509,7 @@
     addEntryLevelRightsInfo(container, mask, retEntry, "proxy");
     if(hasAttrMask(mask, ACL_RIGHTS)) {
       Attribute attr = Attributes.create(aclRightsEntryLevelStr, evalInfo.toString());
-      retEntry.addAttribute(attr,null);
+      retEntry.addAttribute(attr);
     }
   }
 
@@ -610,7 +611,7 @@
       // not but it is possible.
       if (!retEntry.hasAttribute(attr.getAttributeDescription().getAttributeType()))
       {
-        retEntry.addAttribute(attr,null);
+        retEntry.addAttribute(attr);
       }
     }
   }
@@ -633,7 +634,7 @@
      if(hasAttrMask(mask,ACL_RIGHTS_INFO)) {
       String typeStr = aclRightsInfoEntryLogsStr + ";" + rightStr;
       Attribute attr = Attributes.create(typeStr, container.getEvalSummary());
-       retEntry.addAttribute(attr,null);
+       retEntry.addAttribute(attr);
      }
    }
 
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/authorization/dseecompat/AciHandler.java b/opendj-server-legacy/src/main/java/org/opends/server/authorization/dseecompat/AciHandler.java
index e3d6a11..010928b 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/authorization/dseecompat/AciHandler.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/authorization/dseecompat/AciHandler.java
@@ -14,7 +14,7 @@
  * Copyright 2008-2010 Sun Microsystems, Inc.
  * Portions Copyright 2011-2016 ForgeRock AS.
  * Portions Copyright 2013 Manuel Gaupp
- * Portions Copyright 2024 3A Systems, LLC.
+ * Portions Copyright 2024-2026 3A Systems, LLC.
  * Portions Copyright 2026 3A Systems, LLC.
  */
 package org.opends.server.authorization.dseecompat;
@@ -413,7 +413,7 @@
     builder.addAllStrings(reference.getReferralURLs());
 
     final Entry e = new Entry(dn, null, null, null);
-    e.addAttribute(builder.toAttribute(), null);
+    e.addAttribute(builder.toAttribute());
     final SearchResultEntry se = new SearchResultEntry(e);
     final AciContainer container =
         new AciLDAPOperationContainer(operation, ACI_READ, se);
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/authorization/dseecompat/TargAttrFilters.java b/opendj-server-legacy/src/main/java/org/opends/server/authorization/dseecompat/TargAttrFilters.java
index 367616c..18c4a5b 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/authorization/dseecompat/TargAttrFilters.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/authorization/dseecompat/TargAttrFilters.java
@@ -20,7 +20,6 @@
 import static org.opends.messages.AccessControlMessages.*;
 import static org.opends.server.authorization.dseecompat.Aci.*;
 
-import java.util.ArrayList;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -408,7 +407,7 @@
                                               SearchFilter filter) {
         Attribute attr = Attributes.create(attrType, value);
         Entry e = new Entry(DN.rootDN(), null, null, null);
-        e.addAttribute(attr, new ArrayList<ByteString>());
+        e.addAttribute(attr);
         try {
             return filter.matchesEntry(e);
         } catch(DirectoryException ex) {
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/ChangelogBackend.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/ChangelogBackend.java
index ec10c37..03089d4 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/ChangelogBackend.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/ChangelogBackend.java
@@ -1534,7 +1534,7 @@
 
   private static void addAttribute(final Entry e, final String attrType, final String attrValue)
   {
-    e.addAttribute(Attributes.create(attrType, attrValue), null);
+    e.addAttribute(Attributes.create(attrType, attrValue));
   }
 
   private static void addAttributeByType(String attrName, String attrValue,
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryContainer.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryContainer.java
index 04827b4..94d5f2b 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryContainer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryContainer.java
@@ -1053,7 +1053,7 @@
   {
     Attribute attr = Attributes.create(ATTR_DEBUG_SEARCH_INDEX, debugBuffer.toString());
     Entry entry = new Entry(DN.valueOf("cn=debugsearch"), null, null, null);
-    entry.addAttribute(attr, new ArrayList<ByteString>());
+    entry.addAttribute(attr);
     return entry;
   }
 
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/crypto/CryptoManagerImpl.java b/opendj-server-legacy/src/main/java/org/opends/server/crypto/CryptoManagerImpl.java
index c2f0cb3..9d87dfe 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/crypto/CryptoManagerImpl.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/crypto/CryptoManagerImpl.java
@@ -598,14 +598,14 @@
 
         // Add the key ID attribute.
         final Attribute keyIDAttr = Attributes.create(attrKeyID, distinguishedValue);
-        entry.addAttribute(keyIDAttr, new ArrayList<ByteString>(0));
+        entry.addAttribute(keyIDAttr);
 
         // Add the public key certificate attribute.
         AttributeBuilder builder = new AttributeBuilder(attrPublicKeyCertificate);
         builder.setOption("binary");
         builder.add(ByteString.wrap(instanceKeyCertificate));
         final Attribute certificateAttr = builder.toAttribute();
-        entry.addAttribute(certificateAttr, new ArrayList<ByteString>(0));
+        entry.addAttribute(certificateAttr);
 
         AddOperation addOperation = icc.processAdd(entry);
         if (ResultCode.SUCCESS != addOperation.getResultCode()) {
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/protocols/internal/InternalClientConnection.java b/opendj-server-legacy/src/main/java/org/opends/server/protocols/internal/InternalClientConnection.java
index 9c49b68..9511d4e 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/protocols/internal/InternalClientConnection.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/protocols/internal/InternalClientConnection.java
@@ -13,6 +13,7 @@
  *
  * Copyright 2006-2009 Sun Microsystems, Inc.
  * Portions Copyright 2011-2016 ForgeRock AS.
+ * Portions Copyright 2026 3A Systems, LLC.
  */
 package org.opends.server.protocols.internal;
 
@@ -807,7 +808,7 @@
     Entry e = newEntry(addRecord.getDN());
     Schema schema = DirectoryServer.getInstance().getServerContext().getSchema();
 
-    ArrayList<ByteString> duplicateValues = new ArrayList<>();
+    Collection<ByteString> duplicateValues = new ArrayList<>();
     for (Attribute a : addRecord.getAttributes())
     {
       if (a.getAttributeDescription().getAttributeType().isObjectClass())
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/replication/plugin/EntryHistorical.java b/opendj-server-legacy/src/main/java/org/opends/server/replication/plugin/EntryHistorical.java
index 7e11134..40f3b5b 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/replication/plugin/EntryHistorical.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/replication/plugin/EntryHistorical.java
@@ -234,7 +234,7 @@
     mods.add(new Modification(ModificationType.REPLACE, attr));
     // - update the already modified entry
     modifiedEntry.removeAttribute(attr.getAttributeDescription().getAttributeType());
-    modifiedEntry.addAttribute(attr, null);
+    modifiedEntry.addAttribute(attr);
   }
 
   /**
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/replication/plugin/FractionalLDIFImportPlugin.java b/opendj-server-legacy/src/main/java/org/opends/server/replication/plugin/FractionalLDIFImportPlugin.java
index 2799a87..c9bac27 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/replication/plugin/FractionalLDIFImportPlugin.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/replication/plugin/FractionalLDIFImportPlugin.java
@@ -13,6 +13,7 @@
  *
  * Copyright 2009 Sun Microsystems, Inc.
  * Portions Copyright 2011-2016 ForgeRock AS.
+ * Portions Copyright 2026 3A Systems, LLC.
  */
 package org.opends.server.replication.plugin;
 
@@ -20,6 +21,7 @@
 import static org.opends.server.replication.plugin.LDAPReplicationDomain.*;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.List;
@@ -452,7 +454,7 @@
       // Now flush attribute values into entry
       if (somethingToFlush)
       {
-        List<ByteString> duplicateValues = new ArrayList<>();
+        Collection<ByteString> duplicateValues = new ArrayList<>();
         entry.addAttribute(attrBuilder.toAttribute(), duplicateValues);
       }
     }
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/types/Entry.java b/opendj-server-legacy/src/main/java/org/opends/server/types/Entry.java
index 9bab17e..5fc7a76 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/types/Entry.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/types/Entry.java
@@ -1031,6 +1031,21 @@
 
 
   /**
+   * Ensures that this entry contains the provided attribute and its
+   * values, ignoring any duplicate value.
+   *
+   * @param attribute
+   *          The attribute to add or merge with this entry.
+   * @see #addAttribute(Attribute, Collection)
+   */
+  public void addAttribute(Attribute attribute)
+  {
+    setAttribute(attribute, null, false /* merge */);
+  }
+
+
+
+  /**
    * Puts the provided attribute into this entry. If an attribute with
    * the provided type and options already exists, then it will be
    * replaced. If the provided attribute is empty then any existing
@@ -1438,7 +1453,7 @@
     switch (mod.getModificationType().asEnum())
     {
     case ADD:
-      List<ByteString> duplicateValues = new LinkedList<>();
+      Collection<ByteString> duplicateValues = new LinkedList<>();
       addAttribute(a, duplicateValues);
       if (!duplicateValues.isEmpty() && !relaxConstraints)
       {
@@ -1448,7 +1463,7 @@
       break;
 
     case DELETE:
-      List<ByteString> missingValues = new LinkedList<>();
+      Collection<ByteString> missingValues = new LinkedList<>();
       removeAttribute(a, missingValues);
       if (!missingValues.isEmpty() && !relaxConstraints)
       {
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java b/opendj-server-legacy/src/main/java/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java
index 499214b..c9867cb 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java
@@ -18,6 +18,7 @@
  */
 package org.opends.server.workflowelement.localbackend;
 
+import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.ListIterator;
@@ -629,7 +630,7 @@
               ERR_MODDN_OLD_RDN_ATTR_IS_NO_USER_MOD.get(entryDN, a.getAttributeDescription()));
         }
 
-        List<ByteString> missingValues = new LinkedList<>();
+        Collection<ByteString> missingValues = new LinkedList<>();
         newEntry.removeAttribute(a, missingValues);
 
         if (missingValues.isEmpty())
@@ -648,7 +649,7 @@
           ava.getAttributeName(),
           ava.getAttributeValue());
 
-      List<ByteString> duplicateValues = new LinkedList<>();
+      Collection<ByteString> duplicateValues = new LinkedList<>();
       newEntry.addAttribute(a, duplicateValues);
 
       if (duplicateValues.isEmpty())
@@ -723,12 +724,12 @@
       switch (m.getModificationType().asEnum())
       {
         case ADD:
-          List<ByteString> duplicateValues = new LinkedList<>();
+          Collection<ByteString> duplicateValues = new LinkedList<>();
           newEntry.addAttribute(a, duplicateValues);
           break;
 
         case DELETE:
-          List<ByteString> missingValues = new LinkedList<>();
+          Collection<ByteString> missingValues = new LinkedList<>();
           newEntry.removeAttribute(a, missingValues);
           break;
 
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java b/opendj-server-legacy/src/main/java/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java
index 4872b6a..8b8a931 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java
@@ -13,12 +13,13 @@
  *
  * Copyright 2008-2011 Sun Microsystems, Inc.
  * Portions Copyright 2011-2016 ForgeRock AS.
- * Portions Copyright 2024-2025 3A Systems,LLC.
+ * Portions Copyright 2024-2026 3A Systems,LLC.
  * Portions Copyright 2026 3A Systems, LLC.
  */
 package org.opends.server.workflowelement.localbackend;
 
 import java.math.BigInteger;
+import java.util.Collection;
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
@@ -1186,7 +1187,7 @@
 
     // Add the provided attribute or merge an existing attribute with
     // the values of the new attribute. If there are any duplicates, then fail.
-    List<ByteString> duplicateValues = new LinkedList<>();
+    Collection<ByteString> duplicateValues = new LinkedList<>();
     modifiedEntry.addAttribute(attr, duplicateValues);
     if (!duplicateValues.isEmpty() && !permissiveModify)
     {
@@ -1301,7 +1302,7 @@
     // Remove the specified attribute values or the entire attribute from the value.
     // If there are any specified values that were not present, then fail.
     // If the RDN attribute value would be removed, then fail.
-    List<ByteString> missingValues = new LinkedList<>();
+    Collection<ByteString> missingValues = new LinkedList<>();
     boolean attrExists = modifiedEntry.removeAttribute(attr, missingValues);
 
     AttributeDescription attrDesc = attr.getAttributeDescription();

--
Gitblit v1.10.0