Exemple #1
0
        public IConfigurable Read <T>(ObjectId identity) where T : IConfigurable, new()
        {
            if (identity == null)
            {
                throw new ArgumentNullException("identity");
            }
            if (this.serviceInstanceName == null)
            {
                throw new InvalidOperationException("Read can be performed only for specific service instance.");
            }
            SyncObjectId syncObjectId = identity as SyncObjectId;

            if (syncObjectId == null)
            {
                throw new NotSupportedException(identity.GetType().FullName);
            }
            this.RefreshRidMasterInformation();
            MsoMainStreamCookieContainer msoMainStreamCookieContainer = this.configurationSession.GetMsoMainStreamCookieContainer(this.serviceInstanceName);
            MultiValuedProperty <FullSyncObjectRequest> msoForwardSyncObjectFullSyncRequests = msoMainStreamCookieContainer.MsoForwardSyncObjectFullSyncRequests;

            foreach (FullSyncObjectRequest fullSyncObjectRequest in msoForwardSyncObjectFullSyncRequests)
            {
                if (syncObjectId.Equals(fullSyncObjectRequest.Identity))
                {
                    fullSyncObjectRequest.ResetChangeTracking(true);
                    return(fullSyncObjectRequest);
                }
            }
            return(null);
        }
Exemple #2
0
        public void PersistNewDivergence(SyncObjectId syncObjectId, DateTime divergenceTime, bool incrementalOnly, bool linkRelated, bool temporary, bool tenantWide, string[] errors, bool validationDivergence, bool retriable, IDictionary divergenceInfoTable)
        {
            FailedMSOSyncObject failedMSOSyncObject = new FailedMSOSyncObject();

            failedMSOSyncObject.LoadDivergenceInfoXml();
            failedMSOSyncObject.SetId(this.GetDivergenceObjectId(syncObjectId));
            failedMSOSyncObject.ObjectId               = syncObjectId;
            failedMSOSyncObject.DivergenceTimestamp    = new DateTime?(divergenceTime);
            failedMSOSyncObject.IsIncrementalOnly      = incrementalOnly;
            failedMSOSyncObject.IsLinkRelated          = linkRelated;
            failedMSOSyncObject.IsTemporary            = temporary;
            failedMSOSyncObject.DivergenceCount        = 1;
            failedMSOSyncObject.IsTenantWideDivergence = tenantWide;
            failedMSOSyncObject.IsValidationDivergence = validationDivergence;
            failedMSOSyncObject.IsRetriable            = retriable;
            if (failedMSOSyncObject.IsValidationDivergence)
            {
                failedMSOSyncObject.IsIgnoredInHaltCondition = true;
            }
            else
            {
                failedMSOSyncObject.IsIgnoredInHaltCondition = false;
            }
            failedMSOSyncObject.Errors = new MultiValuedProperty <string>();
            if (errors != null)
            {
                ForwardSyncDataAccessHelper.AddErrors(errors, failedMSOSyncObject);
            }
            if (divergenceInfoTable != null)
            {
                ForwardSyncDataAccessHelper.SetDivergenceInfoValues(divergenceInfoTable, failedMSOSyncObject);
                failedMSOSyncObject.SaveDivergenceInfoXml();
            }
            this.SaveDivergence(failedMSOSyncObject);
        }
