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>