Ejemplo n.º 1
0
 /// <summary>
 /// Obtiene la lista de controladores de dominio para un DomainID especificado
 /// </summary>
 private List <DomainController> GetDomainControllersByDomainId(String pConnString, Int32 pDomainId)
 {
     try
     {
         using (SqlDomainControllersDataContext dc = new SqlDomainControllersDataContext(pConnString))
         {
             IEnumerable <DomainController> list = from s in dc.DomainControllers
                                                   where s.DomainId == pDomainId
                                                   select
                                                   new DomainController
             {
                 DomainId = s.DomainId,
                 HostName = s.DCHostName,
                 Id       = s.DCId,
                 Ip       = s.DCIp
             };
             return(list.ToList <DomainController>());
         }
     }
     catch (Exception ex)
     {
         Fwk.Exceptions.TechnicalException te = new Fwk.Exceptions.TechnicalException("Error al intentar obtener la lista de dominios desde la base de datos: ", ex);
         LDAPHelper.SetError(te);
         te.ErrorId = "15004";
         throw te;
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Obtiene la lista de Grupos de LDAP a los que pertenece el usuario
        /// </summary>
        /// <param name="pUserName">Nombre de usuario</param>
        //public List<ADGroup> User_SearchGroupList(string pUserName)
        //{
        //    List<ADGroup> wGroups = null;
        //    String wFilter;
        //    String[] wAttributes;
        //    LdapEntryList wResults;

        //    ADGroup wADGroup;

        //    // Parámetros de búsqueda
        //    wFilter = String.Format("(&(objectClass=user)(sAMAccountName={0}))", pUserName);
        //    wAttributes = new String[1]; // array vacío, para que traiga todos los disponibles
        //    wAttributes[0] = ADProperties.MEMBEROF;
        //    wResults = new LdapEntryList();

        //    // Busca y verifica que exista el usuario
        //    if (_LdapWrapper.Search(wFilter, wAttributes, wResults) > 0)
        //    {
        //        LdapEntry wUser = wResults.First<LdapEntry>();
        //        if (wUser.ContainsKey(ADProperties.MEMBEROF))
        //        {
        //            foreach (String wGrp in wUser[ADProperties.MEMBEROF])
        //            {
        //                foreach (string wG in GetGroupFromMemberOf(wGrp))
        //                {
        //                    wADGroup = Group_GetByName(wG);
        //                    if (wADGroup != null)
        //                        wGroups.Add(wADGroup);
        //                }                        
        //            }
        //        }
        //    }
        //    return null; 
        //}

        ///// <summary>
        ///// Autentica un usuario
        ///// </summary>
        ///// <param name="pUserName">Nombre de usuario</param>
        ///// <param name="pPassword">Clave</param>
        //public LoginResult User_CheckLogin(string pUserName, string pPassword)
        //{

        //    String wFilter;
        //    String[] wAttributes;
        //    LdapEntryList wResults;

        //    // Parámetros de búsqueda
        //    wFilter = String.Format("(&(objectClass=user)(sAMAccountName={0}))", pUserName);
        //    wAttributes = new String[3];
        //    wAttributes[0] = ADProperties.USERACCOUNTCONTROL;
        //    wAttributes[1] = ADProperties.PWDLASTSET;
        //    wAttributes[2] = "lockoutTime"; // TODO: agregar "lockoutTime" a la clase ADProperties;
        //    wResults = new LdapEntryList();

        //    // Busca y verifica que exista el usuario
        //    if (_LdapWrapper.Search(wFilter, wAttributes, wResults) == 0)
        //    {
        //        return LoginResult.LOGIN_USER_DOESNT_EXIST;
        //    }

        //    // Verifica que la cuenta no esté deshabilitada
        //    Int32 wUserAccountControl = Convert.ToInt32(wResults.First()[ADProperties.USERACCOUNTCONTROL].First());
        //    Int32 wUserAccountControlDisabled = Convert.ToInt32(ADAccountOptions.UF_ACCOUNTDISABLE);
        //    if ((wUserAccountControl & wUserAccountControlDisabled) != 0)
        //    {
        //        return LoginResult.LOGIN_USER_ACCOUNT_INACTIVE;
        //    }

        //    if (wResults.First().ContainsKey("lockoutTime"))
        //    {
        //        Int64 wLockOutTime = Convert.ToInt64(wResults.First()["lockoutTime"].First());
        //        if (wLockOutTime > 0)
        //        {
        //            return LoginResult.LOGIN_USER_ACCOUNT_LOCKOUT;
        //        }
        //    }

        //    // Verifica que no deba cambiar la clave
        //    Int64 wPwdLastSet = Convert.ToInt64(wResults.First()[ADProperties.PWDLASTSET].First());
        //    if (wPwdLastSet == 0)
        //    {
        //        return LoginResult.ERROR_PASSWORD_MUST_CHANGE;
        //    }

        //    // Autentica
        //    try
        //    {
        //        if (!_LdapWrapper.Bind(_DomainController.HostName, _DomainUrlInfo.DomainDN, pUserName, pPassword, false))
        //        {
        //            return LoginResult.LOGIN_USER_OR_PASSWORD_INCORRECT;
        //        }
        //    }
        //    catch (LdapAuthenticationException)
        //    {
        //        return LoginResult.LOGIN_USER_OR_PASSWORD_INCORRECT;                
        //    }

        //    // Pasó hasta acá, login OK
        //    return LoginResult.LOGIN_OK;
        //}

        /// <summary>
        /// Obtiene un Grupo de LDAP, dado un nombre
        /// </summary>
        //public ADGroup Group_GetByName(string pName)
        //{
        //    String wFilter;
        //    String[] wAttributes;
        //    LdapEntryList wResults;

        //    // Parámetros de búsqueda
        //    wFilter = String.Format("(&(objectClass=group)(sAMAccountName={0}))", pName);
        //    wAttributes = new String[0]; // todos lso atributos disponibles
        //    wResults = new LdapEntryList(); // buffer de resultados

        //    // Busca y verifica que exista el usuario
        //    if (_LdapWrapper.Search(wFilter, wAttributes, wResults) == 0)
        //    {
        //        return new ADGroup(wResults.First<LdapEntry>());
        //    }
        //    return null;
        //}

        /// <summary>
        /// Obtiene la lista completa de grupos del LDAP
        /// </summary>
        //public List<ADGroup> Groups_GetAll()
        //{
        //    List<ADGroup> wGroups = null;
        //    String wFilter;
        //    String[] wAttributes;
        //    LdapEntryList wResults;

        //    ADGroup wADGroup;

        //    // Parámetros de búsqueda
        //    wFilter = "(&(objectClass=group))";
        //    wAttributes = new String[0]; // array vacío, para que traiga todos los disponibles
        //    wResults = new LdapEntryList();

        //    // Busca y verifica que exista el usuario
        //    if (_LdapWrapper.Search(wFilter, wAttributes, wResults) > 0)
        //    {
        //        foreach (LdapEntry wGrp in wResults)
        //        {
        //            wADGroup = new ADGroup(wGrp);
        //            if (wADGroup != null)
        //                wGroups.Add(wADGroup);
        //        }
        //    }
        //    return null;
        //}

        /// <summary>
        /// Resetea la clave de un usuario de LDAP
        /// </summary>
        /// <param name="pUserName">Nombre de usuario de la cuenta a la que se resetea la clave</param>
        /// <param name="pNewPwd">Nuevo Password, en caso de ser NULL, no se resetea la cuenta, se realizan el resto de las acciones</param>
        /// <param name="pForceChangeOnFirstLogon">Cuando es true, fuerza al usuario a cambiar la clave especificada en el próximo login</param>
        /// <param name="pUnlockAccount">Cuando es true, desbloquea la cuenta</param>
        //public void ResetPwd(string pUserName, string pNewPwd, bool pForceChangeOnFirstLogon, bool pUnlockAccount)
        //{
        //    String wUserDN = GetUserDN(pUserName);
        //    _LdapWrapper.SetPassword(wUserDN, pNewPwd, pForceChangeOnFirstLogon, pUnlockAccount);
        //}

        #endregion

        #region Métodos Privados

        /// <summary>
        /// Obtiene el nombre distinguido de la entrada de LDAP, para un usuario específico
        /// </summary>
        /// <param name="pUserName">Nombre de Usuario</param>
        //private String GetUserDN(string pUserName)
        //{

        //    String pUserDN;
        //    String wFilter;
        //    String[] wAttributes;
        //    LdapEntryList wResults;

        //    // parámetros de búsqueda
        //    wFilter = String.Format("(&(objectClass=user)(sAMAccountName={0}))", pUserName);
        //    wAttributes = new String[10];
        //    wAttributes[0] = ADProperties.DISTINGUISHEDNAME;
        //    wResults = new LdapEntryList();

        //    if (_LdapWrapper.Search(wFilter, wAttributes, wResults) == 0)
        //    {
        //        throw new TechnicalException("No se encuentra el usuario");
        //    }
        //    pUserDN = wResults.First()[ADProperties.DISTINGUISHEDNAME].First();
        //    return pUserDN;
        //}

        /// <summary>
        /// Obtiene la lista de controladores de dominio para un DomainID especificado
        /// </summary>
        private List<DomainController> GetDomainControllersByDomainId(String pConnString, Int32 pDomainId)
        {
            try
            {
                using (SqlDomainControllersDataContext dc = new SqlDomainControllersDataContext(pConnString))
                {
                    IEnumerable<DomainController> list = from s in dc.DomainControllers
                                                         where s.DomainId == pDomainId
                                                          select
                                                          new DomainController
                                                          {
                                                              DomainId = s.DomainId,
                                                              HostName = s.DCHostName,
                                                              Id = s.DCId,
                                                              Ip = s.DCIp
                                                          };
                     return list.ToList<DomainController>();
                }
            }
            catch (Exception ex)
            {
                Fwk.Exceptions.TechnicalException te = new Fwk.Exceptions.TechnicalException("Error al intentar obtener la lista de dominios desde la base de datos: ", ex);
                LDAPHelper .SetError(te);
                te.ErrorId = "15004";
                throw te;
            }
        }