mirror of
https://github.com/php/php-src.git
synced 2025-08-16 14:08:47 +02:00

This reverts commit b0d7b126a2
.
This change wasn't quite right: I noticed only now that the
RSHUTDOWN function is #ifdef PHP_WIN32 and I'm not fully convinced
that ifdef can be removed: syslog might also be used by error
logging in FPM for example, in which case we probably shouldn't
be closing the log here.
Generally it's unclear how the openlog() functionality exposed
by PHP is supposed to interact with openlog() uses by SAPIs.
For now I'll just revert this change and let it leak across
requests.
194 lines
6.2 KiB
C
194 lines
6.2 KiB
C
/*
|
|
+----------------------------------------------------------------------+
|
|
| Copyright (c) The PHP Group |
|
|
+----------------------------------------------------------------------+
|
|
| This source file is subject to version 3.01 of the PHP license, |
|
|
| that is bundled with this package in the file LICENSE, and is |
|
|
| available through the world-wide-web at the following url: |
|
|
| http://www.php.net/license/3_01.txt |
|
|
| If you did not receive a copy of the PHP license and are unable to |
|
|
| obtain it through the world-wide-web, please send a note to |
|
|
| license@php.net so we can mail you a copy immediately. |
|
|
+----------------------------------------------------------------------+
|
|
| Author: Stig Sæther Bakken <ssb@php.net> |
|
|
+----------------------------------------------------------------------+
|
|
*/
|
|
|
|
#include "php.h"
|
|
|
|
#ifdef HAVE_SYSLOG_H
|
|
#include "php_ini.h"
|
|
#include "zend_globals.h"
|
|
|
|
#include <stdlib.h>
|
|
#if HAVE_UNISTD_H
|
|
#include <unistd.h>
|
|
#endif
|
|
|
|
#include <string.h>
|
|
#include <errno.h>
|
|
|
|
#include <stdio.h>
|
|
#include "basic_functions.h"
|
|
#include "php_ext_syslog.h"
|
|
|
|
/* {{{ PHP_MINIT_FUNCTION
|
|
*/
|
|
PHP_MINIT_FUNCTION(syslog)
|
|
{
|
|
/* 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 */
|
|
REGISTER_LONG_CONSTANT("LOG_CRIT", LOG_CRIT, CONST_CS | CONST_PERSISTENT); /* critical conditions */
|
|
REGISTER_LONG_CONSTANT("LOG_ERR", LOG_ERR, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("LOG_WARNING", LOG_WARNING, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("LOG_NOTICE", LOG_NOTICE, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("LOG_INFO", LOG_INFO, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("LOG_DEBUG", LOG_DEBUG, CONST_CS | CONST_PERSISTENT);
|
|
/* facility: type of program logging the message */
|
|
REGISTER_LONG_CONSTANT("LOG_KERN", LOG_KERN, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("LOG_USER", LOG_USER, CONST_CS | CONST_PERSISTENT); /* generic user level */
|
|
REGISTER_LONG_CONSTANT("LOG_MAIL", LOG_MAIL, CONST_CS | CONST_PERSISTENT); /* log to email */
|
|
REGISTER_LONG_CONSTANT("LOG_DAEMON", LOG_DAEMON, CONST_CS | CONST_PERSISTENT); /* other system daemons */
|
|
REGISTER_LONG_CONSTANT("LOG_AUTH", LOG_AUTH, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("LOG_SYSLOG", LOG_SYSLOG, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("LOG_LPR", LOG_LPR, CONST_CS | CONST_PERSISTENT);
|
|
#ifdef LOG_NEWS
|
|
/* No LOG_NEWS on HP-UX */
|
|
REGISTER_LONG_CONSTANT("LOG_NEWS", LOG_NEWS, CONST_CS | CONST_PERSISTENT); /* usenet new */
|
|
#endif
|
|
#ifdef LOG_UUCP
|
|
/* No LOG_UUCP on HP-UX */
|
|
REGISTER_LONG_CONSTANT("LOG_UUCP", LOG_UUCP, CONST_CS | CONST_PERSISTENT);
|
|
#endif
|
|
#ifdef LOG_CRON
|
|
/* apparently some systems don't have this one */
|
|
REGISTER_LONG_CONSTANT("LOG_CRON", LOG_CRON, CONST_CS | CONST_PERSISTENT);
|
|
#endif
|
|
#ifdef LOG_AUTHPRIV
|
|
/* AIX doesn't have LOG_AUTHPRIV */
|
|
REGISTER_LONG_CONSTANT("LOG_AUTHPRIV", LOG_AUTHPRIV, CONST_CS | CONST_PERSISTENT);
|
|
#endif
|
|
#ifndef PHP_WIN32
|
|
REGISTER_LONG_CONSTANT("LOG_LOCAL0", LOG_LOCAL0, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("LOG_LOCAL1", LOG_LOCAL1, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("LOG_LOCAL2", LOG_LOCAL2, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("LOG_LOCAL3", LOG_LOCAL3, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("LOG_LOCAL4", LOG_LOCAL4, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("LOG_LOCAL5", LOG_LOCAL5, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("LOG_LOCAL6", LOG_LOCAL6, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("LOG_LOCAL7", LOG_LOCAL7, CONST_CS | CONST_PERSISTENT);
|
|
#endif
|
|
/* options */
|
|
REGISTER_LONG_CONSTANT("LOG_PID", LOG_PID, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("LOG_CONS", LOG_CONS, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("LOG_ODELAY", LOG_ODELAY, CONST_CS | CONST_PERSISTENT);
|
|
REGISTER_LONG_CONSTANT("LOG_NDELAY", LOG_NDELAY, CONST_CS | CONST_PERSISTENT);
|
|
#ifdef LOG_NOWAIT
|
|
REGISTER_LONG_CONSTANT("LOG_NOWAIT", LOG_NOWAIT, CONST_CS | CONST_PERSISTENT);
|
|
#endif
|
|
#ifdef LOG_PERROR
|
|
/* AIX doesn't have LOG_PERROR */
|
|
REGISTER_LONG_CONSTANT("LOG_PERROR", LOG_PERROR, CONST_CS | CONST_PERSISTENT); /*log to stderr*/
|
|
#endif
|
|
BG(syslog_device)=NULL;
|
|
|
|
return SUCCESS;
|
|
}
|
|
/* }}} */
|
|
|
|
PHP_RINIT_FUNCTION(syslog)
|
|
{
|
|
BG(syslog_device) = NULL;
|
|
return SUCCESS;
|
|
}
|
|
|
|
|
|
#ifdef PHP_WIN32
|
|
PHP_RSHUTDOWN_FUNCTION(syslog)
|
|
{
|
|
closelog();
|
|
return SUCCESS;
|
|
}
|
|
#endif
|
|
|
|
PHP_MSHUTDOWN_FUNCTION(syslog)
|
|
{
|
|
if (BG(syslog_device)) {
|
|
free(BG(syslog_device));
|
|
BG(syslog_device) = NULL;
|
|
}
|
|
return SUCCESS;
|
|
}
|
|
|
|
void php_openlog(const char *ident, int option, int facility)
|
|
{
|
|
openlog(ident, option, facility);
|
|
PG(have_called_openlog) = 1;
|
|
}
|
|
|
|
/* {{{ proto bool openlog(string ident, int option, int facility)
|
|
Open connection to system logger */
|
|
/*
|
|
** OpenLog("nettopp", $LOG_PID, $LOG_LOCAL1);
|
|
** Syslog($LOG_EMERG, "help me!")
|
|
** CloseLog();
|
|
*/
|
|
PHP_FUNCTION(openlog)
|
|
{
|
|
char *ident;
|
|
zend_long option, facility;
|
|
size_t ident_len;
|
|
|
|
ZEND_PARSE_PARAMETERS_START(3, 3)
|
|
Z_PARAM_STRING(ident, ident_len)
|
|
Z_PARAM_LONG(option)
|
|
Z_PARAM_LONG(facility)
|
|
ZEND_PARSE_PARAMETERS_END();
|
|
|
|
if (BG(syslog_device)) {
|
|
free(BG(syslog_device));
|
|
}
|
|
BG(syslog_device) = zend_strndup(ident, ident_len);
|
|
if(BG(syslog_device) == NULL) {
|
|
RETURN_FALSE;
|
|
}
|
|
php_openlog(BG(syslog_device), option, facility);
|
|
RETURN_TRUE;
|
|
}
|
|
/* }}} */
|
|
|
|
/* {{{ proto bool closelog(void)
|
|
Close connection to system logger */
|
|
PHP_FUNCTION(closelog)
|
|
{
|
|
ZEND_PARSE_PARAMETERS_NONE();
|
|
|
|
closelog();
|
|
if (BG(syslog_device)) {
|
|
free(BG(syslog_device));
|
|
BG(syslog_device)=NULL;
|
|
}
|
|
RETURN_TRUE;
|
|
}
|
|
/* }}} */
|
|
|
|
/* {{{ proto bool syslog(int priority, string message)
|
|
Generate a system log message */
|
|
PHP_FUNCTION(syslog)
|
|
{
|
|
zend_long priority;
|
|
char *message;
|
|
size_t message_len;
|
|
|
|
ZEND_PARSE_PARAMETERS_START(2, 2)
|
|
Z_PARAM_LONG(priority)
|
|
Z_PARAM_STRING(message, message_len)
|
|
ZEND_PARSE_PARAMETERS_END();
|
|
|
|
php_syslog(priority, "%s", message);
|
|
RETURN_TRUE;
|
|
}
|
|
/* }}} */
|
|
|
|
#endif
|