MAL - Memória Auxiliar do Lutieri

quinta-feira, abril 26, 2007

Formulários postados mais de uma vez

Hi!!

Como eu já havia falado em algum post anterior existe uma intranet, na empresa onde eu trabalho, muito bem desenvolvida. Existe um formulário com javascript que faz o submit do mesmo. O botão de enviar é do tipo image(type=image).

A função em java script é essa:
function Enviar() {
document.frm.action = "http://intranet.foobar.com.br/9/formularios/salvar";
document.frm.submit();
}

O código do botão de enviar é esse:

<input src="http://intranet.foobar.com.br/sites/imagens/botoes/enviar.gif" value="Enviar" onclick="Enviar(); " type="image">


Tenho um problema que acontece apenas no Internet Explorer. Quando o formulário é postado ele é submetido mais de uma vez, duas, três, quatro... cheguei a ter 8 vezes o mesmo registro.

Acreditem no Firefox isso não acontece.


Li aqui:
http://forum.java.sun.com/thread.jspa?threadID=448557&messageID=2033267

e descobri que isso tudo acontece por que eu to usando um input do tipo imagem. Mas enfim.
Pra solucionar o problema foi muito simples, pior é que se demora, as vezes horas, pra chegar a descobrir onde está o problema, qual a causa e a solução é simplérima.... coisas da informática.

Acontece que apenas devemos retorna falso na função de enviar o form. Portanto resolvi fazer a modificação no evento onclick do botão de enviar. Ficando assim:

onclick="Enviar(); return false;"
Pronto. Pra variar a solução foi simples.


feito o carreto...

Marcadores: , ,

quinta-feira, abril 19, 2007

Tamanho Máximo do Upload no PHP[Atualizado]

Estou eu já brigando há algum tem com a intranet aqui da empresa. Temos uma interface que é usada para fazer upload de arquivos para o servidor. Pois bem, não fui eu quem desenvolveu a intranet, portanto estou descobrindo-a ainda.

Falando um pouco mais da intranet: Foi um trabalho muito bem feito por uma empresa aqui de POA a qual não quero citar o nome. Ela é divida em templates, classes, arquivos de configuração em xml, Data mappers, enfim... Uma das classes utilizadas é a httpupload.php. Que como o próprio nome diz é utilizada para fazer uploads de arquivos para o servidor. Esta classe foi desenvolvida por Nguyen Quoc Bao. Não sei quem é, mas é alguém que deve viver na frente do PC. Pelo nome deve ser algum vietnamita que ganhou um computador do governo e acabou desenvolvendo em PHP ;-) Enfim a classe é boa e completa. Contando com tratamento de erros e outros blá blá blás. O link pra ela eu coloco daqui a pouco. Aguarde ...

Existe, na minha intranet, uma interface que é utilizada para enviar arquivos para o servidor, however, percebi que não eram enviados arquivo maiores que 2 ou 3 megabytes. Virei o código da intranet pra cima e para baixo e não encontrei nada que pudesse estar barrando. Criei uma página nova inclui a classe e montei um formulariozinho para testar a classe. Antes de terminar encontrei um exemplo já prontinho aqui. Se você for usar este exemplo vai precisar da classe também que está aqui.

Aaaaaaaaaa falando em classe. Ela está com um problema.
Ela usa a variável $HTTP_POST_FILES, contudo esta variável foi substituída por $_FILES.

Devemos então substituir essas variáveis antigas pelas novas. Pois dependendo da versão do PHP não vai fazer upload de nada e vai dar a mensagem 'No file was submited.'.

Usando o VI para substituir:

:%s/HTTP_POST_FILES/_FILES/g


Pronto. Tudo funcional.


Bom... o problema é que não fazia upload de arquivos grandes.
Nesta página nova, de teste, quando eu tentei fazer o upload ele me retornou o erro -2 com a seguinte mensagem: The uploaded file exceeds the upload_max_filesize directive in php.ini.

Eis que fui eu no meu arquivo php.ini e alterei a diretiva upload_max_filesize para 10 MB.

Reload no apache e era isso.

Todo mundo feliz. ;-)

Aconselho esse site pra quem procura classes interessantes:
www.phpclasses.org

Hoje 17.05.07 tive que implementar um sistema de uploads em outro servidor. Antes de tudo tive que recorrer a esse blog, leia-se memória auxiliar do Lutieri, tá aí um bom nome pra esse blog. MAL - Memória auxiliar do Lutieri.... ;-) Vou mudar o título....

