001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied. See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 *
019 */
020 package org.apache.directory.server.core;
021
022
023 import java.net.SocketAddress;
024 import java.util.List;
025 import java.util.Set;
026
027 import org.apache.directory.server.constants.ServerDNConstants;
028 import org.apache.directory.server.core.changelog.LogChange;
029 import org.apache.directory.server.core.entry.ClonedServerEntry;
030 import org.apache.directory.server.core.filtering.EntryFilteringCursor;
031 import org.apache.directory.server.core.interceptor.context.OperationContext;
032 import org.apache.directory.shared.ldap.constants.AuthenticationLevel;
033 import org.apache.directory.shared.ldap.entry.Modification;
034 import org.apache.directory.shared.ldap.entry.ServerEntry;
035 import org.apache.directory.shared.ldap.filter.ExprNode;
036 import org.apache.directory.shared.ldap.filter.SearchScope;
037 import org.apache.directory.shared.ldap.message.AliasDerefMode;
038 import org.apache.directory.shared.ldap.message.control.Control;
039 import org.apache.directory.shared.ldap.message.internal.InternalAddRequest;
040 import org.apache.directory.shared.ldap.message.internal.InternalCompareRequest;
041 import org.apache.directory.shared.ldap.message.internal.InternalDeleteRequest;
042 import org.apache.directory.shared.ldap.message.internal.InternalModifyDnRequest;
043 import org.apache.directory.shared.ldap.message.internal.InternalModifyRequest;
044 import org.apache.directory.shared.ldap.message.internal.InternalSearchRequest;
045 import org.apache.directory.shared.ldap.message.internal.InternalUnbindRequest;
046 import org.apache.directory.shared.ldap.name.DN;
047 import org.apache.directory.shared.ldap.name.RDN;
048 import org.apache.directory.shared.ldap.schema.AttributeTypeOptions;
049
050
051 /**
052 * An interface representing a session with the core DirectoryService. These
053 * sessions may either be real representing LDAP sessions associated with an
054 * actual LDAP network client, or may be virtual in which case there is no
055 * real LDAP client associated with the session. This interface is used by
056 * the DirectoryService core to track session specific parameters used to make
057 * various decisions during the course of operation handling.
058 *
059 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
060 * @version $Rev$, $Date$
061 */
062 public interface CoreSession
063 {
064 /**
065 * Gets the DirectoryService this session is bound to.
066 *
067 * @return the DirectoryService associated with this session
068 */
069 DirectoryService getDirectoryService();
070
071
072 /**
073 * Gets the LDAP principal used to authenticate. This is the identity
074 * used to establish this session on authentication.
075 *
076 * @return the LdapPrincipal used to authenticate.
077 */
078 LdapPrincipal getAuthenticatedPrincipal();
079
080
081 /**
082 * Gets the LDAP principal used for the effective identity associated with
083 * this session which may not be the same as the authenticated principal.
084 * This principal is often the same as the authenticated principal.
085 * Sometimes however, a user authenticating as one principal, may request
086 * to have all operations performed in the session as if they were another
087 * principal. The SASL mechanism allows setting an authorized principal
088 * which is in effect for the duration of the session. In this case all
089 * operations are performed as if they are being performed by this
090 * principal. This method will then return the authorized principal which
091 * will be different from the authenticated principal.
092 *
093 * Implementations of this interface may have a means to set the
094 * authorized principal which may or may not be the same as the
095 * authenticated principal. Implementations should default to return the
096 * authenticated principal when an authorized principal is not provided.
097 *
098 * @return the LdapPrincipal to use as the effective principal
099 */
100 LdapPrincipal getEffectivePrincipal();
101
102
103 /**
104 * Gets whether or not confidentiality is enabled for this session.
105 *
106 * @return true if confidentiality is enabled, false otherwise
107 */
108 boolean isConfidential();
109
110
111 /**
112 * Gets whether or not this user is anonymous.
113 *
114 * @return true if the identity is anonymous false otherwise
115 */
116 boolean isAnonymous();
117
118
119 /**
120 * Returns true if the effective principal associated with this session is
121 * the administrator.
122 *
123 * @see {@link ServerDNConstants#ADMIN_SYSTEM_DN}
124 * @return true if authorized as the administrator, false otherwise
125 */
126 boolean isAdministrator();
127
128
129 /**
130 * Returns true if the effective principal associated with this session is
131 * the administrator or is within the administrators group.
132 *
133 * @see {@link ServerDNConstants#ADMIN_SYSTEM_DN}
134 * @see {@link ServerDNConstants#ADMINISTRATORS_GROUP_DN}
135 * @return true if authorized as an administrator, false otherwise
136 */
137 boolean isAnAdministrator();
138
139
140 /**
141 * Gets the authentication level associated with this session.
142 *
143 * @return the authentication level associated with the session
144 */
145 AuthenticationLevel getAuthenticationLevel();
146
147
148 /**
149 * Gets the controls enabled for this session.
150 *
151 * @return the session controls as a Set
152 */
153 Set<Control> getControls();
154
155
156 /**
157 * Gets all outstanding operations currently being performed that have yet
158 * to be completed.
159 *
160 * @return the set of outstanding operations
161 */
162 Set<OperationContext> getOutstandingOperations();
163
164
165 /**
166 * Gets whether or not this session is virtual. Virtual sessions verses
167 * real sessions represent logical sessions established by non-LDAP
168 * services or embedding applications which do not expose the LDAP access.
169 *
170 * @return true if the session is virtual, false otherwise
171 */
172 boolean isVirtual();
173
174
175 /**
176 * Gets the socket address of the LDAP client or null if there is no LDAP
177 * client associated with the session. Some calls to the core can be made
178 * by embedding applications or by non-LDAP services using a programmatic
179 * (virtual) session. In these cases no client address is available.
180 *
181 * @return null if the session is virtual, non-null when the session is
182 * associated with a real LDAP client
183 */
184 SocketAddress getClientAddress();
185
186
187 /**
188 * Gets the socket address of the LDAP server or null if there is no LDAP
189 * service associated with the session. Some calls to the core can be
190 * made by embedding applications or by non-LDAP services using a
191 * programmatic (virtual) session. In these cases no service address is
192 * available.
193 *
194 * @return null if the session is virtual, non-null when the session is
195 * associated with a real LDAP service
196 */
197 SocketAddress getServiceAddress();
198
199
200 // -----------------------------------------------------------------------
201 // Operation Methods
202 // -----------------------------------------------------------------------
203 /**
204 * Adds an entry into the DirectoryService associated with this CoreSession.
205 *
206 * @param entry the entry to add
207 * @exception Exception on failures to add the entry
208 */
209 void add( ServerEntry entry ) throws Exception;
210
211
212 /**
213 * Adds an entry into the DirectoryService associated with this CoreSession.
214 *
215 * @param entry the entry to add
216 * @param log a flag set if the added entry should be stored in the changeLog
217 * @exception Exception on failures to add the entry
218 */
219 void add( ServerEntry entry, LogChange log ) throws Exception;
220
221
222 /**
223 * Adds an entry into the DirectoryService associated with this CoreSession.
224 * The flag is used to tell the server to ignore the referrals and manipulate
225 * them as if they were normal entries.
226 *
227 * @param entry the entry to add
228 * @param ignoreReferral a flag to tell the server to ignore referrals
229 * @exception Exception on failures to add the entry
230 */
231 void add( ServerEntry entry, boolean ignoreReferral ) throws Exception;
232
233
234 /**
235 * Adds an entry into the DirectoryService associated with this CoreSession.
236 * The flag is used to tell the server to ignore the referrals and manipulate
237 * them as if they were normal entries.
238 *
239 * @param entry the entry to add
240 * @param ignoreReferral a flag to tell the server to ignore referrals
241 * @param log a flag set if the added entry should be stored in the changeLog
242 * @exception Exception on failures to add the entry
243 */
244 void add( ServerEntry entry, boolean ignoreReferral, LogChange log ) throws Exception;
245
246
247 /**
248 * Adds an entry into the DirectoryService associated with this CoreSession.
249 * The entry is built using the received AddRequest.
250 *
251 * @param InternalAddRequest the request to execute
252 * @exception Exception on failures to add the entry
253 */
254 void add( InternalAddRequest addRequest ) throws Exception;
255
256
257 /**
258 * Adds an entry into the DirectoryService associated with this CoreSession.
259 * The entry is built using the received AddRequest.
260 *
261 * @param InternalAddRequest the request to execute
262 * @param log a flag set if the added entry should be stored in the changeLog
263 * @exception Exception on failures to add the entry
264 */
265 void add( InternalAddRequest addRequest, LogChange log ) throws Exception;
266
267
268 /**
269 * Checks to see if an attribute in an entry contains a value.
270 *
271 * @param dn the distinguished name of the entry to check
272 * @param oid the OID of the attribute to check for the value
273 * @param value the value to check for
274 * @throws Exception if there are failures while comparing
275 */
276 boolean compare( DN dn, String oid, Object value ) throws Exception;
277
278
279 /**
280 * Checks to see if an attribute in an entry contains a value.
281 * The flag is used to tell the server to ignore the referrals and manipulate
282 * them as if they were normal entries.
283 *
284 * @param dn the distinguished name of the entry to check
285 * @param oid the OID of the attribute to check for the value
286 * @param value the value to check for
287 * @param ignoreReferral a flag to tell the server to ignore referrals
288 * @throws Exception if there are failures while comparing
289 */
290 boolean compare( DN dn, String oid, Object value, boolean ignoreReferral ) throws Exception;
291
292
293 /**
294 * Checks to see if an attribute in an entry contains a value.
295 *
296 * @param compareRequest the received request
297 * @throws Exception if there are failures while comparing
298 */
299 boolean compare( InternalCompareRequest compareRequest ) throws Exception;
300
301
302 /**
303 * Deletes an entry in the server.
304 *
305 * @param dn the distinguished name of the entry to delete
306 * @throws Exception if there are failures while deleting the entry
307 */
308 void delete( DN dn ) throws Exception;
309
310
311 /**
312 * Deletes an entry in the server.
313 *
314 * @param dn the distinguished name of the entry to delete
315 * @param log a flag set if the added entry should be stored in the changeLog
316 * @throws Exception if there are failures while deleting the entry
317 */
318 void delete( DN dn, LogChange log ) throws Exception;
319
320
321 void delete( InternalDeleteRequest deleteRequest ) throws Exception;
322
323
324 void delete( InternalDeleteRequest deleteRequest, LogChange log ) throws Exception;
325
326
327 /**
328 * Deletes an entry in the server.
329 * The flag is used to tell the server to ignore the referrals and manipulate
330 * them as if they were normal entries.
331 *
332 * @param dn the distinguished name of the entry to delete
333 * @param ignoreReferral a flag to tell the server to ignore referrals
334 * @throws Exception if there are failures while deleting the entry
335 */
336 void delete( DN dn, boolean ignoreReferral ) throws Exception;
337
338
339 /**
340 * Deletes an entry in the server.
341 * The flag is used to tell the server to ignore the referrals and manipulate
342 * them as if they were normal entries.
343 *
344 * @param dn the distinguished name of the entry to delete
345 * @param ignoreReferral a flag to tell the server to ignore referrals
346 * @param log a flag set if the added entry should be stored in the changeLog
347 * @throws Exception if there are failures while deleting the entry
348 */
349 void delete( DN dn, boolean ignoreReferral, LogChange log ) throws Exception;
350
351
352 /**
353 * Checks to see if an entry exists.
354 */
355 boolean exists( DN dn ) throws Exception;
356
357
358 /**
359 * Looks up an entry in the server returning all attributes: both user and
360 * operational attributes.
361 *
362 * @param dn the name of the entry to lookup
363 * @throws Exception if there are failures while looking up the entry
364 */
365 ClonedServerEntry lookup( DN dn ) throws Exception;
366
367 /**
368 * Looks up an entry in the server returning all attributes: both user and
369 * operational attributes.
370 *
371 * @param dn the name of the entry to lookup
372 * @param atIds The list of attributes to return
373 * @throws Exception if there are failures while looking up the entry
374 */
375 ClonedServerEntry lookup( DN dn, String[] atIds ) throws Exception;
376
377
378 /**
379 * Modifies an entry within the server by applying a list of modifications
380 * to the entry.
381 *
382 * @param dn the distinguished name of the entry to modify
383 * @param mods the list of modifications to apply
384 * @throws Exception if there are failures while modifying the entry
385 */
386 void modify( DN dn, List<Modification> mods ) throws Exception;
387
388
389 /**
390 * Modifies an entry within the server by applying a list of modifications
391 * to the entry.
392 *
393 * @param dn the distinguished name of the entry to modify
394 * @param mods the list of modifications to apply
395 * @param log a flag set if the added entry should be stored in the changeLog
396 * @throws Exception if there are failures while modifying the entry
397 */
398 void modify( DN dn, List<Modification> mods, LogChange log ) throws Exception;
399
400
401 /**
402 * Modifies an entry within the server by applying a list of modifications
403 * to the entry.
404 * The flag is used to tell the server to ignore the referrals and manipulate
405 * them as if they were normal entries.
406 *
407 * @param dn the distinguished name of the entry to modify
408 * @param ignoreReferral a flag to tell the server to ignore referrals
409 * @param mods the list of modifications to apply
410 * @throws Exception if there are failures while modifying the entry
411 */
412 void modify( DN dn, List<Modification> mods, boolean ignoreReferral ) throws Exception;
413
414
415 /**
416 * Modifies an entry within the server by applying a list of modifications
417 * to the entry.
418 * The flag is used to tell the server to ignore the referrals and manipulate
419 * them as if they were normal entries.
420 *
421 * @param dn the distinguished name of the entry to modify
422 * @param ignoreReferral a flag to tell the server to ignore referrals
423 * @param mods the list of modifications to apply
424 * @param log a flag set if the added entry should be stored in the changeLog
425 * @throws Exception if there are failures while modifying the entry
426 */
427 void modify( DN dn, List<Modification> mods, boolean ignoreReferral, LogChange log ) throws Exception;
428
429
430 void modify( InternalModifyRequest modifyRequest ) throws Exception;
431
432
433 void modify( InternalModifyRequest modifyRequest, LogChange log ) throws Exception;
434
435
436 /**
437 * Moves an entry or a branch of entries at a specified distinguished name
438 * to a position under a new parent.
439 *
440 * @param dn the distinguished name of the entry/branch to move
441 * @param newParent the new parent under which the entry/branch is moved
442 * @exception if there are failures while moving the entry/branch
443 */
444 void move( DN dn, DN newParent ) throws Exception;
445
446
447 /**
448 * Moves an entry or a branch of entries at a specified distinguished name
449 * to a position under a new parent.
450 *
451 * @param dn the distinguished name of the entry/branch to move
452 * @param newParent the new parent under which the entry/branch is moved
453 * @param log a flag set if the added entry should be stored in the changeLog
454 * @exception if there are failures while moving the entry/branch
455 */
456 void move( DN dn, DN newParent, LogChange log ) throws Exception;
457
458
459 /**
460 * Moves an entry or a branch of entries at a specified distinguished name
461 * to a position under a new parent.
462 *
463 * @param dn the distinguished name of the entry/branch to move
464 * @param newParent the new parent under which the entry/branch is moved
465 * @param ignoreReferral a flag to tell the server to ignore referrals
466 * @exception if there are failures while moving the entry/branch
467 */
468 void move( DN dn, DN newParent, boolean ignoreReferral ) throws Exception;
469
470
471 /**
472 * Moves an entry or a branch of entries at a specified distinguished name
473 * to a position under a new parent.
474 *
475 * @param dn the distinguished name of the entry/branch to move
476 * @param newParent the new parent under which the entry/branch is moved
477 * @param ignoreReferral a flag to tell the server to ignore referrals
478 * @param log a flag set if the added entry should be stored in the changeLog
479 * @exception if there are failures while moving the entry/branch
480 */
481 void move( DN dn, DN newParent, boolean ignoreReferral, LogChange log ) throws Exception;
482
483
484 /**
485 * Move an entry by changing its superior.
486 *
487 * @param modifyDnRequest The ModifyDN request
488 * @throws Exception if there are failures while moving the entry/branch
489 */
490 void move( InternalModifyDnRequest modifyDnRequest ) throws Exception;
491
492
493 /**
494 * Move an entry by changing its superior.
495 *
496 * @param modifyDnRequest The ModifyDN request
497 * @param log a flag set if the added entry should be stored in the changeLog
498 * @throws Exception if there are failures while moving the entry/branch
499 */
500 void move( InternalModifyDnRequest modifyDnRequest, LogChange log ) throws Exception;
501
502
503 /**
504 * Moves and renames (the relative distinguished name of) an entry (or a
505 * branch if the entry has children) at a specified distinguished name to
506 * a position under a new parent.
507 *
508 * @param dn the distinguished name of the entry/branch to move
509 * @param newParent the new parent under which the entry/branch is moved
510 * @param newRdn the new relative distinguished name of the entry at the
511 * root of the branch
512 * @exception if there are failures while moving and renaming the entry
513 * or branch
514 */
515 void moveAndRename( DN dn, DN newParent, RDN newRdn, boolean deleteOldRdn ) throws Exception;
516
517
518 /**
519 * Moves and renames (the relative distinguished name of) an entry (or a
520 * branch if the entry has children) at a specified distinguished name to
521 * a position under a new parent.
522 *
523 * @param dn the distinguished name of the entry/branch to move
524 * @param newParent the new parent under which the entry/branch is moved
525 * @param newRdn the new relative distinguished name of the entry at the
526 * root of the branch
527 * @param log a flag set if the added entry should be stored in the changeLog
528 * @exception if there are failures while moving and renaming the entry
529 * or branch
530 */
531 void moveAndRename( DN dn, DN newParent, RDN newRdn, boolean deleteOldRdn, LogChange log ) throws Exception;
532
533
534 /**
535 * Moves and renames (the relative distinguished name of) an entry (or a
536 * branch if the entry has children) at a specified distinguished name to
537 * a position under a new parent.
538 *
539 * @param dn the distinguished name of the entry/branch to move
540 * @param newParent the new parent under which the entry/branch is moved
541 * @param newRdn the new relative distinguished name of the entry at the
542 * root of the branch
543 * @param ignoreReferral a flag to tell the server to ignore referrals
544 * @exception if there are failures while moving and renaming the entry
545 * or branch
546 */
547 void moveAndRename( DN dn, DN newParent, RDN newRdn, boolean deleteOldRdn, boolean ignoreReferral ) throws Exception;
548
549
550 /**
551 * Moves and renames (the relative distinguished name of) an entry (or a
552 * branch if the entry has children) at a specified distinguished name to
553 * a position under a new parent.
554 *
555 * @param dn the distinguished name of the entry/branch to move
556 * @param newParent the new parent under which the entry/branch is moved
557 * @param newRdn the new relative distinguished name of the entry at the
558 * root of the branch
559 * @param ignoreReferral a flag to tell the server to ignore referrals
560 * @param log a flag set if the added entry should be stored in the changeLog
561 * @exception if there are failures while moving and renaming the entry
562 * or branch
563 */
564 void moveAndRename( DN dn, DN newParent, RDN newRdn, boolean deleteOldRdn, boolean ignoreReferral, LogChange log ) throws Exception;
565
566
567 /**
568 * Move and rename an entry. We change the RDN and the superior.
569 *
570 * @param modifyDnRequest The move and rename request
571 * @throws Exception if there are failures while moving and renaming the entry
572 * or branch
573 */
574 void moveAndRename( InternalModifyDnRequest modifyDnRequest ) throws Exception;
575
576
577 /**
578 * Move and rename an entry. We change the RDN and the superior.
579 *
580 * @param modifyDnRequest The move and rename request
581 * @param log a flag set if the added entry should be stored in the changeLog
582 * @throws Exception if there are failures while moving and renaming the entry
583 * or branch
584 */
585 void moveAndRename( InternalModifyDnRequest modifyDnRequest, LogChange log ) throws Exception;
586
587
588 /**
589 * Renames an entry by changing it's relative distinguished name. This
590 * has the side effect of changing the distinguished name of all entries
591 * directly or indirectly subordinate to the named entry if it has
592 * descendants.
593 *
594 * @param dn the distinguished name of the entry to rename
595 * @param newRdn the new relative distinguished name for the entry
596 * @param deleteOldRdn whether or not the old value for the relative
597 * distinguished name is to be deleted from the entry
598 * @throws Exception if there are failures while renaming the entry
599 */
600 void rename( DN dn, RDN newRdn, boolean deleteOldRdn ) throws Exception;
601
602
603 /**
604 * Renames an entry by changing it's relative distinguished name. This
605 * has the side effect of changing the distinguished name of all entries
606 * directly or indirectly subordinate to the named entry if it has
607 * descendants.
608 *
609 * @param dn the distinguished name of the entry to rename
610 * @param newRdn the new relative distinguished name for the entry
611 * @param deleteOldRdn whether or not the old value for the relative
612 * distinguished name is to be deleted from the entry
613 * @param log a flag set if the added entry should be stored in the changeLog
614 * @throws Exception if there are failures while renaming the entry
615 */
616 void rename( DN dn, RDN newRdn, boolean deleteOldRdn, LogChange log ) throws Exception;
617
618
619 /**
620 * Renames an entry by changing it's relative distinguished name. This
621 * has the side effect of changing the distinguished name of all entries
622 * directly or indirectly subordinate to the named entry if it has
623 * descendants.
624 *
625 * @param dn the distinguished name of the entry to rename
626 * @param newRdn the new relative distinguished name for the entry
627 * @param deleteOldRdn whether or not the old value for the relative
628 * distinguished name is to be deleted from the entry
629 * @param ignoreReferral a flag to tell the server to ignore referrals
630 * @throws Exception if there are failures while renaming the entry
631 */
632 void rename( DN dn, RDN newRdn, boolean deleteOldRdn, boolean ignoreReferral ) throws Exception;
633
634
635 /**
636 * Renames an entry by changing it's relative distinguished name. This
637 * has the side effect of changing the distinguished name of all entries
638 * directly or indirectly subordinate to the named entry if it has
639 * descendants.
640 *
641 * @param dn the distinguished name of the entry to rename
642 * @param newRdn the new relative distinguished name for the entry
643 * @param deleteOldRdn whether or not the old value for the relative
644 * distinguished name is to be deleted from the entry
645 * @param ignoreReferral a flag to tell the server to ignore referrals
646 * @param log a flag set if the added entry should be stored in the changeLog
647 * @throws Exception if there are failures while renaming the entry
648 */
649 void rename( DN dn, RDN newRdn, boolean deleteOldRdn, boolean ignoreReferral, LogChange log ) throws Exception;
650
651
652 /**
653 * Rename an entry applying the ModifyDN request
654 *
655 * @param modifyDnRequest The requested modification
656 * @throws Exception if there are failures while renaming the entry
657 */
658 void rename( InternalModifyDnRequest modifyDnRequest ) throws Exception;
659
660
661 /**
662 * Rename an entry applying the ModifyDN request
663 *
664 * @param modifyDnRequest The requested modification
665 * @param log a flag set if the added entry should be stored in the changeLog
666 * @throws Exception if there are failures while renaming the entry
667 */
668 void rename( InternalModifyDnRequest modifyDnRequest, LogChange log ) throws Exception;
669
670
671 /**
672 * An optimized search operation using one level search scope which
673 * returns all the children of an entry specified by distinguished name.
674 * This is equivalent to a search operation with one level scope using
675 * the <code>(objectClass=*)</code> filter.
676 *
677 * @param dn the distinguished name of the entry to list the children of
678 * @param aliasDerefMode the alias dereferencing mode used
679 * @param returningAttributes the attributes to return
680 * @throws Exception if there are failures while listing children
681 */
682 EntryFilteringCursor list( DN dn, AliasDerefMode aliasDerefMode,
683 Set<AttributeTypeOptions> returningAttributes ) throws Exception;
684
685
686 /**
687 * An optimized search operation using one level search scope which
688 * applies size and time limit constraints and returns all the children
689 * of an entry specified by distinguished name if thes limits are not
690 * violated. This is equivalent to a search operation with one level
691 * scope using the <code>(objectClass=*)</code> filter.
692 *
693 * @param dn the distinguished name of the entry to list the children of
694 * @param aliasDerefMode the alias dereferencing mode used
695 * @param returningAttributes the attributes to return
696 * @param sizeLimit the upper bound to the number of entries to return
697 * @param timeLimit the upper bound to the amount of time before
698 * terminating the search
699 * @throws Exception if there are failures while listing children
700 */
701 EntryFilteringCursor list( DN dn, AliasDerefMode aliasDerefMode,
702 Set<AttributeTypeOptions> returningAttributes, long sizeLimit, int timeLimit ) throws Exception;
703
704
705 /**
706 * Searches the directory using a specified filter. The scope is defaulting
707 * to 'base'. The alias dereferencing default to 'always'. the returned attributes
708 * defaults to 'all the user attributes)
709 *
710 * @param dn the distinguished name of the entry to list the children of
711 * @param filter the search filter
712 * @throws Exception if there are failures while listing children
713 */
714 EntryFilteringCursor search( DN dn, String filter ) throws Exception;
715
716
717 /**
718 * Searches the directory using a specified filter. The scope is defaulting
719 * to 'base'. The alias dereferencing default to 'always'. the returned attributes
720 * defaults to 'all the user attributes)
721 *
722 * @param dn the distinguished name of the entry to list the children of
723 * @param filter the search filter
724 * @param ignoreReferrals a flag to tell the server to ignore referrals
725 * @throws Exception if there are failures while listing children
726 */
727 EntryFilteringCursor search( DN dn, String filter, boolean ignoreReferrals ) throws Exception;
728
729
730 /**
731 * Searches the directory using a specified search scope and filter.
732 *
733 * @param dn the distinguished name of the entry to list the children of
734 * @param scope the search scope to apply
735 * @param filter the search filter
736 * @param aliasDerefMode the alias dereferencing mode used
737 * @param returningAttributes the attributes to return
738 * @throws Exception if there are failures while listing children
739 */
740 EntryFilteringCursor search( DN dn, SearchScope scope, ExprNode filter, AliasDerefMode aliasDerefMode,
741 Set<AttributeTypeOptions> returningAttributes ) throws Exception;
742
743
744 /**
745 * Searches the directory using a specified search scope and filter.
746 *
747 * @param dn the distinguished name of the entry to list the children of
748 * @param scope the search scope to apply
749 * @param filter the search filter
750 * @param aliasDerefMode the alias dereferencing mode used
751 * @param returningAttributes the attributes to return
752 * @throws Exception if there are failures while listing children
753 */
754
755
756 /**
757 * Searches the directory using a specified search scope and filter.
758 *
759 * @param dn the distinguished name of the entry to list the children of
760 * @param aliasDerefMode the alias dereferencing mode used
761 * @param returningAttributes the attributes to return
762 * @param sizeLimit the upper bound to the number of entries to return
763 * @param timeLimit the upper bound to the amount of time before
764 * terminating the search
765 * @throws Exception if there are failures while listing children
766 */
767 EntryFilteringCursor search( DN dn, SearchScope scope, ExprNode filter, AliasDerefMode aliasDerefMode,
768 Set<AttributeTypeOptions> returningAttributes, long sizeLimit, int timeLimit ) throws Exception;
769
770
771 EntryFilteringCursor search( InternalSearchRequest searchRequest ) throws Exception;
772
773
774 void unbind() throws Exception;
775
776
777 void unbind( InternalUnbindRequest unbindRequest ) throws Exception;
778 }