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>