Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-09-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
HASH y Windows 10

Hace unos meses planteaba un problema que estaba teniendo con una aplicación en red: En una máquina con W7 funciona sin problema alguno pero en otra con W10 no había manera de que el código que ponía en aquel hilo funcionara; ni bine, ni mal: directamente no funcionaba.

Por probar cambié un poco el diseño de la tabla donde se guardan los usuarios y ahora hago esta verificación:
Código:
try
{
     Application->OnException = NULL;
     Application->CreateForm(__classid(TfLogin), &fLogin);
     if ((nValor = fLogin->ShowModal()) != mrOk)
          throw Exception("Cancelado por el usuario.\nSistema desconectado.");

     delete fLogin;
     Application->OnException = DisplayError;

     Query->Close();
     Query->SQL->Text = "SELECT Clave, CAST(HASH('" + ClaveUser + "') AS VARCHAR(25)) FROM Claves WHERE Nombre = :Nombre";
     Query->ParamByName("Nombre")->AsString = NombreUser;
     Query->Open();

     if (Query->FieldByName("Clave")->AsString != Query->Fields->FieldByNumber(2)->AsString)
          throw Exception("Usuario / clave desconocidos.\nSistema desconectado.");

     DesconectaDb();

     Query->Params->Clear();
     Query->Params->Add("lc_ctype=ISO8859_1");
     Query->SQLDialect = 3;
}
catch(Exception &Exc)
{
     Mensaje(1, Exc.Message, "Terminar");
     Application->Terminate();
     return 0;
}
Y volvemos a lo mismo: en el puesto que funciona con W7 no hay ningún problema pero en el que tiene W10 no hay manera de que ese query y su validación posterior funcione. Ya no sé que hacer.
Responder Con Cita
  #2  
Antiguo 27-09-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.051
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Qué no funciona, qué mensaje o error sale, en qué línea, etc...?
Responder Con Cita
  #3  
Antiguo 27-09-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
No, no da ningún error no nada. Simplemente al llegar al condicional SIEMPRE se sale por el throw. Y he comprbado que lo que está guardado en la base de datos (Clave) y lo que se calcula a partir de CAST(HASH('" + ClaveUser + "') AS VARCHAR(25)) (ClaveUser es una variable del programa y está bien asignada) tienen el mismo valor si lo ejecuto en IBManager, por ejemplo.
Responder Con Cita
  #4  
Antiguo 27-09-2019
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.912
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Si se sale por throw tienes un error. Cual es...
__________________
El malabarista.
Responder Con Cita
  #5  
Antiguo 27-09-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Si te fijas el throw está puesto para cuando el HASH de la clave que pone el usuario y el valor que está grabado no coinciden; fuerzo el error, lo que significa que a pesar de lo que está grabado no coinciden los valores.
Responder Con Cita
  #6  
Antiguo 27-09-2019
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.912
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Algunas ideas:

1- Instala windows 10 en una VM y prueba.
2- Captura los sql que recibe firebird:

https://stackoverflow.com/questions/...rd-sql-queries

es probable que tengas 2 hilos/procesos que estan variando por problemas de timing y creas que el codigo esta haciendo paso 1 -> paso2 y resulta que es paso2 -> paso1

Ah, se me olvido el paso mas util:

3- Saca ese codigo del programa y lo pones en una app minima (como de consola), Si el error no se reproduce, sabes con certeza que el problema NO esta ahi, o tienes un bug parecido al que te puse arriba del orden.

Si el error SI se reproduce, tienes un codigo mucho mas minimo que mirar. Usando logs/traces puedes ver con claridad que pasa.
__________________
El malabarista.

Última edición por mamcx fecha: 27-09-2019 a las 21:14:35.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
calcular hash (MAJ) Trucos 6 26-02-2023 01:28:45
codigo hash maco2007 Varios 4 20-10-2007 17:01:04
Calcular hash md5 Lepe Trucos 1 10-05-2007 15:11:58
Hash RaulChemical Varios 1 07-09-2004 20:10:11
¿Hash or not Hash? hgiacobone Varios 5 17-07-2003 19:43:26


La franja horaria es GMT +2. Ahora son las 03:05:46.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi