示例#1
0
 internal LdapAbandonRequest(Asn1LdapMessage message) : base(message)
 {
     MessageId = message.ProtocolOp.AbandonRequest.Value;
     if (MessageId < 0)
     {
         throw new LdapProtocolException("invalid messageID");
     }
 }
示例#2
0
        internal LdapCompareRequest(Asn1LdapMessage message)
            : base(message)
        {
            var compare = message.ProtocolOp.CompareRequest;

            Entry     = new LdapDistinguishedName(compare.Entry.Span);
            Assertion = new LdapAttributeAssertion(compare.Assertion);
        }
示例#3
0
 internal LdapResponseMessage(Asn1LDAPResult result, Asn1LdapMessage message)
     : base(message)
 {
     ResultCode        = result.ResultCode;
     MatchedDN         = new LdapDistinguishedName(result.MatchedDN.Span);
     DiagnosticMessage = result.DiagnosticMessage.Span.LdapString();
     Referrals         = this.GetReferrals(result.Referral);
 }
示例#4
0
        internal LdapExtendedRequest(Asn1LdapMessage message)
            : base(message)
        {
            var extended = message.ProtocolOp.ExtendedRequest;

            Name  = extended.Name.Span.NumericOid();
            Value = extended.Value;
        }
示例#5
0
 internal LdapRequestMessage(Asn1LdapMessage message)
 {
     Id = message.MessageID;
     if (Id < 0)
     {
         throw new LdapProtocolException("invalid messageID");
     }
     Controls = LdapControl.Create(message.Controls);
 }
        internal LdapIntermediateResponse(Asn1LdapMessage message) : base(message)
        {
            var intermediate = message.ProtocolOp.IntermediateResponse;

            if (intermediate.Name.HasValue)
            {
                Name = intermediate.Name.Value.Span.NumericOid();
            }
            Value = intermediate.Value;
        }
示例#7
0
        internal LdapBindResponse(Asn1LdapMessage message)
            : base(message)
        {
            var bindResponse = message.ProtocolOp.BindResponse;

            ResultCode        = bindResponse.ResultCode;
            MatchedDN         = new LdapDistinguishedName(bindResponse.MatchedDN.Span);
            DiagnosticMessage = bindResponse.DiagnosticMessage.Span.LdapString();
            Referrals         = this.GetReferrals(bindResponse.Referral);
            ServerSaslCreds   = bindResponse.ServerSaslCreds;
        }
示例#8
0
        internal LdapModifyDNRequest(Asn1LdapMessage message) : base(message)
        {
            var modify = message.ProtocolOp.ModifyDNRequest;

            Entry        = new LdapDistinguishedName(modify.Entry.Span);
            NewRDN       = new LdapRelativeDistinguishedName(modify.NewRDN.Span.LdapString());
            DeleteOldRDN = modify.DeleteOldRDN;
            if (modify.NewSuperior.HasValue)
            {
                NewSuperior = new LdapDistinguishedName(modify.NewSuperior.Value.Span);
            }
        }
示例#9
0
        internal Asn1LdapMessage GetAsn()
        {
            var result = new Asn1LdapMessage
            {
                MessageID  = Id,
                Controls   = LdapControl.Create(Controls),
                ProtocolOp = new Asn1ProtocolOp()
            };

            SetProtocolOp(result.ProtocolOp);
            return(result);
        }
示例#10
0
        internal LdapModifyRequest(Asn1LdapMessage message)
            : base(message)
        {
            var modify = message.ProtocolOp.ModifyRequest;

            ObjectDN = new LdapDistinguishedName(modify.Object.Span);
            var changes = new LdapChange[modify.Changes.Length];

            for (int i = 0; i < modify.Changes.Length; i++)
            {
                changes[i] = new LdapChange(modify.Changes[i]);
            }
            Changes = changes;
        }
