[.NET] UNC pad gebruiken

Pagina: 1
Acties:

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

Topicstarter
Ik wil de mogelijkheid hebben om bestanden op een server te beheren. Ik krijg echter geen toegang.

C#:
1
2
3
4
string myDir = @"\\MyServer\MyShare\Dir";
DirectoryInfo info = new DirectoryInfo(myDir);
if (!info.Exists)
   info.Create();


Ik krijg hier de exceptie: "kon een deel van het pad \\server\share niet vinden"

Ik ben aan de slag gegaan met impersonation en ook daar wil het me niet lukken: (ik volgde het voorbeeld uit MSDN te vinden onder WindowsImpersonationContext)
impersonation als "administrator" op "MyServer" met pass "pass" geeft als user "administrator@mijneigenPC"
impersonation als "user" op "MyServer" met pass "pass" werkt niet (return van LogonAsUser is false, GetLastError = 0)

In het eerste geval, werkt bovenstaande code om de directory te bekijken ook niet.
Het ergste is zelfs dat het boeltje nu zelfs volledig vastloopt (de Task manager doet er minuten, en vele "Proces beeindigen"'s over om het boeltje te stoppen.

Ik begin wat kregelig te worden op de code.
Wat moet ik doen om die directory te kunnen beheren (nieuwe dirs maken, bestanden openen, maken, schrijven etc...)

op de server staan de permissies wel HEEL laks: everyone en ook Anonymous logon hebben full permissie op de share. idem voor NTFS permissies.
Het moet wel gezegd dat als ik vanuit verkenner naar de share ga, hij me toch nog user/pass vraagt...

Een gemapte drive maken is niet onmiddellijk een mogelijkheid aangezien het programma op verschillende locaties zal moeten draaien binnen een domein en dit liefst zonder enige tussenkomst.
Dit maakt ook dat de testopstelling (thuis heb ik helemaal geen domein) enigszins verschilt van de omgeving waar de app in terecht zal komen maar het programma moet gewoon kunnen werken.

ASSUME makes an ASS out of U and ME


  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 02-01 15:55
De omgeving waar .NET onder draait bij jou heeft waarschijnlijk niet genoeg rechten om die share te benaderen (daar was je zelf volgens mij ook al achter). Je zult dus de goede credentials mee moeten geven om die share te kunnen benaderen. Ik heb zelf geen ervaring met C#, maar er zal vast wel een oplossing voor zijn, misschien is he thandig de link te posten van MSDN waar je die informatie over WindowsImpersonationContext hebt gevonden.

If I can't fix it, it ain't broken.


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

Topicstarter
Borizz schreef op zaterdag 04 maart 2006 @ 18:06:
De omgeving waar .NET onder draait bij jou heeft waarschijnlijk niet genoeg rechten om die share te benaderen (daar was je zelf volgens mij ook al achter). Je zult dus de goede credentials mee moeten geven om die share te kunnen benaderen. Ik heb zelf geen ervaring met C#, maar er zal vast wel een oplossing voor zijn, misschien is he thandig de link te posten van MSDN waar je die informatie over WindowsImpersonationContext hebt gevonden.
ik heb wel degelijk permission... ik was dit vergeten te zeggen maar deze code:
C#:
1
[System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]

staat nu boven m'n functie


C#:
1
2
FileIOPermission perm = new FileIOPermission(FileIOPermissionAccess.AllAccess, path);
perm.Assert();


wanneer ik bij deze laatste controleerde of the permissie granted was, gaf deze true terug.

Het probleem ligt idd bij die credentials, maar die kan ik niet meegeven.
Ik heb bij het googlen veel problemen tegengekomen maar deze gaan allemaal over ASP.NET.
Daar passen ze ook meestal Impersonation toe. Dit is ook de manier waarop het moet werken want eigenlijk moet je gewoon een Kerberos ticket hebben om de bron te mogen aanspreken.

edit:
code:
1
2
3
4
5
6
7
Enter the name of the domain on which to log on: MyServer (veranderd)
Enter the login of a user on bdserver that you wish to impersonate: H!GHGuY
Enter the password for H!GHGuY: *** (verborgen)
LogonUser called.
LogonUser failed with error code : 1326
Exception occurred. Aanmeldingsfout: onbekende gebruikersnaam of ongeldig wachtw
oord

Dit gebeurt wanneer ik het sample programma probeer met de gegevens om op de server in te loggen.

code:
1
2
3
4
5
6
7
8
9
10
Enter the name of the domain on which to log on: MyServer (verborgen)
Enter the login of a user on bdserver that you wish to impersonate: administrato
r
Enter the password for administrator: *** (verborgen)
LogonUser called.
Did LogonUser Succeed? Yes
Value of Windows NT token: 1772
Before impersonation: MijnEigenPC\H!GHGuY
After impersonation: MijnEigenPC\Administrator
After Undo: MijnEigenPC\H!GHGuY

Dit gebeurt wanneer ik met administrator probeer in te loggen.
Hij logt dus niet in op de server, maar op mijn eigen PC.

edit2: shame on me. ik lees net de docs van LogonUser nog eens grondiger door en daar staat dat je niet op een remote machine kan inloggen... nu dus zoeken hoe het wel moet.

edit3:
Het programma moet draaien binnen een domein.
Ik zal er dus nu op gokken dat wanneer ik op een domein zit, ik wel automatisch de juiste credentials heb (door de domein logon).
Volgende week kan ik dit dan testen.

[ Voor 36% gewijzigd door H!GHGuY op 05-03-2006 11:10 ]

ASSUME makes an ASS out of U and ME


  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 02-01 15:55
Het gaat om de gebruiker waaronder je programma/script draait, als het een ASP.NET pagina is is dat waarschijnlijk de user SYSTEM. Als het een normaal programma is, is het de gebruiker die het programma start. Deze user moet je dan rechten geven op de map die je wilt kunnen benaderen (zonder een wachtwoord in te hoeven vullen dus, want je hebt je al aangemeld met een wachtwoord op het domein).

If I can't fix it, it ain't broken.


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

Topicstarter
idd. In het domein waarin de app zal werken zal de gebruikerr rechten (moeten) hebben op de map.
dat op zich is zeker het probleem niet.

Ik wou echter hier thuis mijn app al testen (zonder domein) en dan wordt het plots iets ingewikkelder.
Mocht ik toch willen doorzetten dan zou ik moeten WnetAddConnection() gebruiken, maar ik laat het voor wat het is, tot ik heb kunnen testen in het bedrijf zelf.

ASSUME makes an ASS out of U and ME


  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 02-01 15:55
Je kan het lokaal ook testen door op de computer waar de map op staat die je wilt bereiken een nieuwe useraccount aan te maken in windows met dezelfde naam en wachtwoord die de account heeft waaronder jij zelf inlogd op de pc waar je de applicatie draait. Vervolgens geef je die user de goede rechten op de goede map en klaar is kees ;) .

Let op dat je een wachtwoord insteld voor je windows account, als je geen wachtwoord gebruikt werkt het nog niet (er is wel een optie voor in windows om dat ook aan te zetten, maar een wachtwoord gebruiken is voor jou makkelijker denk ik)!

If I can't fix it, it ain't broken.

Pagina: 1