Por que o rsyslog% syslogtag% display “(none)”?

1

Dadas as seguintes linhas em uma instância de /etc/rsyslog.conf :

$template MyFmt, "%timereported:::date-year%%timereported:::date-month%%timereported:::date-day%_%timereported:::date-hour%%timereported:::date-minute%%timereported:::date-second% %fromhost-ip% %fromhost% %HOSTNAME% %syslogtag%%programname%%msg:::drop-last-lf%\n"

auth,authpriv.*                            |/path/to/log;MyFmt

Suponha que o remetente syslog seja um programa C ++ compilado, ou seja, algo como:

// main.cpp

#include <ctime>
#include <syslog.h>

int main( int argc, char* artv[] )
{
  openlog( "LogTest[456]", 0, LOG_AUTH );
  syslog( LOG_AUTH | LOG_INFO, "hello, world %zu", size_t( time( NULL ) ) );
  closelog();
  return 0;
}

Então, por que uma entrada em /var/log/secure tem seus valores %syslogtag% e %programname% " (none) "? Significa necessariamente que o programa teria chamado " openlog( "(none)", ... ); "?

Eu tentei modificar o programa acima para passar openlog() valores do primeiro argumento "" (string vazia) e NULL . No caso do primeiro, o valor %syslogtag% resultante era uma sequência vazia e, no caso do último, o valor %syslogtag% resultante era " a.out ", ou seja, o nome do meu executável. Não consigo pensar no que mais poderia resultar em um valor de " (none) " além de explicitamente especificar openlog() ...?

Editar : Para ser claro: o programa de exemplo acima não resulta em um valor %syslogtag% de " (none) " - resulta em um valor esperado de "%código%". Minha pergunta é mais: o que causaria um valor LogTest[456] de " %syslogtag% ", além de explicitamente especificar (none) ?

(Estou tentando entender o comportamento observado no trabalho: o rsyslogd em execução em um servidor recebe syslogs de clientes e os grava em um formato de modelo para um canal, como acima. Alguns do conteúdo escrito tem um valor openlog() de " %syslogtag% " - gostaria de entender as possíveis razões.)

    
por StoneThrow 08.08.2018 / 21:06

0 respostas