core/logging: Fix broken syslog levels on older glibc.

The fix to ASTERISK-25407 introduced the usage of LOG_MAKEPRI. However
this macro is broken in older glibc (< 2.17); it would left-shift the
facility a second time, causing the resultant priority to become
invalid.

The syslog manpage mentions nothing about LOG_MAKEPRI and suggests this:

    The priority argument is formed by ORing the facility and the level
    values [...].

ASTERISK-25510 #close
Reported by: Michael Newton

Change-Id: Ia89debe7fac5ad090c7ef595c0707f31bb1e3d03
changes/52/2452/3
Walter Doekes 9 years ago committed by Joshua Colp
parent c5170677e7
commit 82e55e4883

@ -1322,7 +1322,8 @@ static void ast_log_vsyslog(struct logmsg *msg, int facility)
return;
}
syslog_level = LOG_MAKEPRI(facility, syslog_level);
/* Don't use LOG_MAKEPRI because it's broken in glibc<2.17 */
syslog_level = facility | syslog_level; /* LOG_MAKEPRI(facility, syslog_level); */
snprintf(buf, sizeof(buf), "%s[%d]%s: %s:%d in %s: %s",
levels[msg->level], msg->lwp, call_identifier_str, msg->file, msg->line, msg->function, msg->message);

Loading…
Cancel
Save