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 7f95a1b3c53bdd678b64aa608d4375660033460c3Antoine PitrouPermission to use, copy, modify, and distribute this software and its 8f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitroudocumentation for any purpose and without fee is hereby granted, 9e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossumprovided that the above copyright notice appear in all copies and that 10f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrouboth that copyright notice and this permission notice appear in 11f6971e2958a162298885b6069cc137d973fac356Guido van Rossumsupporting documentation, and that the name of Lance Ellinghouse 12f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrounot 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 17f95a1b3c53bdd678b64aa608d4375660033460c3Antoine PitrouFITNESS, IN NO EVENT SHALL LANCE ELLINGHOUSE BE LIABLE FOR ANY SPECIAL, 18f95a1b3c53bdd678b64aa608d4375660033460c3Antoine PitrouINDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING 19f95a1b3c53bdd678b64aa608d4375660033460c3Antoine PitrouFROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, 20f95a1b3c53bdd678b64aa608d4375660033460c3Antoine PitrouNEGLIGENCE 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 2913daf12b47f628a77dbd174a43dc72ed32f00b5bSean Reifscheider2010/04/20 (Sean Reifschneider) 3013daf12b47f628a77dbd174a43dc72ed32f00b5bSean Reifscheider - Use basename(sys.argv[0]) for the default "ident". 3113daf12b47f628a77dbd174a43dc72ed32f00b5bSean Reifscheider - Arguments to openlog() are now keyword args and are all optional. 3213daf12b47f628a77dbd174a43dc72ed32f00b5bSean Reifscheider - syslog() calls openlog() if it hasn't already been called. 3313daf12b47f628a77dbd174a43dc72ed32f00b5bSean Reifscheider 34ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum1998/04/28 (Sean Reifschneider) 35ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum - When facility not specified to syslog() method, use default from openlog() 36ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum (This is how it was claimed to work in the documentation) 37ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum - Potential resource leak of o_ident, now cleaned up in closelog() 38ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum - Minor comment accuracy fix. 39ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum 40c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum95/06/29 (Steve Clift) 41c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum - Changed arg parsing to use PyArg_ParseTuple. 42c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum - Added PyErr_Clear() call(s) where needed. 43c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum - Fix core dumps if user message contains format specifiers. 447e47402264cf87b9bbb61fc9ff610af08add7c7bThomas Wouters - Change openlog arg defaults to match normal syslog behavior. 45c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum - Plug memory leak in openlog(). 46c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum - Fix setlogmask() to return previous mask value. 47c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum 48c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum******************************************************************/ 49c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum 50e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum/* syslog module */ 51e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum 52a597dde3f1959127c33296a77f76331b59449c01Guido van Rossum#include "Python.h" 5313daf12b47f628a77dbd174a43dc72ed32f00b5bSean Reifscheider#include "osdefs.h" 54e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum 55e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum#include <syslog.h> 56e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum 57ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum/* only one instance, only one syslog, so globals should be ok */ 58f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitroustatic PyObject *S_ident_o = NULL; /* identifier, held by openlog() */ 597f810cd91576ad43babdbd94647ceda613024fbbSean Reifscheiderstatic char S_log_open = 0; 60ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum 61ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum 6213daf12b47f628a77dbd174a43dc72ed32f00b5bSean Reifscheiderstatic PyObject * 6313daf12b47f628a77dbd174a43dc72ed32f00b5bSean Reifscheidersyslog_get_argv(void) 6413daf12b47f628a77dbd174a43dc72ed32f00b5bSean Reifscheider{ 65f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou /* Figure out what to use for as the program "ident" for openlog(). 66f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou * This swallows exceptions and continues rather than failing out, 67f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou * because the syslog module can still be used because openlog(3) 68f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou * is optional. 69f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou */ 70f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 71e239d23e8cc66605f548585ad4489a8f12fc070dAlexander Belopolsky Py_ssize_t argv_len, scriptlen; 72f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou PyObject *scriptobj; 73d63a3b8beb4a0841cb59fb3515347ccaab34b733Martin v. Löwis Py_ssize_t slash; 74bd303c165bc914fc943026ece55f4ebd225614c9Victor Stinner PyObject *argv = PySys_GetObject("argv"); 75f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 76f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (argv == NULL) { 77f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou return(NULL); 78f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou } 79f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 80f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou argv_len = PyList_Size(argv); 81f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (argv_len == -1) { 82f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou PyErr_Clear(); 83f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou return(NULL); 84f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou } 85f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (argv_len == 0) { 86f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou return(NULL); 87f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou } 88f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 89f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou scriptobj = PyList_GetItem(argv, 0); 90f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (!PyUnicode_Check(scriptobj)) { 91f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou return(NULL); 92f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou } 93c4f281eba3f2b33bc0a7d7172c44f3d1237c09b3Victor Stinner scriptlen = PyUnicode_GET_LENGTH(scriptobj); 94e239d23e8cc66605f548585ad4489a8f12fc070dAlexander Belopolsky if (scriptlen == 0) { 95f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou return(NULL); 96f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou } 97f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 98c4f281eba3f2b33bc0a7d7172c44f3d1237c09b3Victor Stinner slash = PyUnicode_FindChar(scriptobj, SEP, 0, scriptlen, -1); 99d63a3b8beb4a0841cb59fb3515347ccaab34b733Martin v. Löwis if (slash == -2) 100d63a3b8beb4a0841cb59fb3515347ccaab34b733Martin v. Löwis return NULL; 101d63a3b8beb4a0841cb59fb3515347ccaab34b733Martin v. Löwis if (slash != -1) { 102c4f281eba3f2b33bc0a7d7172c44f3d1237c09b3Victor Stinner return PyUnicode_Substring(scriptobj, slash, scriptlen); 103f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou } else { 104f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou Py_INCREF(scriptobj); 105f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou return(scriptobj); 106f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou } 107f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 108f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou return(NULL); 10913daf12b47f628a77dbd174a43dc72ed32f00b5bSean Reifscheider} 11013daf12b47f628a77dbd174a43dc72ed32f00b5bSean Reifscheider 11113daf12b47f628a77dbd174a43dc72ed32f00b5bSean Reifscheider 112f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitroustatic PyObject * 11313daf12b47f628a77dbd174a43dc72ed32f00b5bSean Reifscheidersyslog_openlog(PyObject * self, PyObject * args, PyObject *kwds) 114e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum{ 115f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou long logopt = 0; 116f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou long facility = LOG_USER; 117f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou PyObject *new_S_ident_o = NULL; 118f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou static char *keywords[] = {"ident", "logoption", "facility", 0}; 119e239d23e8cc66605f548585ad4489a8f12fc070dAlexander Belopolsky char *ident = NULL; 120f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 121f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (!PyArg_ParseTupleAndKeywords(args, kwds, 122f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou "|Ull:openlog", keywords, &new_S_ident_o, &logopt, &facility)) 123f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou return NULL; 124f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 125f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (new_S_ident_o) { 126f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou Py_INCREF(new_S_ident_o); 127e239d23e8cc66605f548585ad4489a8f12fc070dAlexander Belopolsky } 128f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 129f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou /* get sys.argv[0] or NULL if we can't for some reason */ 130f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (!new_S_ident_o) { 131f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou new_S_ident_o = syslog_get_argv(); 132e239d23e8cc66605f548585ad4489a8f12fc070dAlexander Belopolsky } 133f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 134f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou Py_XDECREF(S_ident_o); 135f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou S_ident_o = new_S_ident_o; 136f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 137f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou /* At this point, S_ident_o should be INCREF()ed. openlog(3) does not 138f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou * make a copy, and syslog(3) later uses it. We can't garbagecollect it 139f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou * If NULL, just let openlog figure it out (probably using C argv[0]). 140f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou */ 141e239d23e8cc66605f548585ad4489a8f12fc070dAlexander Belopolsky if (S_ident_o) { 14206515833fef7b8b5c7968edf72367d94ff7eb1e0Serhiy Storchaka ident = PyUnicode_AsUTF8(S_ident_o); 143e239d23e8cc66605f548585ad4489a8f12fc070dAlexander Belopolsky if (ident == NULL) 144e239d23e8cc66605f548585ad4489a8f12fc070dAlexander Belopolsky return NULL; 145e239d23e8cc66605f548585ad4489a8f12fc070dAlexander Belopolsky } 146f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 147e239d23e8cc66605f548585ad4489a8f12fc070dAlexander Belopolsky openlog(ident, logopt, facility); 148f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou S_log_open = 1; 149f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 150f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou Py_INCREF(Py_None); 151f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou return Py_None; 152e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum} 153e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum 15443a476ac002186c28ceccf36009fffe43ce68b0cBarry Warsaw 155f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitroustatic PyObject * 15641c36ffe83d22e84cc072130b3914d66d9d722f0Peter Schneider-Kampsyslog_syslog(PyObject * self, PyObject * args) 157e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum{ 158f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou PyObject *message_object; 159f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou const char *message; 160f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou int priority = LOG_INFO; 161f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 162f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (!PyArg_ParseTuple(args, "iU;[priority,] message string", 163f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou &priority, &message_object)) { 164f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou PyErr_Clear(); 165f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (!PyArg_ParseTuple(args, "U;[priority,] message string", 166f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou &message_object)) 167f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou return NULL; 168f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou } 169f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 17006515833fef7b8b5c7968edf72367d94ff7eb1e0Serhiy Storchaka message = PyUnicode_AsUTF8(message_object); 171f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (message == NULL) 172f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou return NULL; 173f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 174f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou /* if log is not opened, open it now */ 175f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (!S_log_open) { 176f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou PyObject *openargs; 177f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 178f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou /* Continue even if PyTuple_New fails, because openlog(3) is optional. 179f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou * So, we can still do loggin in the unlikely event things are so hosed 180f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou * that we can't do this tuple. 181f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou */ 182f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if ((openargs = PyTuple_New(0))) { 183f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou PyObject *openlog_ret = syslog_openlog(self, openargs, NULL); 184f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou Py_XDECREF(openlog_ret); 185f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou Py_DECREF(openargs); 186f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou } 187f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou } 188f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 189f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou Py_BEGIN_ALLOW_THREADS; 190f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou syslog(priority, "%s", message); 191f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou Py_END_ALLOW_THREADS; 192f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou Py_RETURN_NONE; 193e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum} 194e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum 195f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitroustatic PyObject * 1964d70c3d9dded0f0fa7a73c67217a71111d05df4dThomas Wouterssyslog_closelog(PyObject *self, PyObject *unused) 197e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum{ 198f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (S_log_open) { 199f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou closelog(); 200505ff755d704c73ac613d3e8fed02c79c6ae555aSerhiy Storchaka Py_CLEAR(S_ident_o); 201f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou S_log_open = 0; 202f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou } 203f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou Py_INCREF(Py_None); 204f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou return Py_None; 205e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum} 206e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum 207f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitroustatic PyObject * 20841c36ffe83d22e84cc072130b3914d66d9d722f0Peter Schneider-Kampsyslog_setlogmask(PyObject *self, PyObject *args) 209e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum{ 210f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou long maskpri, omaskpri; 211c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum 212f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (!PyArg_ParseTuple(args, "l;mask for priority", &maskpri)) 213f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou return NULL; 214f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou omaskpri = setlogmask(maskpri); 215f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou return PyLong_FromLong(omaskpri); 216e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum} 217e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum 218f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitroustatic PyObject * 21941c36ffe83d22e84cc072130b3914d66d9d722f0Peter Schneider-Kampsyslog_log_mask(PyObject *self, PyObject *args) 220e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum{ 221f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou long mask; 222f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou long pri; 223f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (!PyArg_ParseTuple(args, "l:LOG_MASK", &pri)) 224f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou return NULL; 225f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou mask = LOG_MASK(pri); 226f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou return PyLong_FromLong(mask); 227e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum} 228e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum 229f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitroustatic PyObject * 23041c36ffe83d22e84cc072130b3914d66d9d722f0Peter Schneider-Kampsyslog_log_upto(PyObject *self, PyObject *args) 231e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum{ 232f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou long mask; 233f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou long pri; 234f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (!PyArg_ParseTuple(args, "l:LOG_UPTO", &pri)) 235f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou return NULL; 236f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou mask = LOG_UPTO(pri); 237f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou return PyLong_FromLong(mask); 238e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum} 239e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum 240e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum/* List of functions defined in the module */ 241e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum 242f6971e2958a162298885b6069cc137d973fac356Guido van Rossumstatic PyMethodDef syslog_methods[] = { 243f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou {"openlog", (PyCFunction) syslog_openlog, METH_VARARGS | METH_KEYWORDS}, 244f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou {"closelog", syslog_closelog, METH_NOARGS}, 245f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou {"syslog", syslog_syslog, METH_VARARGS}, 246f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou {"setlogmask", syslog_setlogmask, METH_VARARGS}, 247f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou {"LOG_MASK", syslog_log_mask, METH_VARARGS}, 248f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou {"LOG_UPTO", syslog_log_upto, METH_VARARGS}, 249f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou {NULL, NULL, 0} 250e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum}; 251e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum 252ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum/* Initialization function for the module */ 253c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum 2541a21451b1d73b65af949193208372e86bf308411Martin v. Löwis 2551a21451b1d73b65af949193208372e86bf308411Martin v. Löwisstatic struct PyModuleDef syslogmodule = { 256f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou PyModuleDef_HEAD_INIT, 257f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou "syslog", 258f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou NULL, 259f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou -1, 260f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou syslog_methods, 261f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou NULL, 262f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou NULL, 263f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou NULL, 264f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou NULL 2651a21451b1d73b65af949193208372e86bf308411Martin v. Löwis}; 2661a21451b1d73b65af949193208372e86bf308411Martin v. Löwis 267fe51c6d66e0fbf6a142036bee2c448bd7fe8fefcMark HammondPyMODINIT_FUNC 2681a21451b1d73b65af949193208372e86bf308411Martin v. LöwisPyInit_syslog(void) 269e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum{ 270f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou PyObject *m; 271f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 272f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou /* Create the module and add the functions */ 273f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou m = PyModule_Create(&syslogmodule); 274f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (m == NULL) 275f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou return NULL; 276f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 277f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou /* Add some symbolic constants to the module */ 278f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 279f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou /* Priorities */ 28074ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_EMERG); 28174ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_ALERT); 28274ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_CRIT); 28374ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_ERR); 28474ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_WARNING); 28574ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_NOTICE); 28674ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_INFO); 28774ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_DEBUG); 288f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 289f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou /* openlog() option flags */ 29074ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_PID); 29174ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_CONS); 29274ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_NDELAY); 293eac0939ddd56f60664de9cb85aa32910d7b22c78R David Murray#ifdef LOG_ODELAY 29474ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_ODELAY); 295eac0939ddd56f60664de9cb85aa32910d7b22c78R David Murray#endif 296bcc207484a0f8f27a684e11194e7430c0710f66dGuido van Rossum#ifdef LOG_NOWAIT 29774ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_NOWAIT); 298bcc207484a0f8f27a684e11194e7430c0710f66dGuido van Rossum#endif 299c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum#ifdef LOG_PERROR 30074ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_PERROR); 301c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum#endif 302c1822a4dd1b5276211be041c7ac216c549c787a4Guido van Rossum 303f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou /* Facilities */ 30474ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_KERN); 30574ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_USER); 30674ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_MAIL); 30774ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_DAEMON); 30874ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_AUTH); 30974ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_LPR); 31074ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_LOCAL0); 31174ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_LOCAL1); 31274ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_LOCAL2); 31374ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_LOCAL3); 31474ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_LOCAL4); 31574ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_LOCAL5); 31674ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_LOCAL6); 31774ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_LOCAL7); 318e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum 319ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum#ifndef LOG_SYSLOG 320f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou#define LOG_SYSLOG LOG_DAEMON 321ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum#endif 322ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum#ifndef LOG_NEWS 323f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou#define LOG_NEWS LOG_MAIL 324ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum#endif 325ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum#ifndef LOG_UUCP 326f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou#define LOG_UUCP LOG_MAIL 327ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum#endif 328ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum#ifndef LOG_CRON 329f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou#define LOG_CRON LOG_DAEMON 330ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum#endif 331ae94cf292ba0317ac70a5eca3004a2fa5bcaad80Guido van Rossum 33274ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_SYSLOG); 33374ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_CRON); 33474ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_UUCP); 33574ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_NEWS); 336eac0939ddd56f60664de9cb85aa32910d7b22c78R David Murray 337eac0939ddd56f60664de9cb85aa32910d7b22c78R David Murray#ifdef LOG_AUTHPRIV 33874ca886788fd116b026fdaa5980a48f09bce9befCharles-Francois Natali PyModule_AddIntMacro(m, LOG_AUTHPRIV); 339eac0939ddd56f60664de9cb85aa32910d7b22c78R David Murray#endif 340eac0939ddd56f60664de9cb85aa32910d7b22c78R David Murray 341f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou return m; 342e44e373cbc311e211d379e0633d53af4210d29faGuido van Rossum} 343