AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 687551
Accepted
Binarus
Binarus
Asked: 2022-01-24 02:11:35 +0800 CST2022-01-24 02:11:35 +0800 CST 2022-01-24 02:11:35 +0800 CST

procmail retornando com código de saída 0 mesmo que não consiga ler seu arquivo de configuração: Como prevenir?

  • 772

Estou lidando com procmaila primeira vez, então peço desculpas se a pergunta a seguir é estúpida. Antes de colocar procmailem produção, estou fazendo alguns testes básicos. Um deles produziu um resultado totalmente inesperado que o torna quase inútil no meu cenário:

Quando procmailnão consegue ler seu arquivo de configuração, ele define seu código de saída como 0(true) quando termina. Isso é catastrófico, porque no meu cenário, estou usando procmailcomo um MDA que é executado de dentro do fetchmail. Se procmailnão puder ler seu arquivo de configuração, ele não poderá processar (entregar) mensagens conforme necessário, mas definirá o código de saída 0quando terminar; fetchmailinterpreta isso como uma entrega bem-sucedida e exclui as respectivas mensagens upstream. Em resumo, isso leva à perda dessas mensagens.

As permissões neste cenário são bastante complexas ( fetchmail+ procmail+ cyrdeliverover lmtp, fetchmailrodando sob sua própria conta de usuário, procmailsendo suide setgid, e assim por diante), então pode muito bem acontecer que alguém cometa um erro com as permissões quando algo precisa ser alterado. Devido ao problema descrito acima, tais erros provavelmente levam à perda de mensagens.

Portanto, gostaria de saber como fazer procmailpara sair com falha (código de saída diferente de 0) caso não consiga ler seu arquivo de configuração.

Para dar uma ideia do que se trata, considere a seguinte sessão de terminal (linhas irrelevantes removidas). Observe que a propriedade / permissões no diretório de configuração estão erradas intencionalmente, porque este é meu caso de teste.

root@morn /etc/fetchmail # whoami
root

root@morn /etc/fetchmail # dir
total 52K
drwx------   2 fetchmail root 4.0K 2022-01-23 10:09 .
drwxr-xr-x 123 root      root  12K 2022-01-22 17:17 ..
-rw-------   1 fetchmail root 2.4K 2022-01-23 10:09 fetchmailrc
-rw-------   1 root      mail  282 2022-01-23 02:49 procmailrc
-rw-r--r--   1 root      root  110 2022-01-23 00:36 testmessage

root@morn /etc/fetchmail # dir `which procmail`
-rwsr-sr-x 1 root mail 92K 2017-11-16 23:42 /usr/bin/procmail
    
root@morn /etc/fetchmail # cat /etc/systemd/system/pp-fetchmail.service    
User=fetchmail
Group=mail
ExecStart=/usr/bin/fetchmail -f /etc/fetchmail/fetchmailrc --pidfile /run/fetchmail/fetchmail.pid --syslog

root@morn /etc/fetchmail # cat fetchmailrc
poll
pop3.example.com
proto pop3
bad-header accept
user "[email protected]"
ssl
pass "supersecret"
is "user1" here
no rewrite
mda "/usr/bin/procmail TARGET=user1 /etc/fetchmail/procmailrc"

root@morn /etc/fetchmail # cat testmessage
From: [email protected]
To: [email protected]
Subject: Test message

This is a test message.

root@morn /etc/fetchmail # sudo -u fetchmail -g mail /usr/bin/procmail /etc/fetchmail/procmailrc < testmessage && echo "procmail exited 0" 
procmail: Couldn't read "/etc/fetchmail/procmailrc"
procmail exited 0

Claro, as duas últimas linhas são o problema. Alguém sabe como contornar? É claro que corrigir as permissões faria com que funcionasse corretamente, mas é isso que não estou pedindo explicitamente. Eu gostaria de ter uma solução mais robusta em caso de erros (meus ou outros).

linux debian
  • 2 2 respostas
  • 79 Views

2 respostas

  • Voted
  1. Best Answer
    tripleee
    2022-01-24T23:14:18+08:002022-01-24T23:14:18+08:00

    Se o Procmail retornar com sucesso, ele entregou as mensagens com sucesso em algum lugar, embora aparentemente não onde você queria. Uma falha ocorreria quando ele ficasse sem fallbacks e não pudesse entregar em qualquer lugar. Para descobrir para onde vão as mensagens, examine o arquivo de log (que é emitido com erro padrão se você não configurou explicitamente um arquivo de log). No entanto, na ausência de qualquer configuração de log explícita, você verá principalmente apenas os logs de entrega reais, como

    From [email protected]  Wed Apr 1, 2022 09:10:11 UTC
     Subject: Your inheritance from Nigeria
      Folder: /var/mail/fetchmail                       12524
    

    O procmail pronto para uso simplesmente será entregue DEFAULTna ausência de outras instruções. A -mopção requer um arquivo de configuração e falhará com um erro (código de saída 73) se não puder ser lido, mas desativará algumas das funcionalidades de entrega regular, que podem não ser o que você deseja.

    Sua configuração parece bastante frágil no geral. TARGET=userpor si só não significa nada para o Procmail, então você realmente tem que ter um procmailrcarquivo que faça algo com essa informação. O mecanismo de entrega regular usaria -d userpara entregar explicitamente ao usuário em questão e lidar com fallbacks etc. de forma robusta. (Não estou familiarizado o suficiente com Fetchmail para ter uma opinião informada sobre o que seria correto usar aqui.)

    • 3
  2. Edward
    2022-01-24T02:48:33+08:002022-01-24T02:48:33+08:00

    Nesse caso, eu escreveria um script de shell wrapper que envolve a "/usr/bin/procmail TARGET=user1 /etc/fetchmail/procmailrc"chamada, mas executa a verificação de permissões do arquivo de configuração antecipadamente. Se o arquivo de configuração não puder ser lido, retorne 1, se puder ser lido, execute a "/usr/bin/procmail TARGET=user1 /etc/fetchmail/procmailrc"chamada e retorne.

    Então, no fetchmailrcarquivo, faça isso:

    mda "/path/to/your/wrapper/script"
    
    • 1

relate perguntas

  • astyle não altera a formatação do arquivo de origem

  • Recebendo e-mail em um novo Debian fresco

  • Debian Stretch: gnome-software segfault em libgs_plugin_systemd-updates.so

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

  • Como digitar ü no Pinyin IME?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve