From 4fdbf8502b7c36832ab0c8058305e8398e65fc89 Mon Sep 17 00:00:00 2001
From: abobrov <abobrov@localhost>
Date: Thu, 15 Feb 2007 11:54:48 +0000
Subject: [PATCH] [Issue 1014]  ldapsearch --noop option doesn't work

---
 opendj-sdk/opends/src/server/org/opends/server/tools/LDAPSearch.java |  301 +++++++++++++++++++++++++------------------------
 1 files changed, 152 insertions(+), 149 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPSearch.java b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPSearch.java
index cfde1b7..93f1536 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPSearch.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPSearch.java
@@ -164,165 +164,168 @@
                                     searchOptions.getSizeLimit(),
                                     searchOptions.getTimeLimit(),
                               false, filter, attributes);
-      try
+      if(!searchOptions.showOperations())
       {
-        boolean typesOnly = searchOptions.getTypesOnly();
-        LDAPMessage message = new LDAPMessage(nextMessageID.getAndIncrement(),
-                                              protocolOp,
-                                              searchOptions.getControls());
-        connection.getASN1Writer().writeElement(message.encode());
-
-        byte opType;
-        do
+        try
         {
-          int resultCode = 0;
-          String errorMessage = null;
-          ASN1Element element = connection.getASN1Reader().readElement();
-          LDAPMessage responseMessage =
-               LDAPMessage.decode(ASN1Sequence.decodeAsSequence(element));
-          responseControls = responseMessage.getControls();
+          boolean typesOnly = searchOptions.getTypesOnly();
+          LDAPMessage message = new LDAPMessage(nextMessageID.getAndIncrement(),
+                                                protocolOp,
+                                                searchOptions.getControls());
+          connection.getASN1Writer().writeElement(message.encode());
 
-
-          opType = responseMessage.getProtocolOpType();
-          switch(opType)
+          byte opType;
+          do
           {
-            case OP_TYPE_SEARCH_RESULT_ENTRY:
-              for (LDAPControl c : responseControls)
-              {
-                if (c.getOID().equals(OID_ENTRY_CHANGE_NOTIFICATION))
-                {
-                  try
-                  {
-                    EntryChangeNotificationControl ecn =
-                         EntryChangeNotificationControl.decodeControl(
-                              c.getControl());
-                    int msgID = MSGID_LDAPSEARCH_PSEARCH_CHANGE_TYPE;
-                    out.println(getMessage(msgID,
-                                           ecn.getChangeType().toString()));
-                    DN previousDN = ecn.getPreviousDN();
-                    if (previousDN != null)
-                    {
-                      msgID = MSGID_LDAPSEARCH_PSEARCH_PREVIOUS_DN;
-                      out.println(getMessage(msgID, previousDN.toString()));
-                    }
-                  } catch (Exception e) {}
-                }
-                else if (c.getOID().equals(OID_ACCOUNT_USABLE_CONTROL))
-                {
-                  try
-                  {
-                    AccountUsableResponseControl acrc =
-                         AccountUsableResponseControl.decodeControl(
-                              c.getControl());
-                    int msgID = MSGID_LDAPSEARCH_ACCTUSABLE_HEADER;
-                    out.println(getMessage(msgID));
-                    if (acrc.isUsable())
-                    {
-                      msgID = MSGID_LDAPSEARCH_ACCTUSABLE_IS_USABLE;
-                      out.println(getMessage(msgID));
-                      if (acrc.getSecondsBeforeExpiration() > 0)
-                      {
-                        int    timeToExp    = acrc.getSecondsBeforeExpiration();
-                        String timeToExpStr = secondsToTimeString(timeToExp);
-                        msgID =
-                             MSGID_LDAPSEARCH_ACCTUSABLE_TIME_UNTIL_EXPIRATION;
-                        out.println(getMessage(msgID, timeToExpStr));
-                      }
-                    }
-                    else
-                    {
-                      msgID = MSGID_LDAPSEARCH_ACCTUSABLE_NOT_USABLE;
-                      out.println(getMessage(msgID));
-                      if (acrc.isInactive())
-                      {
-                        msgID = MSGID_LDAPSEARCH_ACCTUSABLE_ACCT_INACTIVE;
-                        out.println(getMessage(msgID));
-                      }
-                      if (acrc.isReset())
-                      {
-                        msgID = MSGID_LDAPSEARCH_ACCTUSABLE_PW_RESET;
-                        out.println(getMessage(msgID));
-                      }
-                      if (acrc.isExpired())
-                      {
-                        msgID = MSGID_LDAPSEARCH_ACCTUSABLE_PW_EXPIRED;
-                        out.println(getMessage(msgID));
+            int resultCode = 0;
+            String errorMessage = null;
+            ASN1Element element = connection.getASN1Reader().readElement();
+            LDAPMessage responseMessage =
+                 LDAPMessage.decode(ASN1Sequence.decodeAsSequence(element));
+            responseControls = responseMessage.getControls();
 
-                        if (acrc.getRemainingGraceLogins() > 0)
-                        {
-                          msgID = MSGID_LDAPSEARCH_ACCTUSABLE_REMAINING_GRACE;
-                          out.println(getMessage(msgID,
-                                           acrc.getRemainingGraceLogins()));
-                        }
-                      }
-                      if (acrc.isLocked())
-                      {
-                        msgID = MSGID_LDAPSEARCH_ACCTUSABLE_LOCKED;
-                        out.println(getMessage(msgID));
-                        if (acrc.getSecondsBeforeUnlock() > 0)
-                        {
-                          int timeToUnlock = acrc.getSecondsBeforeUnlock();
-                          String timeToUnlockStr =
-                                      secondsToTimeString(timeToUnlock);
-                          msgID = MSGID_LDAPSEARCH_ACCTUSABLE_TIME_UNTIL_UNLOCK;
-                          out.println(getMessage(msgID, timeToUnlockStr));
-                        }
-                      }
-                    }
-                  } catch (Exception e) {}
-                }
-              }
 
-              SearchResultEntryProtocolOp searchEntryOp =
-                   responseMessage.getSearchResultEntryProtocolOp();
-              StringBuilder sb = new StringBuilder();
-              toLDIF(searchEntryOp, sb, wrapColumn, typesOnly);
-              out.print(sb.toString());
-              matchingEntries++;
-              break;
-
-            case OP_TYPE_SEARCH_RESULT_REFERENCE:
-              SearchResultReferenceProtocolOp searchRefOp =
-                   responseMessage.getSearchResultReferenceProtocolOp();
-              out.println(searchRefOp.toString());
-              break;
-
-            case OP_TYPE_SEARCH_RESULT_DONE:
-              SearchResultDoneProtocolOp searchOp =
-                   responseMessage.getSearchResultDoneProtocolOp();
-              resultCode = searchOp.getResultCode();
-              errorMessage = searchOp.getErrorMessage();
-
-              break;
-            default:
-              // FIXME - throw exception?
-              int msgID = MSGID_SEARCH_OPERATION_INVALID_PROTOCOL;
-              String msg = getMessage(msgID, opType);
-              err.println(wrapText(msg, MAX_LINE_WIDTH));
-              break;
-          }
-
-          if(resultCode != SUCCESS && resultCode != REFERRAL)
-          {
-            int msgID = MSGID_OPERATION_FAILED;
-            if(errorMessage == null)
+            opType = responseMessage.getProtocolOpType();
+            switch(opType)
             {
-              errorMessage = "Result Code:" + resultCode;
+              case OP_TYPE_SEARCH_RESULT_ENTRY:
+                for (LDAPControl c : responseControls)
+                {
+                  if (c.getOID().equals(OID_ENTRY_CHANGE_NOTIFICATION))
+                  {
+                    try
+                    {
+                      EntryChangeNotificationControl ecn =
+                           EntryChangeNotificationControl.decodeControl(
+                                c.getControl());
+                      int msgID = MSGID_LDAPSEARCH_PSEARCH_CHANGE_TYPE;
+                      out.println(getMessage(msgID,
+                                             ecn.getChangeType().toString()));
+                      DN previousDN = ecn.getPreviousDN();
+                      if (previousDN != null)
+                      {
+                        msgID = MSGID_LDAPSEARCH_PSEARCH_PREVIOUS_DN;
+                        out.println(getMessage(msgID, previousDN.toString()));
+                      }
+                    } catch (Exception e) {}
+                  }
+                  else if (c.getOID().equals(OID_ACCOUNT_USABLE_CONTROL))
+                  {
+                    try
+                    {
+                      AccountUsableResponseControl acrc =
+                           AccountUsableResponseControl.decodeControl(
+                                c.getControl());
+                      int msgID = MSGID_LDAPSEARCH_ACCTUSABLE_HEADER;
+                      out.println(getMessage(msgID));
+                      if (acrc.isUsable())
+                      {
+                        msgID = MSGID_LDAPSEARCH_ACCTUSABLE_IS_USABLE;
+                        out.println(getMessage(msgID));
+                        if (acrc.getSecondsBeforeExpiration() > 0)
+                        {
+                          int    timeToExp    = acrc.getSecondsBeforeExpiration();
+                          String timeToExpStr = secondsToTimeString(timeToExp);
+                          msgID =
+                               MSGID_LDAPSEARCH_ACCTUSABLE_TIME_UNTIL_EXPIRATION;
+                          out.println(getMessage(msgID, timeToExpStr));
+                        }
+                      }
+                      else
+                      {
+                        msgID = MSGID_LDAPSEARCH_ACCTUSABLE_NOT_USABLE;
+                        out.println(getMessage(msgID));
+                        if (acrc.isInactive())
+                        {
+                          msgID = MSGID_LDAPSEARCH_ACCTUSABLE_ACCT_INACTIVE;
+                          out.println(getMessage(msgID));
+                        }
+                        if (acrc.isReset())
+                        {
+                          msgID = MSGID_LDAPSEARCH_ACCTUSABLE_PW_RESET;
+                          out.println(getMessage(msgID));
+                        }
+                        if (acrc.isExpired())
+                        {
+                          msgID = MSGID_LDAPSEARCH_ACCTUSABLE_PW_EXPIRED;
+                          out.println(getMessage(msgID));
+
+                          if (acrc.getRemainingGraceLogins() > 0)
+                          {
+                            msgID = MSGID_LDAPSEARCH_ACCTUSABLE_REMAINING_GRACE;
+                            out.println(getMessage(msgID,
+                                             acrc.getRemainingGraceLogins()));
+                          }
+                        }
+                        if (acrc.isLocked())
+                        {
+                          msgID = MSGID_LDAPSEARCH_ACCTUSABLE_LOCKED;
+                          out.println(getMessage(msgID));
+                          if (acrc.getSecondsBeforeUnlock() > 0)
+                          {
+                            int timeToUnlock = acrc.getSecondsBeforeUnlock();
+                            String timeToUnlockStr =
+                                        secondsToTimeString(timeToUnlock);
+                            msgID = MSGID_LDAPSEARCH_ACCTUSABLE_TIME_UNTIL_UNLOCK;
+                            out.println(getMessage(msgID, timeToUnlockStr));
+                          }
+                        }
+                      }
+                    } catch (Exception e) {}
+                  }
+                }
+
+                SearchResultEntryProtocolOp searchEntryOp =
+                     responseMessage.getSearchResultEntryProtocolOp();
+                StringBuilder sb = new StringBuilder();
+                toLDIF(searchEntryOp, sb, wrapColumn, typesOnly);
+                out.print(sb.toString());
+                matchingEntries++;
+                break;
+
+              case OP_TYPE_SEARCH_RESULT_REFERENCE:
+                SearchResultReferenceProtocolOp searchRefOp =
+                     responseMessage.getSearchResultReferenceProtocolOp();
+                out.println(searchRefOp.toString());
+                break;
+
+              case OP_TYPE_SEARCH_RESULT_DONE:
+                SearchResultDoneProtocolOp searchOp =
+                     responseMessage.getSearchResultDoneProtocolOp();
+                resultCode = searchOp.getResultCode();
+                errorMessage = searchOp.getErrorMessage();
+
+                break;
+              default:
+                // FIXME - throw exception?
+                int msgID = MSGID_SEARCH_OPERATION_INVALID_PROTOCOL;
+                String msg = getMessage(msgID, opType);
+                err.println(wrapText(msg, MAX_LINE_WIDTH));
+                break;
             }
-            throw new LDAPException(resultCode, msgID, errorMessage);
-          }
-          else if (errorMessage != null)
-          {
-            out.println();
-            out.println(wrapText(errorMessage, MAX_LINE_WIDTH));
-          }
 
-        } while(opType != OP_TYPE_SEARCH_RESULT_DONE);
+            if(resultCode != SUCCESS && resultCode != REFERRAL)
+            {
+              int msgID = MSGID_OPERATION_FAILED;
+              if(errorMessage == null)
+              {
+                errorMessage = "Result Code:" + resultCode;
+              }
+              throw new LDAPException(resultCode, msgID, errorMessage);
+            }
+            else if (errorMessage != null)
+            {
+              out.println();
+              out.println(wrapText(errorMessage, MAX_LINE_WIDTH));
+            }
 
-      } catch(ASN1Exception ae)
-      {
-        assert debugException(CLASS_NAME, "executeSearch", ae);
-        throw new IOException(ae.getMessage());
+          } while(opType != OP_TYPE_SEARCH_RESULT_DONE);
+
+        } catch(ASN1Exception ae)
+        {
+          assert debugException(CLASS_NAME, "executeSearch", ae);
+          throw new IOException(ae.getMessage());
+        }
       }
     }
 

--
Gitblit v1.10.0