Logo UGIdotNET

Discussione 'LogonUser su Win2000'

# Pubblicato il 15 dic 2003 15.34 - Rispondi
Dario Cerizza
LogonUser su Win2000
Ciao

Ho costruito un appz che utilizza la LogonUser della advapi32.dll e su WinXP funziona perfettamente. Purtroppo su Windows 2000 non mi accetta la password.

Il wrapper P-Invoke lo ho preso da MSDN:
[DllImport("advapi32.dll", SetLastError=true)]
public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, out int phToken);

e lo utilizzo così:
bool passwdOK=LogonUser(nomeUtente,nomeMacchina,pwd,MD_LOGON_NETWORK,LOGON32_PROVIDER_DEFAULT,out token);

Ho dimenticato qualcosa ? strano che su XP vada mentre su 2000 mi da sempre password errata.
Grazie, ciao
# Pubblicato il 15 dic 2003 15.57 - Rispondi
Stefano Magni
Re: LogonUser su Win2000
Dai un occhio qui, non vorrei fosse semplicemente un problema del genere !
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q180548
http://groups.google.it/groups?hl=it&lr=&ie=UTF-8&oe=UTF-8&threadm=OSWSTmWiCHA.1688%40tkmsftngp09&rnum=6&prev=/groups%3Fq%3DLogonUser%2BAND%2BWindows%2B2000%2BAND%2BC%2523%26ie%3DUTF-8%26oe%3DUTF-8%26hl%3Dit%26btnG%3DCerca%2Bcon%2BGoogle
--
Stefano Magni
# Pubblicato il 15 dic 2003 16.13 - Rispondi
Dario Cerizza
Re: LogonUser su Win2000
Ciao Raffaele.
Grazie per la risposta ma avevo già visto quel post su google e lo avevo scartato perchè i miei utenti sono utenti locali che possono loggarsi.
Cmq ho controllato l'errore di ritorno dalla mia funzione ed ottengo il codice 126 che corrisponde a "The specified module could not be found".

Questo mi fa pensare che manchi la dll su win2000, ma il problema è che ottengo lo stesso codice su XP se per caso scrivo una pwd sbagliata....ho il dubbio di aver sbagliato ad usare il GetLastError, ma è porprio come lo ho sempre visto. Inoltre mi sono assicurato di avere il SetLastError=true dell'DllImportAttribute.

Sai dirmi se cmq è un mio errore da qualche parte oppure win2000 non supporta la LogonUser nella advapi32.dll (però mi sembra strano)

Grazie, ciao
# Pubblicato il 15 dic 2003 16.20 - Rispondi
Stefano Magni
[OT] Re: LogonUser su Win2000
Non sono Raffaele, va bene che Raf risponde al 90% dei post ... però !!!
# Pubblicato il 16 dic 2003 0.28 - Rispondi
Raffaele Rialdi
Re: LogonUser su Win2000
Sentivo fischiare le orecchie ... :-)

Usa FileMon di http://www.sysinternals.com per verificare che effettivamente la dll la trovi.

Poi prova questa:
[DllImport("advapi32.dll", SetLastError=true)]
public extern static bool LogonUser(String Username, String Domain,
String Password, int LogonType, int LogonProvider, ref IntPtr Token);

e se ancora non funziona prova con questa dichiarazione:
[DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]

Raffaele
# Pubblicato il 15 dic 2003 16.25 - Rispondi
Dario Cerizza
Re: [OT] Re: LogonUser su Win2000
oops, scusami Stefano !
stavo leggendo un altro post di raffaele ed ho fatto confusione...mi sa che devo proprio andare in vacanza ^__^

ciaoo
# Pubblicato il 16 dic 2003 10.37 - Rispondi
Dario Cerizza
Re: LogonUser su Win2000
Ciao Raffaele. Molto carino il filemon, grazie del consiglio, ne farò buon uso.

