O que significa o código de erro gpg 2 (GPG_ERR_UNKNOWN_PACKET)?

6

Tenho a tarefa de explicar a variação dos erros de gpg que ocorreram em um dos meus scripts em lote. Atualmente quando eu executo gpg descriptografar para um arquivo especificado ele retorna 2. O problema com isso é quando eu pesquisar o formulário, ele mostra que o arquivo foi descriptografado corretamente, mas o código de erro está causando o script parar porque só assumiu que 0 é o único valor de sucesso.

gpg -o XXX --decrypt XXX.gpg
RETVAL=$?
if [ RETVAL -ne 0 ]; then
    exit 1
fi

Eu procurei na net e encontrei a lista de cabeçalhos para gpg. Ele define o erro 2 como Pacote desconhecido.

link

O texto normal do erro exibido é [gpg: [não sei]: pacote inválido (ctb = 14)]. O que exatamente o pacote desconhecido significa? Estou tentando pesquisar qualquer documento para entender os códigos de erro. Depois de mostrar toda a informação detalhada usando a opção [-vv]. Eu comparei a descriptografia do arquivo gpg resultante com um arquivo que retorna 0 código. A única coisa que notei é que o byte da chave é diferente.

A descriptografia do gpg sem erros tem o seguinte log:

:pubkey enc packet: version 3, algo 16, keyid <16-hexdigit>
    data    1023 bits
    data    1024 bits

A descriptografia do erro gpg causa o seguinte log:

:pubkey enc packet: version 3, algo 16, keyid <16-hexdigit>
    data    1022 bits
    data    1022 bits

O que isso significa? Por que ainda pode ser descriptografado corretamente mesmo que o bit da chave não seja o mesmo? Observe que o id de chave e a senha usada para descriptografar os dois arquivos são os mesmos. Além disso, alguém conhece algum recurso detalhado sobre como explicar o erro do gpg.

    
por Nap 11.10.2012 / 04:36

2 respostas

4

Os códigos GPF amplamente usados são de três tipos:

  1. 0 é sucesso (todos os outros valores indicam uma falha).
  2. 2 é normalmente usado para erros inesperados.
  3. 1 para coisas como uma assinatura BAD.

A maneira correta de identificar um erro é interpretando a saída de --status-fd.

Agora, para a pergunta específica que você está usando, pode haver dois motivos:

  1. O GPG está perguntando se você deseja continuar com a criptografia usando uma chave não assinada. Como nenhum usuário pode inserir Y, ele produz um erro.

Para corrigir isso, forneça as seguintes opções:

    --yes and --always-trust
  1. Também pode ser um problema de permissão. O gpg está tentando acessar um diretório ao qual ele não pode ter acesso, por isso ele falha com um erro fatal. (código de erro 2)

Você pode consertar isso especificando uma diretiva homedir com um diretório gravável por gpg. Assim:

   $cmd = "/usr/bin/gpg -a --recipient $to -e -o $outfile $infile --homedir /path/to/dir";

Informações do man gpg:

   --homedir directory
   Set the name of the home directory to directory

    If this option is not used it defaults to "~/.gnupg". It does not make sense to    use     this in a options file. This also overrides the environment variable $GNUPGHOME.

Você também pode usar este link para saber mais sobre este.

Espero que isso ajude você.

    
por 11.10.2012 / 07:31
0

Uma maneira de usar o status-fd no linux é a seguinte: GPG="$ {PGP_LOCATION} gpg --status-fd 2 --passphrase-fd 0 --no-verbose --batch --output $ {OUTPUT} --decrypt $ {DOUTPUT}" # echo "GPG: $ {GPG}" $ {GPG} 2 > & 1 > > $ {STATUS} < $ {PASSFILE}

Observe que todas as variáveis do shell estão configuradas para apontar para os valores corretos. A saída do gpg é capturada no $ {STATUS} (um arquivo) ...

    
por 05.03.2013 / 19:48