--- ext/standard/syslog.c.orig 2010-03-19 15:01:40.000000000 +0100 +++ ext/standard/syslog.c 2010-03-19 15:02:24.000000000 +0100 @@ -38,10 +38,17 @@ static void start_syslog(TSRMLS_D); +PHP_INI_BEGIN() +PHP_INI_ENTRY("syslog.program", "", PHP_INI_PERDIR, NULL) +PHP_INI_ENTRY("syslog.pid", "0", PHP_INI_PERDIR, NULL) +PHP_INI_END() + /* {{{ PHP_MINIT_FUNCTION */ PHP_MINIT_FUNCTION(syslog) { + REGISTER_INI_ENTRIES(); + /* error levels */ REGISTER_LONG_CONSTANT("LOG_EMERG", LOG_EMERG, CONST_CS | CONST_PERSISTENT); /* system unusable */ REGISTER_LONG_CONSTANT("LOG_ALERT", LOG_ALERT, CONST_CS | CONST_PERSISTENT); /* immediate action required */ @@ -105,30 +112,48 @@ PHP_RINIT_FUNCTION(syslog) { + int option = 0; + int facility = LOG_USER; + if (INI_INT("define_syslog_variables")) { start_syslog(TSRMLS_C); } else { BG(syslog_started)=0; } - BG(syslog_device) = NULL; + + if (strlen(INI_STR("syslog.program"))) { + BG(syslog_device) = strdup(INI_STR("syslog.program")); + } else { + BG(syslog_device) = NULL; + } + + /* we call openlog() immediately + * a) necessary to have the same options for PHP-internal error reporting, + * b) because there's very little overhead in doing so -- without + * the LOG_NDELAY option this does not require any syscall + */ + if (INI_BOOL("syslog.pid")) { + option |= LOG_PID; + } + openlog(BG(syslog_device), option, facility); + return SUCCESS; } -#ifdef PHP_WIN32 PHP_RSHUTDOWN_FUNCTION(syslog) { closelog(); + if (BG(syslog_device)) { + free(BG(syslog_device)); + BG(syslog_device) = NULL; + } return SUCCESS; } -#endif PHP_MSHUTDOWN_FUNCTION(syslog) { - if (BG(syslog_device)) { - free(BG(syslog_device)); - BG(syslog_device) = NULL; - } + UNREGISTER_INI_ENTRIES(); return SUCCESS; }