Coverage Report

Created: 2022-10-14 11:19

/src/php-src/ext/standard/syslog.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
   +----------------------------------------------------------------------+
3
   | Copyright (c) The PHP Group                                          |
4
   +----------------------------------------------------------------------+
5
   | This source file is subject to version 3.01 of the PHP license,      |
6
   | that is bundled with this package in the file LICENSE, and is        |
7
   | available through the world-wide-web at the following url:           |
8
   | http://www.php.net/license/3_01.txt                                  |
9
   | If you did not receive a copy of the PHP license and are unable to   |
10
   | obtain it through the world-wide-web, please send a note to          |
11
   | license@php.net so we can mail you a copy immediately.               |
12
   +----------------------------------------------------------------------+
13
   | Author: Stig Sæther Bakken <ssb@php.net>                             |
14
   +----------------------------------------------------------------------+
15
 */
16
17
#include "php.h"
18
19
#ifdef HAVE_SYSLOG_H
20
#include "php_ini.h"
21
#include "zend_globals.h"
22
23
#include <stdlib.h>
24
#if HAVE_UNISTD_H
25
#include <unistd.h>
26
#endif
27
28
#include <string.h>
29
#include <errno.h>
30
31
#include <stdio.h>
32
#include "basic_functions.h"
33
#include "php_ext_syslog.h"
34
35
/* {{{ PHP_MINIT_FUNCTION
36
 */
37
PHP_MINIT_FUNCTION(syslog)
38
3.64k
{
39
  /* error levels */
40
3.64k
  REGISTER_LONG_CONSTANT("LOG_EMERG", LOG_EMERG, CONST_CS | CONST_PERSISTENT); /* system unusable */
41
3.64k
  REGISTER_LONG_CONSTANT("LOG_ALERT", LOG_ALERT, CONST_CS | CONST_PERSISTENT); /* immediate action required */
42
3.64k
  REGISTER_LONG_CONSTANT("LOG_CRIT", LOG_CRIT, CONST_CS | CONST_PERSISTENT); /* critical conditions */
43
3.64k
  REGISTER_LONG_CONSTANT("LOG_ERR", LOG_ERR, CONST_CS | CONST_PERSISTENT);
44
3.64k
  REGISTER_LONG_CONSTANT("LOG_WARNING", LOG_WARNING, CONST_CS | CONST_PERSISTENT);
45
3.64k
  REGISTER_LONG_CONSTANT("LOG_NOTICE", LOG_NOTICE, CONST_CS | CONST_PERSISTENT);
46
3.64k
  REGISTER_LONG_CONSTANT("LOG_INFO", LOG_INFO, CONST_CS | CONST_PERSISTENT);
47
3.64k
  REGISTER_LONG_CONSTANT("LOG_DEBUG", LOG_DEBUG, CONST_CS | CONST_PERSISTENT);
48
  /* facility: type of program logging the message */
49
3.64k
  REGISTER_LONG_CONSTANT("LOG_KERN", LOG_KERN, CONST_CS | CONST_PERSISTENT);
50
3.64k
  REGISTER_LONG_CONSTANT("LOG_USER", LOG_USER, CONST_CS | CONST_PERSISTENT); /* generic user level */
51
3.64k
  REGISTER_LONG_CONSTANT("LOG_MAIL", LOG_MAIL, CONST_CS | CONST_PERSISTENT); /* log to email */
52
3.64k
  REGISTER_LONG_CONSTANT("LOG_DAEMON", LOG_DAEMON, CONST_CS | CONST_PERSISTENT); /* other system daemons */
53
3.64k
  REGISTER_LONG_CONSTANT("LOG_AUTH", LOG_AUTH, CONST_CS | CONST_PERSISTENT);
54
3.64k
  REGISTER_LONG_CONSTANT("LOG_SYSLOG", LOG_SYSLOG, CONST_CS | CONST_PERSISTENT);
55
3.64k
  REGISTER_LONG_CONSTANT("LOG_LPR", LOG_LPR, CONST_CS | CONST_PERSISTENT);
56
3.64k
#ifdef LOG_NEWS
57
  /* No LOG_NEWS on HP-UX */
58
3.64k
  REGISTER_LONG_CONSTANT("LOG_NEWS", LOG_NEWS, CONST_CS | CONST_PERSISTENT); /* usenet new */
59
3.64k
#endif
60
3.64k
#ifdef LOG_UUCP
61
  /* No LOG_UUCP on HP-UX */
62
3.64k
  REGISTER_LONG_CONSTANT("LOG_UUCP", LOG_UUCP, CONST_CS | CONST_PERSISTENT);
63
3.64k
#endif
64
3.64k
#ifdef LOG_CRON
65
  /* apparently some systems don't have this one */
66
3.64k
  REGISTER_LONG_CONSTANT("LOG_CRON", LOG_CRON, CONST_CS | CONST_PERSISTENT);
67
3.64k
#endif
68
3.64k
#ifdef LOG_AUTHPRIV
69
  /* AIX doesn't have LOG_AUTHPRIV */
70
3.64k
  REGISTER_LONG_CONSTANT("LOG_AUTHPRIV", LOG_AUTHPRIV, CONST_CS | CONST_PERSISTENT);
71
3.64k
#endif
72
3.64k
#ifndef PHP_WIN32
73
3.64k
  REGISTER_LONG_CONSTANT("LOG_LOCAL0", LOG_LOCAL0, CONST_CS | CONST_PERSISTENT);
74
3.64k
  REGISTER_LONG_CONSTANT("LOG_LOCAL1", LOG_LOCAL1, CONST_CS | CONST_PERSISTENT);
75
3.64k
  REGISTER_LONG_CONSTANT("LOG_LOCAL2", LOG_LOCAL2, CONST_CS | CONST_PERSISTENT);
76
3.64k
  REGISTER_LONG_CONSTANT("LOG_LOCAL3", LOG_LOCAL3, CONST_CS | CONST_PERSISTENT);
77
3.64k
  REGISTER_LONG_CONSTANT("LOG_LOCAL4", LOG_LOCAL4, CONST_CS | CONST_PERSISTENT);
78
3.64k
  REGISTER_LONG_CONSTANT("LOG_LOCAL5", LOG_LOCAL5, CONST_CS | CONST_PERSISTENT);
79
3.64k
  REGISTER_LONG_CONSTANT("LOG_LOCAL6", LOG_LOCAL6, CONST_CS | CONST_PERSISTENT);
80
3.64k
  REGISTER_LONG_CONSTANT("LOG_LOCAL7", LOG_LOCAL7, CONST_CS | CONST_PERSISTENT);
81
3.64k
#endif
82
  /* options */
83
3.64k
  REGISTER_LONG_CONSTANT("LOG_PID", LOG_PID, CONST_CS | CONST_PERSISTENT);
84
3.64k
  REGISTER_LONG_CONSTANT("LOG_CONS", LOG_CONS, CONST_CS | CONST_PERSISTENT);
85
3.64k
  REGISTER_LONG_CONSTANT("LOG_ODELAY", LOG_ODELAY, CONST_CS | CONST_PERSISTENT);
86
3.64k
  REGISTER_LONG_CONSTANT("LOG_NDELAY", LOG_NDELAY, CONST_CS | CONST_PERSISTENT);
87
3.64k
#ifdef LOG_NOWAIT
88
3.64k
  REGISTER_LONG_CONSTANT("LOG_NOWAIT", LOG_NOWAIT, CONST_CS | CONST_PERSISTENT);
89
3.64k
#endif
90
3.64k
#ifdef LOG_PERROR
91
  /* AIX doesn't have LOG_PERROR */
92
3.64k
  REGISTER_LONG_CONSTANT("LOG_PERROR", LOG_PERROR, CONST_CS | CONST_PERSISTENT); /*log to stderr*/
93
3.64k
#endif
94
3.64k
  BG(syslog_device)=NULL;
95
96
3.64k
  return SUCCESS;
97
3.64k
}
98
/* }}} */
99
100
PHP_RINIT_FUNCTION(syslog)
101
395k
{
102
395k
  BG(syslog_device) = NULL;
103
395k
  return SUCCESS;
104
395k
}
105
106
107
#ifdef PHP_WIN32
108
PHP_RSHUTDOWN_FUNCTION(syslog)
109
{
110
  closelog();
111
  return SUCCESS;
112
}
113
#endif
114
115
PHP_MSHUTDOWN_FUNCTION(syslog)
116
0
{
117
0
  if (BG(syslog_device)) {
118
0
    free(BG(syslog_device));
119
0
    BG(syslog_device) = NULL;
120
0
  }
121
0
  return SUCCESS;
122
0
}
123
124
void php_openlog(const char *ident, int option, int facility)
125
0
{
126
0
  openlog(ident, option, facility);
127
0
  PG(have_called_openlog) = 1;
128
0
}
129
130
/* {{{ proto bool openlog(string ident, int option, int facility)
131
   Open connection to system logger */
