System.IO.FileNotFoundException using file.copy

S

Stephen Witter

I had previously posted this on the security ng, but haven't had a hit so I
was wondering if someone here would be willing to take a stab. I am trying
to copy a file to a network drive. I can do it on the web server but not
from a client. Here is the code:

Dim impersonationContext As
System.Security.Principal.WindowsImpersonationContext
Dim currentWindowsIdentity As System.Security.Principal.WindowsIdentity
currentWindowsIdentity
=CType(User.Identity,System.Security.Principal.WindowsIdentity)
impersonationContext = currentWindowsIdentity.Impersonate()
dim Temp as string="TestFile"
File.Copy("\\MyServer\Template.doc", "\\MyServer\" & Temp &".doc")

impersonationContext.Undo()

I get the error "System.IO.FileNotFoundException: Could not find file
\\Server\File..." when running it from the [authenticated] client browser.
I searched everywhere on the web and MSDN on this error but found nothing.
The error it occurs on the file copy statement The file.copy statement is
trying to copy a file on a different server than the web server.

Any help is appreciated.

P.S. The web server is a backup domain w2k controller also, and the asp.net
user had to be changed to IWAM_Machine.
 
B

bruce barker

to copy to another server you need to impersonate a primary token, not an
impersonation. to quickly test this, on the actual server, run ie and test -
it should work because the principal will be a primary token, if not, turn
off anonymous.

to get around this, your code will need to logon as a domain account with
enough permission to do the copy.

-- bruce (sqlwork.com)
 
S

Stephen Witter

The funny thing is I have tried to run the process from every server, even
the one where the file resides (and where it is being copied to), and they
all give the same message, that is, that the file does not exist. The only
place it works is on the web server. Anonymous access is turn off on the web
site.

I added the following code to test it:

Dim FilePermission As New FileIOPermission(FileIOPermissionAccess.AllAccess,
"\\MyServer\MyShare\SomeDirectory\Template.doc") FilePermission.Assert()
If System.IO.File.Exists("\\MyServer\MyShare\SomeDirectory\Template.doc")
then
response.write("OK User: ") response.write(User.Identity.Name)
response.end
Else
Try
FilePermission.Demand()
response.write("Exists But Access Denied , User: ")
response.write(User.Identity.Name)
Catch se As Exception
response.write("Realy doesn't exist")
End Try
End If

It always returns "Exists But Access Denied , User: DOMAIN\User"

Thanks for your reply though. I know these situations can be caused by alot
of different factors.


bruce barker said:
to copy to another server you need to impersonate a primary token, not an
impersonation. to quickly test this, on the actual server, run ie and test -
it should work because the principal will be a primary token, if not, turn
off anonymous.

to get around this, your code will need to logon as a domain account with
enough permission to do the copy.

-- bruce (sqlwork.com)

Stephen Witter said:
I had previously posted this on the security ng, but haven't had a hit
so
I
was wondering if someone here would be willing to take a stab. I am trying
to copy a file to a network drive. I can do it on the web server but not
from a client. Here is the code:

Dim impersonationContext As
System.Security.Principal.WindowsImpersonationContext
Dim currentWindowsIdentity As System.Security.Principal.WindowsIdentity
currentWindowsIdentity
=CType(User.Identity,System.Security.Principal.WindowsIdentity)
impersonationContext = currentWindowsIdentity.Impersonate()
dim Temp as string="TestFile"
File.Copy("\\MyServer\Template.doc", "\\MyServer\" & Temp &".doc")

impersonationContext.Undo()

I get the error "System.IO.FileNotFoundException: Could not find file
\\Server\File..." when running it from the [authenticated] client browser.
I searched everywhere on the web and MSDN on this error but found nothing.
The error it occurs on the file copy statement The file.copy statement is
trying to copy a file on a different server than the web server.

Any help is appreciated.

P.S. The web server is a backup domain w2k controller also, and the asp.net
user had to be changed to IWAM_Machine.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top