You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by sm...@apache.org on 2021/06/23 19:48:56 UTC

[directory-fortress-core] branch FC-238 updated: Relax control no longer works with 2.0 ldap api

This is an automated email from the ASF dual-hosted git repository.

smckinney pushed a commit to branch FC-238
in repository https://gitbox.apache.org/repos/asf/directory-fortress-core.git


The following commit(s) were added to refs/heads/FC-238 by this push:
     new faf737e  Relax control no longer works with 2.0 ldap api
faf737e is described below

commit faf737e60f64f65c1bcaf8f90e9e4a2ebe36d1e6
Author: Shawn McKinney <sm...@symas.com>
AuthorDate: Wed Jun 23 14:48:51 2021 -0500

    Relax control no longer works with 2.0 ldap api
---
 .../fortress/core/ldap/LdapDataProvider.java       |  4 +-
 .../fortress/core/ldap/RelaxControlDecorator.java  | 34 +++++++++++
 .../fortress/core/ldap/RelaxControlFactory.java    | 70 ++++++++++++++++++++++
 .../directory/fortress/core/PolicyMgrConsole.java  | 25 ++++++++
 .../fortress/core/ProcessMenuCommand.java          | 47 +--------------
 5 files changed, 133 insertions(+), 47 deletions(-)

diff --git a/src/main/java/org/apache/directory/fortress/core/ldap/LdapDataProvider.java b/src/main/java/org/apache/directory/fortress/core/ldap/LdapDataProvider.java
index d48517b..4ce8d9f 100644
--- a/src/main/java/org/apache/directory/fortress/core/ldap/LdapDataProvider.java
+++ b/src/main/java/org/apache/directory/fortress/core/ldap/LdapDataProvider.java
@@ -275,7 +275,7 @@ public abstract class LdapDataProvider
         // TODO: FIXME #2
         if ( setRelaxControl )
         {
-            //addRequest.addControl( new RelaxControlImpl() );
+            addRequest.addControl( new RelaxControlImpl() );
         }
         AddResponse response = connection.add( addRequest );
         ResultCodeEnum.processResponse(response);
@@ -353,7 +353,7 @@ public abstract class LdapDataProvider
         // TODO: FIXME #2
         if ( setRelaxControl )
         {
-            //modRequest.addControl( new RelaxControlImpl() );
+            modRequest.addControl( new RelaxControlImpl() );
         }
         modRequest.setName( new Dn( dn ) );
         ModifyResponse response = connection.modify( modRequest );
diff --git a/src/main/java/org/apache/directory/fortress/core/ldap/RelaxControlDecorator.java b/src/main/java/org/apache/directory/fortress/core/ldap/RelaxControlDecorator.java
new file mode 100644
index 0000000..70ef78f
--- /dev/null
+++ b/src/main/java/org/apache/directory/fortress/core/ldap/RelaxControlDecorator.java
@@ -0,0 +1,34 @@
+package org.apache.directory.fortress.core.ldap;
+
+
+import org.apache.directory.api.asn1.Asn1Object;
+import org.apache.directory.api.asn1.DecoderException;
+import org.apache.directory.api.asn1.EncoderException;
+import org.apache.directory.api.ldap.codec.api.ControlDecorator;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+
+import java.nio.ByteBuffer;
+
+
+public class RelaxControlDecorator extends ControlDecorator<RelaxControl> implements RelaxControl
+{
+    public RelaxControlDecorator(LdapApiService codec, RelaxControl control)
+    {
+        super(codec, control);
+    }
+
+    public int computeLength()
+    {
+        return 0;
+    }
+
+    public Asn1Object decode(byte[] controlBytes) throws DecoderException
+    {
+        return this;
+    }
+
+    public ByteBuffer encode(ByteBuffer buffer) throws EncoderException
+    {
+        return buffer;
+    }
+}
diff --git a/src/main/java/org/apache/directory/fortress/core/ldap/RelaxControlFactory.java b/src/main/java/org/apache/directory/fortress/core/ldap/RelaxControlFactory.java
new file mode 100644
index 0000000..a241393
--- /dev/null
+++ b/src/main/java/org/apache/directory/fortress/core/ldap/RelaxControlFactory.java
@@ -0,0 +1,70 @@
+package org.apache.directory.fortress.core.ldap;
+
+
+import org.apache.directory.api.asn1.DecoderException;
+import org.apache.directory.api.asn1.util.Asn1Buffer;
+import org.apache.directory.api.ldap.codec.api.CodecControl;
+import org.apache.directory.api.ldap.codec.api.ControlContainer;
+import org.apache.directory.api.ldap.codec.api.ControlFactory;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.model.message.Control;
+
+
+/**
+ * A codec {@link ControlFactory} implementation for {@link RelaxControl} controls.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class RelaxControlFactory implements ControlFactory<RelaxControl>
+{
+    /** The LDAP codec responsible for encoding and decoding Cascade Controls */
+    private LdapApiService codec;
+
+
+    /**
+     * Creates a new instance of TransactionSpecificationFactory.
+     *
+     * @param codec The LDAP codec
+     */
+    public RelaxControlFactory( LdapApiService codec )
+    {
+        this.codec = codec;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String getOid()
+    {
+        return RelaxControl.OID;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public CodecControl<RelaxControl> newControl()
+    {
+        return new RelaxControlDecorator( codec, new RelaxControlImpl() );
+    }
+
+
+    public void encodeValue(Asn1Buffer var1, Control var2)
+    {
+
+    }
+
+    public void decodeValue(ControlContainer var1, Control var2, byte[] var3) throws DecoderException
+    {
+
+    }
+
+    public void decodeValue(Control var1, byte[] var2) throws DecoderException
+    {
+
+    }
+
+}
diff --git a/src/test/java/org/apache/directory/fortress/core/PolicyMgrConsole.java b/src/test/java/org/apache/directory/fortress/core/PolicyMgrConsole.java
index 48786a0..f31f8f7 100755
--- a/src/test/java/org/apache/directory/fortress/core/PolicyMgrConsole.java
+++ b/src/test/java/org/apache/directory/fortress/core/PolicyMgrConsole.java
@@ -22,6 +22,8 @@ package org.apache.directory.fortress.core;
 
 import org.apache.directory.fortress.core.model.PwPolicy;
 import org.apache.directory.fortress.core.impl.TestUtils;
+import org.apache.directory.fortress.core.model.Session;
+import org.apache.directory.fortress.core.model.User;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -163,4 +165,27 @@ class PolicyMgrConsole
         }
         ReaderUtil.readChar();
     }
