Estou tentando acessar alguns arquivos remotos de um servidor de aplicativos da web.
Vamos chamá-los de servidores M e R. Ambos estão executando o Windows Server (2008 e 2003).
Os arquivos remotos estão no servidor R em um compartilhamento de arquivos legível por Todos (permissões de compartilhamento e permissões de segurança permitem que Everyone
seja lido). Este compartilhamento é chamado \R\EthRelease
.
O aplicativo da Web está no servidor M
. Estou executando um script Python (realmente Jython) no contêiner do servlet Tomcat (via BSF ) para tentar para acessar os arquivos remotos em R
.
Mas não importa o que eu faça, o script não pode ver a pasta compartilhada remota. Por exemplo, Eu uso o código Python como:
# Note, R: is a mapped network drive pointing to \R\EthRelease
for file in ['C:', 'C:\', 'C:\Users', 'R:', 'R:\',
r"\R\EthRelease", r"\172.x.x.x\EthRelease"]:
output.append(" <accessCheck dir='%s' exists='%s' accessF='%s' accessR='%s'/>\n" %
(file, os.path.exists(file), os.access(file, os.F_OK),
os.access(file, os.R_OK)))
e as únicas pastas que o script diz que existem são C:\
e C:\Users
:
<accessCheck dir="C:" exists="False" accessF="False" accessR="False"/>
<accessCheck dir="C:\" exists="True" accessF="True" accessR="True"/>
<accessCheck dir="C:\Users" exists="True" accessF="True" accessR="True"/>
<accessCheck dir="R:" exists="False" accessF="False" accessR="False"/>
<accessCheck dir="R:\" exists="False" accessF="False" accessR="False"/>
<accessCheck dir="\R\EthRelease" exists="False" accessF="True" accessR="True"/>
<accessCheck dir="\172.x.x.x\EthRelease" exists="False" accessF="False" accessR="False"/>
Por outro lado, quando eu faço um dir
em qualquer um dos caminhos acima no prompt do CMD no servidor M, eles existem e são legíveis:
C:\Users\me>dir r:\
Volume in drive R is GIS
Volume Serial Number is ...
Directory of r:\
12/03/2012 09:18 AM <DIR> .
12/03/2012 09:18 AM <DIR> ..
07/25/2013 08:51 AM <DIR> EGI
12/17/2013 05:46 AM <DIR> maps
0 File(s) 0 bytes
4 Dir(s) 48,192,491,520 bytes free
C:\Users\me>
Eu tentei isso com o Jython stable 2.5.3 e com o Jython beta 2.7b1, e obtive os mesmos resultados.
Eu sei que não é apenas um problema do Python, porque eu executo comandos semelhantes no meu laptop (usando o Python 3.3) e consigo acessar o mesmo compartilhamento de rede com êxito.
Uma possível diferença é que o contêiner do servlet, Tomcat, está sendo executado como o usuário SYSTEM local no servidor M, enquanto no shell CMD eu estou conectado como outro usuário. Mas, como mencionado anteriormente, Everyone
tem acesso ao compartilhamento de arquivos remoto, então isso não deve fazer diferença, certo? Existe alguma maneira que eu possa fazer o login como o usuário do sistema e testar se eu sou capaz de acessar o compartilhamento de arquivos remoto nesse estado?
Outra possível diferença é que o contêiner de servlet ou BSF pode impor algum tipo de restrição de área restrita, impedindo que eu acesse arquivos fora do contêiner do servlet. Mas isso não está acontecendo, porque eu posso verificar C:\
.
Alguma ideia? Isso tem me levado até a parede. Eu tentei algumas vezes diferentes anteriormente para acessar os arquivos diretamente de dentro do Cocoon e atingir o mesmo tipo de parede. Recentemente eu pensei 'Eureka! Eu posso terceirizar o problema para um script Python! Python pode lidar com isso! Mas até agora, não há dados.