Return to syslog.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / standard |
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: */