
"정리" 프로세스에 header_checks 정규 표현식이 전달되었지만 여러 줄에 있는 경우 헤더를 단일 헤더로 처리하지 않습니다.
header_check(헤더 값을 FILTER에 전달):
/^X-OurHeader:\s+(.*?)/ FILTER $1
master.cf:
cleanup_service. unix n - y - 0 cleanup
-o header_checks=regexp:/etc/postfix/header_check
실패한 여러 줄 헤더의 예:
X-OurHeader: a_special_filter_command:my.sub.domain
b.mail.whatever.com
여러 줄로 표시되기 전의 원래 전체 헤더는 다음과 같습니다.
X-OurHeader: a_special_filter_command:my.sub.domainb.mail.whatever.com
FILTER에 전달된 결과는 다음과 같습니다. a_special_filter_command:my.sub.domain
두 번째 줄의 나머지 호스트 이름이 누락되었습니다 b.mailwhatever.com
.
대신 header_check를 이것으로 변경하면 다음 줄이 캡처됩니다.
/^X-OurHeader:\s+([\s\S]*)/ FILTER $1
$1 캡처 그룹에는 두 번째 줄이 포함되지만 캡처된 텍스트에도 여전히 공백(그리고 아마도 개행)이 있으므로 작동하지 않습니다. 다음과 같습니다.
X-OurHeader: a_special_filter_command:my.sub.domain b.mail.whatever.com
첫 번째 접근 방식으로 로그를 살펴보면 다음과 같습니다.
postfix/cleanup[123456]: 27429A1FE8: filter: header X-OurHeader: a_special_filter_command:my.sub.domain? b.mail.whatever.com
누구든지 제안할 수 있는 대안적인 접근 방식이 있습니까? 최종 목표는 FILTER로 보내야 하는 특수 cmd:hostname 값으로 헤더에 태그를 지정하는 것입니다. 그러나 hdr 값이 "길이를 충족하기 위해 긴 헤더에 대해 여러 줄로 분할되도록 지원하려는 것입니다. 78인치 표준.
답변1
특정 개수의 변형만 있다는 것을 알고 있거나 확인할 수 있는 경우 추가 표현식을 추가하여 별도로 포착하세요 /..:(.*) (.*)$/ -> /..:$1$2/
. 공백이 없으면 후위가 다음 표현식으로 계속되므로 복잡한 일치 항목을 먼저 배치하여 패턴을 단순하게 유지하세요.
그렇지 않지만 여전히 정규 표현식 범위 내에 있는 경우 다음 방법이 있을 수 있습니다.여러 조회 연결. 머리 꼭대기에서 모든 것을 하나로 모을 수는 없지만, 배포판에서 사용할 수 있고 전혀 작동한다면 문서가 도움이 될 것입니다 . header_checks
설명서와 DATABASE_README
파일부터 시작하세요.
pipemap:{pcre:/extract/category.pcre,pcre:/map/category/to/filter/command.pcre}
기본 아이디어: 먼저 일반적인 방향(예: MYFILTER: $1
)을 얻은 다음 필요한 편집을 적용하여 유효한 후위 명령으로 만들고 모든 입력이 유효한 출력으로 연결되는지 주의 깊게 확인합니다( MYFILTER: (valid1|valid2) -> FILTER host:port
폴백 라인 MYFILTER:
-> 포함 FILTER: default:port
).
실패하면 일반적으로 정규식 및 header_checks에 대해 너무 강력한 작업을 수행하려는 경우 Turing-completeness로 에스컬레이션합니다.
충분히 동적인 조회. 예를 들어 SQL을 좋아한다면 읽기/유지 관리가 그다지 어렵지 않은 결과를 얻게 될 것입니다. 여러 조회로 인한 의도하지 않은 논리적 결과에 주의하세요.
header_checks = sqlite:/path/to/definition.conf pcre:/remaining/simpler/rules.pcre
milter/policy 데몬. 메시지를 전혀 리디렉션하지 않고 외부 바이너리를 호출할 수도 있습니다. 다음 FILTER에 대한 현재 아이디어의 인터페이스에 따라 이는 다소 편리할 수 있습니다.
나는 또한 postfix를 올바르게 얻는 방법이 있다고 믿습니다.수송필요한 경우 header_checks의 여러 인스턴스를 통해 특정 메시지를 전송하지만 해당 경로는 권장하지 않으며 다른(다소 동적) 라우팅 결정과 잘 섞이지 않습니다.