Annotation of embedaddon/php/ext/standard/syslog.c, revision 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>