Fix by Sean Reifschneider:
- When facility not specified to syslog() method, use default from openlog() (This is how it was claimed to work in the documentation) - Potential resource leak of o_ident, now cleaned up in closelog() - Minor comment accuracy fix.
This commit is contained in:
parent
27c225e826
commit
ae94cf292b
|
@ -26,6 +26,12 @@ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
Revision history:
|
Revision history:
|
||||||
|
|
||||||
|
1998/04/28 (Sean Reifschneider)
|
||||||
|
- When facility not specified to syslog() method, use default from openlog()
|
||||||
|
(This is how it was claimed to work in the documentation)
|
||||||
|
- Potential resource leak of o_ident, now cleaned up in closelog()
|
||||||
|
- Minor comment accuracy fix.
|
||||||
|
|
||||||
95/06/29 (Steve Clift)
|
95/06/29 (Steve Clift)
|
||||||
- Changed arg parsing to use PyArg_ParseTuple.
|
- Changed arg parsing to use PyArg_ParseTuple.
|
||||||
- Added PyErr_Clear() call(s) where needed.
|
- Added PyErr_Clear() call(s) where needed.
|
||||||
|
@ -42,6 +48,10 @@ Revision history:
|
||||||
|
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
|
|
||||||
|
/* only one instance, only one syslog, so globals should be ok */
|
||||||
|
static PyObject *S_ident_o = NULL; /* identifier, held by openlog() */
|
||||||
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
syslog_openlog(self, args)
|
syslog_openlog(self, args)
|
||||||
PyObject * self;
|
PyObject * self;
|
||||||
|
@ -50,20 +60,19 @@ syslog_openlog(self, args)
|
||||||
long logopt = 0;
|
long logopt = 0;
|
||||||
long facility = LOG_USER;
|
long facility = LOG_USER;
|
||||||
|
|
||||||
static PyObject *ident_o = NULL;
|
|
||||||
|
|
||||||
Py_XDECREF(ident_o);
|
Py_XDECREF(S_ident_o);
|
||||||
if (!PyArg_ParseTuple(args,
|
if (!PyArg_ParseTuple(args,
|
||||||
"S|ll;ident string [, logoption [, facility]]",
|
"S|ll;ident string [, logoption [, facility]]",
|
||||||
&ident_o, &logopt, &facility))
|
&S_ident_o, &logopt, &facility))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
/* This is needed because openlog() does NOT make a copy
|
/* This is needed because openlog() does NOT make a copy
|
||||||
* and syslog() later uses it.. cannot trash it.
|
* and syslog() later uses it.. cannot trash it.
|
||||||
*/
|
*/
|
||||||
Py_INCREF(ident_o);
|
Py_INCREF(S_ident_o);
|
||||||
|
|
||||||
openlog(PyString_AsString(ident_o), logopt, facility);
|
openlog(PyString_AsString(S_ident_o), logopt, facility);
|
||||||
|
|
||||||
Py_INCREF(Py_None);
|
Py_INCREF(Py_None);
|
||||||
return Py_None;
|
return Py_None;
|
||||||
|
@ -76,7 +85,7 @@ syslog_syslog(self, args)
|
||||||
PyObject * args;
|
PyObject * args;
|
||||||
{
|
{
|
||||||
char *message;
|
char *message;
|
||||||
int priority = LOG_INFO | LOG_USER;
|
int priority = LOG_INFO;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "is;[priority,] message string",
|
if (!PyArg_ParseTuple(args, "is;[priority,] message string",
|
||||||
&priority, &message)) {
|
&priority, &message)) {
|
||||||
|
@ -85,6 +94,7 @@ syslog_syslog(self, args)
|
||||||
&message))
|
&message))
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
syslog(priority, "%s", message);
|
syslog(priority, "%s", message);
|
||||||
Py_INCREF(Py_None);
|
Py_INCREF(Py_None);
|
||||||
return Py_None;
|
return Py_None;
|
||||||
|
@ -98,6 +108,8 @@ syslog_closelog(self, args)
|
||||||
if (!PyArg_ParseTuple(args, ""))
|
if (!PyArg_ParseTuple(args, ""))
|
||||||
return NULL;
|
return NULL;
|
||||||
closelog();
|
closelog();
|
||||||
|
Py_XDECREF(S_ident_o);
|
||||||
|
S_ident_o = NULL;
|
||||||
Py_INCREF(Py_None);
|
Py_INCREF(Py_None);
|
||||||
return Py_None;
|
return Py_None;
|
||||||
}
|
}
|
||||||
|
@ -153,7 +165,7 @@ static PyMethodDef syslog_methods[] = {
|
||||||
{NULL, NULL, 0}
|
{NULL, NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Initialization function for the module */
|
/* helper function for initialization function */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ins(d, s, x)
|
ins(d, s, x)
|
||||||
|
@ -168,6 +180,7 @@ ins(d, s, x)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Initialization function for the module */
|
||||||
|
|
||||||
void
|
void
|
||||||
initsyslog()
|
initsyslog()
|
||||||
|
@ -205,25 +218,7 @@ initsyslog()
|
||||||
ins(d, "LOG_MAIL", LOG_MAIL);
|
ins(d, "LOG_MAIL", LOG_MAIL);
|
||||||
ins(d, "LOG_DAEMON", LOG_DAEMON);
|
ins(d, "LOG_DAEMON", LOG_DAEMON);
|
||||||
ins(d, "LOG_AUTH", LOG_AUTH);
|
ins(d, "LOG_AUTH", LOG_AUTH);
|
||||||
#ifdef LOG_SYSLOG
|
|
||||||
ins(d, "LOG_SYSLOG", LOG_SYSLOG);
|
|
||||||
#endif
|
|
||||||
ins(d, "LOG_LPR", LOG_LPR);
|
ins(d, "LOG_LPR", LOG_LPR);
|
||||||
#ifdef LOG_NEWS
|
|
||||||
ins(d, "LOG_NEWS", LOG_NEWS);
|
|
||||||
#else
|
|
||||||
ins(d, "LOG_NEWS", LOG_MAIL);
|
|
||||||
#endif
|
|
||||||
#ifdef LOG_UUCP
|
|
||||||
ins(d, "LOG_UUCP", LOG_UUCP);
|
|
||||||
#else
|
|
||||||
ins(d, "LOG_UUCP", LOG_MAIL);
|
|
||||||
#endif
|
|
||||||
#ifdef LOG_CRON
|
|
||||||
ins(d, "LOG_CRON", LOG_CRON);
|
|
||||||
#else
|
|
||||||
ins(d, "LOG_CRON", LOG_DAEMON);
|
|
||||||
#endif
|
|
||||||
ins(d, "LOG_LOCAL0", LOG_LOCAL0);
|
ins(d, "LOG_LOCAL0", LOG_LOCAL0);
|
||||||
ins(d, "LOG_LOCAL1", LOG_LOCAL1);
|
ins(d, "LOG_LOCAL1", LOG_LOCAL1);
|
||||||
ins(d, "LOG_LOCAL2", LOG_LOCAL2);
|
ins(d, "LOG_LOCAL2", LOG_LOCAL2);
|
||||||
|
@ -233,6 +228,24 @@ initsyslog()
|
||||||
ins(d, "LOG_LOCAL6", LOG_LOCAL6);
|
ins(d, "LOG_LOCAL6", LOG_LOCAL6);
|
||||||
ins(d, "LOG_LOCAL7", LOG_LOCAL7);
|
ins(d, "LOG_LOCAL7", LOG_LOCAL7);
|
||||||
|
|
||||||
|
#ifndef LOG_SYSLOG
|
||||||
|
#define LOG_SYSLOG LOG_DAEMON
|
||||||
|
#endif
|
||||||
|
#ifndef LOG_NEWS
|
||||||
|
#define LOG_NEWS LOG_MAIL
|
||||||
|
#endif
|
||||||
|
#ifndef LOG_UUCP
|
||||||
|
#define LOG_UUCP LOG_MAIL
|
||||||
|
#endif
|
||||||
|
#ifndef LOG_CRON
|
||||||
|
#define LOG_CRON LOG_DAEMON
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ins(d, "LOG_SYSLOG", LOG_SYSLOG);
|
||||||
|
ins(d, "LOG_CRON", LOG_CRON);
|
||||||
|
ins(d, "LOG_UUCP", LOG_UUCP);
|
||||||
|
ins(d, "LOG_NEWS", LOG_NEWS);
|
||||||
|
|
||||||
/* Check for errors */
|
/* Check for errors */
|
||||||
if (PyErr_Occurred())
|
if (PyErr_Occurred())
|
||||||
Py_FatalError("can't initialize module syslog");
|
Py_FatalError("can't initialize module syslog");
|
||||||
|
|
Loading…
Reference in New Issue