History

add hg and python

cinap_lenrek committed 15 years ago

Commit 4bb9e221 parent 987265c3706 files · +1228772 −-233Browse files

Showing the changes to sys/src/cmd/python/Modules/syslogmodule.c (1 of 3706 files). Show all

Unified · Split

sys/src/cmd/python/Modules/syslogmodule.c+223−0
@@ -0,0 +1,223 @@
1+/***********************************************************
2+Copyright 1994 by Lance Ellinghouse,
3+Cathedral City, California Republic, United States of America.
4+
5+ All Rights Reserved
6+
7+Permission to use, copy, modify, and distribute this software and its
8+documentation for any purpose and without fee is hereby granted,
9+provided that the above copyright notice appear in all copies and that
10+both that copyright notice and this permission notice appear in
11+supporting documentation, and that the name of Lance Ellinghouse
12+not be used in advertising or publicity pertaining to distribution
13+of the software without specific, written prior permission.
14+
15+LANCE ELLINGHOUSE DISCLAIMS ALL WARRANTIES WITH REGARD TO
16+THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
17+FITNESS, IN NO EVENT SHALL LANCE ELLINGHOUSE BE LIABLE FOR ANY SPECIAL,
18+INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
19+FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
20+NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
21+WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22+
23+******************************************************************/
24+
25+/******************************************************************
26+
27+Revision history:
28+
29+1998/04/28 (Sean Reifschneider)
30+ - When facility not specified to syslog() method, use default from openlog()
31+ (This is how it was claimed to work in the documentation)
32+ - Potential resource leak of o_ident, now cleaned up in closelog()
33+ - Minor comment accuracy fix.
34+
35+95/06/29 (Steve Clift)
36+ - Changed arg parsing to use PyArg_ParseTuple.
37+ - Added PyErr_Clear() call(s) where needed.
38+ - Fix core dumps if user message contains format specifiers.
39+ - Change openlog arg defaults to match normal syslog behavior.
40+ - Plug memory leak in openlog().
41+ - Fix setlogmask() to return previous mask value.
42+
43+******************************************************************/
44+
45+/* syslog module */
46+
47+#include "Python.h"
48+
49+#include <syslog.h>
50+
51+/* only one instance, only one syslog, so globals should be ok */
52+static PyObject *S_ident_o = NULL; /* identifier, held by openlog() */
53+
54+
55+static PyObject *
56+syslog_openlog(PyObject * self, PyObject * args)
57+{
58+ long logopt = 0;
59+ long facility = LOG_USER;
60+ PyObject *new_S_ident_o;
61+
62+ if (!PyArg_ParseTuple(args,
63+ "S|ll;ident string [, logoption [, facility]]",
64+ &new_S_ident_o, &logopt, &facility))
65+ return NULL;
66+
67+ /* This is needed because openlog() does NOT make a copy
68+ * and syslog() later uses it.. cannot trash it.
69+ */
70+ Py_XDECREF(S_ident_o);
71+ S_ident_o = new_S_ident_o;
72+ Py_INCREF(S_ident_o);
73+
74+ openlog(PyString_AsString(S_ident_o), logopt, facility);
75+
76+ Py_INCREF(Py_None);
77+ return Py_None;
78+}
79+
80+
81+static PyObject *
82+syslog_syslog(PyObject * self, PyObject * args)
83+{
84+ char *message;
85+ int priority = LOG_INFO;
86+
87+ if (!PyArg_ParseTuple(args, "is;[priority,] message string",
88+ &priority, &message)) {
89+ PyErr_Clear();
90+ if (!PyArg_ParseTuple(args, "s;[priority,] message string",
91+ &message))
92+ return NULL;
93+ }
94+
95+ syslog(priority, "%s", message);
96+ Py_INCREF(Py_None);
97+ return Py_None;
98+}
99+
100+static PyObject *
101+syslog_closelog(PyObject *self, PyObject *unused)
102+{
103+ closelog();
104+ Py_XDECREF(S_ident_o);
105+ S_ident_o = NULL;
106+ Py_INCREF(Py_None);
107+ return Py_None;
108+}
109+
110+static PyObject *
111+syslog_setlogmask(PyObject *self, PyObject *args)
112+{
113+ long maskpri, omaskpri;
114+
115+ if (!PyArg_ParseTuple(args, "l;mask for priority", &maskpri))
116+ return NULL;
117+ omaskpri = setlogmask(maskpri);
118+ return PyInt_FromLong(omaskpri);
119+}
120+
121+static PyObject *
122+syslog_log_mask(PyObject *self, PyObject *args)
123+{
124+ long mask;
125+ long pri;
126+ if (!PyArg_ParseTuple(args, "l:LOG_MASK", &pri))
127+ return NULL;
128+ mask = LOG_MASK(pri);
129+ return PyInt_FromLong(mask);
130+}
131+
132+static PyObject *
133+syslog_log_upto(PyObject *self, PyObject *args)
134+{
135+ long mask;
136+ long pri;
137+ if (!PyArg_ParseTuple(args, "l:LOG_UPTO", &pri))
138+ return NULL;
139+ mask = LOG_UPTO(pri);
140+ return PyInt_FromLong(mask);
141+}
142+
143+/* List of functions defined in the module */
144+
145+static PyMethodDef syslog_methods[] = {
146+ {"openlog", syslog_openlog, METH_VARARGS},
147+ {"closelog", syslog_closelog, METH_NOARGS},
148+ {"syslog", syslog_syslog, METH_VARARGS},
149+ {"setlogmask", syslog_setlogmask, METH_VARARGS},
150+ {"LOG_MASK", syslog_log_mask, METH_VARARGS},
151+ {"LOG_UPTO", syslog_log_upto, METH_VARARGS},
152+ {NULL, NULL, 0}
153+};
154+
155+/* Initialization function for the module */
156+
157+PyMODINIT_FUNC
158+initsyslog(void)
159+{
160+ PyObject *m;
161+
162+ /* Create the module and add the functions */
163+ m = Py_InitModule("syslog", syslog_methods);
164+ if (m == NULL)
165+ return;
166+
167+ /* Add some symbolic constants to the module */
168+
169+ /* Priorities */
170+ PyModule_AddIntConstant(m, "LOG_EMERG", LOG_EMERG);
171+ PyModule_AddIntConstant(m, "LOG_ALERT", LOG_ALERT);
172+ PyModule_AddIntConstant(m, "LOG_CRIT", LOG_CRIT);
173+ PyModule_AddIntConstant(m, "LOG_ERR", LOG_ERR);
174+ PyModule_AddIntConstant(m, "LOG_WARNING", LOG_WARNING);
175+ PyModule_AddIntConstant(m, "LOG_NOTICE", LOG_NOTICE);
176+ PyModule_AddIntConstant(m, "LOG_INFO", LOG_INFO);
177+ PyModule_AddIntConstant(m, "LOG_DEBUG", LOG_DEBUG);
178+
179+ /* openlog() option flags */
180+ PyModule_AddIntConstant(m, "LOG_PID", LOG_PID);
181+ PyModule_AddIntConstant(m, "LOG_CONS", LOG_CONS);
182+ PyModule_AddIntConstant(m, "LOG_NDELAY", LOG_NDELAY);
183+#ifdef LOG_NOWAIT
184+ PyModule_AddIntConstant(m, "LOG_NOWAIT", LOG_NOWAIT);
185+#endif
186+#ifdef LOG_PERROR
187+ PyModule_AddIntConstant(m, "LOG_PERROR", LOG_PERROR);
188+#endif
189+
190+ /* Facilities */
191+ PyModule_AddIntConstant(m, "LOG_KERN", LOG_KERN);
192+ PyModule_AddIntConstant(m, "LOG_USER", LOG_USER);
193+ PyModule_AddIntConstant(m, "LOG_MAIL", LOG_MAIL);
194+ PyModule_AddIntConstant(m, "LOG_DAEMON", LOG_DAEMON);
195+ PyModule_AddIntConstant(m, "LOG_AUTH", LOG_AUTH);
196+ PyModule_AddIntConstant(m, "LOG_LPR", LOG_LPR);
197+ PyModule_AddIntConstant(m, "LOG_LOCAL0", LOG_LOCAL0);
198+ PyModule_AddIntConstant(m, "LOG_LOCAL1", LOG_LOCAL1);
199+ PyModule_AddIntConstant(m, "LOG_LOCAL2", LOG_LOCAL2);
200+ PyModule_AddIntConstant(m, "LOG_LOCAL3", LOG_LOCAL3);
201+ PyModule_AddIntConstant(m, "LOG_LOCAL4", LOG_LOCAL4);
202+ PyModule_AddIntConstant(m, "LOG_LOCAL5", LOG_LOCAL5);
203+ PyModule_AddIntConstant(m, "LOG_LOCAL6", LOG_LOCAL6);
204+ PyModule_AddIntConstant(m, "LOG_LOCAL7", LOG_LOCAL7);
205+
206+#ifndef LOG_SYSLOG
207+#define LOG_SYSLOG LOG_DAEMON
208+#endif
209+#ifndef LOG_NEWS
210+#define LOG_NEWS LOG_MAIL
211+#endif
212+#ifndef LOG_UUCP
213+#define LOG_UUCP LOG_MAIL
214+#endif
215+#ifndef LOG_CRON
216+#define LOG_CRON LOG_DAEMON
217+#endif
218+
219+ PyModule_AddIntConstant(m, "LOG_SYSLOG", LOG_SYSLOG);
220+ PyModule_AddIntConstant(m, "LOG_CRON", LOG_CRON);
221+ PyModule_AddIntConstant(m, "LOG_UUCP", LOG_UUCP);
222+ PyModule_AddIntConstant(m, "LOG_NEWS", LOG_NEWS);
223+}