Purtroppo con entrambe le soluzioni continua a funzionarmi sotto XP ma non con 2000. Ho notato che con XP, non trovandomi la Advapi32.dll nella dir corrente, va a cercarmi una secur32.dll che poi trova in system32 e mi accetta la login.
Con 2000, invece, va a cercare advapi32 e kernel32 nella dir corrente. Non le trova e poi va in altre dll (tipo culture.nlp e security.config.cch) sotto la dir del framework ma non va a cercare le dll in system32. Sembra quasi che sia un problema di configurazione, ma ho provato su altre macchine con 2000 e continua a non andare nonostante abbia sempre installato il framework senza pasticciare con le policy.

Nel file .cch ho scoperto che ci sono i settaggi simili a quelli di caspol...ho il dubbio che forse il mio exe deve avere dei permessi che di default non ha (strano perchè lo lancio dalla zona MyComputer ed il codice ha tutto FullTrust (in tutti e 3 i livelli)).

Non so proprio quale possa essere il problema. Allego un zip con un project Console che richiede nome macchina, utente e pwd e stampa true o false a seconda se la login è ok o no. su XP va benissimo, su 2000 sempre false e sempre errore 126 (che è lo stesso che ottengo su xp se scrivo pwd sbagliata)

Grazie mille dell'aiuto che mi state dando.
Ciao
# Pubblicato il 16 dic 2003 11.14 - Rispondi
Massimo Prota
Re: LogonUser su Win2000
Chiamando Marshal.GetLastWin32Error() al posto dell'API GetLastError puoi notare che l'errore che si verifica è il numero 1314, corrispondente a: A required privilege is not held by the client. ERROR_PRIVILEGE_NOT_HELD

Cercando in rete associazioni tra l'API e l'errore restituito ho trovato:
LogonUser will fail with 1314 error code, if the user account associated
with the calling security context does not have
"Act as part of the operating system" permission

Credo quindi che tu debba provare ad assegnare i diritti necessari all'utente andando ad agire sui criteri di protezione locali del sistema (o di active directory)

HTH
Massimo Prota
# Pubblicato il 16 dic 2003 11.35 - Rispondi
Dario Cerizza
Re: LogonUser su Win2000
Grazie massimo. Mi sono erroneamente fidato della GetLastError(), ma ora non sbaglierò più.
Purtroppo non riesco a trovare come rilasciare quel permesso agli utenti. Non credo sia un problema di ActiveDirectory dato che mi da problema anche con gli utenti locali; non capisco come mai sotto XP funziona bene (ci sono policy diverse?)
E' vero che ho sempre provato su macchine collegate allo stesso dominio, dovrei sentire gli admin per vedere se hanno impostato qualche configurazione particolare.

Grazie 1000, ciao
# Pubblicato il 16 dic 2003 13.35 - Rispondi
Massimo Prota
Re: LogonUser su Win2000
Intendevo che se cerchi di utilizzare un utente di dominio credo che le autorizzazioni siano da dare (anche o solo) su Active Directory, mentre per gli utenti locali naturalmente AD non interferisce e quindi vanno impostati i criteri di protezione locale.
Purtroppo questo non è proprio il mio campo e quindi non saprei dirti in che modo le policy di XP differiscono da quelle di 2000 in questo contesto, ma il diverso comportamento dell'API sui 2 sistemi mi fa supporre che in effetti le policy siano differenti.

HTH
Massimo Prota
# Pubblicato il 17 dic 2003 0.34 - Rispondi
Raffaele Rialdi
Re: LogonUser su Win2000
Giustissima osservazione Massimo. Mi ero fidato dell'errore file not found che riportava Dario ma se la GetLastError ritorna quel messaggio significa che Dario deve andare nelle Local Security Policy e assegnare all'utente che vuole eseguire la Logon il privilegio che hai riportato nel tuo post.
Purtroppo non ho avuto il tempo di provare quel codice quindi non so se ci può essere altro. Se trovo 5 minuti provo.

Confermo che le policy da w2k a xp sono cambiate parecchio.

Raffaele
# Pubblicato il 17 dic 2003 9.57 - Rispondi
Dario Cerizza
Re: LogonUser su Win2000
grazie mille ad entrambi.sento subito i nostri admin ed indago sulle policy.
Grazie mille
Ciao

© 2001 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali. - Partita IVA 01927050185