Esempio n. 1
0
        private static MservRecord GetRecord(IPropertyBag propertyBag, MservValueFormat format, bool createIfMissing, out MServPropertyDefinition recordPropDef)
        {
            MservRecord mservRecord  = (MservRecord)propertyBag[MServRecipientSchema.MservPrimaryRecord];
            MservRecord mservRecord2 = (MservRecord)propertyBag[MServRecipientSchema.MservSecondaryRecord];

            if (mservRecord != null && mservRecord.ValueFormat == format)
            {
                recordPropDef = MServRecipientSchema.MservPrimaryRecord;
                return(mservRecord);
            }
            if (mservRecord2 != null && mservRecord2.ValueFormat == format)
            {
                recordPropDef = MServRecipientSchema.MservSecondaryRecord;
                return(mservRecord2);
            }
            if (!createIfMissing)
            {
                recordPropDef = null;
                return(null);
            }
            bool flag = mservRecord == null;

            if (mservRecord != null && mservRecord2 != null)
            {
                throw new DataValidationException(new PropertyValidationError(DirectoryStrings.CrossRecordMismatch(mservRecord, mservRecord2), MServRecipientSchema.MservPrimaryRecord, mservRecord));
            }
            string puidKey    = MServRecipientSchema.GetPuidKey(propertyBag);
            byte   resourceId = flag ? 0 : 7;

            recordPropDef = (flag ? MServRecipientSchema.MservPrimaryRecord : MServRecipientSchema.MservSecondaryRecord);
            byte flags = 0;

            if (!flag)
            {
                flags = mservRecord.Flags;
            }
            MservRecord mservRecord3 = new MservRecord(puidKey, resourceId, null, null, flags);

            propertyBag[recordPropDef] = mservRecord3;
            return(mservRecord3);
        }
Esempio n. 2
0
        // Token: 0x06000F02 RID: 3842 RVA: 0x0004881C File Offset: 0x00046A1C
        private List <MservChange> BuildChangeList(ADRawEntry instanceToSave, out bool isSwap)
        {
            List <MservChange> list = new List <MservChange>();

            isSwap = false;
            foreach (PropertyDefinition propertyDefinition in MservRecipientSession.MServRecipientSchema.AllProperties)
            {
                MServPropertyDefinition mservPropertyDefinition = (MServPropertyDefinition)propertyDefinition;
                if (!mservPropertyDefinition.IsCalculated && (instanceToSave.propertyBag.IsChanged(mservPropertyDefinition) || mservPropertyDefinition.IsMultivalued) && !mservPropertyDefinition.IsTaskPopulated)
                {
                    object obj = null;
                    instanceToSave.propertyBag.TryGetField(mservPropertyDefinition, ref obj);
                    if (!mservPropertyDefinition.IsMultivalued || (obj != null && ((MultiValuedPropertyBase)obj).Changed))
                    {
                        ExTraceGlobals.ADSaveTracer.TraceDebug <string>((long)this.GetHashCode(), "MservRecipientSession::Save - updating {0}", mservPropertyDefinition.Name);
                        if (!mservPropertyDefinition.IsMultivalued)
                        {
                            object obj2;
                            instanceToSave.propertyBag.TryGetOriginalValue(mservPropertyDefinition, out obj2);
                            MservRecord mservRecord  = (MservRecord)obj;
                            MservRecord mservRecord2 = (MservRecord)obj2;
                            if (mservRecord != null && mservRecord.IsEmpty)
                            {
                                mservRecord = null;
                            }
                            list.Add(new MservChange(mservRecord, mservRecord2));
                            if (mservRecord != null && mservRecord2 != null && mservRecord.ResourceId != mservRecord2.ResourceId)
                            {
                                isSwap = true;
                                if (mservRecord.Value != mservRecord2.Value)
                                {
                                    throw new MservOperationException(DirectoryStrings.SwapShouldNotChangeValues(mservRecord2.Value, mservRecord2.ResourceId, mservRecord.Value, mservRecord.ResourceId));
                                }
                            }
                        }
                        else
                        {
                            MultiValuedPropertyBase multiValuedPropertyBase = (MultiValuedPropertyBase)obj;
                            if (multiValuedPropertyBase.WasCleared)
                            {
                                throw new MservOperationException(DirectoryStrings.NoResetOrAssignedMvp);
                            }
                            foreach (object obj3 in multiValuedPropertyBase.Removed)
                            {
                                list.Add(new MservChange(null, (MservRecord)obj3));
                            }
                            foreach (object obj4 in multiValuedPropertyBase.Added)
                            {
                                list.Add(new MservChange((MservRecord)obj4, null));
                            }
                        }
                    }
                }
            }
            if (isSwap)
            {
                if (list.Count != 2)
                {
                    throw new MservOperationException(DirectoryStrings.BadSwapOperationCount(list.Count));
                }
                if (list[0].OldValue.ResourceId != list[1].NewValue.ResourceId || list[0].NewValue.ResourceId != list[1].OldValue.ResourceId)
                {
                    throw new MservOperationException(DirectoryStrings.BadSwapResourceIds(list[0].OldValue.ResourceId, list[0].NewValue.ResourceId, list[1].OldValue.ResourceId, list[1].NewValue.ResourceId));
                }
            }
            return(list);
        }
Esempio n. 3
0
        private static void UpdateRecordFlag(bool value, byte mask, IPropertyBag propertyBag, MServPropertyDefinition propertyDefinition)
        {
            MservRecord mservRecord = (MservRecord)propertyBag[propertyDefinition];

            if (mservRecord != null)
            {
                MservRecord updatedRecordFlag = mservRecord.GetUpdatedRecordFlag(value, mask);
                propertyBag[propertyDefinition] = updatedRecordFlag;
            }
        }