/// <summary>
        /// Realiza a sincroniza��o das senhas alteradas no AD com o Autenticador.
        /// </summary>
        /// <param name="log">Dados do usu�rio.</param>
        /// <returns></returns>
        public static bool SincronizaSenhaAlteradaAD(sLOG_UsuarioAD log)
        {
            bool processou = false;

            switch (log.usuarioAD.usa_acao)
            {
            case (short)LOG_UsuarioAD.eAcao.IncluirUsuario:
            case (short)LOG_UsuarioAD.eAcao.ExcluirUsuario:
                break;

            case (short)LOG_UsuarioAD.eAcao.AlterarSenha:
            {
                SYS_Usuario entityUsuario = log.usuario;
                entityUsuario.IsNew     = false;
                entityUsuario.usu_senha = log.dadosUsuario.senha;
                processou = SYS_UsuarioBO.AlterarSenhaAtualizarUsuario(entityUsuario, false, true);
            }
            break;

            default:
                throw new ValidationException("Opera��o inv�lida.");
            }

            return(processou);
        }
        /// <summary>
        /// Realiza a sincroniza��o das senhas alteradas no Autenticador com o AD.
        /// </summary>
        /// <param name="userAD">Objeto de conex�o com o Active Directory (AD).</param>
        /// <param name="dominio">Dom�nio do Active Directory (AD).</param>
        /// <param name="organizationalUnitsPath">Caminho de Organizational Units onde os usu�rios s�o criados no Active Directory (AD).</param>
        /// <param name="log">Dados do usu�rio.</param>
        /// <returns></returns>
        public static bool SincronizaSenhaAlteradaAutenticador(LdapUsers userAD, string dominio, string organizationalUnitsPath, sLOG_UsuarioAD log, string descricao)
        {
            bool processou = false;

            if (!LdapUtil.Exists(dominio))
            {
                throw new ValidationException("Dom�nio n�o foi encontrado.");
            }

            if (!LdapUtil.ExistsOrganizationalUnitPath(dominio, organizationalUnitsPath))
            {
                throw new ValidationException("Caminho de Organizational Units n�o foi encontrado.");
            }

            switch (log.usuarioAD.usa_acao)
            {
            case (short)LOG_UsuarioAD.eAcao.IncluirUsuario:
            {
                if (userAD.UserExists(log.usuario.usu_login))
                {
                    throw new ArgumentException("Usu�rio j� existe.");
                }

                processou = userAD.CreateUser(organizationalUnitsPath, log.pessoa.pes_nome, log.usuario.usu_email, log.usuario.usu_login, log.dadosUsuario.senha, descricao);
                if (log.usuario.usu_situacao == (byte)SYS_UsuarioBO.eSituacao.Senha_Expirada)
                {
                    processou &= userAD.SetExpirePassword(log.usuario.usu_login, true);
                }
            }
            break;

            case (short)LOG_UsuarioAD.eAcao.AlterarSenha:
            {
                if (!userAD.UserExists(log.usuario.usu_login))
                {
                    throw new ArgumentException("Usu�rio n�o encontrado.");
                }


                processou  = userAD.SetExpirePassword(log.usuario.usu_login, false);
                processou &= userAD.SetPassword(log.usuario.usu_login, log.dadosUsuario.senha);

                if (log.usuario.usu_situacao == (byte)SYS_UsuarioBO.eSituacao.Senha_Expirada)
                {
                    processou &= userAD.SetExpirePassword(log.usuario.usu_login, true);
                }
            }
            break;

            case (short)LOG_UsuarioAD.eAcao.ExcluirUsuario:
            {
                if (!userAD.UserExists(log.usuario.usu_login))
                {
                    throw new ArgumentException("Usu�rio n�o encontrado.");
                }

                processou = userAD.DeleteUser(log.usuario.usu_login);
            }
            break;

            default:
                throw new ValidationException("Opera��o inv�lida.");
            }

            return(processou);
        }