[Postfix] header_checks - REPLACE (Wyrażenia regularne) Temat rozwiązany

Konfiguracja serwerów, usług, itp.
Awatar użytkownika
UTAVATU
Posty: 3
Rejestracja: 21 marca 2019, 08:27
Lokalizacja: Gdynia, Poland

[Postfix] header_checks - REPLACE (Wyrażenia regularne)

Post autor: UTAVATU » 21 marca 2019, 08:35

Witam uprzejmie

Mam prośbę do kogoś, kto zna się na wyrażeniach regularnych w Postfixie dla header_checks. E-mail posiada w nagłówku, jak poniżej:

Kod: Zaznacz cały

Received: from aaa.com (bbb.com [192.168.0.1])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by xxx.com (Postfix) with ESMTPSA id 6F5462C00C7
for <zzz@zzz.com>; Sat, 16 Mar 2019 13:29:00 +0100 (CET)
...chciałbym używająć header_checks zamienić tylko pierwszą linijkę tak, aby całość wyglądała jak poniżej:

Kod: Zaznacz cały

Received: from xxx.com (zzz.com [10.0.0.1])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by xxx.com (Postfix) with ESMTPSA id 6F5462C00C7
for <zzz@zzz.com>; Sat, 16 Mar 2019 13:29:00 +0100 (CET)
Kiedy używam:

Kod: Zaznacz cały

/^\s*(Received:[[:space:]]from)[^\n]*(.*)/ REPLACE $1 xxx.com (zzz.com [10.0.0.1])$2
...otrzymuję:

Kod: Zaznacz cały

Received: from xxx.com (zzz.com [10.0.0.1])ng TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by xxx.com (Postfix) with ESMTPSA id 6F5462C00C7
for <zzz@zzz.com>; Sat, 16 Mar 2019 13:29:00 +0100 (CET)
...tak jakby drugą linijkę ucinał z początku "(using", czyli wywala "(usi" i kontynuował w pierwszej lijce dalej "ng TLSv1.2 with..."

Może ktoś dopatrzy się błędu i będzie w stanie pomóc.

Z góry dziękuję i pozdrawiam serdecznie.

Z poważaniem

Awatar użytkownika
LordRuthwen
Moderator
Posty: 2042
Rejestracja: 18 września 2009, 21:45
Lokalizacja: klikash?

Re: [Postfix] header_checks - REPLACE (Wyrażenia regularne)

Post autor: LordRuthwen » 21 marca 2019, 08:38

Brakuje Ci znaku nowej linii, albo matchuj bez niego albo do dodaj do replace, bo $2 to u Ciebie to co po znaku nowej linii, czyli regex działa poprawnie :)

Awatar użytkownika
UTAVATU
Posty: 3
Rejestracja: 21 marca 2019, 08:27
Lokalizacja: Gdynia, Poland

Re: [Postfix] header_checks - REPLACE (Wyrażenia regularne)

Post autor: UTAVATU » 21 marca 2019, 08:51

Witam uprzejmie

LordRuthwen, dziękuję za szybko odpowiedź. A czy mógłbym Cię prosić, jeżeli to nie stanowi problemu, żebyś przedstawił dokładny kod wyrażenia regularnego, którego działanie rozwiąże mój problem?

Dziękuję i pozdrawiam serdecznie.

Z poważaniem

Awatar użytkownika
LordRuthwen
Moderator
Posty: 2042
Rejestracja: 18 września 2009, 21:45
Lokalizacja: klikash?

Re: [Postfix] header_checks - REPLACE (Wyrażenia regularne)

Post autor: LordRuthwen » 21 marca 2019, 09:17

Prosić możesz, ale ja tego nie zrobię, wychodzę z założenia, że lepiej dać wędkę niż rybę.
Dlaczego używasz

Kod: Zaznacz cały

[^\n]*(.*)
?
Prościej chyba który robi match do ostatniego znaku linii bez znaku końca linii

Awatar użytkownika
UTAVATU
Posty: 3
Rejestracja: 21 marca 2019, 08:27
Lokalizacja: Gdynia, Poland

Re: [Postfix] header_checks - REPLACE (Wyrażenia regularne)

Post autor: UTAVATU » 21 marca 2019, 10:29

Witam uprzejmie

Kod: Zaznacz cały

/^\s*(Received:[[:space:]]from)*(.*)$/ REPLACE $1 xxx.com (zzz.com [10.0.0.1])$2
Daje wynik:

Kod: Zaznacz cały

Received: from xxx.com (zzz.com [10.0.0.1]) aaa.com (bbb.com [192.168.0.1])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by xxx.com (Postfix) with ESMTPSA id 6F5462C00C7
for <zzz@zzz.com>; Sat, 16 Mar 2019 13:29:00 +0100 (CET)
...czyli w pierwszej linijce za dużo o aaa.com (bbb.com [192.168.0.1]). Nie zastępuje tego, tylko dodaje moje i potem stare. Reszta linijek OK.

Kod: Zaznacz cały

/^\s*(Received:[[:space:]]from)*(.*)$/ REPLACE $1 xxx.com (zzz.com [10.0.0.1])
Daje wynik:

Kod: Zaznacz cały

Received: from xxx.com (zzz.com [10.0.0.1])
Tutaj w ogóle wszystkie pozostałe linie pomija. Coś chyba namieszałem i Cię nie zrozumiałem, niestety nie znam się na wyrażeniach regularnych.

Dziękuję mimo wszystko za poświęcony czas i pozdrawiam serdecznie.

EDIT

Dobra... Myślę, że udało mi się osiągnąć, to co oczekiwałem. Jeszcze proszę sprawdźcie, czy nie ma jakiś baboli w kodzie:

Kod: Zaznacz cały

/^\s*(Received:[[:space:]]from)[[:space:]]\S+ \(\S+ \[\S+\]\)(.*)/ REPLACE $1 xxx.com (zzz.com [10.0.0.1])$2
Z poważaniem

ODPOWIEDZ