/// <summary>
        /// Creates an ExtendedRequest packet.
        /// </summary>
        /// <param name="context">The user context which contains message ID.</param>
        /// <param name="requestName">The request name of the extended operation.</param>
        /// <param name="requestValue">The request value of the extended operation.</param>
        /// <returns>The packet that contains the request.</returns>
        internal override AdtsExtendedRequestPacket CreateExtendedRequest(
            AdtsLdapContext context,
            string requestName,
            byte[] requestValue)
        {
            ExtendedRequest extendedRequest = new ExtendedRequest(
                new LDAPOID(requestName ?? string.Empty),
                new Asn1OctetString(requestValue));

            LDAPMessage_protocolOp operation = new LDAPMessage_protocolOp();
            operation.SetData(LDAPMessage_protocolOp.extendedReq, extendedRequest);

            LDAPMessage message = new LDAPMessage(new MessageID(context.MessageId), operation, null);
            AdtsExtendedRequestPacket packet = new AdtsExtendedRequestPacket();
            packet.ldapMessagev3 = message;
            packet.messageId = context.MessageId;

            return packet;
        }
        public void RequestId_Set_GetReturnsExpected()
        {
            var request = new ExtendedRequest {
                RequestId = "Id"
            };

            Assert.Equal("Id", request.RequestId);
        }
        public void RequestValue_Set_GetReturnsExpected()
        {
            var request = new ExtendedRequest {
                RequestValue = new byte[] { 1, 2, 3 }
            };

            Assert.Equal(new byte[] { 1, 2, 3 }, request.RequestValue);
        }
        public void RequestName_Set_GetReturnsExpected()
        {
            var request = new ExtendedRequest {
                RequestName = "RequestName"
            };

            Assert.Equal("RequestName", request.RequestName);
        }
 public void Ctor_RequestName(string requestName)
 {
     var request = new ExtendedRequest(requestName);
     Assert.Empty(request.Controls);
     Assert.Null(request.RequestId);
     Assert.Equal(requestName, request.RequestName);
     Assert.Empty(request.RequestValue);
 }
 public void Ctor_Default()
 {
     var request = new ExtendedRequest();
     Assert.Empty(request.Controls);
     Assert.Null(request.RequestId);
     Assert.Null(request.RequestName);
     Assert.Empty(request.RequestValue);
 }
 public void Ctor_RequestName_RequestValue(string requestName, byte[] requestValue)
 {
     var request = new ExtendedRequest(requestName, requestValue);
     Assert.Empty(request.Controls);
     Assert.Null(request.RequestId);
     Assert.Equal(requestName, request.RequestName);
     Assert.NotSame(requestValue, request.RequestValue);
     Assert.Equal(requestValue ?? Array.Empty<byte>(), request.RequestValue);
 }
Exemple #8
0
        /// <summary>
        /// Creates an ExtendedRequest packet.
        /// </summary>
        /// <param name="context">The user context which contains message ID.</param>
        /// <param name="requestName">The request name of the extended operation.</param>
        /// <param name="requestValue">The request value of the extended operation.</param>
        /// <returns>The packet that contains the request.</returns>
        internal override AdtsExtendedRequestPacket CreateExtendedRequest(
            AdtsLdapContext context,
            string requestName,
            byte[] requestValue)
        {
            ExtendedRequest extendedRequest = new ExtendedRequest(
                new LDAPOID(requestName ?? string.Empty),
                new Asn1OctetString(requestValue));

            LDAPMessage_protocolOp operation = new LDAPMessage_protocolOp();

            operation.SetData(LDAPMessage_protocolOp.extendedReq, extendedRequest);

            LDAPMessage message = new LDAPMessage(new MessageID(context.MessageId), operation, null);
            AdtsExtendedRequestPacket packet = new AdtsExtendedRequestPacket();

            packet.ldapMessagev3 = message;
            packet.messageId     = context.MessageId;

            return(packet);
        }
 public void RequestShort(ExtendedRequest request)
 {
     PendingCommands.Add(new UsbCommand((byte)request));
 }
        /// <summary>
        /// LDAP でパスワードを変更する。
        /// </summary>
        /// <param name="accountDN">アカウントの DN</param>
        /// <param name="oldPasswd">現在のパスワード</param>
        /// <param name="newPasswd">変更後のパスワード</param>
        /// <param name="ldapServer">LDAP サーバーのホスト名または IP アドレス</param>
        /// <param name="isTls">LDAPS にする場合 true。LDAP のままにする場合 false。</param>
        public static void ChangePassword(string accountDN, string oldPasswd, string newPasswd, string ldapServer, bool isTls)
        {
            if (accountDN == null || oldPasswd == null || newPasswd == null || ldapServer == null)
            {
                throw new ArgumentNullException();
            }

            if (accountDN.Length < 1 || oldPasswd.Length < 1 || newPasswd.Length < 1 || ldapServer.Length < 1)
            {
                throw new ArgumentException();
            }

            ldapServer = ServerPortSpecify(ldapServer, isTls);

            LdapConnection ldapConnection = new LdapConnection(ldapServer)
            {
                Credential = new NetworkCredential(accountDN, oldPasswd),
                AuthType   = AuthType.Basic,
                Timeout    = new TimeSpan(0, 0, 10)
            };

            ldapConnection.SessionOptions.ProtocolVersion   = 3;
            ldapConnection.SessionOptions.SecureSocketLayer = isTls;

            // https://tools.ietf.org/html/rfc3062
            var ber = BerConverter.Encode("{tststs}",
                                          LDAP_TAG_EXOP_MODIFY_PASSWD_ID, accountDN,
                                          LDAP_TAG_EXOP_MODIFY_PASSWD_OLD, oldPasswd,
                                          LDAP_TAG_EXOP_MODIFY_PASSWD_NEW, newPasswd);
            var modifyPasswdRequest = new ExtendedRequest(LDAP_EXOP_MODIFY_PASSWD, ber);

            try
            {
                // 認証したいユーザーでバインドする
                ldapConnection.Bind();

                // パスワード変更要求を送信
                var modifyPasswdResponse = (ExtendedResponse)ldapConnection.SendRequest(modifyPasswdRequest);

                // 応答が「成功」か確認
                if (modifyPasswdResponse.ResultCode != ResultCode.Success)
                {
                    throw new Exception("Could not change password. ("
                                        + Enum.GetName(typeof(ResultCode), modifyPasswdResponse.ResultCode) + ")");
                }
            }
            finally
            {
                if (ldapConnection != null)
                {
                    try
                    {
                        ldapConnection.Dispose();
                    }
                    catch (Exception e)
                    {
                        System.Diagnostics.Debug.WriteLine(e);
                    }
                }
            }
        }