Exemple #3
0
        private void ProcessMsoRawObject(SyncObjectId syncObjectId, string serviceInstanceId)
        {
            if (this.service == null)
            {
                this.service = new MsoSyncService();
            }
            bool?allLinksCollected;
            DirectoryObjectsAndLinks msoRawObject = this.service.GetMsoRawObject(syncObjectId, serviceInstanceId, this.IncludeBackLinks.IsPresent, this.IncludeForwardLinks.IsPresent, base.Fields.IsModified("LinksResultSize") ? this.LinksResultSize : 1000, out allLinksCollected);

            if (msoRawObject.Objects.Length != 0)
            {
                MsoRawObject msoRawObject2 = new MsoRawObject(syncObjectId, serviceInstanceId, msoRawObject, allLinksCollected, this.PopulateRawObject.IsPresent);
                msoRawObject2.PopulateSyncObjectData();
                base.WriteObject(msoRawObject2);
                return;
            }
            StringBuilder stringBuilder = new StringBuilder();

            if (msoRawObject.Errors.Length != 0)
            {
                foreach (DirectoryObjectError directoryObjectError in msoRawObject.Errors)
                {
                    stringBuilder.Append(directoryObjectError.ErrorCode);
                    stringBuilder.Append(";");
                }
            }
            else
            {
                stringBuilder.Append("no errors");
            }
            this.WriteError(new Exception(Strings.MsoObjectNotFound(syncObjectId.ToString(), stringBuilder.ToString())), ErrorCategory.ObjectNotFound, null, false);
        }
Exemple #4
0
        public override void ReportExcludedObject(PropertyBag propertyBag, DirectoryObjectErrorCode errorCode, ProcessingStage processingStage)
        {
            SyncObjectId syncObjectId = FullSyncObjectErrorReporter.GetSyncObjectId(propertyBag);

            if (syncObjectId != null)
            {
                this.ReportExcludedObject(syncObjectId, errorCode, processingStage);
                return;
            }
            base.ReportExcludedObject(propertyBag, errorCode, processingStage);
            DirectoryObjectError directoryObjectError = new DirectoryObjectError();

            directoryObjectError.ErrorCode = errorCode;
            directoryObjectError.ObjectId  = (string)propertyBag[SyncObjectSchema.ObjectId];
            if (propertyBag.Contains(ADObjectSchema.ObjectClass))
            {
                directoryObjectError.ObjectClass = SyncRecipient.GetRecipientType(propertyBag);
            }
            if (propertyBag.Contains(SyncObjectSchema.ContextId))
            {
                directoryObjectError.ContextId = (string)propertyBag[SyncObjectSchema.ContextId];
            }
            this.errors.Add(directoryObjectError);
            if (this.performanceCounterSession != null)
            {
                this.performanceCounterSession.IncrementUserError();
            }
        }
        // Token: 0x06000903 RID: 2307 RVA: 0x0001F59C File Offset: 0x0001D79C
        protected void GetSyncObjectIdElements(out string contextIdString, out string objectIdString, out string objectClassString)
        {
            if (this.syncObjectId != null)
            {
                contextIdString   = this.syncObjectId.ContextId;
                objectIdString    = this.syncObjectId.ObjectId;
                objectClassString = this.syncObjectId.ObjectClass.ToString();
                return;
            }
            contextIdString   = null;
            objectIdString    = null;
            objectClassString = null;
            string[] identityElements = SyncObjectId.GetIdentityElements(this.SyncObjectIdentity);
            if (this.SyncObjectIdentity.EndsWith("*"))
            {
                switch (identityElements.Length)
                {
                case 1:
                    goto IL_8A;

                case 2:
                    break;

                case 3:
                    objectIdString = identityElements[2];
                    break;

                default:
                    return;
                }
                objectClassString = identityElements[1];
IL_8A:
                contextIdString = identityElements[0];
                return;
            }
            switch (identityElements.Length)
            {
            case 1:
                objectIdString = identityElements[0];
                return;

            case 2:
                objectIdString    = identityElements[1];
                objectClassString = identityElements[0];
                return;

            case 3:
                objectIdString    = identityElements[2];
                objectClassString = identityElements[1];
                contextIdString   = identityElements[0];
                return;

            default:
                return;
            }
        }
 // Token: 0x0600090A RID: 2314 RVA: 0x0001F8B4 File Offset: 0x0001DAB4
 private void CheckObjectClassIsValid()
 {
     string[] identityElements = SyncObjectId.GetIdentityElements(this.SyncObjectIdentity);
     if (this.SyncObjectIdentity.EndsWith("*") && identityElements.Length > 1 && identityElements[1] != "*" && !Enum.IsDefined(typeof(DirectoryObjectClass), identityElements[1]))
     {
         throw new ArgumentException(Strings.ErrorInvalidParameterFormat("identity"), "identity");
     }
     if (this.SyncObjectIdentity.StartsWith("*") && identityElements.Length > 1 && identityElements[identityElements.Length - 2] != "*" && !Enum.IsDefined(typeof(DirectoryObjectClass), identityElements[identityElements.Length - 2]))
     {
         throw new ArgumentException(Strings.ErrorInvalidParameterFormat("identity"), "identity");
     }
 }
 // Token: 0x06000904 RID: 2308 RVA: 0x0001F674 File Offset: 0x0001D874
 private static bool TryParseSyncObjectId(string identity, out SyncObjectId syncObjectId)
 {
     syncObjectId = null;
     try
     {
         syncObjectId = SyncObjectId.Parse(identity);
     }
     catch (ArgumentException)
     {
         return(false);
     }
     return(true);
 }