示例#11
0
        internal LdapExtendedResponse(Asn1LdapMessage message)
            : base(message)
        {
            var extended = message.ProtocolOp.ExtendedResponse;

            ResultCode        = extended.ResultCode;
            MatchedDN         = new LdapDistinguishedName(extended.MatchedDN.Span);
            DiagnosticMessage = extended.DiagnosticMessage.Span.LdapString();
            Referrals         = this.GetReferrals(extended.Referral);
            if (extended.Name.HasValue)
            {
                Name = extended.Name.Value.Span.NumericOid();
            }
            Value = extended.Value;
        }
示例#12
0
        internal LdapAddRequest(Asn1LdapMessage message)
            : base(message)
        {
            var add = message.ProtocolOp.AddRequest;

            Entry = new LdapDistinguishedName(add.Entry.Span);
            if (add.Attributes.Length == 0)
            {
                throw new ArgumentException("at least one attribute required");
            }
            var attributes = new LdapAttribute[add.Attributes.Length];

            for (int i = 0; i < add.Attributes.Length; i++)
            {
                attributes[i] = new LdapAttribute(add.Attributes[i]);
            }
            Attributes = attributes;
        }
示例#13
0
        internal LdapSearchRequest(Asn1LdapMessage message)
            : base(message)
        {
            var search = message.ProtocolOp.SearchRequest;

            BaseObject   = new LdapDistinguishedName(search.BaseObject.Span);
            Scope        = search.Scope;
            DerefAliases = search.DerefAliases;
            if (DerefAliases < DerefAliases.NeverDerefAliases || DerefAliases > DerefAliases.DerefAlways)
            {
                throw new LdapProtocolException("invalid derefAliases");
            }
            SizeLimit = search.SizeLimit;
            if (SizeLimit == 0)
            {
                SizeLimit = Int32.MaxValue;
            }
            else if (SizeLimit < 0)
            {
                throw new LdapProtocolException("invalid sizeLimit");
            }
            TimeLimit = TimeSpan.FromSeconds(search.TimeLimit);
            if (TimeLimit < TimeSpan.Zero)
            {
                throw new LdapProtocolException("invalid timeLimit");
            }
            TypesOnly = search.TypesOnly;
            Filter    = LdapFilter.Create(search.Filter);
            if (search.Attributes.Length > 0)
            {
                var attributes = new LdapAttributeSelection[search.Attributes.Length];
                for (int i = 0; i < search.Attributes.Length; i++)
                {
                    attributes[i] = new LdapAttributeSelection(search.Attributes[i].Span);
                }
                Attributes = attributes;
            }
            else
            {
                Attributes = Array.Empty <LdapAttributeSelection>();
            }
        }
示例#14
0
        internal LdapSearchResultEntry(Asn1LdapMessage message)
            : base(message)
        {
            var search = message.ProtocolOp.SearchResEntry;

            ObjectName = new LdapDistinguishedName(search.ObjectName.Span);
            if (search.Attributes.Length > 0)
            {
                var attributes = new LdapAttribute[search.Attributes.Length];
                for (int i = 0; i < search.Attributes.Length; i++)
                {
                    attributes[i] = new LdapAttribute(search.Attributes[i]);
                }
                Attributes = attributes;
            }
            else
            {
                Attributes = Array.Empty <LdapAttribute>();
            }
        }
示例#15
0
        internal LdapBindRequest(Asn1LdapMessage message)
            : base(message)
        {
            var bindRequest = message.ProtocolOp.BindRequest;

            Version = bindRequest.Version;
            if (Version < 1 || Version > 127)
            {
                throw new ArgumentException("invalid LDAP version");
            }
            Name = new LdapDistinguishedName(bindRequest.Name.Span);
            var auth = bindRequest.Authentication;

            if (auth.Simple != null)
            {
                Simple = auth.Simple.Value.ToArray();
            }
            else if (auth.Sasl != null)
            {
                var sasl = auth.Sasl;
                SaslMechanism   = sasl.Mechanism.Span.LdapString();
                SaslCredentials = sasl.Credentials;
            }
        }
