blob: eea33aabb7e457a6e433ed0e3209af3e9e23b4fd [file] [log] [blame]
Guido van Rossume44e3731994-07-14 13:56:50 +00001/***********************************************************
Guido van Rossumf6971e21994-08-30 12:25:20 +00002Copyright 1994 by Lance Ellinghouse,
3Cathedral City, California Republic, United States of America.
Guido van Rossume44e3731994-07-14 13:56:50 +00004
5 All Rights Reserved
6
7Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
9provided that the above copyright notice appear in all copies and that
10both that copyright notice and this permission notice appear in
Guido van Rossumf6971e21994-08-30 12:25:20 +000011supporting documentation, and that the name of Lance Ellinghouse
12not be used in advertising or publicity pertaining to distribution
13of the software without specific, written prior permission.
Guido van Rossume44e3731994-07-14 13:56:50 +000014
Guido van Rossumf6971e21994-08-30 12:25:20 +000015LANCE ELLINGHOUSE DISCLAIMS ALL WARRANTIES WITH REGARD TO
Guido van Rossume44e3731994-07-14 13:56:50 +000016THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
Guido van Rossumf6971e21994-08-30 12:25:20 +000017FITNESS, IN NO EVENT SHALL LANCE ELLINGHOUSE BE LIABLE FOR ANY SPECIAL,
18INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
19FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
20NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
21WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
Guido van Rossume44e3731994-07-14 13:56:50 +000022
23******************************************************************/
24
25/* syslog module */
Guido van Rossume44e3731994-07-14 13:56:50 +000026
27#include "allobjects.h"
28#include "modsupport.h"
29
30#include <syslog.h>
31
Guido van Rossumf6971e21994-08-30 12:25:20 +000032#include "rename1.h"
33
34static PyObject *
Guido van Rossume44e3731994-07-14 13:56:50 +000035syslog_openlog(self, args)
Guido van Rossumf6971e21994-08-30 12:25:20 +000036 PyObject * self;
37 PyObject * args;
Guido van Rossume44e3731994-07-14 13:56:50 +000038{
39 char *ident = "";
Guido van Rossumf6971e21994-08-30 12:25:20 +000040 PyObject * ident_o;
Guido van Rossume44e3731994-07-14 13:56:50 +000041 long logopt = LOG_PID;
42 long facility = LOG_USER;
Guido van Rossumf6971e21994-08-30 12:25:20 +000043 if (!PyArg_Parse(args, "(Sll);ident string, logoption, facility", &ident_o, &logopt, &facility))
44 if (!PyArg_Parse(args, "(Sl);ident string, logoption", &ident_o, &logopt))
45 if (!PyArg_Parse(args, "S;ident string", &ident_o))
Guido van Rossume44e3731994-07-14 13:56:50 +000046 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +000047 Py_INCREF(ident_o); /* This is needed because openlog() does NOT make a copy
Guido van Rossume44e3731994-07-14 13:56:50 +000048 and syslog() later uses it.. cannot trash it. */
Guido van Rossumf6971e21994-08-30 12:25:20 +000049 ident = PyString_AsString(ident_o);
Guido van Rossume44e3731994-07-14 13:56:50 +000050 openlog(ident,logopt,facility);
Guido van Rossumf6971e21994-08-30 12:25:20 +000051 Py_INCREF(Py_None);
52 return Py_None;
Guido van Rossume44e3731994-07-14 13:56:50 +000053}
54
Guido van Rossumf6971e21994-08-30 12:25:20 +000055static PyObject *
Guido van Rossume44e3731994-07-14 13:56:50 +000056syslog_syslog(self, args)
Guido van Rossumf6971e21994-08-30 12:25:20 +000057 PyObject * self;
58 PyObject * args;
Guido van Rossume44e3731994-07-14 13:56:50 +000059{
60 int priority = LOG_INFO;
61 char *message;
62
Guido van Rossumf6971e21994-08-30 12:25:20 +000063 if (!PyArg_Parse(args,"(is);priority, message string",&priority,&message))
64 if (!PyArg_Parse(args,"s;message string",&message))
Guido van Rossume44e3731994-07-14 13:56:50 +000065 return NULL;
66 syslog(priority, message);
Guido van Rossumf6971e21994-08-30 12:25:20 +000067 Py_INCREF(Py_None);
68 return Py_None;
Guido van Rossume44e3731994-07-14 13:56:50 +000069}
70
Guido van Rossumf6971e21994-08-30 12:25:20 +000071static PyObject *
Guido van Rossume44e3731994-07-14 13:56:50 +000072syslog_closelog(self, args)
Guido van Rossumf6971e21994-08-30 12:25:20 +000073 PyObject * self;
74 PyObject * args;
Guido van Rossume44e3731994-07-14 13:56:50 +000075{
Guido van Rossumf6971e21994-08-30 12:25:20 +000076 if (!PyArg_NoArgs(args))
Guido van Rossume44e3731994-07-14 13:56:50 +000077 return NULL;
78 closelog();
Guido van Rossumf6971e21994-08-30 12:25:20 +000079 Py_INCREF(Py_None);
80 return Py_None;
Guido van Rossume44e3731994-07-14 13:56:50 +000081}
82
Guido van Rossumf6971e21994-08-30 12:25:20 +000083static PyObject *
Guido van Rossume44e3731994-07-14 13:56:50 +000084syslog_setlogmask(self, args)
Guido van Rossumf6971e21994-08-30 12:25:20 +000085 PyObject * self;
86 PyObject * args;
Guido van Rossume44e3731994-07-14 13:56:50 +000087{
88 long maskpri;
Guido van Rossumf6971e21994-08-30 12:25:20 +000089 if (!PyArg_Parse(args,"l;mask for priority",&maskpri))
Guido van Rossume44e3731994-07-14 13:56:50 +000090 return NULL;
91 setlogmask(maskpri);
Guido van Rossumf6971e21994-08-30 12:25:20 +000092 Py_INCREF(Py_None);
93 return Py_None;
Guido van Rossume44e3731994-07-14 13:56:50 +000094}
95
Guido van Rossumf6971e21994-08-30 12:25:20 +000096static PyObject *
Guido van Rossume44e3731994-07-14 13:56:50 +000097syslog_log_mask(self, args)
Guido van Rossumf6971e21994-08-30 12:25:20 +000098 PyObject * self;
99 PyObject * args;
Guido van Rossume44e3731994-07-14 13:56:50 +0000100{
101 long mask;
102 long pri;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000103 if (!PyArg_Parse(args,"l",&pri))
Guido van Rossume44e3731994-07-14 13:56:50 +0000104 return NULL;
105 mask = LOG_MASK(pri);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000106 return PyInt_FromLong(mask);
Guido van Rossume44e3731994-07-14 13:56:50 +0000107}
108
Guido van Rossumf6971e21994-08-30 12:25:20 +0000109static PyObject *
Guido van Rossume44e3731994-07-14 13:56:50 +0000110syslog_log_upto(self, args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000111 PyObject * self;
112 PyObject * args;
Guido van Rossume44e3731994-07-14 13:56:50 +0000113{
114 long mask;
115 long pri;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000116 if (!PyArg_Parse(args,"l",&pri))
Guido van Rossume44e3731994-07-14 13:56:50 +0000117 return NULL;
118 mask = LOG_UPTO(pri);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000119 return PyInt_FromLong(mask);
Guido van Rossume44e3731994-07-14 13:56:50 +0000120}
121
122/* List of functions defined in the module */
123
Guido van Rossumf6971e21994-08-30 12:25:20 +0000124static PyMethodDef syslog_methods[] = {
125 {"openlog", (PyCFunction)syslog_openlog},
126 {"closelog", (PyCFunction)syslog_closelog},
127 {"syslog", (PyCFunction)syslog_syslog},
128 {"setlogmask", (PyCFunction)syslog_setlogmask},
129 {"LOG_MASK", (PyCFunction)syslog_log_mask},
130 {"LOG_UPTO", (PyCFunction)syslog_log_upto},
Guido van Rossume44e3731994-07-14 13:56:50 +0000131 {NULL, NULL} /* sentinel */
132};
133
134/* Initialization function for the module */
135
136void
137initsyslog()
138{
Guido van Rossumf6971e21994-08-30 12:25:20 +0000139 PyObject *m, *d, *x;
Guido van Rossume44e3731994-07-14 13:56:50 +0000140
141 /* Create the module and add the functions */
Guido van Rossumf6971e21994-08-30 12:25:20 +0000142 m = Py_InitModule("syslog", syslog_methods);
Guido van Rossume44e3731994-07-14 13:56:50 +0000143
144 /* Add some symbolic constants to the module */
Guido van Rossumf6971e21994-08-30 12:25:20 +0000145 d = PyModule_GetDict(m);
146 x = PyInt_FromLong(LOG_EMERG);
147 PyDict_SetItemString(d, "LOG_EMERG", x);
148 x = PyInt_FromLong(LOG_ALERT);
149 PyDict_SetItemString(d, "LOG_ALERT", x);
150 x = PyInt_FromLong(LOG_CRIT);
151 PyDict_SetItemString(d, "LOG_CRIT", x);
152 x = PyInt_FromLong(LOG_ERR);
153 PyDict_SetItemString(d, "LOG_ERR", x);
154 x = PyInt_FromLong(LOG_WARNING);
155 PyDict_SetItemString(d, "LOG_WARNING", x);
156 x = PyInt_FromLong(LOG_NOTICE);
157 PyDict_SetItemString(d, "LOG_NOTICE", x);
158 x = PyInt_FromLong(LOG_INFO);
159 PyDict_SetItemString(d, "LOG_INFO", x);
160 x = PyInt_FromLong(LOG_DEBUG);
161 PyDict_SetItemString(d, "LOG_DEBUG", x);
162 x = PyInt_FromLong(LOG_PID);
163 PyDict_SetItemString(d, "LOG_PID", x);
164 x = PyInt_FromLong(LOG_CONS);
165 PyDict_SetItemString(d, "LOG_CONS", x);
166 x = PyInt_FromLong(LOG_NDELAY);
167 PyDict_SetItemString(d, "LOG_NDELAY", x);
168 x = PyInt_FromLong(LOG_NOWAIT);
169 PyDict_SetItemString(d, "LOG_NOWAIT", x);
170 x = PyInt_FromLong(LOG_KERN);
171 PyDict_SetItemString(d, "LOG_KERN", x);
172 x = PyInt_FromLong(LOG_USER);
173 PyDict_SetItemString(d, "LOG_USER", x);
174 x = PyInt_FromLong(LOG_MAIL);
175 PyDict_SetItemString(d, "LOG_MAIL", x);
176 x = PyInt_FromLong(LOG_DAEMON);
177 PyDict_SetItemString(d, "LOG_DAEMON", x);
178 x = PyInt_FromLong(LOG_LPR);
179 PyDict_SetItemString(d, "LOG_LPR", x);
180 x = PyInt_FromLong(LOG_LOCAL0);
181 PyDict_SetItemString(d, "LOG_LOCAL0", x);
182 x = PyInt_FromLong(LOG_LOCAL1);
183 PyDict_SetItemString(d, "LOG_LOCAL1", x);
184 x = PyInt_FromLong(LOG_LOCAL2);
185 PyDict_SetItemString(d, "LOG_LOCAL2", x);
186 x = PyInt_FromLong(LOG_LOCAL3);
187 PyDict_SetItemString(d, "LOG_LOCAL3", x);
188 x = PyInt_FromLong(LOG_LOCAL4);
189 PyDict_SetItemString(d, "LOG_LOCAL4", x);
190 x = PyInt_FromLong(LOG_LOCAL5);
191 PyDict_SetItemString(d, "LOG_LOCAL5", x);
192 x = PyInt_FromLong(LOG_LOCAL6);
193 PyDict_SetItemString(d, "LOG_LOCAL6", x);
194 x = PyInt_FromLong(LOG_LOCAL7);
195 PyDict_SetItemString(d, "LOG_LOCAL7", x);
Guido van Rossume44e3731994-07-14 13:56:50 +0000196
197 /* Check for errors */
Guido van Rossumf6971e21994-08-30 12:25:20 +0000198 if (PyErr_Occurred())
199 Py_FatalError("can't initialize module syslog");
Guido van Rossume44e3731994-07-14 13:56:50 +0000200}