Postfix header_checks sintaxe (POSIX - Perl)

1

Estou usando header_checks no Postfix para reescrever meus cabeçalhos (para e-mails enviados pelo Outlook através do meu servidor).

Aqui está a parte do cabeçalho que estou tentando alterar:

Received: from Raphasus (****.abo.wanadoo.fr [***.***.***.109])
    by mail.********.com (Postfix) with ESMTPSA id 917***CE9
    for <raph*****@hotmail.fr>; Thu, 31 Jul 2014 09:38:35 +0200 (CEST)

O que eu quero fazer: substituir somente a PRIMEIRA LINHA (com algumas informações personalizadas) e anexar as duas últimas linhas.

O que tentei (em header_checks):

/^\s*(Received: from).*$(.*)/ REPLACE $1 my personalized text $2

Funciona apenas quando eu removo $ 2 (por isso, substitui o total recebido: de pelo meu texto), se eu colocar $ 2, ele simplesmente não substitui o meu cabeçalho.

Acho que esta parte está correta:

/^\s*(Received: from).*$

Seleciona a primeira linha ou "Recebido: de". Mas como posso dizer que o que segue na minha expressão regular deve ser considerado como um parâmetro de $ 2?

Pesquisei em todos os lugares e não consegui encontrar (consulte a sintaxe POSIX, sintaxe PERL (como este documento diz que "A substituição de substrings da expressão correspondente na string de ação é possível usando a sintaxe convencional do Perl"))

Encontrei um exemplo de trabalho com os parâmetros $ 1 e $ 2:

/^\s*(Received: from)[^\n]*(.*)/ REPLACE $1 [127.0.0.1] (localhost [127.0.0.1])$2

Mas eu não entendo onde é decidido o que é $ 1 e o que é $ 2

PS: Eu postei essa pergunta no ServerFault, mas agora imagino se ela não deveria estar no StackOverflow?

EDITAR: Novas coisas que eu tentei e os resultados:

/^\s*(Received: from).*\((.*)/ REPLACE $1 mytext ([xxx.xxx.xxx.xxx])$2

Isso me dá:

Received: from mytext ([xxx.xxx.xxx.xxx])CEST)

Eu realmente não entendo porque não está detectando o parêntese de abertura mais cedo (parece que ele detecta somente após o ";")

EDIT2: testes adicionais

Então, tentei remover a linha para verificar se meu cabeçalho ainda estava da mesma forma de antes. É, aqui está o resultado:

Received: from Raphasus (xxxxxxxxxxxxxxxxx.abo.wanadoo.fr [xxx.xxx.xxx.xxx])
    by mail.xxxxxxxx.com (Postfix) with ESMTPSA id 5B1xxxxxxF
    for <[email protected]>; Thu, 31 Jul 2014 14:03:57 +0200 (CEST)

Então, considerando o fato de que há muito "0" nesse cabeçalho, tentei colocar a seguinte linha em meu header_checks para ver onde ele é cortado:

/^\s*(Received: from).*(0.*)/ REPLACE $1 mytext ([xxx.xxx.xxx.xxx])$2

E obtenho o seguinte resultado:

Received: from mytext ([xxx.xxx.xxx.xxx])0 (CEST)

Isso é incrivelmente estranho e eu não tenho idéia de por que ele corta neste zero e não em nenhum dos zeros antes (em 2014, em endereços IP, mesmo em +0200 porque o último ?, etc)

    
por Raphael Laurent 31.07.2014 / 10:55

1 resposta

2

Se você deseja remover / substituir linhas específicas ou partes de linhas, geralmente é melhor tentar e ser o mais específico possível. No seu caso, você vai querer tentar corresponder mais de perto o texto depois de e o nome do servidor e ip.

Algo como isso deve fazer um trabalho melhor:

([a-z]{2,25} \(.*\[.*\]\))

    
por 31.07.2014 / 15:53