Exemple #8
0
        public override void ReportExcludedObject(SyncObjectId objectId, DirectoryObjectErrorCode errorCode, ProcessingStage processingStage)
        {
            base.ReportExcludedObject(objectId, errorCode, processingStage);
            DirectoryObjectError directoryObjectError = new DirectoryObjectError();

            directoryObjectError.ErrorCode            = errorCode;
            directoryObjectError.ObjectId             = objectId.ObjectId;
            directoryObjectError.ContextId            = objectId.ContextId;
            directoryObjectError.ObjectClass          = objectId.ObjectClass;
            directoryObjectError.ObjectClassSpecified = true;
            this.errors.Add(directoryObjectError);
            if (this.performanceCounterSession != null)
            {
                this.performanceCounterSession.IncrementUserError();
            }
        }
Exemple #9
0
 public override void ReportExcludedObject(SyncObjectId objectId, DirectoryObjectErrorCode errorCode, ProcessingStage processingStage)
 {
     base.ReportExcludedObject(objectId, errorCode, processingStage);
     this.verboseLoggingDelegate(Strings.BackSyncObjectExcluded(objectId.ToString(), errorCode, processingStage));
 }
Exemple #10
0
 public virtual void ReportExcludedObject(SyncObjectId objectId, DirectoryObjectErrorCode errorCode, ProcessingStage processingStage)
 {
     ExcludedObjectReporter.LogExcludedObject(objectId.ToString(), errorCode, processingStage);
 }
