syslog.c 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. /*
  2. +----------------------------------------------------------------------+
  3. | Copyright (c) The PHP Group |
  4. +----------------------------------------------------------------------+
  5. | This source file is subject to version 3.01 of the PHP license, |
  6. | that is bundled with this package in the file LICENSE, and is |
  7. | available through the world-wide-web at the following url: |
  8. | https://www.php.net/license/3_01.txt |
  9. | If you did not receive a copy of the PHP license and are unable to |
  10. | obtain it through the world-wide-web, please send a note to |
  11. | license@php.net so we can mail you a copy immediately. |
  12. +----------------------------------------------------------------------+
  13. | Author: Stig Sæther Bakken <ssb@php.net> |
  14. +----------------------------------------------------------------------+
  15. */
  16. #include "php.h"
  17. #ifdef HAVE_SYSLOG_H
  18. #include "php_ini.h"
  19. #include "zend_globals.h"
  20. #include <stdlib.h>
  21. #if HAVE_UNISTD_H
  22. #include <unistd.h>
  23. #endif
  24. #include <string.h>
  25. #include <errno.h>
  26. #include <stdio.h>
  27. #include "basic_functions.h"
  28. #include "php_ext_syslog.h"
  29. /* {{{ PHP_MINIT_FUNCTION */
  30. PHP_MINIT_FUNCTION(syslog)
  31. {
  32. /* error levels */
  33. REGISTER_LONG_CONSTANT("LOG_EMERG", LOG_EMERG, CONST_CS | CONST_PERSISTENT); /* system unusable */
  34. REGISTER_LONG_CONSTANT("LOG_ALERT", LOG_ALERT, CONST_CS | CONST_PERSISTENT); /* immediate action required */
  35. REGISTER_LONG_CONSTANT("LOG_CRIT", LOG_CRIT, CONST_CS | CONST_PERSISTENT); /* critical conditions */
  36. REGISTER_LONG_CONSTANT("LOG_ERR", LOG_ERR, CONST_CS | CONST_PERSISTENT);
  37. REGISTER_LONG_CONSTANT("LOG_WARNING", LOG_WARNING, CONST_CS | CONST_PERSISTENT);
  38. REGISTER_LONG_CONSTANT("LOG_NOTICE", LOG_NOTICE, CONST_CS | CONST_PERSISTENT);
  39. REGISTER_LONG_CONSTANT("LOG_INFO", LOG_INFO, CONST_CS | CONST_PERSISTENT);
  40. REGISTER_LONG_CONSTANT("LOG_DEBUG", LOG_DEBUG, CONST_CS | CONST_PERSISTENT);
  41. /* facility: type of program logging the message */
  42. REGISTER_LONG_CONSTANT("LOG_KERN", LOG_KERN, CONST_CS | CONST_PERSISTENT);
  43. REGISTER_LONG_CONSTANT("LOG_USER", LOG_USER, CONST_CS | CONST_PERSISTENT); /* generic user level */
  44. REGISTER_LONG_CONSTANT("LOG_MAIL", LOG_MAIL, CONST_CS | CONST_PERSISTENT); /* log to email */
  45. REGISTER_LONG_CONSTANT("LOG_DAEMON", LOG_DAEMON, CONST_CS | CONST_PERSISTENT); /* other system daemons */
  46. REGISTER_LONG_CONSTANT("LOG_AUTH", LOG_AUTH, CONST_CS | CONST_PERSISTENT);
  47. REGISTER_LONG_CONSTANT("LOG_SYSLOG", LOG_SYSLOG, CONST_CS | CONST_PERSISTENT);
  48. REGISTER_LONG_CONSTANT("LOG_LPR", LOG_LPR, CONST_CS | CONST_PERSISTENT);
  49. #ifdef LOG_NEWS
  50. /* No LOG_NEWS on HP-UX */
  51. REGISTER_LONG_CONSTANT("LOG_NEWS", LOG_NEWS, CONST_CS | CONST_PERSISTENT); /* usenet new */
  52. #endif
  53. #ifdef LOG_UUCP
  54. /* No LOG_UUCP on HP-UX */
  55. REGISTER_LONG_CONSTANT("LOG_UUCP", LOG_UUCP, CONST_CS | CONST_PERSISTENT);
  56. #endif
  57. #ifdef LOG_CRON
  58. /* apparently some systems don't have this one */
  59. REGISTER_LONG_CONSTANT("LOG_CRON", LOG_CRON, CONST_CS | CONST_PERSISTENT);
  60. #endif
  61. #ifdef LOG_AUTHPRIV
  62. /* AIX doesn't have LOG_AUTHPRIV */
  63. REGISTER_LONG_CONSTANT("LOG_AUTHPRIV", LOG_AUTHPRIV, CONST_CS | CONST_PERSISTENT);
  64. #endif
  65. #ifndef PHP_WIN32
  66. REGISTER_LONG_CONSTANT("LOG_LOCAL0", LOG_LOCAL0, CONST_CS | CONST_PERSISTENT);
  67. REGISTER_LONG_CONSTANT("LOG_LOCAL1", LOG_LOCAL1, CONST_CS | CONST_PERSISTENT);
  68. REGISTER_LONG_CONSTANT("LOG_LOCAL2", LOG_LOCAL2, CONST_CS | CONST_PERSISTENT);
  69. REGISTER_LONG_CONSTANT("LOG_LOCAL3", LOG_LOCAL3, CONST_CS | CONST_PERSISTENT);
  70. REGISTER_LONG_CONSTANT("LOG_LOCAL4", LOG_LOCAL4, CONST_CS | CONST_PERSISTENT);
  71. REGISTER_LONG_CONSTANT("LOG_LOCAL5", LOG_LOCAL5, CONST_CS | CONST_PERSISTENT);
  72. REGISTER_LONG_CONSTANT("LOG_LOCAL6", LOG_LOCAL6, CONST_CS | CONST_PERSISTENT);
  73. REGISTER_LONG_CONSTANT("LOG_LOCAL7", LOG_LOCAL7, CONST_CS | CONST_PERSISTENT);
  74. #endif
  75. /* options */
  76. REGISTER_LONG_CONSTANT("LOG_PID", LOG_PID, CONST_CS | CONST_PERSISTENT);
  77. REGISTER_LONG_CONSTANT("LOG_CONS", LOG_CONS, CONST_CS | CONST_PERSISTENT);
  78. REGISTER_LONG_CONSTANT("LOG_ODELAY", LOG_ODELAY, CONST_CS | CONST_PERSISTENT);
  79. REGISTER_LONG_CONSTANT("LOG_NDELAY", LOG_NDELAY, CONST_CS | CONST_PERSISTENT);
  80. #ifdef LOG_NOWAIT
  81. REGISTER_LONG_CONSTANT("LOG_NOWAIT", LOG_NOWAIT, CONST_CS | CONST_PERSISTENT);
  82. #endif
  83. #ifdef LOG_PERROR
  84. /* AIX doesn't have LOG_PERROR */
  85. REGISTER_LONG_CONSTANT("LOG_PERROR", LOG_PERROR, CONST_CS | CONST_PERSISTENT); /*log to stderr*/
  86. #endif
  87. BG(syslog_device)=NULL;
  88. return SUCCESS;
  89. }
  90. /* }}} */
  91. PHP_RINIT_FUNCTION(syslog)
  92. {
  93. BG(syslog_device) = NULL;
  94. return SUCCESS;
  95. }
  96. #ifdef PHP_WIN32
  97. PHP_RSHUTDOWN_FUNCTION(syslog)
  98. {
  99. closelog();
  100. return SUCCESS;
  101. }
  102. #endif
  103. PHP_MSHUTDOWN_FUNCTION(syslog)
  104. {
  105. if (BG(syslog_device)) {
  106. free(BG(syslog_device));
  107. BG(syslog_device) = NULL;
  108. }
  109. return SUCCESS;
  110. }
  111. /* {{{ Open connection to system logger */
  112. /*
  113. ** OpenLog("nettopp", $LOG_PID, $LOG_LOCAL1);
  114. ** Syslog($LOG_EMERG, "help me!")
  115. ** CloseLog();
  116. */
  117. PHP_FUNCTION(openlog)
  118. {
  119. char *ident;
  120. zend_long option, facility;
  121. size_t ident_len;
  122. ZEND_PARSE_PARAMETERS_START(3, 3)
  123. Z_PARAM_STRING(ident, ident_len)
  124. Z_PARAM_LONG(option)
  125. Z_PARAM_LONG(facility)
  126. ZEND_PARSE_PARAMETERS_END();
  127. if (BG(syslog_device)) {
  128. free(BG(syslog_device));
  129. }
  130. BG(syslog_device) = zend_strndup(ident, ident_len);
  131. if(BG(syslog_device) == NULL) {
  132. RETURN_FALSE;
  133. }
  134. php_openlog(BG(syslog_device), option, facility);
  135. RETURN_TRUE;
  136. }
  137. /* }}} */
  138. /* {{{ Close connection to system logger */
  139. PHP_FUNCTION(closelog)
  140. {
  141. ZEND_PARSE_PARAMETERS_NONE();
  142. php_closelog();
  143. if (BG(syslog_device)) {
  144. free(BG(syslog_device));
  145. BG(syslog_device)=NULL;
  146. }
  147. RETURN_TRUE;
  148. }
  149. /* }}} */
  150. /* {{{ Generate a system log message */
  151. PHP_FUNCTION(syslog)
  152. {
  153. zend_long priority;
  154. zend_string *message;
  155. ZEND_PARSE_PARAMETERS_START(2, 2)
  156. Z_PARAM_LONG(priority)
  157. Z_PARAM_STR(message)
  158. ZEND_PARSE_PARAMETERS_END();
  159. php_syslog_str(priority, message);
  160. RETURN_TRUE;
  161. }
  162. /* }}} */
  163. #endif