132
/*
133
   ** OpenLog("nettopp", $LOG_PID, $LOG_LOCAL1);
134
   ** Syslog($LOG_EMERG, "help me!")
135
   ** CloseLog();
136
 */
137
PHP_FUNCTION(openlog)
138
0
{
139
0
  char *ident;
140
0
  zend_long option, facility;
141
0
  size_t ident_len;
142
143
0
  ZEND_PARSE_PARAMETERS_START(3, 3)
144
0
    Z_PARAM_STRING(ident, ident_len)
145
0
    Z_PARAM_LONG(option)
146
0
    Z_PARAM_LONG(facility)
147
0
  ZEND_PARSE_PARAMETERS_END();
148
149
0
  if (BG(syslog_device)) {
150
0
    free(BG(syslog_device));
151
0
  }
152
0
  BG(syslog_device) = zend_strndup(ident, ident_len);
153
0
  if(BG(syslog_device) == NULL) {
154
0
    RETURN_FALSE;
155
0
  }
156
0
  php_openlog(BG(syslog_device), option, facility);
157
0
  RETURN_TRUE;
158
0
}
159
/* }}} */
160
161
/* {{{ proto bool closelog(void)
162
   Close connection to system logger */
163
PHP_FUNCTION(closelog)
164
0
{
165
0
  ZEND_PARSE_PARAMETERS_NONE();
166
167
0
  closelog();
168
0
  if (BG(syslog_device)) {
169
0
    free(BG(syslog_device));
170
0
    BG(syslog_device)=NULL;
171
0
  }
172
0
  RETURN_TRUE;
173
0
}
174
/* }}} */
175
176
/* {{{ proto bool syslog(int priority, string message)
177
   Generate a system log message */
178
PHP_FUNCTION(syslog)
179
0
{
180
0
  zend_long priority;
181
0
  char *message;
182
0
  size_t message_len;
183
184
0
  ZEND_PARSE_PARAMETERS_START(2, 2)
185
0
    Z_PARAM_LONG(priority)
186
0
    Z_PARAM_STRING(message, message_len)
187
0
  ZEND_PARSE_PARAMETERS_END();
188
189
0
  php_syslog(priority, "%s", message);
190
0
  RETURN_TRUE;
191
0
}
192
/* }}} */
193
194
#endif