Bom continuando no upload dos arquivos com php. Existem mais algumas diretivas que devem ser setadas corretamente. São elas:

  • file_uploads
  • upload_max_filesize
  • max_input_time
  • memory_limit
  • max_execution_time
  • post_max_size

Encontrei um artigo falando sobre como manipular arquivos grandes com php. Nele achei tudo o que eu precisava. Segue o link, que é mais rápido do que eu ficar aqui digitando e digitando...

http://www.radinks.com/upload/config.php

Se eu não me engano esse mesmo site tem uma ferramenta em Java que pode ajudar caso não seja possível com php ou muito trabalhoso.

Marcadores: ,

quarta-feira, abril 18, 2007

Converter arquivos CHM no linux

Incrível!!

Baixei uma carrada de livros da o'reilly e outras editoras fodas e acabou que estou rodando em casa uma versão do slax sem muitos recursos.

Foram baixados 3,4 Gb de e-books. Alguns estão em formato PDF e outros em CHM. Que é um formato de arquivos de ajuda da Micosoft. Para ler os arquivos CHM estou usando, no trabalho, xCHM. software bem simples. Como não tenho esse pequenino software na minha versão live do slax fico impossibilitado de ler alguma coisa em casa. Antes que pergunte, sim eu to com preguiça de instalar alguma coisa em casa e vou continuar usando o live. ;-)

Procurei e encontrei facilmente, com a ajuda do nosso quase deus, leia-se google, um link para um blog onde a criatura tá fazendo exatamente o que eu preciso. Convertendo esses arquivos chatos, leia-se CHM, para html.

Tá! não era bem isso que eu queria. Eu queria em formato PDF. Mas tá de bom tamanho já.

Segue o link:
http://madphilosopher.ca/2006/09/how-to-convert-chm-files-under-linux/

terça-feira, abril 17, 2007

Off Topic: Seja Arrogante!

Leiam. para quem quer se sentir um pouco melhor, ou pior, depende do seu estado atual:


http://www.balanceonrails.com.br/articles/2007/04/14/off-topic-seja-arrogante

Marcadores:

quinta-feira, abril 12, 2007

Descobrir MAC Address

Nada de novidade. Nem um utilitário do além para cumprir a tarefa de descobrir o determinado endereço MAC de um equipamento que já está na sua rede.

Caso você tenha um servidor DHCP e deseja fazer reservas de IP será necessário saber o endereço MAC do dispositivo ao qual deseja se fazer a reserva.

Suponhamos que seja um impressora a qual você irá instalar em seu servidor de impressão.

Let's go:


root# ping hplj6
PING hplj6a (192.168.1.30) 56(84) bytes of data.
64 bytes from hplj6a (192.168.1.30): icmp_seq=1 ttl=64 time=0.113 ms

root# arp -a
hplj6a (192.168.1.30) at 00:03:47:CB:81:E0 [ether] on eth0

Ou o ping pode ser feito, lógico, pelo IP(não sei porque mas hoje estou com espírito de professor de séries iniciais).

Ou ainda pode ser usado o nmap. Ele também mostra o mac do alvo.

Ops... antes de ir embora tenho que dizer que o arp -a mostra toda a tabela arp do sistema e que essa técnica só vai funcionar quando se está dentro de uma mesma rede. Caso haja um roteador no meio você só vai conseguir alcançar o roteador. Ele quem busca o MAC da outra rede.

Feito. Simples e eficiente.

Marcadores:

segunda-feira, abril 09, 2007

Permissões no check_dhcp do Nagios

Falando em Nagios aprenda a pronunciar:

http://www.nagioscommunity.org/2007/02/20/nagios-pronunciation/

Documentação do Nagios completa:

PT_BR: http://nagios.speed.dcc.ufmg.br/docs/index.html


Bom... enfim...

Dentro da pasta libexec do Nagios estão contidos os binários para fazer as checagens. Estava com um problema quanto a checagem DHCP. Já que é necessário criar um socket com porta alta para fazer a busca na rede, usuários comuns não tem permissão de criar tais sockets. Acaba retornando a mensagem:

Error: Could not bind socket to interface eth0. Check your privileges...

A solução foi simples.

#chmod 4755 /usr/local/nagios/libexec/check_dhcp
#chown root /usr/local/nagios/libexec/check_dhcp


