rsyslogd re_match вызывает ошибки сегментации - PullRequest
1 голос
/ 17 апреля 2019

Когда у меня есть правило

if ($msg contains "foobah"
 OR re_match($msg, '(authmgr|cli)\[[0-9]+\]:')
)
then {

В результате rsyslog выдает ошибку сегментации. Даже если я закомментирую строку, содержащую re_match, она все равно выдаст ошибку сегментации.

rsyslogd 8.24.0-34.el7, compiled with:
        PLATFORM:                               x86_64-redhat-linux-gnu
        PLATFORM (lsb_release -d):
        FEATURE_REGEXP:                         Yes
        GSSAPI Kerberos 5 support:              Yes
        FEATURE_DEBUG (debug build, slow code): No
        32bit Atomic operations supported:      Yes
        64bit Atomic operations supported:      Yes
        memory allocator:                       system default
        Runtime Instrumentation (slow code):    No
        uuid support:                           Yes
        Number of Bits in RainerScript integers: 64

Я бы хотел, чтобы это правило соответствовало событиям, которые содержат authmgr[123]: или cli:[456]:.

Может ли кто-нибудь подтвердить правильность форматирования регулярного выражения и объяснить, почему комментирование этой строки вызывает ошибку сегментации?

1 Ответ

0 голосов
/ 18 апреля 2019

Ответ, похоже, заключается в том, что вам нужно избегать обратной косой черты внутри строк, поэтому это должно работать:

re_match($msg, '(authmgr|cli)\\[[0-9]+\\]:')

В моей версии rsyslog, 8.30.0, если вы этого не сделаете, вы получите сообщение об ошибке, которое дает подсказку: недопустимый символ '' 'в выражении - есть ли где-нибудь недопустимая escape-последовательность?

Существует онлайн-инструмент для правильного экранирования строк. Если вы предоставите a\b, он сгенерирует a\\b.

...