Exemple #11
0
        internal MsoRawObject(SyncObjectId externalObjectId, string serviceInstanceId, DirectoryObjectsAndLinks directoryObjectsAndLinks, bool?allLinksCollected, bool populateRawObject) : this()
        {
            this.ExternalObjectId         = externalObjectId;
            this.ServiceInstanceId        = serviceInstanceId;
            this.SerializedObjectAndLinks = this.SerializeForRpsDelivery(directoryObjectsAndLinks);
            this.MySyncObject             = SyncObject.Create(directoryObjectsAndLinks.Objects[0], directoryObjectsAndLinks.Links, Guid.Empty);
            if (populateRawObject)
            {
                this.ObjectAndLinks = directoryObjectsAndLinks;
            }
            if (allLinksCollected != null)
            {
                this.AllLinksCollected = allLinksCollected;
                this.LinksCollected    = new int?((directoryObjectsAndLinks.Links == null) ? 0 : directoryObjectsAndLinks.Links.Length);
            }
            switch (externalObjectId.ObjectClass)
            {
            case DirectoryObjectClass.Account:
            {
                Account account = (Account)directoryObjectsAndLinks.Objects[0];
                if (account.DisplayName != null)
                {
                    this.DisplayName = account.DisplayName.Value[0];
                    return;
                }
                break;
            }

            case DirectoryObjectClass.Company:
            {
                Company company = (Company)directoryObjectsAndLinks.Objects[0];
                if (company.DisplayName != null)
                {
                    this.DisplayName = company.DisplayName.Value[0];
                }
                if (company.AssignedPlan != null)
                {
                    this.AssignedPlanCapabilities = this.CollectCapabilities(company.AssignedPlan.Value);
                    return;
                }
                break;
            }

            case DirectoryObjectClass.Contact:
            {
                Contact contact = (Contact)directoryObjectsAndLinks.Objects[0];
                if (contact.DisplayName != null)
                {
                    this.DisplayName = contact.DisplayName.Value[0];
                }
                if (contact.ValidationError != null && contact.ValidationError.Value != null)
                {
                    this.ExchangeValidationError = this.CollectErrorDetails(contact.ValidationError.Value);
                    return;
                }
                break;
            }

            case DirectoryObjectClass.Device:
            case DirectoryObjectClass.KeyGroup:
            case DirectoryObjectClass.ServicePrincipal:
            case DirectoryObjectClass.SubscribedPlan:
                break;

            case DirectoryObjectClass.ForeignPrincipal:
            {
                ForeignPrincipal foreignPrincipal = (ForeignPrincipal)directoryObjectsAndLinks.Objects[0];
                if (foreignPrincipal.DisplayName != null)
                {
                    this.DisplayName = foreignPrincipal.DisplayName.Value[0];
                    return;
                }
                break;
            }

            case DirectoryObjectClass.Group:
            {
                Group group = (Group)directoryObjectsAndLinks.Objects[0];
                if (group.DisplayName != null)
                {
                    this.DisplayName = group.DisplayName.Value[0];
                }
                if (group.ValidationError != null && group.ValidationError.Value != null)
                {
                    this.ExchangeValidationError = this.CollectErrorDetails(group.ValidationError.Value);
                }
                break;
            }

            case DirectoryObjectClass.User:
            {
                User user = (User)directoryObjectsAndLinks.Objects[0];
                if (user.DisplayName != null)
                {
                    this.DisplayName = user.DisplayName.Value[0];
                }
                if (user.WindowsLiveNetId != null)
                {
                    this.WindowsLiveNetId = new NetID(user.WindowsLiveNetId.Value[0]);
                }
                if (user.AssignedPlan != null)
                {
                    this.AssignedPlanCapabilities = this.CollectCapabilities(user.AssignedPlan.Value);
                }
                if (user.ValidationError != null && user.ValidationError.Value != null)
                {
                    this.ExchangeValidationError = this.CollectErrorDetails(user.ValidationError.Value);
                    return;
                }
                break;
            }

            default:
                return;
            }
        }
Exemple #12
0
        public virtual FailedMSOSyncObject GetExistingDivergence(SyncObjectId syncObjectId)
        {
            ADObjectId divergenceObjectId = this.GetDivergenceObjectId(syncObjectId);

            return(this.configSession.Read <FailedMSOSyncObject>(divergenceObjectId));
        }
Exemple #13
0
 public void PersistNewDivergence(SyncObjectId syncObjectId, DateTime divergenceTime, bool incrementalOnly, bool linkRelated, bool temporary, bool tenantWide, string[] errors)
 {
     this.PersistNewDivergence(syncObjectId, divergenceTime, incrementalOnly, linkRelated, temporary, tenantWide, errors, false, true, null);
 }
Exemple #14
0
 protected virtual ADObjectId GetDivergenceObjectId(SyncObjectId syncObjectId)
 {
     return(this.divergenceContainerObjectId.GetChildId(FailedMSOSyncObject.GetObjectName(syncObjectId)));
 }
