syslogmodule.c revision 1a21451b1d73b65af949193208372e86bf308411
1e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum/***********************************************************
2f6971e2958a162298885b6069cc137d973fac356Guido van RossumCopyright 1994 by Lance Ellinghouse,
3f6971e2958a162298885b6069cc137d973fac356Guido van RossumCathedral City, California Republic, United States of America.
4e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum
5e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum                        All Rights Reserved
6e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum
7e44e373cbc311e211d379e0633d53af4210d29faGuido van RossumPermission to use, copy, modify, and distribute this software and its
8e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossumdocumentation for any purpose and without fee is hereby granted,
9e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossumprovided that the above copyright notice appear in all copies and that
10e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossumboth that copyright notice and this permission notice appear in
11f6971e2958a162298885b6069cc137d973fac356Guido van Rossumsupporting documentation, and that the name of Lance Ellinghouse
12f6971e2958a162298885b6069cc137d973fac356Guido van Rossumnot be used in advertising or publicity pertaining to distribution
13f6971e2958a162298885b6069cc137d973fac356Guido van Rossumof the software without specific, written prior permission.
14e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum
15f6971e2958a162298885b6069cc137d973fac356Guido van RossumLANCE ELLINGHOUSE DISCLAIMS ALL WARRANTIES WITH REGARD TO
16e44e373cbc311e211d379e0633d53af4210d29faGuido van RossumTHIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
17f6971e2958a162298885b6069cc137d973fac356Guido van RossumFITNESS, IN NO EVENT SHALL LANCE ELLINGHOUSE BE LIABLE FOR ANY SPECIAL,
18f6971e2958a162298885b6069cc137d973fac356Guido van RossumINDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
19f6971e2958a162298885b6069cc137d973fac356Guido van RossumFROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
20f6971e2958a162298885b6069cc137d973fac356Guido van RossumNEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
21f6971e2958a162298885b6069cc137d973fac356Guido van RossumWITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum
23e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum******************************************************************/
24e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum
25c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum/******************************************************************
26c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum
27c1822a4dd1b5276211be041c7ac216c549c787a4Guido van RossumRevision history:
28c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum
29ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum1998/04/28 (Sean Reifschneider)
30ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum  - When facility not specified to syslog() method, use default from openlog()
31ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum    (This is how it was claimed to work in the documentation)
32ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum  - Potential resource leak of o_ident, now cleaned up in closelog()
33ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum  - Minor comment accuracy fix.
34ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum
35c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum95/06/29 (Steve Clift)
36c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum  - Changed arg parsing to use PyArg_ParseTuple.
37c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum  - Added PyErr_Clear() call(s) where needed.
38c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum  - Fix core dumps if user message contains format specifiers.
397e47402264cf87b9bbb61fc9ff610af08add7c7bThomas Wouters  - Change openlog arg defaults to match normal syslog behavior.
40c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum  - Plug memory leak in openlog().
41c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum  - Fix setlogmask() to return previous mask value.
42c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum
43c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum******************************************************************/
44c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum
45e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum/* syslog module */
46e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum
47a597dde3f1959127c33296a77f76331b59449c01Guido van Rossum#include "Python.h"
48e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum
49e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum#include <syslog.h>
50e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum
51ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum/*  only one instance, only one syslog, so globals should be ok  */
52ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossumstatic PyObject *S_ident_o = NULL;			/*  identifier, held by openlog()  */
53ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum
54ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum
55f6971e2958a162298885b6069cc137d973fac356Guido van Rossumstatic PyObject *
5641c36ffe83d22e84cc072130b3914d66d9d722f0Peter Schneider-Kampsyslog_openlog(PyObject * self, PyObject * args)
57e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum{
5843a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw	long logopt = 0;
5943a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw	long facility = LOG_USER;
606f5b741a4696bc8f331b1d9c77307940528813ffRaymond Hettinger	PyObject *new_S_ident_o;
618d3654db2228b11b7fbfac49ebffbe85a69e9a52Neal Norwitz	const char *ident;
62c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum
6343a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw	if (!PyArg_ParseTuple(args,
648d3654db2228b11b7fbfac49ebffbe85a69e9a52Neal Norwitz			      "U|ll;ident string [, logoption [, facility]]",
656f5b741a4696bc8f331b1d9c77307940528813ffRaymond Hettinger			      &new_S_ident_o, &logopt, &facility))
6643a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw		return NULL;
6743a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw
6843a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw	/* This is needed because openlog() does NOT make a copy
6943a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw	 * and syslog() later uses it.. cannot trash it.
7043a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw	 */
716f5b741a4696bc8f331b1d9c77307940528813ffRaymond Hettinger	Py_XDECREF(S_ident_o);
726f5b741a4696bc8f331b1d9c77307940528813ffRaymond Hettinger	S_ident_o = new_S_ident_o;
73ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum	Py_INCREF(S_ident_o);
74c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum
758d3654db2228b11b7fbfac49ebffbe85a69e9a52Neal Norwitz	ident = PyUnicode_AsString(S_ident_o);
768d3654db2228b11b7fbfac49ebffbe85a69e9a52Neal Norwitz	if (ident == NULL)
778d3654db2228b11b7fbfac49ebffbe85a69e9a52Neal Norwitz		return NULL;
788d3654db2228b11b7fbfac49ebffbe85a69e9a52Neal Norwitz	openlog(ident, logopt, facility);
79c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum
8043a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw	Py_INCREF(Py_None);
8143a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw	return Py_None;
82e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum}
83e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum
8443a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw
85f6971e2958a162298885b6069cc137d973fac356Guido van Rossumstatic PyObject *
8641c36ffe83d22e84cc072130b3914d66d9d722f0Peter Schneider-Kampsyslog_syslog(PyObject * self, PyObject * args)
87e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum{
888d3654db2228b11b7fbfac49ebffbe85a69e9a52Neal Norwitz	PyObject *message_object;
898d3654db2228b11b7fbfac49ebffbe85a69e9a52Neal Norwitz	const char *message;
90ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum	int   priority = LOG_INFO;
9143a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw
928d3654db2228b11b7fbfac49ebffbe85a69e9a52Neal Norwitz	if (!PyArg_ParseTuple(args, "iU;[priority,] message string",
93fa06e5f00f3e5f54ad97fbc93a3e9d199dc01fe8Neal Norwitz			      &priority, &message_object)) {
9443a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw		PyErr_Clear();
958d3654db2228b11b7fbfac49ebffbe85a69e9a52Neal Norwitz		if (!PyArg_ParseTuple(args, "U;[priority,] message string",
96fa06e5f00f3e5f54ad97fbc93a3e9d199dc01fe8Neal Norwitz				      &message_object))
9743a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw			return NULL;
9843a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw	}
99ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum
1008d3654db2228b11b7fbfac49ebffbe85a69e9a52Neal Norwitz	message = PyUnicode_AsString(message_object);
1018d3654db2228b11b7fbfac49ebffbe85a69e9a52Neal Norwitz	if (message == NULL)
1028d3654db2228b11b7fbfac49ebffbe85a69e9a52Neal Norwitz		return NULL;
10305e8be17fd15d8e649e026600f5ab20e1154599fChristian Heimes	Py_BEGIN_ALLOW_THREADS;
10443a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw	syslog(priority, "%s", message);
10505e8be17fd15d8e649e026600f5ab20e1154599fChristian Heimes	Py_END_ALLOW_THREADS;
10605e8be17fd15d8e649e026600f5ab20e1154599fChristian Heimes	Py_RETURN_NONE;
107e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum}
108e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum
109f6971e2958a162298885b6069cc137d973fac356Guido van Rossumstatic PyObject *
1104d70c3d9dded0f0fa7a73c67217a71111d05df4dThomas Wouterssyslog_closelog(PyObject *self, PyObject *unused)
111e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum{
112e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum	closelog();
113ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum	Py_XDECREF(S_ident_o);
114ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum	S_ident_o = NULL;
115f6971e2958a162298885b6069cc137d973fac356Guido van Rossum	Py_INCREF(Py_None);
116f6971e2958a162298885b6069cc137d973fac356Guido van Rossum	return Py_None;
117e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum}
118e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum
119f6971e2958a162298885b6069cc137d973fac356Guido van Rossumstatic PyObject *
12041c36ffe83d22e84cc072130b3914d66d9d722f0Peter Schneider-Kampsyslog_setlogmask(PyObject *self, PyObject *args)
121e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum{
12243a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw	long maskpri, omaskpri;
123c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum
12443a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw	if (!PyArg_ParseTuple(args, "l;mask for priority", &maskpri))
12543a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw		return NULL;
12643a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw	omaskpri = setlogmask(maskpri);
127217cfd1c86c59ed8a55ce6d6b88bbe37309e7ba2Christian Heimes	return PyLong_FromLong(omaskpri);
128e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum}
129e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum
130f6971e2958a162298885b6069cc137d973fac356Guido van Rossumstatic PyObject *
13141c36ffe83d22e84cc072130b3914d66d9d722f0Peter Schneider-Kampsyslog_log_mask(PyObject *self, PyObject *args)
132e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum{
13343a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw	long mask;
13443a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw	long pri;
13543713e5a2899930a8698e244b0d0fef59a676d17Guido van Rossum	if (!PyArg_ParseTuple(args, "l:LOG_MASK", &pri))
13643a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw		return NULL;
13743a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw	mask = LOG_MASK(pri);
138217cfd1c86c59ed8a55ce6d6b88bbe37309e7ba2Christian Heimes	return PyLong_FromLong(mask);
139e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum}
140e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum
141f6971e2958a162298885b6069cc137d973fac356Guido van Rossumstatic PyObject *
14241c36ffe83d22e84cc072130b3914d66d9d722f0Peter Schneider-Kampsyslog_log_upto(PyObject *self, PyObject *args)
143e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum{
14443a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw	long mask;
14543a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw	long pri;
14643713e5a2899930a8698e244b0d0fef59a676d17Guido van Rossum	if (!PyArg_ParseTuple(args, "l:LOG_UPTO", &pri))
14743a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw		return NULL;
14843a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw	mask = LOG_UPTO(pri);
149217cfd1c86c59ed8a55ce6d6b88bbe37309e7ba2Christian Heimes	return PyLong_FromLong(mask);
150e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum}
151e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum
152e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum/* List of functions defined in the module */
153e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum
154f6971e2958a162298885b6069cc137d973fac356Guido van Rossumstatic PyMethodDef syslog_methods[] = {
155c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum	{"openlog",	syslog_openlog,		METH_VARARGS},
1564d70c3d9dded0f0fa7a73c67217a71111d05df4dThomas Wouters	{"closelog",	syslog_closelog,	METH_NOARGS},
157c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum	{"syslog",	syslog_syslog,		METH_VARARGS},
158c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum	{"setlogmask",	syslog_setlogmask,	METH_VARARGS},
159c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum	{"LOG_MASK",	syslog_log_mask,	METH_VARARGS},
160c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum	{"LOG_UPTO",	syslog_log_upto,	METH_VARARGS},
161c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum	{NULL,		NULL,			0}
162e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum};
163e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum
164ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum/* Initialization function for the module */
165c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum
1661a21451b1d73b65af949193208372e86bf308411Martin v. Löwis
1671a21451b1d73b65af949193208372e86bf308411Martin v. Löwisstatic struct PyModuleDef syslogmodule = {
1681a21451b1d73b65af949193208372e86bf308411Martin v. Löwis	PyModuleDef_HEAD_INIT,
1691a21451b1d73b65af949193208372e86bf308411Martin v. Löwis	"syslog",
1701a21451b1d73b65af949193208372e86bf308411Martin v. Löwis	NULL,
1711a21451b1d73b65af949193208372e86bf308411Martin v. Löwis	-1,
1721a21451b1d73b65af949193208372e86bf308411Martin v. Löwis	syslog_methods,
1731a21451b1d73b65af949193208372e86bf308411Martin v. Löwis	NULL,
1741a21451b1d73b65af949193208372e86bf308411Martin v. Löwis	NULL,
1751a21451b1d73b65af949193208372e86bf308411Martin v. Löwis	NULL,
1761a21451b1d73b65af949193208372e86bf308411Martin v. Löwis	NULL
1771a21451b1d73b65af949193208372e86bf308411Martin v. Löwis};
1781a21451b1d73b65af949193208372e86bf308411Martin v. Löwis
179fe51c6d66e0fbf6a142036bee2c448bd7fe8fefcMark HammondPyMODINIT_FUNC
1801a21451b1d73b65af949193208372e86bf308411Martin v. LöwisPyInit_syslog(void)
181e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum{
1824baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyObject *m;
183e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum
184e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum	/* Create the module and add the functions */
1851a21451b1d73b65af949193208372e86bf308411Martin v. Löwis	m = PyModule_Create(&syslogmodule);
1861ac754fa10f5d199d19911e21185d0970cb3073fNeal Norwitz	if (m == NULL)
1871a21451b1d73b65af949193208372e86bf308411Martin v. Löwis		return NULL;
188e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum
189e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum	/* Add some symbolic constants to the module */
190c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum
191c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum	/* Priorities */
1924baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_EMERG",	  LOG_EMERG);
1934baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_ALERT",	  LOG_ALERT);
1944baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_CRIT",	  LOG_CRIT);
1954baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_ERR",	  LOG_ERR);
1964baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_WARNING", LOG_WARNING);
1974baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_NOTICE",  LOG_NOTICE);
1984baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_INFO",	  LOG_INFO);
1994baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_DEBUG",	  LOG_DEBUG);
200c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum
201c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum	/* openlog() option flags */
2024baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_PID",	  LOG_PID);
2034baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_CONS",	  LOG_CONS);
2044baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_NDELAY",  LOG_NDELAY);
205bcc207484a0f8f27a684e11194e7430c0710f66dGuido van Rossum#ifdef LOG_NOWAIT
2064baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_NOWAIT",  LOG_NOWAIT);
207bcc207484a0f8f27a684e11194e7430c0710f66dGuido van Rossum#endif
208c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum#ifdef LOG_PERROR
2094baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_PERROR",  LOG_PERROR);
210c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum#endif
211c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum
212c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum	/* Facilities */
2134baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_KERN",	  LOG_KERN);
2144baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_USER",	  LOG_USER);
2154baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_MAIL",	  LOG_MAIL);
2164baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_DAEMON",  LOG_DAEMON);
2174baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_AUTH",	  LOG_AUTH);
2184baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_LPR",	  LOG_LPR);
2194baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_LOCAL0",  LOG_LOCAL0);
2204baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_LOCAL1",  LOG_LOCAL1);
2214baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_LOCAL2",  LOG_LOCAL2);
2224baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_LOCAL3",  LOG_LOCAL3);
2234baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_LOCAL4",  LOG_LOCAL4);
2244baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_LOCAL5",  LOG_LOCAL5);
2254baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_LOCAL6",  LOG_LOCAL6);
2264baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_LOCAL7",  LOG_LOCAL7);
227e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum
228ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum#ifndef LOG_SYSLOG
229ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum#define LOG_SYSLOG		LOG_DAEMON
230ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum#endif
231ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum#ifndef LOG_NEWS
232ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum#define LOG_NEWS		LOG_MAIL
233ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum#endif
234ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum#ifndef LOG_UUCP
235ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum#define LOG_UUCP		LOG_MAIL
236ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum#endif
237ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum#ifndef LOG_CRON
238ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum#define LOG_CRON		LOG_DAEMON
239ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum#endif
240ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum
2414baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_SYSLOG",  LOG_SYSLOG);
2424baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_CRON",	  LOG_CRON);
2434baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_UUCP",	  LOG_UUCP);
2444baedc1d9be6e5308d73439db54b58e51fb30dfcFred Drake	PyModule_AddIntConstant(m, "LOG_NEWS",	  LOG_NEWS);
2451a21451b1d73b65af949193208372e86bf308411Martin v. Löwis	return m;
246e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum}
247