[SP-pm] Dúvidas com o módulo File::Find

"Flávio R. Lopes" flavio.lopes at links.inf.br
Sat Sep 25 21:08:57 PDT 2010


Olá pessoal.
Na verdade estou "requentando" uma dúvida minha sobre um programa que 
comecei e não terminei.

Estou tentando fazer 2 programas que tratam de criptografar e 
descriptografar dados recursivamente dentro de uma árvore de diretórios.

O código deles está aqui: http://gist.github.com/597573

No programa "criptografa.pl" ele já consegue criptografar dados dos 
diretórios, mas está acontecendo um problema que ele criptografa o nome 
dos diretórios inclusive os ocultos. Supondo que eu aponte para um 
determinado diretório e que dentro dele eu tenha um diretório chamado 
"dir1" e mais dois arquivos chamados "arquivo1" e "arquivo2" ao rodar o 
programa e se eu der o comando "ls -al" dentro do tal diretório me 
aparece o seguinte:


dir1
arquivo1
arquivo1.gpg
arquivo2
arquivo2.gpg
dir1.gpg --> aqui criptograga o nome do diretorio
..gpg -- > e aqui e no debaixo os diretórios ocultos
..gpg.gpg

Como faço para o programa "pegar" somente os arquivos para criptografar, 
ignorando os diretórios ?


Já o programa "descriptografa.pl" ocorre um erro que não consegui 
descobrir e os arquivos não são descriptografados. Acredito que eu 
esteja errando alguma coisa ao utilizar o módulo File:Find na passagem 
de parâmetros.
A mensagem de erro é esta:

Protocol error: expected NEED_PASSPHRASE.* got NODATA
  at /usr/local/lib/perl5/site_perl/5.12.1/GnuPG.pm line 154
     GnuPG::abort_gnupg('GnuPG=HASH(0xf99b48)', 'Protocol error: 
expected NEED_PASSPHRASE.* got NODATA\x{a}') called at 
/usr/local/lib/perl5/site_perl/5.12.1/GnuPG.pm line 345
     GnuPG::send_passphrase('GnuPG=HASH(0xf99b48)', 123456) called at 
/usr/local/lib/perl5/site_perl/5.12.1/GnuPG.pm line 740
     GnuPG::decrypt_postwrite('GnuPG=HASH(0xf99b48)', 'ciphertext', ., 
'output', '..txt', 'symmetric', 1, 'passphrase', 123456, ...) called at 
/usr/local/lib/perl5/site_perl/5.12.1/GnuPG.pm line 725
     GnuPG::decrypt('GnuPG=HASH(0xf99b48)', 'ciphertext', ., 'output', 
'..txt', 'symmetric', 1, 'passphrase', 123456, ...) called at 
/home/flavio/workspace/TESTE/decripto_teste.pl line 34
     main::busca() called at /usr/local/lib/perl5/5.12.1/File/Find.pm 
line 854
     File::Find::_find_dir('HASH(0xf99bd8)', 
'/home/flavio/teste_cripto', 3) called at 
/usr/local/lib/perl5/5.12.1/File/Find.pm line 722
     File::Find::_find_opt('HASH(0xf99bd8)', 
'/home/flavio/teste_cripto/') called at 
/usr/local/lib/perl5/5.12.1/File/Find.pm line 1297
     File::Find::find('CODE(0x11617a8)', '/home/flavio/teste_cripto/') 
called at /home/flavio/workspace/TESTE/decripto_teste.pl line 18


Parece que ele não localiza a senha. Mas eu tentei inclusive colocar a 
senha dentro da sub eliminando a variável $secret. Ou seja, fez desta 
forma: passphrase => "123456"

O que está errado?

Abraço,
Flávio


More information about the SaoPaulo-pm mailing list