Exemple #15
0
        public DirectoryObjectsAndLinks GetMsoRawObject(SyncObjectId syncObjectId, string serviceInstanceId, bool includeBackLinks, bool includeForwardLinks, int linksResultSize, out bool?allLinksCollected)
        {
            DirectoryObjectIdentity[] array = new DirectoryObjectIdentity[]
            {
                syncObjectId.ToMsoIdentity()
            };
            DirectoryObject[]        array2 = new DirectoryObject[1];
            DirectoryLink[]          array3 = new DirectoryLink[0];
            DirectoryObjectError[]   array4 = new DirectoryObjectError[0];
            DirectoryObjectsAndLinks directoryObjectsAndLinks = new DirectoryObjectsAndLinks
            {
                NextPageToken = null,
                More          = true
            };

            byte[] msoSyncCookie = this.GetMsoSyncCookie(serviceInstanceId);
            GetDirectoryObjectsOptions?getDirectoryObjectsOptions = new GetDirectoryObjectsOptions?(GetDirectoryObjectsOptions.None);

            if (includeBackLinks)
            {
                getDirectoryObjectsOptions |= GetDirectoryObjectsOptions.IncludeBackLinks;
            }
            if (includeForwardLinks)
            {
                getDirectoryObjectsOptions |= GetDirectoryObjectsOptions.IncludeForwardLinks;
            }
            if (includeForwardLinks || includeBackLinks)
            {
                allLinksCollected = new bool?(true);
            }
            else
            {
                allLinksCollected = null;
            }
            while (directoryObjectsAndLinks.More)
            {
                GetDirectoryObjectsRequest  request          = new GetDirectoryObjectsRequest((directoryObjectsAndLinks.NextPageToken == null) ? msoSyncCookie : null, (directoryObjectsAndLinks.NextPageToken == null) ? array : null, (directoryObjectsAndLinks.NextPageToken == null) ? getDirectoryObjectsOptions : null, directoryObjectsAndLinks.NextPageToken);
                GetDirectoryObjectsResponse directoryObjects = this.SyncProxy.GetDirectoryObjects(request);
                if (directoryObjects.GetDirectoryObjectsResult.Objects != null && directoryObjects.GetDirectoryObjectsResult.Objects.Length != 0 && array2[0] == null)
                {
                    directoryObjects.GetDirectoryObjectsResult.Objects.CopyTo(array2, 0);
                }
                if (allLinksCollected == true && directoryObjects.GetDirectoryObjectsResult.Links != null && directoryObjects.GetDirectoryObjectsResult.Links.Length != 0 && array3.Length <= linksResultSize)
                {
                    if (array3.Length == linksResultSize)
                    {
                        allLinksCollected = new bool?(false);
                    }
                    else
                    {
                        int num  = array3.Length;
                        int num2 = array3.Length + directoryObjects.GetDirectoryObjectsResult.Links.Length;
                        int num3 = Math.Min(linksResultSize, num2);
                        if (num2 > linksResultSize)
                        {
                            allLinksCollected = new bool?(false);
                        }
                        Array.Resize <DirectoryLink>(ref array3, num3);
                        Array.Copy(directoryObjects.GetDirectoryObjectsResult.Links, 0, array3, num, num3 - num);
                    }
                }
                if (directoryObjects.GetDirectoryObjectsResult.Errors != null && directoryObjects.GetDirectoryObjectsResult.Errors.Length != 0)
                {
                    Array.Resize <DirectoryObjectError>(ref array4, array4.Length + directoryObjects.GetDirectoryObjectsResult.Errors.Length);
                    directoryObjects.GetDirectoryObjectsResult.Errors.CopyTo(array4, array4.Length - directoryObjects.GetDirectoryObjectsResult.Errors.Length);
                }
                directoryObjectsAndLinks.NextPageToken = directoryObjects.GetDirectoryObjectsResult.NextPageToken;
                directoryObjectsAndLinks.More          = directoryObjects.GetDirectoryObjectsResult.More;
            }
            directoryObjectsAndLinks.Objects = ((array2 != null && array2[0] != null) ? array2 : new DirectoryObject[0]);
            directoryObjectsAndLinks.Links   = array3;
            directoryObjectsAndLinks.Errors  = array4;
            return(directoryObjectsAndLinks);
        }