示例#16
0
 internal LdapSearchResultReference(Asn1LdapMessage message)
     : base(message)
 {
     Uris = LdapResultExtensions.GetReferrals(message.ProtocolOp.SearchResultReference);
 }
示例#17
0
 internal LdapAddResponse(Asn1LdapMessage message)
     : base(message.ProtocolOp.AddResponse, message)
 {
 }
示例#18
0
 internal LdapSearchResultDone(Asn1LdapMessage message)
     : base(message.ProtocolOp.SearchResultDone, message)
 {
 }
示例#19
0
 internal LdapUnbindRequest(Asn1LdapMessage message)
     : base(message)
 {
 }
示例#20
0
 internal static LdapRequestMessage Create(Asn1LdapMessage message)
 {
     if (message.ProtocolOp.BindRequest != null)
     {
         return(new LdapBindRequest(message));
     }
     else if (message.ProtocolOp.BindResponse != null)
     {
         return(new LdapBindResponse(message));
     }
     else if (message.ProtocolOp.DelRequest != null)
     {
         return(new LdapDeleteRequest(message));
     }
     else if (message.ProtocolOp.SearchRequest != null)
     {
         return(new LdapSearchRequest(message));
     }
     else if (message.ProtocolOp.UnbindRequest != null)
     {
         return(new LdapUnbindRequest(message));
     }
     else if (message.ProtocolOp.SearchResEntry != null)
     {
         return(new LdapSearchResultEntry(message));
     }
     else if (message.ProtocolOp.SearchResultDone != null)
     {
         return(new LdapSearchResultDone(message));
     }
     else if (message.ProtocolOp.SearchResultReference != null)
     {
         return(new LdapSearchResultReference(message));
     }
     else if (message.ProtocolOp.ModifyRequest != null)
     {
         return(new LdapModifyRequest(message));
     }
     else if (message.ProtocolOp.ModifyResponse != null)
     {
         return(new LdapModifyResponse(message));
     }
     else if (message.ProtocolOp.AddRequest != null)
     {
         return(new LdapAddRequest(message));
     }
     else if (message.ProtocolOp.AddResponse != null)
     {
         return(new LdapAddResponse(message));
     }
     else if (message.ProtocolOp.DelResponse != null)
     {
         return(new LdapDeleteResponse(message));
     }
     else if (message.ProtocolOp.ModifyDNRequest != null)
     {
         return(new LdapModifyDNRequest(message));
     }
     else if (message.ProtocolOp.ModifyDNResponse != null)
     {
         return(new LdapModifyDNResponse(message));
     }
     else if (message.ProtocolOp.CompareRequest != null)
     {
         return(new LdapCompareRequest(message));
     }
     else if (message.ProtocolOp.CompareResponse != null)
     {
         return(new LdapCompareResponse(message));
     }
     else if (message.ProtocolOp.AbandonRequest != null)
     {
         return(new LdapAbandonRequest(message));
     }
     else if (message.ProtocolOp.ExtendedRequest != null)
     {
         return(new LdapExtendedRequest(message));
     }
     else if (message.ProtocolOp.ExtendedResponse != null)
     {
         return(new LdapExtendedResponse(message));
     }
     else if (message.ProtocolOp.IntermediateResponse != null)
     {
         return(new LdapIntermediateResponse(message));
     }
     else
     {
         throw new NotSupportedException("unsupported protocolOp");
     }
 }
示例#21
0
 internal LdapModifyDNResponse(Asn1LdapMessage message)
     : base(message.ProtocolOp.ModifyDNResponse, message)
 {
 }
示例#22
0
 internal LdapCompareResponse(Asn1LdapMessage message)
     : base(message.ProtocolOp.CompareResponse, message)
 {
 }
示例#23
0
 internal LdapDeleteResponse(Asn1LdapMessage message)
     : base(message.ProtocolOp.DelResponse, message)
 {
 }
示例#24
0
 internal LdapDeleteRequest(Asn1LdapMessage message)
     : base(message)
 {
     DN = new LdapDistinguishedName(message.ProtocolOp.DelRequest.Value.Span);
 }