blob: aca674686cdb0c502c1dbf323d8c51ecbfc0f4e6 [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
Guido van Rossuma597dde1995-01-10 20:56:29 +000027#include "Python.h"
Guido van Rossume44e3731994-07-14 13:56:50 +000028
29#include <syslog.h>
30
Guido van Rossumf6971e21994-08-30 12:25:20 +000031static PyObject *
Guido van Rossume44e3731994-07-14 13:56:50 +000032syslog_openlog(self, args)
Guido van Rossumf6971e21994-08-30 12:25:20 +000033 PyObject * self;
34 PyObject * args;
Guido van Rossume44e3731994-07-14 13:56:50 +000035{
36 char *ident = "";
Guido van Rossumf6971e21994-08-30 12:25:20 +000037 PyObject * ident_o;
Guido van Rossume44e3731994-07-14 13:56:50 +000038 long logopt = LOG_PID;
39 long facility = LOG_USER;
Guido van Rossumf6971e21994-08-30 12:25:20 +000040 if (!PyArg_Parse(args, "(Sll);ident string, logoption, facility", &ident_o, &logopt, &facility))
41 if (!PyArg_Parse(args, "(Sl);ident string, logoption", &ident_o, &logopt))
42 if (!PyArg_Parse(args, "S;ident string", &ident_o))
Guido van Rossume44e3731994-07-14 13:56:50 +000043 return NULL;
Guido van Rossumf6971e21994-08-30 12:25:20 +000044 Py_INCREF(ident_o); /* This is needed because openlog() does NOT make a copy
Guido van Rossume44e3731994-07-14 13:56:50 +000045 and syslog() later uses it.. cannot trash it. */
Guido van Rossumf6971e21994-08-30 12:25:20 +000046 ident = PyString_AsString(ident_o);
Guido van Rossume44e3731994-07-14 13:56:50 +000047 openlog(ident,logopt,facility);
Guido van Rossumf6971e21994-08-30 12:25:20 +000048 Py_INCREF(Py_None);
49 return Py_None;
Guido van Rossume44e3731994-07-14 13:56:50 +000050}
51
Guido van Rossumf6971e21994-08-30 12:25:20 +000052static PyObject *
Guido van Rossume44e3731994-07-14 13:56:50 +000053syslog_syslog(self, args)
Guido van Rossumf6971e21994-08-30 12:25:20 +000054 PyObject * self;
55 PyObject * args;
Guido van Rossume44e3731994-07-14 13:56:50 +000056{
57 int priority = LOG_INFO;
58 char *message;
59
Guido van Rossumf6971e21994-08-30 12:25:20 +000060 if (!PyArg_Parse(args,"(is);priority, message string",&priority,&message))
61 if (!PyArg_Parse(args,"s;message string",&message))
Guido van Rossume44e3731994-07-14 13:56:50 +000062 return NULL;
63 syslog(priority, message);
Guido van Rossumf6971e21994-08-30 12:25:20 +000064 Py_INCREF(Py_None);
65 return Py_None;
Guido van Rossume44e3731994-07-14 13:56:50 +000066}
67
Guido van Rossumf6971e21994-08-30 12:25:20 +000068static PyObject *
Guido van Rossume44e3731994-07-14 13:56:50 +000069syslog_closelog(self, args)
Guido van Rossumf6971e21994-08-30 12:25:20 +000070 PyObject * self;
71 PyObject * args;
Guido van Rossume44e3731994-07-14 13:56:50 +000072{
Guido van Rossumf6971e21994-08-30 12:25:20 +000073 if (!PyArg_NoArgs(args))
Guido van Rossume44e3731994-07-14 13:56:50 +000074 return NULL;
75 closelog();
Guido van Rossumf6971e21994-08-30 12:25:20 +000076 Py_INCREF(Py_None);
77 return Py_None;
Guido van Rossume44e3731994-07-14 13:56:50 +000078}
79
Guido van Rossumf6971e21994-08-30 12:25:20 +000080static PyObject *
Guido van Rossume44e3731994-07-14 13:56:50 +000081syslog_setlogmask(self, args)
Guido van Rossumf6971e21994-08-30 12:25:20 +000082 PyObject * self;
83 PyObject * args;
Guido van Rossume44e3731994-07-14 13:56:50 +000084{
85 long maskpri;
Guido van Rossumf6971e21994-08-30 12:25:20 +000086 if (!PyArg_Parse(args,"l;mask for priority",&maskpri))
Guido van Rossume44e3731994-07-14 13:56:50 +000087 return NULL;
88 setlogmask(maskpri);
Guido van Rossumf6971e21994-08-30 12:25:20 +000089 Py_INCREF(Py_None);
90 return Py_None;
Guido van Rossume44e3731994-07-14 13:56:50 +000091}
92
Guido van Rossumf6971e21994-08-30 12:25:20 +000093static PyObject *
Guido van Rossume44e3731994-07-14 13:56:50 +000094syslog_log_mask(self, args)
Guido van Rossumf6971e21994-08-30 12:25:20 +000095 PyObject * self;
96 PyObject * args;
Guido van Rossume44e3731994-07-14 13:56:50 +000097{
98 long mask;
99 long pri;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000100 if (!PyArg_Parse(args,"l",&pri))
Guido van Rossume44e3731994-07-14 13:56:50 +0000101 return NULL;
102 mask = LOG_MASK(pri);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000103 return PyInt_FromLong(mask);
Guido van Rossume44e3731994-07-14 13:56:50 +0000104}
105
Guido van Rossumf6971e21994-08-30 12:25:20 +0000106static PyObject *
Guido van Rossume44e3731994-07-14 13:56:50 +0000107syslog_log_upto(self, args)
Guido van Rossumf6971e21994-08-30 12:25:20 +0000108 PyObject * self;
109 PyObject * args;
Guido van Rossume44e3731994-07-14 13:56:50 +0000110{
111 long mask;
112 long pri;
Guido van Rossumf6971e21994-08-30 12:25:20 +0000113 if (!PyArg_Parse(args,"l",&pri))
Guido van Rossume44e3731994-07-14 13:56:50 +0000114 return NULL;
115 mask = LOG_UPTO(pri);
Guido van Rossumf6971e21994-08-30 12:25:20 +0000116 return PyInt_FromLong(mask);
Guido van Rossume44e3731994-07-14 13:56:50 +0000117}
118
119/* List of functions defined in the module */
120
Guido van Rossumf6971e21994-08-30 12:25:20 +0000121static PyMethodDef syslog_methods[] = {
122 {"openlog", (PyCFunction)syslog_openlog},
123 {"closelog", (PyCFunction)syslog_closelog},
124 {"syslog", (PyCFunction)syslog_syslog},
125 {"setlogmask", (PyCFunction)syslog_setlogmask},
126 {"LOG_MASK", (PyCFunction)syslog_log_mask},
127 {"LOG_UPTO", (PyCFunction)syslog_log_upto},
Guido van Rossume44e3731994-07-14 13:56:50 +0000128 {NULL, NULL} /* sentinel */
129};
130
131/* Initialization function for the module */
132
133void
134initsyslog()
135{
Guido van Rossumf6971e21994-08-30 12:25:20 +0000136 PyObject *m, *d, *x;
Guido van Rossume44e3731994-07-14 13:56:50 +0000137
138 /* Create the module and add the functions */
Guido van Rossumf6971e21994-08-30 12:25:20 +0000139 m = Py_InitModule("syslog", syslog_methods);
Guido van Rossume44e3731994-07-14 13:56:50 +0000140
141 /* Add some symbolic constants to the module */
Guido van Rossumf6971e21994-08-30 12:25:20 +0000142 d = PyModule_GetDict(m);
143 x = PyInt_FromLong(LOG_EMERG);
144 PyDict_SetItemString(d, "LOG_EMERG", x);
145 x = PyInt_FromLong(LOG_ALERT);
146 PyDict_SetItemString(d, "LOG_ALERT", x);
147 x = PyInt_FromLong(LOG_CRIT);
148 PyDict_SetItemString(d, "LOG_CRIT", x);
149 x = PyInt_FromLong(LOG_ERR);
150 PyDict_SetItemString(d, "LOG_ERR", x);
151 x = PyInt_FromLong(LOG_WARNING);
152 PyDict_SetItemString(d, "LOG_WARNING", x);
153 x = PyInt_FromLong(LOG_NOTICE);
154 PyDict_SetItemString(d, "LOG_NOTICE", x);
155 x = PyInt_FromLong(LOG_INFO);
156 PyDict_SetItemString(d, "LOG_INFO", x);
157 x = PyInt_FromLong(LOG_DEBUG);
158 PyDict_SetItemString(d, "LOG_DEBUG", x);
159 x = PyInt_FromLong(LOG_PID);
160 PyDict_SetItemString(d, "LOG_PID", x);
161 x = PyInt_FromLong(LOG_CONS);
162 PyDict_SetItemString(d, "LOG_CONS", x);
163 x = PyInt_FromLong(LOG_NDELAY);
164 PyDict_SetItemString(d, "LOG_NDELAY", x);
165 x = PyInt_FromLong(LOG_NOWAIT);
166 PyDict_SetItemString(d, "LOG_NOWAIT", x);
167 x = PyInt_FromLong(LOG_KERN);
168 PyDict_SetItemString(d, "LOG_KERN", x);
169 x = PyInt_FromLong(LOG_USER);
170 PyDict_SetItemString(d, "LOG_USER", x);
171 x = PyInt_FromLong(LOG_MAIL);
172 PyDict_SetItemString(d, "LOG_MAIL", x);
173 x = PyInt_FromLong(LOG_DAEMON);
174 PyDict_SetItemString(d, "LOG_DAEMON", x);
175 x = PyInt_FromLong(LOG_LPR);
176 PyDict_SetItemString(d, "LOG_LPR", x);
177 x = PyInt_FromLong(LOG_LOCAL0);
178 PyDict_SetItemString(d, "LOG_LOCAL0", x);
179 x = PyInt_FromLong(LOG_LOCAL1);
180 PyDict_SetItemString(d, "LOG_LOCAL1", x);
181 x = PyInt_FromLong(LOG_LOCAL2);
182 PyDict_SetItemString(d, "LOG_LOCAL2", x);
183 x = PyInt_FromLong(LOG_LOCAL3);
184 PyDict_SetItemString(d, "LOG_LOCAL3", x);
185 x = PyInt_FromLong(LOG_LOCAL4);
186 PyDict_SetItemString(d, "LOG_LOCAL4", x);
187 x = PyInt_FromLong(LOG_LOCAL5);
188 PyDict_SetItemString(d, "LOG_LOCAL5", x);
189 x = PyInt_FromLong(LOG_LOCAL6);
190 PyDict_SetItemString(d, "LOG_LOCAL6", x);
191 x = PyInt_FromLong(LOG_LOCAL7);
192 PyDict_SetItemString(d, "LOG_LOCAL7", x);
Guido van Rossume44e3731994-07-14 13:56:50 +0000193
194 /* Check for errors */
Guido van Rossumf6971e21994-08-30 12:25:20 +0000195 if (PyErr_Occurred())
196 Py_FatalError("can't initialize module syslog");
Guido van Rossume44e3731994-07-14 13:56:50 +0000197}