summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Makefile.am10
-rw-r--r--lib/umberlog.c32
-rw-r--r--lib/umberlog.rst27
-rw-r--r--lib/umberlog_preload.c64
4 files changed, 89 insertions, 44 deletions
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 100b633..4d0ee0c 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -16,8 +16,18 @@ libumberlog_include_HEADERS = umberlog.h
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libumberlog.pc
+pkglib_LTLIBRARIES = libumberlog_preload.la
+
+libumberlog_preload_la_SOURCES = umberlog_preload.c buffer.c buffer.h umberlog.h
+libumberlog_preload_la_LIBADD = -lpthread
+libumberlog_preload_la_LDFLAGS = -avoid-version -shared
+
EXTRA_DIST = umberlog.rst libumberlog.ld
+# We need this dependency, but can't compile umberlog.c into
+# libumberlog_preload.
+umberlog_preload.c: umberlog.c
+
if ENABLE_MANS
man3_MANS = umberlog.3
CLEANFILES = umberlog.3
diff --git a/lib/umberlog.c b/lib/umberlog.c
index f995ecd..3bb834a 100644
--- a/lib/umberlog.c
+++ b/lib/umberlog.c
@@ -710,35 +710,3 @@ ul_setlogmask (int mask)
{
return setlogmask (mask);
}
-
-#if HAVE___SYSLOG_CHK
-void
-__syslog_chk (int __pri, int __flag, __const char *__fmt, ...)
-{
- va_list ap;
-
- va_start (ap, __fmt);
- ul_legacy_vsyslog (__pri, __fmt, ap);
- va_end (ap);
-}
-
-void
-__vsyslog_chk (int __pri, int __flag, __const char *__fmt, va_list ap)
-{
- ul_legacy_vsyslog (__pri, __fmt, ap);
-}
-#endif
-
-void openlog (const char *ident, int option, int facility)
- __attribute__((alias ("ul_openlog")));
-
-void closelog (void)
- __attribute__((alias ("ul_closelog")));
-
-#undef syslog
-void syslog (int priority, const char *msg_format, ...)
- __attribute__((alias ("ul_legacy_syslog")));
-
-#undef vsyslog
-void vsyslog (int priority, const char *msg_format, va_list ap)
- __attribute__((alias ("ul_legacy_vsyslog")));
diff --git a/lib/umberlog.rst b/lib/umberlog.rst
index df71363..1c7b909 100644
--- a/lib/umberlog.rst
+++ b/lib/umberlog.rst
@@ -7,7 +7,7 @@ CEE-enhanced syslog message generation
--------------------------------------
:Author: Gergely Nagy <algernon@balabit.hu>
-:Date: 2012-07-19
+:Date: 2012-08-10
:Manual section: 3
:Manual group: CEE-enhanced syslog Manual
@@ -33,20 +33,18 @@ SYNOPSIS
DESCRIPTION
===========
-**ul_openlog()** (also aliased to **openlog()**) is a wrapper around
-the original **openlog()** function, which opens a connection to the
-system logger for a program. The updated version adds support for a
-number of new option flags, described below.
+**ul_openlog()** is a wrapper around the original **openlog()**
+function, which opens a connection to the system logger for a
+program. The updated version adds support for a number of new option
+flags, described below.
-**ul_closelog()** (also aliased to **closelog()**) is similar to
-**ul_openlog()** in that it is a wrapper around the original
-**closelog()**.
+**ul_closelog()** is similar to **ul_openlog()** in that it is a
+wrapper around the original **closelog()**.
**ul_legacy_syslog()** and **ul_legacy_vsyslog()** are both thin
-layers over the original **syslog()** and **vsyslog()** functions, and
-the library overrides the original functions with this two. The only
-change these functions bring, are that the message they generate will
-be a CEE-enhanced message, with a JSON payload. See below for an
+layers over the original **syslog()** and **vsyslog()** functions. The
+only change these functions bring, are that the message they generate
+will be a CEE-enhanced message, with a JSON payload. See below for an
explanation on what this means.
**ul_syslog()** and **ul_vsyslog()** are two new functions provided by
@@ -65,6 +63,11 @@ Note that user-defined printf types defined by
variants above, except the formatted payload is not sent to syslog,
but returned as a newly allocated string.
+In the *LD_PRELOAD* variant of the library, **ul_openlog()** and
+**ul_closelog()** override the system-default **openlog()** and
+**closelog()** respectively, while **ul_legacy_syslog()** and
+**ul_legacy_vsyslog()** override **syslog()** and **vsyslog()**.
+
RETURN VALUE
============
diff --git a/lib/umberlog_preload.c b/lib/umberlog_preload.c
new file mode 100644
index 0000000..eb5a8d7
--- /dev/null
+++ b/lib/umberlog_preload.c
@@ -0,0 +1,64 @@
+/* umberlog_preload.c -- CEE-enhanced syslog API, LD_PRELOAD version
+ *
+ * Copyright (c) 2012 BalaBit IT Security Ltd.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BALABIT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL BALABIT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#define _GNU_SOURCE 1
+
+#define __UL_PRELOAD__ 1
+
+#include "umberlog.c"
+
+#if HAVE___SYSLOG_CHK
+void
+__syslog_chk (int __pri, int __flag, __const char *__fmt, ...)
+{
+ va_list ap;
+
+ va_start (ap, __fmt);
+ ul_legacy_vsyslog (__pri, __fmt, ap);
+ va_end (ap);
+}
+
+void
+__vsyslog_chk (int __pri, int __flag, __const char *__fmt, va_list ap)
+{
+ ul_legacy_vsyslog (__pri, __fmt, ap);
+}
+#endif
+
+void openlog (const char *ident, int option, int facility)
+ __attribute__((alias ("ul_openlog")));
+
+void closelog (void)
+ __attribute__((alias ("ul_closelog")));
+
+#undef syslog
+void syslog (int priority, const char *msg_format, ...)
+ __attribute__((alias ("ul_legacy_syslog")));
+
+#undef vsyslog
+void vsyslog (int priority, const char *msg_format, va_list ap)
+ __attribute__((alias ("ul_legacy_vsyslog")));