Annotation of embedaddon/php/ext/standard/syslog.c, revision 1.1.1.1
1.1 misho 1: /*
2: +----------------------------------------------------------------------+
3: | PHP Version 5 |
4: +----------------------------------------------------------------------+
5: | Copyright (c) 1997-2012 The PHP Group |
6: +----------------------------------------------------------------------+
7: | This source file is subject to version 3.01 of the PHP license, |
8: | that is bundled with this package in the file LICENSE, and is |
9: | available through the world-wide-web at the following url: |
10: | http://www.php.net/license/3_01.txt |
11: | If you did not receive a copy of the PHP license and are unable to |
12: | obtain it through the world-wide-web, please send a note to |
13: | license@php.net so we can mail you a copy immediately. |
14: +----------------------------------------------------------------------+
15: | Author: Stig Sæther Bakken <ssb@php.net> |
16: +----------------------------------------------------------------------+
17: */
18:
19: /* $Id: syslog.c 321634 2012-01-01 13:15:04Z felipe $ */
20:
21: #include "php.h"
22:
23: #ifdef HAVE_SYSLOG_H
24: #include "php_ini.h"
25: #include "zend_globals.h"
26:
27: #include <stdlib.h>
28: #if HAVE_UNISTD_H
29: #include <unistd.h>
30: #endif
31:
32: #include <string.h>
33: #include <errno.h>
34:
35: #include <stdio.h>
36: #include "basic_functions.h"
37: #include "php_ext_syslog.h"
38:
39: static void start_syslog(TSRMLS_D);
40:
41: /* {{{ PHP_MINIT_FUNCTION
42: */
43: PHP_MINIT_FUNCTION(syslog)
44: {
45: #if !SUHOSIN_PATCH
46: /* error levels */
47: REGISTER_LONG_CONSTANT("LOG_EMERG", LOG_EMERG, CONST_CS | CONST_PERSISTENT); /* system unusable */
48: REGISTER_LONG_CONSTANT("LOG_ALERT", LOG_ALERT, CONST_CS | CONST_PERSISTENT); /* immediate action required */
49: REGISTER_LONG_CONSTANT("LOG_CRIT", LOG_CRIT, CONST_CS | CONST_PERSISTENT); /* critical conditions */
50: REGISTER_LONG_CONSTANT("LOG_ERR", LOG_ERR, CONST_CS | CONST_PERSISTENT);
51: REGISTER_LONG_CONSTANT("LOG_WARNING", LOG_WARNING, CONST_CS | CONST_PERSISTENT);
52: REGISTER_LONG_CONSTANT("LOG_NOTICE", LOG_NOTICE, CONST_CS | CONST_PERSISTENT);
53: REGISTER_LONG_CONSTANT("LOG_INFO", LOG_INFO, CONST_CS | CONST_PERSISTENT);
54: REGISTER_LONG_CONSTANT("LOG_DEBUG", LOG_DEBUG, CONST_CS | CONST_PERSISTENT);
55: /* facility: type of program logging the message */
56: REGISTER_LONG_CONSTANT("LOG_KERN", LOG_KERN, CONST_CS | CONST_PERSISTENT);
57: REGISTER_LONG_CONSTANT("LOG_USER", LOG_USER, CONST_CS | CONST_PERSISTENT); /* generic user level */
58: REGISTER_LONG_CONSTANT("LOG_MAIL", LOG_MAIL, CONST_CS | CONST_PERSISTENT); /* log to email */
59: REGISTER_LONG_CONSTANT("LOG_DAEMON", LOG_DAEMON, CONST_CS | CONST_PERSISTENT); /* other system daemons */
60: REGISTER_LONG_CONSTANT("LOG_AUTH", LOG_AUTH, CONST_CS | CONST_PERSISTENT);
61: REGISTER_LONG_CONSTANT("LOG_SYSLOG", LOG_SYSLOG, CONST_CS | CONST_PERSISTENT);
62: REGISTER_LONG_CONSTANT("LOG_LPR", LOG_LPR, CONST_CS | CONST_PERSISTENT);
63: #ifdef LOG_NEWS
64: /* No LOG_NEWS on HP-UX */
65: REGISTER_LONG_CONSTANT("LOG_NEWS", LOG_NEWS, CONST_CS | CONST_PERSISTENT); /* usenet new */
66: #endif
67: #ifdef LOG_UUCP
68: /* No LOG_UUCP on HP-UX */
69: REGISTER_LONG_CONSTANT("LOG_UUCP", LOG_UUCP, CONST_CS | CONST_PERSISTENT);
70: #endif
71: #ifdef LOG_CRON
72: /* apparently some systems don't have this one */
73: REGISTER_LONG_CONSTANT("LOG_CRON", LOG_CRON, CONST_CS | CONST_PERSISTENT);
74: #endif
75: #ifdef LOG_AUTHPRIV
76: /* AIX doesn't have LOG_AUTHPRIV */
77: REGISTER_LONG_CONSTANT("LOG_AUTHPRIV", LOG_AUTHPRIV, CONST_CS | CONST_PERSISTENT);
78: #endif
79: #ifndef PHP_WIN32
80: REGISTER_LONG_CONSTANT("LOG_LOCAL0", LOG_LOCAL0, CONST_CS | CONST_PERSISTENT);
81: REGISTER_LONG_CONSTANT("LOG_LOCAL1", LOG_LOCAL1, CONST_CS | CONST_PERSISTENT);
82: REGISTER_LONG_CONSTANT("LOG_LOCAL2", LOG_LOCAL2, CONST_CS | CONST_PERSISTENT);
83: REGISTER_LONG_CONSTANT("LOG_LOCAL3", LOG_LOCAL3, CONST_CS | CONST_PERSISTENT);
84: REGISTER_LONG_CONSTANT("LOG_LOCAL4", LOG_LOCAL4, CONST_CS | CONST_PERSISTENT);
85: REGISTER_LONG_CONSTANT("LOG_LOCAL5", LOG_LOCAL5, CONST_CS | CONST_PERSISTENT);
86: REGISTER_LONG_CONSTANT("LOG_LOCAL6", LOG_LOCAL6, CONST_CS | CONST_PERSISTENT);
87: REGISTER_LONG_CONSTANT("LOG_LOCAL7", LOG_LOCAL7, CONST_CS | CONST_PERSISTENT);
88: #endif
89: /* options */
90: REGISTER_LONG_CONSTANT("LOG_PID", LOG_PID, CONST_CS | CONST_PERSISTENT);
91: REGISTER_LONG_CONSTANT("LOG_CONS", LOG_CONS, CONST_CS | CONST_PERSISTENT);
92: REGISTER_LONG_CONSTANT("LOG_ODELAY", LOG_ODELAY, CONST_CS | CONST_PERSISTENT);
93: REGISTER_LONG_CONSTANT("LOG_NDELAY", LOG_NDELAY, CONST_CS | CONST_PERSISTENT);
94: #ifdef LOG_NOWAIT
95: REGISTER_LONG_CONSTANT("LOG_NOWAIT", LOG_NOWAIT, CONST_CS | CONST_PERSISTENT);
96: #endif
97: #ifdef LOG_PERROR
98: /* AIX doesn't have LOG_PERROR */
99: REGISTER_LONG_CONSTANT("LOG_PERROR", LOG_PERROR, CONST_CS | CONST_PERSISTENT); /*log to stderr*/
100: #endif
101: #endif
102: BG(syslog_device)=NULL;
103:
104: return SUCCESS;
105: }
106: /* }}} */
107:
108: PHP_RINIT_FUNCTION(syslog)
109: {
110: if (INI_INT("define_syslog_variables")) {
111: start_syslog(TSRMLS_C);
112: } else {
113: BG(syslog_started)=0;
114: }
115: BG(syslog_device) = NULL;
116: return SUCCESS;
117: }
118:
119:
120: #ifdef PHP_WIN32
121: PHP_RSHUTDOWN_FUNCTION(syslog)
122: {
123: closelog();
124: return SUCCESS;
125: }
126: #endif
127:
128: PHP_MSHUTDOWN_FUNCTION(syslog)
129: {
130: if (BG(syslog_device)) {
131: free(BG(syslog_device));
132: BG(syslog_device) = NULL;
133: }
134: return SUCCESS;
135: }
136:
137: /* {{{ start_syslog
138: */
139: static void start_syslog(TSRMLS_D)
140: {
141: /* error levels */
142: SET_VAR_LONG("LOG_EMERG", LOG_EMERG); /* system unusable */
143: SET_VAR_LONG("LOG_ALERT", LOG_ALERT); /* immediate action required */
144: SET_VAR_LONG("LOG_CRIT", LOG_CRIT); /* critical conditions */
145: SET_VAR_LONG("LOG_ERR", LOG_ERR);
146: SET_VAR_LONG("LOG_WARNING", LOG_WARNING);
147: SET_VAR_LONG("LOG_NOTICE", LOG_NOTICE);
148: SET_VAR_LONG("LOG_INFO", LOG_INFO);
149: SET_VAR_LONG("LOG_DEBUG", LOG_DEBUG);
150: /* facility: type of program logging the message */
151: SET_VAR_LONG("LOG_KERN", LOG_KERN);
152: SET_VAR_LONG("LOG_USER", LOG_USER); /* generic user level */
153: SET_VAR_LONG("LOG_MAIL", LOG_MAIL); /* log to email */
154: SET_VAR_LONG("LOG_DAEMON", LOG_DAEMON); /* other system daemons */
155: SET_VAR_LONG("LOG_AUTH", LOG_AUTH);
156: #ifndef NETWARE
157: SET_VAR_LONG("LOG_SYSLOG", LOG_SYSLOG);
158: #endif
159: SET_VAR_LONG("LOG_LPR", LOG_LPR);
160: #ifdef LOG_NEWS
161: /* No LOG_NEWS on HP-UX */
162: SET_VAR_LONG("LOG_NEWS", LOG_NEWS); /* usenet new */
163: #endif
164: #ifdef LOG_UUCP
165: /* No LOG_UUCP on HP-UX */
166: SET_VAR_LONG("LOG_UUCP", LOG_UUCP);
167: #endif
168: #ifdef LOG_CRON
169: /* apparently some systems don't have this one */
170: SET_VAR_LONG("LOG_CRON", LOG_CRON);
171: #endif
172: #ifdef LOG_AUTHPRIV
173: /* AIX doesn't have LOG_AUTHPRIV */
174: SET_VAR_LONG("LOG_AUTHPRIV", LOG_AUTHPRIV);
175: #endif
176: #if !defined(PHP_WIN32) && !defined(NETWARE)
177: SET_VAR_LONG("LOG_LOCAL0", LOG_LOCAL0);
178: SET_VAR_LONG("LOG_LOCAL1", LOG_LOCAL1);
179: SET_VAR_LONG("LOG_LOCAL2", LOG_LOCAL2);
180: SET_VAR_LONG("LOG_LOCAL3", LOG_LOCAL3);
181: SET_VAR_LONG("LOG_LOCAL4", LOG_LOCAL4);
182: SET_VAR_LONG("LOG_LOCAL5", LOG_LOCAL5);
183: SET_VAR_LONG("LOG_LOCAL6", LOG_LOCAL6);
184: SET_VAR_LONG("LOG_LOCAL7", LOG_LOCAL7);
185: #endif
186: /* options */
187: SET_VAR_LONG("LOG_PID", LOG_PID);
188: SET_VAR_LONG("LOG_CONS", LOG_CONS);
189: SET_VAR_LONG("LOG_ODELAY", LOG_ODELAY);
190: SET_VAR_LONG("LOG_NDELAY", LOG_NDELAY);
191: #ifdef LOG_NOWAIT
192: /* BeOS doesn't have LOG_NOWAIT */
193: SET_VAR_LONG("LOG_NOWAIT", LOG_NOWAIT);
194: #endif
195: #ifdef LOG_PERROR
196: /* AIX doesn't have LOG_PERROR */
197: SET_VAR_LONG("LOG_PERROR", LOG_PERROR); /*log to stderr*/
198: #endif
199:
200: BG(syslog_started)=1;
201: }
202: /* }}} */
203:
204: /* {{{ proto void define_syslog_variables(void)
205: Initializes all syslog-related variables */
206: PHP_FUNCTION(define_syslog_variables)
207: {
208: if (zend_parse_parameters_none() == FAILURE) {
209: return;
210: }
211:
212: if (!BG(syslog_started)) {
213: start_syslog(TSRMLS_C);
214: }
215: }
216: /* }}} */
217:
218: /* {{{ proto bool openlog(string ident, int option, int facility)
219: Open connection to system logger */
220: /*
221: ** OpenLog("nettopp", $LOG_PID, $LOG_LOCAL1);
222: ** Syslog($LOG_EMERG, "help me!")
223: ** CloseLog();
224: */
225: PHP_FUNCTION(openlog)
226: {
227: char *ident;
228: long option, facility;
229: int ident_len;
230:
231: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sll", &ident,
232: &ident_len, &option, &facility) == FAILURE) {
233: return;
234: }
235: if (BG(syslog_device)) {
236: free(BG(syslog_device));
237: }
238: BG(syslog_device) = zend_strndup(ident, ident_len);
239: openlog(BG(syslog_device), option, facility);
240: RETURN_TRUE;
241: }
242: /* }}} */
243:
244: /* {{{ proto bool closelog(void)
245: Close connection to system logger */
246: PHP_FUNCTION(closelog)
247: {
248: if (zend_parse_parameters_none() == FAILURE) {
249: return;
250: }
251:
252: closelog();
253: if (BG(syslog_device)) {
254: free(BG(syslog_device));
255: BG(syslog_device)=NULL;
256: }
257: RETURN_TRUE;
258: }
259: /* }}} */
260:
261: /* {{{ proto bool syslog(int priority, string message)
262: Generate a system log message */
263: PHP_FUNCTION(syslog)
264: {
265: long priority;
266: char *message;
267: int message_len;
268:
269: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ls", &priority,
270: &message, &message_len) == FAILURE) {
271: return;
272: }
273:
274: php_syslog(priority, "%s", message);
275: RETURN_TRUE;
276: }
277: /* }}} */
278:
279: #endif
280:
281: /*
282: * Local variables:
283: * tab-width: 4
284: * c-basic-offset: 4
285: * End:
286: * vim600: sw=4 ts=4 fdm=marker
287: * vim<600: sw=4 ts=4
288: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>