+
+
+    void assignPolicy()
+    {
+        try
+        {
+            ReaderUtil.clearScreen();
+            System.out.println("Enter userId");
+            String userId = ReaderUtil.readLn();
+            System.out.println("Enter password policy name or NULL to skip");
+            String plcyNm = ReaderUtil.readLn();
+            pm.updateUserPolicy( userId, plcyNm );
+            System.out.println("userId [" + userId + "]");
+            System.out.println("policy name [" + plcyNm + "]");
+            System.out.println("has been updated");
+            System.out.println("ENTER to continue");
+        }
+        catch (SecurityException e)
+        {
+            LOG.error("assignPolicy caught SecurityException rc=" + e.getErrorId() + ", msg=" + e.getMessage(), e);
+        }
+        ReaderUtil.readChar();
+    }
 }
diff --git a/src/test/java/org/apache/directory/fortress/core/ProcessMenuCommand.java b/src/test/java/org/apache/directory/fortress/core/ProcessMenuCommand.java
index 8a6c378..bb85eaf 100755
--- a/src/test/java/org/apache/directory/fortress/core/ProcessMenuCommand.java
+++ b/src/test/java/org/apache/directory/fortress/core/ProcessMenuCommand.java
@@ -902,51 +902,7 @@ class ProcessMenuCommand
                         policyConsole.add();
                         break;
                     case '2':
-                        //policyConsole.updatePolicy();
-                        break;
-                    case '3':
-                        //policyConsole.deletePolicy();
-                        break;
-                    case '4':
-                        //policyConsole.readPolicy();
-                        break;
-                    case '5':
-                        //policyConsole.findPolicies();
-                        break;
-                    case '6':
-                        //policyConsole.updateUserPolicy();
-                        break;
-                    case '7':
-                        //policyConsole.deleteUserPasswordPolicy();
-                        break;
-                    case '8':
-                        //policyConsole.readOperationalAttributes();
-                        break;
-                    case '9':
-                        //policyConsole.resetUserPassword();
-                        break;
-                    case '0':
-                        //adminConsole.unlockAccount();
-                        break;
-                    case 'a':
-                    case 'A':
-                        //policyConsole.lockUserAccount();
-                        break;
-                    case 'b':
-                    case 'B':
-                        //policyConsole.clearResetFlag();
-                        break;
-                    case 'c':
-                    case 'C':
-                        //policyConsole.checkPasswordPolicy();
-                        break;
-                    case 'd':
-                    case 'D':
-                        //policyConsole.getLockedUsers();
-                        break;
-                    case 'e':
-                    case 'E':
-                        //policyConsole.isLockedUser();
+                        policyConsole.assignPolicy();
                         break;
                     case 'q':
                     case 'Q':
@@ -972,6 +928,7 @@ class ProcessMenuCommand
         ReaderUtil.clearScreen();
         System.out.println( "CHOOSE PASSWORD POLICY FUNCTION:" );
         System.out.println( "1. Create Password Policy" );
+        System.out.println( "2. Assign Password Policy to User" );
         System.out.println( "Enter q or Q to return to previous menu" );
     }