wsyslog.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /*
  2. * This file modified from sources for imap4 for use
  3. * in PHP 3
  4. */
  5. /*
  6. * Program: Unix compatibility routines
  7. *
  8. * Author: Mark Crispin
  9. * Networks and Distributed Computing
  10. * Computing & Communications
  11. * University of Washington
  12. * Administration Building, AG-44
  13. * Seattle, WA 98195
  14. * Internet: MRC@CAC.Washington.EDU
  15. *
  16. * Date: 14 September 1996
  17. * Last Edited: 22 October 1996
  18. *
  19. * Copyright 1996 by the University of Washington
  20. *
  21. * Permission to use, copy, modify, and distribute this software and its
  22. * documentation for any purpose and without fee is hereby granted, provided
  23. * that the above copyright notice appears in all copies and that both the
  24. * above copyright notice and this permission notice appear in supporting
  25. * documentation, and that the name of the University of Washington not be
  26. * used in advertising or publicity pertaining to distribution of the software
  27. * without specific, written prior permission. This software is made available
  28. * "as is", and
  29. * THE UNIVERSITY OF WASHINGTON DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED,
  30. * WITH REGARD TO THIS SOFTWARE, INCLUDING WITHOUT LIMITATION ALL IMPLIED
  31. * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, AND IN
  32. * NO EVENT SHALL THE UNIVERSITY OF WASHINGTON BE LIABLE FOR ANY SPECIAL,
  33. * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  34. * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, TORT
  35. * (INCLUDING NEGLIGENCE) OR STRICT LIABILITY, ARISING OUT OF OR IN CONNECTION
  36. * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  37. *
  38. */
  39. /* DEDICATION
  40. * This file is dedicated to my dog, Unix, also known as Yun-chan and
  41. * Unix J. Terwilliker Jehosophat Aloysius Monstrosity Animal Beast. Unix
  42. * passed away at the age of 11 1/2 on September 14, 1996, 12:18 PM PDT, after
  43. * a two-month bout with cirrhosis of the liver.
  44. *
  45. * He was a dear friend, and I miss him terribly.
  46. *
  47. * Lift a leg, Yunie. Luv ya forever!!!!
  48. */
  49. #include "php.h" /*php specific */
  50. #include "syslog.h"
  51. #include <stdio.h>
  52. #include <fcntl.h>
  53. #include <process.h>
  54. #include "php_win32_globals.h"
  55. #include "wsyslog.h"
  56. void closelog(void)
  57. {
  58. TSRMLS_FETCH();
  59. if (PW32G(log_source)) {
  60. DeregisterEventSource(PW32G(log_source));
  61. PW32G(log_source) = NULL;
  62. }
  63. if (PW32G(log_header)) {
  64. STR_FREE(PW32G(log_header));
  65. PW32G(log_header) = NULL;
  66. }
  67. }
  68. /* Emulator for BSD syslog() routine
  69. * Accepts: priority
  70. * message
  71. * parameters
  72. */
  73. void syslog(int priority, const char *message, ...)
  74. {
  75. va_list args;
  76. LPTSTR strs[2];
  77. unsigned short etype;
  78. char *tmp = NULL;
  79. DWORD evid;
  80. TSRMLS_FETCH();
  81. /* default event source */
  82. if (!PW32G(log_source))
  83. openlog("php", LOG_PID, LOG_SYSLOG);
  84. switch (priority) { /* translate UNIX type into NT type */
  85. case LOG_ALERT:
  86. etype = EVENTLOG_ERROR_TYPE;
  87. evid = PHP_SYSLOG_ERROR_TYPE;
  88. break;
  89. case LOG_INFO:
  90. etype = EVENTLOG_INFORMATION_TYPE;
  91. evid = PHP_SYSLOG_INFO_TYPE;
  92. break;
  93. default:
  94. etype = EVENTLOG_WARNING_TYPE;
  95. evid = PHP_SYSLOG_WARNING_TYPE;
  96. }
  97. va_start(args, message); /* initialize vararg mechanism */
  98. vspprintf(&tmp, 0, message, args); /* build message */
  99. strs[0] = PW32G(log_header); /* write header */
  100. strs[1] = tmp; /* then the message */
  101. /* report the event */
  102. ReportEvent(PW32G(log_source), etype, (unsigned short) priority, evid, NULL, 2, 0, strs, NULL);
  103. va_end(args);
  104. efree(tmp);
  105. }
  106. /* Emulator for BSD openlog() routine
  107. * Accepts: identity
  108. * options
  109. * facility
  110. */
  111. void openlog(const char *ident, int logopt, int facility)
  112. {
  113. TSRMLS_FETCH();
  114. if (PW32G(log_source)) {
  115. closelog();
  116. }
  117. STR_FREE(PW32G(log_header));
  118. PW32G(log_source) = RegisterEventSource(NULL, "PHP-" PHP_VERSION);
  119. spprintf(&PW32G(log_header), 0, (logopt & LOG_PID) ? "%s[%d]" : "%s", ident, getpid());
  120. }