Ativei o bit especial suid(4000) para o binário e alterei o dono para root. Assim quando ele for chamado por qualquer usuário ele será executado como root. ;-)

Fui-me!

Marcadores: ,

quarta-feira, abril 04, 2007

Autenticando o Apache no AD do w2k

Buenos dias!

Estou montando a rede da empresa no nagios, uma ferramenta de monitoramento de rede bastante interessante. Precisei fazer a autenticação pra acessar o Nagios. Sendo que todos usuários possuem uma conta no Active Directory, seria mais interessante se esse login, o do Nagios, pudesse ser feito utilizando esses usuários e senhas já existentes. Sem a necessidade de manter mais uma base de usuários/senhas e fazer os usuário lembrarem de mais uma senha. Enfim: Viva a integração.

Falando em integração logo lembramos de serviços de diretório, logo lembramos de LDAP. Pois bem o que eu decidi fazer foi, nada mais que, utilizar o usuário que já existe cadastrado no AD do windows para logar no Nagios.

Bem na verdade quem faz a parte de autenticação é o Apache. O nagios apenas aproveita esse login efetuado para dar permissões e etc...

Comecemos:

É necessário ter compilado e carregado suporte a LDAP no apache. Partirei do ponto em que acredito que isso já esteja feito.

1º passo: Carregar os módulos LDAP no apache. Adicionei a seguinte configuração no httpd.conf

LoadModule ldap_module /usr/lib/apache2/modules/mod_ldap.so
LoadModule auth_ldap_module /usr/lib/apache2/modules/mod_auth_ldap.so

2º passo: Criar a configuração no diretório que deve ter autenticação. Eu prefiro criar um arquivo .htaccess e fazer a configuração nele. O meu ficou assim:

AuthType Basic
AuthName "Acesso ao Nagios"

# DN of Active Directory server
#sAMAccountName = login do usuario

AuthLDAPUrl "ldap://ADServer/DC=dominio,DC=com,DC=br?sAMAccountName?sub?(objectClass=*)"


##OBS: optional DN used to bind to the server when searching for entries. If not provided, mod_auth_ldap will use an anonymous bind.

# An account in the AD that has enough permissions to perform an LDAP search
#Case Insensitive

AuthLDAPBindDN "CN=Lutieri G. B.,OU=XYZ Ltda,OU=Consultorias/Terceiros,OU=Users,OU=SEDE,DC=dominio,DC=com,DC=br"

#ou

#The following would also be valid, although not truly LDAP compliant
#AuthLDAPBindDN lutierib@dominio.com.br

#ou

#Nao funcionou -> AuthLDAPBindDN dominio.com.br\\lutierib

#Senha da Conta acima
AuthLDAPBindPassword 123456



# When checking for group membership, use the DN of the user, not the HTTP entry

AuthLDAPGroupAttributeIsDN on

require valid-user

#require group OU=XYZ Ltda,DC=dominio,DC=com,DC=br

#ou

#require user lutierib



No arquivo acima temos AuthLDAPBindDN. Indica um usuário comum que será usado para consultar o AD. É um usuário com privilégios mínimos. Na documentação do Apache diz que se não for especificado será executada a consulta como anônimo. E pra mim funcionou como anônimo. ;-)

AuthLDAPBindPassword é a senha da conta especificada em AuthLDAPBind.

Nas últimas opções de require podem ser especificados usuários ou membros de uma OU(Unidade organizacional) que podem ter acesso a essa página. Os demais não serão aceitos. Se você deseja aceitar qualquer usuário válido é só usar:

require valid-user

AuthLDAPUrl especifica o servidor, o domínio e o atributo que vai ser utilizado para fazer a busca no AD. Nesse caso estamos utilizando o atributo sAMAccountName que é o nome do usuário. Isso que dizer que quando for solicitada a autenticação deve ser informado o nome de usuário e senha.

Caso você queira que faça-se o login atráves do sobrenome, por exemplo, procura o atributo correspondente aqui: http://www.computerperformance.co.uk/Logon/LDAP_attributes_active_directory.htm

Caso tenha dúvida sobre alguma das opções usadas no arquivo .htaccess acima você pode olhar a documentação do módulo em:



Utilizei como base um howto que encontra-se aqui e baseia-se no uso de grupos :

Autenticação no nagios está aqui:

Se não está funcionando o login olhe os logs:
tail -f /var/log/apache2/error.log
Acho que é só.

Marcadores: , , ,



Chat with Lutieri G. B.

Subscribe in a reader