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.ArrayList;
025 import java.util.List;
026 import java.util.Set;
027
028 import org.apache.directory.server.constants.ServerDNConstants;
029 import org.apache.directory.server.core.changelog.LogChange;
030 import org.apache.directory.server.core.entry.ClonedServerEntry;
031 import org.apache.directory.server.core.filtering.EntryFilteringCursor;
032 import org.apache.directory.server.core.interceptor.context.AbstractOperationContext;
033 import org.apache.directory.server.core.interceptor.context.AddOperationContext;
034 import org.apache.directory.server.core.interceptor.context.CompareOperationContext;
035 import org.apache.directory.server.core.interceptor.context.DeleteOperationContext;
036 import org.apache.directory.server.core.interceptor.context.EntryOperationContext;
037 import org.apache.directory.server.core.interceptor.context.ListOperationContext;
038 import org.apache.directory.server.core.interceptor.context.LookupOperationContext;
039 import org.apache.directory.server.core.interceptor.context.ModifyOperationContext;
040 import org.apache.directory.server.core.interceptor.context.MoveAndRenameOperationContext;
041 import org.apache.directory.server.core.interceptor.context.MoveOperationContext;
042 import org.apache.directory.server.core.interceptor.context.OperationContext;
043 import org.apache.directory.server.core.interceptor.context.RenameOperationContext;
044 import org.apache.directory.server.core.interceptor.context.SearchOperationContext;
045 import org.apache.directory.server.core.interceptor.context.UnbindOperationContext;
046 import org.apache.directory.server.i18n.I18n;
047 import org.apache.directory.shared.ldap.constants.AuthenticationLevel;
048 import org.apache.directory.shared.ldap.entry.BinaryValue;
049 import org.apache.directory.shared.ldap.entry.StringValue;
050 import org.apache.directory.shared.ldap.entry.Modification;
051 import org.apache.directory.shared.ldap.entry.ServerEntry;
052 import org.apache.directory.shared.ldap.entry.ServerModification;
053 import org.apache.directory.shared.ldap.entry.Value;
054 import org.apache.directory.shared.ldap.exception.LdapException;
055 import org.apache.directory.shared.ldap.filter.ExprNode;
056 import org.apache.directory.shared.ldap.filter.FilterParser;
057 import org.apache.directory.shared.ldap.filter.SearchScope;
058 import org.apache.directory.shared.ldap.message.AliasDerefMode;
059 import org.apache.directory.shared.ldap.message.control.Control;
060 import org.apache.directory.shared.ldap.message.internal.InternalAddRequest;
061 import org.apache.directory.shared.ldap.message.internal.InternalCompareRequest;
062 import org.apache.directory.shared.ldap.message.internal.InternalDeleteRequest;
063 import org.apache.directory.shared.ldap.message.internal.InternalModifyDnRequest;
064 import org.apache.directory.shared.ldap.message.internal.InternalModifyRequest;
065 import org.apache.directory.shared.ldap.message.internal.InternalSearchRequest;
066 import org.apache.directory.shared.ldap.message.internal.InternalUnbindRequest;
067 import org.apache.directory.shared.ldap.name.DN;
068 import org.apache.directory.shared.ldap.name.RDN;
069 import org.apache.directory.shared.ldap.schema.AttributeType;
070 import org.apache.directory.shared.ldap.schema.AttributeTypeOptions;
071 import org.apache.directory.shared.ldap.util.StringTools;
072
073
074 /**
075 * The default CoreSession implementation.
076 *
077 * TODO - has not been completed yet
078 * TODO - need to supply controls and other parameters to setup opContexts
079 *
080 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
081 * @version $Rev$, $Date$
082 */
083 public class DefaultCoreSession implements CoreSession
084 {
085 private final DirectoryService directoryService;
086 private final LdapPrincipal authenticatedPrincipal;
087 private LdapPrincipal authorizedPrincipal;
088
089
090 public DefaultCoreSession( LdapPrincipal principal, DirectoryService directoryService )
091 {
092 this.directoryService = directoryService;
093 this.authenticatedPrincipal = principal;
094 }
095
096
097 /**
098 * Set the ignoreRefferal flag for the current operationContext.
099 *
100 * @param opContext The current operationContext
101 * @param ignoreReferral The flag
102 */
103 private void setReferralHandling( AbstractOperationContext opContext, boolean ignoreReferral )
104 {
105 if ( ignoreReferral )
106 {
107 opContext.ignoreReferral();
108 }
109 else
110 {
111 opContext.throwReferral();
112 }
113 }
114
115
116 /**
117 * {@inheritDoc}
118 */
119 public void add( ServerEntry entry ) throws Exception
120 {
121 add( entry, LogChange.TRUE );
122 }
123
124
125 /**
126 * {@inheritDoc}
127 */
128 public void add( ServerEntry entry, boolean ignoreReferral ) throws Exception
129 {
130 add( entry, ignoreReferral, LogChange.TRUE );
131 }
132
133
134 /**
135 * {@inheritDoc}
136 */
137 public void add( ServerEntry entry, LogChange log ) throws Exception
138 {
139 AddOperationContext opContext = new AddOperationContext( this, entry );
140
141 opContext.setLogChange( log );
142
143 OperationManager operationManager = directoryService.getOperationManager();
144 operationManager.add( opContext );
145 }
146
147
148 /**
149 * {@inheritDoc}
150 */
151 public void add( ServerEntry entry, boolean ignoreReferral, LogChange log ) throws Exception
152 {
153 AddOperationContext opContext = new AddOperationContext( this, entry );
154
155 opContext.setLogChange( log );
156 setReferralHandling( opContext, ignoreReferral );
157
158 OperationManager operationManager = directoryService.getOperationManager();
159 operationManager.add( opContext );
160 }
161
162
163 /**
164 * {@inheritDoc}
165 */
166 public void add( InternalAddRequest addRequest ) throws Exception
167 {
168 add( addRequest, LogChange.TRUE );
169 }
170
171
172 /**
173 * {@inheritDoc}
174 */
175 public void add( InternalAddRequest addRequest, LogChange log ) throws Exception
176 {
177 AddOperationContext opContext = new AddOperationContext( this, addRequest );
178
179 opContext.setLogChange( log );
180
181 OperationManager operationManager = directoryService.getOperationManager();
182 operationManager.add( opContext );
183 addRequest.getResultResponse().addAll( opContext.getResponseControls() );
184 }
185
186
187 private Value<?> convertToValue( String oid, Object value ) throws LdapException
188 {
189 Value<?> val = null;
190
191 AttributeType attributeType = directoryService.getSchemaManager().lookupAttributeTypeRegistry( oid );
192
193 // make sure we add the request controls to operation
194 if ( attributeType.getSyntax().isHumanReadable() )
195 {
196 if ( value instanceof String )
197 {
198 val = new StringValue( attributeType, (String)value );
199 }
200 else if ( value instanceof byte[] )
201 {
202 val = new StringValue( attributeType, StringTools.utf8ToString( (byte[])value ) );
203 }
204 else
205 {
206 throw new LdapException( I18n.err( I18n.ERR_309, oid ) );
207 }
208 }
209 else
210 {
211 if ( value instanceof String )
212 {
213 val = new BinaryValue( attributeType, StringTools.getBytesUtf8( (String)value ) );
214 }
215 else if ( value instanceof byte[] )
216 {
217 val = new BinaryValue( attributeType, (byte[])value );
218 }
219 else
220 {
221 throw new LdapException( I18n.err( I18n.ERR_309, oid ) );
222 }
223 }
224
225 return val;
226 }
227
228 /**
229 * {@inheritDoc}
230 */
231 public boolean compare( DN dn, String oid, Object value ) throws Exception
232 {
233 OperationManager operationManager = directoryService.getOperationManager();
234
235 return operationManager.compare(
236 new CompareOperationContext( this, dn, oid,
237 convertToValue( oid, value ) ) );
238 }
239
240
241 /**
242 * {@inheritDoc}
243 */
244 public boolean compare( DN dn, String oid, Object value, boolean ignoreReferral ) throws Exception
245 {
246 CompareOperationContext opContext =
247 new CompareOperationContext( this, dn, oid,
248 convertToValue( oid, value ) );
249
250 setReferralHandling( opContext, ignoreReferral );
251
252 OperationManager operationManager = directoryService.getOperationManager();
253 return operationManager.compare( opContext );
254 }
255
256
257 /**
258 * {@inheritDoc}
259 */
260 public void delete( DN dn ) throws Exception
261 {
262 delete( dn, LogChange.TRUE );
263 }
264
265
266 /**
267 * {@inheritDoc}
268 */
269 public void delete( DN dn, LogChange log ) throws Exception
270 {
271 DeleteOperationContext opContext = new DeleteOperationContext( this, dn );
272
273 opContext.setLogChange( log );
274
275 OperationManager operationManager = directoryService.getOperationManager();
276 operationManager.delete( opContext );
277 }
278
279
280 /**
281 * {@inheritDoc}
282 */
283 public void delete( DN dn, boolean ignoreReferral ) throws Exception
284 {
285 delete( dn, ignoreReferral, LogChange.TRUE );
286 }
287
288
289 /**
290 * {@inheritDoc}
291 */
292 public void delete( DN dn, boolean ignoreReferral, LogChange log ) throws Exception
293 {
294 DeleteOperationContext opContext = new DeleteOperationContext( this, dn );
295
296 opContext.setLogChange( log );
297 setReferralHandling( opContext, ignoreReferral );
298
299 OperationManager operationManager = directoryService.getOperationManager();
300 operationManager.delete( opContext );
301 }
302
303
304 /* (non-Javadoc)
305 * @see org.apache.directory.server.core.CoreSession#getAuthenticatedPrincipal()
306 */
307 public LdapPrincipal getAuthenticatedPrincipal()
308 {
309 return authenticatedPrincipal;
310 }
311
312
313 /* (non-Javadoc)
314 * @see org.apache.directory.server.core.CoreSession#getAuthenticationLevel()
315 */
316 public AuthenticationLevel getAuthenticationLevel()
317 {
318 return getEffectivePrincipal().getAuthenticationLevel();
319 }
320
321
322 /* (non-Javadoc)
323 * @see org.apache.directory.server.core.CoreSession#getClientAddress()
324 */
325 public SocketAddress getClientAddress()
326 {
327 // TODO Auto-generated method stub
328 return null;
329 }
330
331
332 /* (non-Javadoc)
333 * @see org.apache.directory.server.core.CoreSession#getControls()
334 */
335 public Set<Control> getControls()
336 {
337 // TODO Auto-generated method stub
338 return null;
339 }
340
341
342 /* (non-Javadoc)
343 * @see org.apache.directory.server.core.CoreSession#getDirectoryService()
344 */
345 public DirectoryService getDirectoryService()
346 {
347 return directoryService;
348 }
349
350
351 /* (non-Javadoc)
352 * @see org.apache.directory.server.core.CoreSession#getEffectivePrincipal()
353 */
354 public LdapPrincipal getEffectivePrincipal()
355 {
356 if ( authorizedPrincipal == null )
357 {
358 return authenticatedPrincipal;
359 }
360
361 return authorizedPrincipal;
362 }
363
364
365 /* (non-Javadoc)
366 * @see org.apache.directory.server.core.CoreSession#getOutstandingOperations()
367 */
368 public Set<OperationContext> getOutstandingOperations()
369 {
370 // TODO Auto-generated method stub
371 return null;
372 }
373
374
375 /* (non-Javadoc)
376 * @see org.apache.directory.server.core.CoreSession#getServiceAddress()
377 */
378 public SocketAddress getServiceAddress()
379 {
380 // TODO Auto-generated method stub
381 return null;
382 }
383
384
385 /* (non-Javadoc)
386 * @see org.apache.directory.server.core.CoreSession#isConfidential()
387 */
388 public boolean isConfidential()
389 {
390 // TODO Auto-generated method stub
391 return false;
392 }
393
394
395 /* (non-Javadoc)
396 * @see org.apache.directory.server.core.CoreSession#isVirtual()
397 */
398 public boolean isVirtual()
399 {
400 // TODO Auto-generated method stub
401 return true;
402 }
403
404
405 /**
406 * TODO - perhaps we should just use a flag that is calculated on creation
407 * of this session
408 *
409 * @see org.apache.directory.server.core.CoreSession#isAdministrator()
410 */
411 public boolean isAdministrator()
412 {
413 String normName = getEffectivePrincipal().getName();
414 return normName.equals( ServerDNConstants.ADMIN_SYSTEM_DN_NORMALIZED );
415 }
416
417
418 /**
419 * TODO - this method impl does not check to see if the principal is in
420 * the administrators group - it only returns true of the principal is
421 * the actual admin user. need to make it check groups.
422 *
423 * TODO - perhaps we should just use a flag that is calculated on creation
424 * of this session
425 *
426 * @see org.apache.directory.server.core.CoreSession#isAnAdministrator()
427 */
428 public boolean isAnAdministrator()
429 {
430 if ( isAdministrator() )
431 {
432 return true;
433 }
434
435 // TODO fix this so it checks groups
436 return false;
437 }
438
439
440 /* (non-Javadoc)
441 * @see org.apache.directory.server.core.CoreSession#list(org.apache.directory.shared.ldap.name.DN, org.apache.directory.shared.ldap.message.AliasDerefMode, java.util.Set)
442 */
443 public EntryFilteringCursor list( DN dn, AliasDerefMode aliasDerefMode,
444 Set<AttributeTypeOptions> returningAttributes ) throws Exception
445 {
446 OperationManager operationManager = directoryService.getOperationManager();
447
448 ListOperationContext listOperationContext = new ListOperationContext( this, dn, returningAttributes );
449 listOperationContext.setAliasDerefMode( aliasDerefMode );
450
451 return operationManager.list( listOperationContext );
452 }
453
454
455 /* (non-Javadoc)
456 * @see org.apache.directory.server.core.CoreSession#list(org.apache.directory.shared.ldap.name.DN, org.apache.directory.shared.ldap.message.AliasDerefMode, java.util.Set, int, int)
457 */
458 public EntryFilteringCursor list( DN dn, AliasDerefMode aliasDerefMode,
459 Set<AttributeTypeOptions> returningAttributes, long sizeLimit, int timeLimit ) throws Exception
460 {
461 OperationManager operationManager = directoryService.getOperationManager();
462
463 ListOperationContext listOperationContext = new ListOperationContext( this, dn, returningAttributes );
464 listOperationContext.setSizeLimit( sizeLimit );
465 listOperationContext.setTimeLimit( timeLimit );
466 listOperationContext.setAliasDerefMode( aliasDerefMode );
467
468 return operationManager.list( listOperationContext );
469 }
470
471
472 /**
473 * {@inheritDoc}
474 */
475 public ClonedServerEntry lookup( DN dn ) throws Exception
476 {
477 OperationManager operationManager = directoryService.getOperationManager();
478 return operationManager.lookup( new LookupOperationContext( this, dn ) );
479 }
480
481
482 /**
483 * {@inheritDoc}
484 */
485 public ClonedServerEntry lookup( DN dn, String[] attrId ) throws Exception
486 {
487 OperationManager operationManager = directoryService.getOperationManager();
488 return operationManager.lookup(
489 new LookupOperationContext( this, dn, attrId ) );
490 }
491
492
493 /**
494 * {@inheritDoc}
495 */
496 public void modify( DN dn, List<Modification> mods ) throws Exception
497 {
498 modify( dn, mods, LogChange.TRUE );
499 }
500
501
502 /**
503 * {@inheritDoc}
504 */
505 public void modify( DN dn, List<Modification> mods, LogChange log ) throws Exception
506 {
507 if ( mods == null )
508 {
509 return;
510 }
511
512 List<Modification> serverModifications = new ArrayList<Modification>( mods.size() );
513
514 for ( Modification mod:mods )
515 {
516 serverModifications.add( new ServerModification( directoryService.getSchemaManager(), mod ) );
517 }
518
519 ModifyOperationContext opContext = new ModifyOperationContext( this, dn, serverModifications );
520
521 opContext.setLogChange( log );
522
523 OperationManager operationManager = directoryService.getOperationManager();
524 operationManager.modify( opContext );
525 }
526
527
528 /**
529 * {@inheritDoc}
530 */
531 public void modify( DN dn, List<Modification> mods, boolean ignoreReferral ) throws Exception
532 {
533 modify( dn, mods, ignoreReferral, LogChange.TRUE );
534 }
535
536
537 /**
538 * {@inheritDoc}
539 */
540 public void modify( DN dn, List<Modification> mods, boolean ignoreReferral, LogChange log ) throws Exception
541 {
542 if ( mods == null )
543 {
544 return;
545 }
546
547 List<Modification> serverModifications = new ArrayList<Modification>( mods.size() );
548
549 for ( Modification mod:mods )
550 {
551 serverModifications.add( new ServerModification( directoryService.getSchemaManager(), mod ) );
552 }
553
554 ModifyOperationContext opContext = new ModifyOperationContext( this, dn, serverModifications );
555
556 setReferralHandling( opContext, ignoreReferral );
557 opContext.setLogChange( log );
558
559 OperationManager operationManager = directoryService.getOperationManager();
560 operationManager.modify( opContext );
561 }
562
563
564 /**
565 * {@inheritDoc}
566 */
567 public void move( DN dn, DN newParent ) throws Exception
568 {
569 move( dn, newParent, LogChange.TRUE );
570 }
571
572
573 /**
574 * {@inheritDoc}
575 */
576 public void move( DN dn, DN newParent, LogChange log ) throws Exception
577 {
578 MoveOperationContext opContext = new MoveOperationContext( this, dn, newParent );
579
580 opContext.setLogChange( log );
581
582 OperationManager operationManager = directoryService.getOperationManager();
583 operationManager.move( opContext );
584 }
585
586
587 /**
588 * {@inheritDoc}
589 */
590 public void move( DN dn, DN newParent, boolean ignoreReferral ) throws Exception
591 {
592 move( dn, newParent, ignoreReferral, LogChange.TRUE );
593 }
594
595
596 /**
597 * {@inheritDoc}
598 */
599 public void move( DN dn, DN newParent, boolean ignoreReferral, LogChange log ) throws Exception
600 {
601 OperationManager operationManager = directoryService.getOperationManager();
602 MoveOperationContext opContext = new MoveOperationContext( this, dn, newParent );
603
604 setReferralHandling( opContext, ignoreReferral );
605 opContext.setLogChange( log );
606
607 operationManager.move( opContext );
608 }
609
610
611 /**
612 * {@inheritDoc}
613 */
614 public void moveAndRename( DN dn, DN newParent, RDN newRdn, boolean deleteOldRdn ) throws Exception
615 {
616 moveAndRename( dn, newParent, newRdn, deleteOldRdn, LogChange.TRUE );
617 }
618
619
620 /**
621 * {@inheritDoc}
622 */
623 public void moveAndRename( DN dn, DN newParent, RDN newRdn, boolean deleteOldRdn, LogChange log ) throws Exception
624 {
625 MoveAndRenameOperationContext opContext =
626 new MoveAndRenameOperationContext( this, dn, newParent, newRdn, deleteOldRdn );
627
628 opContext.setLogChange( log );
629
630 OperationManager operationManager = directoryService.getOperationManager();
631 operationManager.moveAndRename( opContext );
632 }
633
634
635 /**
636 * {@inheritDoc}
637 */
638 public void moveAndRename( DN dn, DN newParent, RDN newRdn, boolean deleteOldRdn, boolean ignoreReferral ) throws Exception
639 {
640 moveAndRename( dn, newParent, newRdn, deleteOldRdn, ignoreReferral, LogChange.TRUE );
641 }
642
643
644 /**
645 * {@inheritDoc}
646 */
647 public void moveAndRename( DN dn, DN newParent, RDN newRdn, boolean deleteOldRdn, boolean ignoreReferral, LogChange log ) throws Exception
648 {
649 OperationManager operationManager = directoryService.getOperationManager();
650 MoveAndRenameOperationContext opContext = new MoveAndRenameOperationContext( this, dn, newParent, newRdn, deleteOldRdn );
651
652 opContext.setLogChange( log );
653 setReferralHandling( opContext, ignoreReferral );
654
655 operationManager.moveAndRename( opContext );
656 }
657
658
659 /**
660 * {@inheritDoc}
661 */
662 public void rename( DN dn, RDN newRdn, boolean deleteOldRdn ) throws Exception
663 {
664 rename( dn, newRdn, deleteOldRdn, LogChange.TRUE );
665 }
666
667
668 /**
669 * {@inheritDoc}
670 */
671 public void rename( DN dn, RDN newRdn, boolean deleteOldRdn, LogChange log ) throws Exception
672 {
673 RenameOperationContext opContext = new RenameOperationContext( this, dn, newRdn, deleteOldRdn );
674
675 opContext.setLogChange( log );
676
677 OperationManager operationManager = directoryService.getOperationManager();
678
679 operationManager.rename( opContext );
680 }
681
682
683 /**
684 * {@inheritDoc}
685 */
686 public void rename( DN dn, RDN newRdn, boolean deleteOldRdn, boolean ignoreReferral ) throws Exception
687 {
688 rename( dn, newRdn, deleteOldRdn, ignoreReferral, LogChange.TRUE );
689 }
690
691
692 /**
693 * {@inheritDoc}
694 */
695 public void rename( DN dn, RDN newRdn, boolean deleteOldRdn, boolean ignoreReferral, LogChange log ) throws Exception
696 {
697 OperationManager operationManager = directoryService.getOperationManager();
698 RenameOperationContext opContext = new RenameOperationContext( this, dn, newRdn, deleteOldRdn );
699
700 opContext.setLogChange( log );
701 setReferralHandling( opContext, ignoreReferral );
702
703 operationManager.rename( opContext );
704 }
705
706
707 /**
708 * {@inheritDoc}
709 */
710 public EntryFilteringCursor search( DN dn, String filter ) throws Exception
711 {
712 return search( dn, filter, true );
713 }
714
715
716 /**
717 * {@inheritDoc}
718 */
719 public EntryFilteringCursor search( DN dn, String filter, boolean ignoreReferrals ) throws Exception
720 {
721 OperationManager operationManager = directoryService.getOperationManager();
722 ExprNode filterNode = FilterParser.parse( filter );
723
724 SearchOperationContext searchOperationContext = new SearchOperationContext( this, dn, SearchScope.OBJECT,
725 filterNode, null );
726 searchOperationContext.setAliasDerefMode( AliasDerefMode.DEREF_ALWAYS );
727 setReferralHandling( searchOperationContext, ignoreReferrals );
728
729 return operationManager.search( searchOperationContext );
730 }
731
732
733 /* (non-Javadoc)
734 * @see org.apache.directory.server.core.CoreSession#search(org.apache.directory.shared.ldap.name.DN, org.apache.directory.shared.ldap.filter.SearchScope, org.apache.directory.shared.ldap.filter.ExprNode, org.apache.directory.shared.ldap.message.AliasDerefMode, java.util.Set)
735 */
736 public EntryFilteringCursor search( DN dn, SearchScope scope, ExprNode filter, AliasDerefMode aliasDerefMode,
737 Set<AttributeTypeOptions> returningAttributes ) throws Exception
738 {
739 OperationManager operationManager = directoryService.getOperationManager();
740
741 SearchOperationContext searchOperationContext = new SearchOperationContext( this, dn, scope, filter,
742 returningAttributes );
743 searchOperationContext.setAliasDerefMode( aliasDerefMode );
744
745 return operationManager.search( searchOperationContext );
746 }
747
748
749 /* (non-Javadoc)
750 * @see org.apache.directory.server.core.CoreSession#search(org.apache.directory.shared.ldap.name.DN, org.apache.directory.shared.ldap.filter.SearchScope, org.apache.directory.shared.ldap.filter.ExprNode, org.apache.directory.shared.ldap.message.AliasDerefMode, java.util.Set, int, int)
751 */
752 public EntryFilteringCursor search( DN dn, SearchScope scope, ExprNode filter, AliasDerefMode aliasDerefMode,
753 Set<AttributeTypeOptions> returningAttributes, long sizeLimit, int timeLimit ) throws Exception
754 {
755 OperationManager operationManager = directoryService.getOperationManager();
756
757 SearchOperationContext searchOperationContext = new SearchOperationContext( this, dn, scope, filter,
758 returningAttributes );
759 searchOperationContext.setAliasDerefMode( aliasDerefMode );
760 searchOperationContext.setSizeLimit( sizeLimit );
761 searchOperationContext.setTimeLimit( timeLimit );
762
763 return operationManager.search( searchOperationContext );
764 }
765
766
767 public boolean isAnonymous()
768 {
769 return getEffectivePrincipal().getClonedName().isEmpty();
770 }
771
772
773 /**
774 * {@inheritDoc}
775 */
776 public boolean compare( InternalCompareRequest compareRequest ) throws Exception
777 {
778 CompareOperationContext opContext = new CompareOperationContext( this, compareRequest );
779 OperationManager operationManager = directoryService.getOperationManager();
780 boolean result = operationManager.compare( opContext );
781 compareRequest.getResultResponse().addAll( opContext.getResponseControls() );
782 return result;
783 }
784
785
786 /**
787 * {@inheritDoc}
788 */
789 public void delete( InternalDeleteRequest deleteRequest ) throws Exception
790 {
791 delete( deleteRequest, LogChange.TRUE );
792 }
793
794
795 /**
796 * {@inheritDoc}
797 */
798 public void delete( InternalDeleteRequest deleteRequest, LogChange log ) throws Exception
799 {
800 DeleteOperationContext opContext = new DeleteOperationContext( this, deleteRequest );
801
802 opContext.setLogChange( log );
803
804 OperationManager operationManager = directoryService.getOperationManager();
805 operationManager.delete( opContext );
806 deleteRequest.getResultResponse().addAll( opContext.getResponseControls() );
807 }
808
809
810 public boolean exists( DN dn ) throws Exception
811 {
812 EntryOperationContext opContext = new EntryOperationContext( this, dn );
813 OperationManager operationManager = directoryService.getOperationManager();
814 return operationManager.hasEntry( opContext );
815 }
816
817
818 /**
819 * {@inheritDoc}
820 */
821 public void modify( InternalModifyRequest modifyRequest ) throws Exception
822 {
823 modify( modifyRequest, LogChange.TRUE );
824 }
825
826
827 /**
828 * {@inheritDoc}
829 */
830 public void modify( InternalModifyRequest modifyRequest, LogChange log ) throws Exception
831 {
832 ModifyOperationContext opContext = new ModifyOperationContext( this, modifyRequest );
833
834 opContext.setLogChange( log );
835
836 OperationManager operationManager = directoryService.getOperationManager();
837 operationManager.modify( opContext );
838 modifyRequest.getResultResponse().addAll( opContext.getResponseControls() );
839 }
840
841
842 /**
843 * {@inheritDoc}
844 */
845 public void move( InternalModifyDnRequest modifyDnRequest ) throws Exception
846 {
847 move( modifyDnRequest, LogChange.TRUE );
848 }
849
850
851 /**
852 * {@inheritDoc}
853 */
854 public void move( InternalModifyDnRequest modifyDnRequest, LogChange log ) throws Exception
855 {
856 MoveOperationContext opContext = new MoveOperationContext( this, modifyDnRequest );
857
858 opContext.setLogChange( log );
859
860 OperationManager operationManager = directoryService.getOperationManager();
861 operationManager.move( opContext );
862 modifyDnRequest.getResultResponse().addAll( opContext.getResponseControls() );
863 }
864
865
866 /**
867 * {@inheritDoc}
868 */
869 public void moveAndRename( InternalModifyDnRequest modifyDnRequest ) throws Exception
870 {
871 moveAndRename( modifyDnRequest, LogChange.TRUE );
872 }
873
874
875 /**
876 * {@inheritDoc}
877 */
878 public void moveAndRename( InternalModifyDnRequest modifyDnRequest, LogChange log ) throws Exception
879 {
880 MoveAndRenameOperationContext opContext = new MoveAndRenameOperationContext( this, modifyDnRequest );
881
882 opContext.setLogChange( log );
883
884 OperationManager operationManager = directoryService.getOperationManager();
885 operationManager.moveAndRename( opContext );
886 modifyDnRequest.getResultResponse().addAll( opContext.getResponseControls() );
887 }
888
889
890 /**
891 * {@inheritDoc}
892 */
893 public void rename( InternalModifyDnRequest modifyDnRequest ) throws Exception
894 {
895 rename( modifyDnRequest, LogChange.TRUE );
896 }
897
898
899 /**
900 * {@inheritDoc}
901 */
902 public void rename( InternalModifyDnRequest modifyDnRequest, LogChange log ) throws Exception
903 {
904 RenameOperationContext opContext = new RenameOperationContext( this, modifyDnRequest );
905
906 opContext.setLogChange( log );
907
908 OperationManager operationManager = directoryService.getOperationManager();
909 operationManager.rename( opContext );
910 modifyDnRequest.getResultResponse().addAll( opContext.getResponseControls() );
911 }
912
913
914 public EntryFilteringCursor search( InternalSearchRequest searchRequest ) throws Exception
915 {
916 SearchOperationContext opContext = new SearchOperationContext( this, searchRequest );
917 OperationManager operationManager = directoryService.getOperationManager();
918 EntryFilteringCursor cursor = operationManager.search( opContext );
919 searchRequest.getResultResponse().addAll( opContext.getResponseControls() );
920
921 return cursor;
922 }
923
924
925 public void unbind() throws Exception
926 {
927 OperationManager operationManager = directoryService.getOperationManager();
928 operationManager.unbind( new UnbindOperationContext( this ) );
929 }
930
931
932 public void unbind( InternalUnbindRequest unbindRequest )
933 {
934 // TODO Auto-generated method stub
935
936 }
937 }