summaryrefslogtreecommitdiff
path: root/source4/lib
diff options
context:
space:
mode:
authorSimo Sorce <idra@samba.org>2008-06-14 13:00:53 -0400
committerSimo Sorce <idra@samba.org>2008-06-14 13:00:53 -0400
commit2daf2897d5c70c0efbeba9b827c62700b9a9537c (patch)
treed0236f23f6774f775d2a150361c2f5a9674eaf06 /source4/lib
parent929adc9efa5cf985f0585214d30d18521aa1a821 (diff)
downloadsamba-2daf2897d5c70c0efbeba9b827c62700b9a9537c.tar.gz
samba-2daf2897d5c70c0efbeba9b827c62700b9a9537c.tar.bz2
samba-2daf2897d5c70c0efbeba9b827c62700b9a9537c.zip
Use a custom init function for samba4 that sets a samba4
specific debug function. By default do not debug, this is the most appropriate action for a library as we cannot assume what stderr is use for in the main app. The main app is responsible to set ev_debug_stderr if they so desire. (This used to be commit e566a2f308ac6fb4b526a744f7059b565670aea5)
Diffstat (limited to 'source4/lib')
-rw-r--r--source4/lib/events/events.h1
-rw-r--r--source4/lib/events/events_debug.c13
-rw-r--r--source4/lib/events/events_s4.c51
-rw-r--r--source4/lib/ldb/ldb_ildap/ldb_ildap.c6
-rw-r--r--source4/lib/messaging/pymessaging.c4
-rw-r--r--source4/lib/registry/registry_wrap.c6
-rw-r--r--source4/lib/registry/tools/regdiff.c2
-rw-r--r--source4/lib/registry/tools/regpatch.c2
-rw-r--r--source4/lib/registry/tools/regshell.c2
-rw-r--r--source4/lib/registry/tools/regtree.c2
10 files changed, 72 insertions, 17 deletions
diff --git a/source4/lib/events/events.h b/source4/lib/events/events.h
index 750cdfee05..478f127a35 100644
--- a/source4/lib/events/events.h
+++ b/source4/lib/events/events.h
@@ -43,7 +43,6 @@ typedef void (*event_aio_handler_t)(struct event_context *, struct aio_event *,
int, void *);
#ifdef _SAMBA_BUILD_
-struct event_context *s4_event_context_init_byname(TALLOC_CTX *mem_ctx, const char *name);
struct event_context *s4_event_context_init(TALLOC_CTX *mem_ctx);
#endif
diff --git a/source4/lib/events/events_debug.c b/source4/lib/events/events_debug.c
index 70b85d47e4..233844f024 100644
--- a/source4/lib/events/events_debug.c
+++ b/source4/lib/events/events_debug.c
@@ -43,9 +43,9 @@ int ev_set_debug(struct event_context *ev,
/*
debug function for ev_set_debug_stderr
*/
-static void ev_debug_stderr(void *context, enum ev_debug_level level,
+void ev_debug_stderr(void *context, enum ev_debug_level level,
const char *fmt, va_list ap) PRINTF_ATTRIBUTE(3,0);
-static void ev_debug_stderr(void *context, enum ev_debug_level level,
+void ev_debug_stderr(void *context, enum ev_debug_level level,
const char *fmt, va_list ap)
{
if (level <= EV_DEBUG_WARNING) {
@@ -63,13 +63,18 @@ int ev_set_debug_stderr(struct event_context *ev)
}
/*
- log a message
+ * log a message
+ *
+ * The default debug action is to ignore debugging messages.
+ * This is the most appropriate action for a library.
+ * Applications using the library must decide where to
+ * redirect debugging messages
*/
void ev_debug(struct event_context *ev, enum ev_debug_level level, const char *fmt, ...)
{
va_list ap;
if (ev->debug_ops.debug == NULL) {
- ev_set_debug_stderr(ev);
+ return;
}
va_start(ap, fmt);
ev->debug_ops.debug(ev->debug_ops.context, level, fmt, ap);
diff --git a/source4/lib/events/events_s4.c b/source4/lib/events/events_s4.c
index edf92dba22..134f899cf8 100644
--- a/source4/lib/events/events_s4.c
+++ b/source4/lib/events/events_s4.c
@@ -55,3 +55,54 @@ NTSTATUS s4_events_aio_init(void)
return NT_STATUS_OK;
}
#endif
+
+/*
+ this is used to catch debug messages from events
+*/
+static void ev_wrap_debug(void *context, enum ev_debug_level level,
+ const char *fmt, va_list ap) PRINTF_ATTRIBUTE(3,0);
+
+static void ev_wrap_debug(void *context, enum ev_debug_level level,
+ const char *fmt, va_list ap)
+{
+ int samba_level = -1;
+ char *s = NULL;
+ switch (level) {
+ case EV_DEBUG_FATAL:
+ samba_level = 0;
+ break;
+ case EV_DEBUG_ERROR:
+ samba_level = 1;
+ break;
+ case EV_DEBUG_WARNING:
+ samba_level = 2;
+ break;
+ case EV_DEBUG_TRACE:
+ samba_level = 5;
+ break;
+
+ };
+ vasprintf(&s, fmt, ap);
+ if (!s) return;
+ DEBUG(samba_level, ("events: %s\n", s));
+ free(s);
+}
+
+/*
+ create a event_context structure. This must be the first events
+ call, and all subsequent calls pass this event_context as the first
+ element. Event handlers also receive this as their first argument.
+
+ This samba4 specific call sets the samba4 debug handler.
+*/
+struct event_context *s4_event_context_init(TALLOC_CTX *mem_ctx)
+{
+ struct event_context *ev;
+
+ ev = event_context_init_byname(mem_ctx, NULL);
+ if (ev) {
+ ev_set_debug(ev, ev_wrap_debug, NULL);
+ }
+ return ev;
+}
+
diff --git a/source4/lib/ldb/ldb_ildap/ldb_ildap.c b/source4/lib/ldb/ldb_ildap/ldb_ildap.c
index 6b50b2f5eb..478df3662d 100644
--- a/source4/lib/ldb/ldb_ildap/ldb_ildap.c
+++ b/source4/lib/ldb/ldb_ildap/ldb_ildap.c
@@ -758,12 +758,12 @@ static int ildb_connect(struct ldb_context *ldb, const char *url,
module->private_data = ildb;
ildb->module = module;
- event_ctx = ldb_get_opaque(ldb, "EventContext");
+ event_ctx = ldb_get_event_context(ldb);
/* FIXME: We must make the event context an explicit parameter, but we
* need to build the events library separately first. Hack a new event
- * context so that CMD line utilities work until we have libevents for
- * standalone builds ready */
+ * context so that CMD line utilities work until we have them all
+ * converted */
if (event_ctx == NULL) {
event_ctx = event_context_init(NULL);
}
diff --git a/source4/lib/messaging/pymessaging.c b/source4/lib/messaging/pymessaging.c
index 41c9c82b1f..621a2fe349 100644
--- a/source4/lib/messaging/pymessaging.c
+++ b/source4/lib/messaging/pymessaging.c
@@ -76,7 +76,7 @@ PyObject *py_messaging_connect(PyTypeObject *self, PyObject *args, PyObject *kwa
ret->mem_ctx = talloc_new(NULL);
- ev = event_context_init(ret->mem_ctx);
+ ev = s4_event_context_init(ret->mem_ctx);
if (messaging_path == NULL) {
messaging_path = lp_messaging_path(ret, global_loadparm);
@@ -330,7 +330,7 @@ PyObject *py_irpc_connect(PyTypeObject *self, PyObject *args, PyObject *kwargs)
ret->server_name = server;
- ev = event_context_init(ret->mem_ctx);
+ ev = s4_event_context_init(ret->mem_ctx);
if (messaging_path == NULL) {
messaging_path = lp_messaging_path(ret, global_loadparm);
diff --git a/source4/lib/registry/registry_wrap.c b/source4/lib/registry/registry_wrap.c
index e939e4101d..3fc34b1fe3 100644
--- a/source4/lib/registry/registry_wrap.c
+++ b/source4/lib/registry/registry_wrap.c
@@ -3486,7 +3486,7 @@ SWIGINTERN PyObject *_wrap_hive_key(PyObject *SWIGUNUSEDPARM(self), PyObject *ar
arg3 = NULL;
arg4 = NULL;
- arg5 = event_context_init(NULL);
+ arg5 = s4_event_context_init(NULL);
arg6 = loadparm_init(NULL);
arg1 = NULL;
arg7 = &tmp7;
@@ -3574,7 +3574,7 @@ SWIGINTERN PyObject *_wrap_open_ldb(PyObject *SWIGUNUSEDPARM(self), PyObject *ar
arg3 = NULL;
arg4 = NULL;
- arg5 = event_context_init(NULL);
+ arg5 = s4_event_context_init(NULL);
arg6 = loadparm_init(NULL);
arg1 = NULL;
arg7 = &tmp7;
@@ -3735,7 +3735,7 @@ SWIGINTERN PyObject *_wrap_open_samba(PyObject *SWIGUNUSEDPARM(self), PyObject *
(char *) "ev_ctx",(char *) "lp_ctx",(char *) "session_info",(char *) "credentials", NULL
};
- arg3 = event_context_init(NULL);
+ arg3 = s4_event_context_init(NULL);
arg4 = loadparm_init(NULL);
arg5 = NULL;
arg6 = NULL;
diff --git a/source4/lib/registry/tools/regdiff.c b/source4/lib/registry/tools/regdiff.c
index 9b49799bed..240c582340 100644
--- a/source4/lib/registry/tools/regdiff.c
+++ b/source4/lib/registry/tools/regdiff.c
@@ -118,7 +118,7 @@ int main(int argc, const char **argv)
}
- ev_ctx = event_context_init(NULL);
+ ev_ctx = s4_event_context_init(NULL);
h1 = open_backend(pc, ev_ctx, cmdline_lp_ctx, backend1, remote1);
if (h1 == NULL)
diff --git a/source4/lib/registry/tools/regpatch.c b/source4/lib/registry/tools/regpatch.c
index 9285459d85..1170fbadb4 100644
--- a/source4/lib/registry/tools/regpatch.c
+++ b/source4/lib/registry/tools/regpatch.c
@@ -49,7 +49,7 @@ int main(int argc, char **argv)
while((opt = poptGetNextOpt(pc)) != -1) {
}
- ev = event_context_init(NULL);
+ ev = s4_event_context_init(NULL);
if (remote) {
h = reg_common_open_remote (remote, cmdline_lp_ctx, cmdline_credentials);
diff --git a/source4/lib/registry/tools/regshell.c b/source4/lib/registry/tools/regshell.c
index 80eafcc4a2..4e859df3f6 100644
--- a/source4/lib/registry/tools/regshell.c
+++ b/source4/lib/registry/tools/regshell.c
@@ -517,7 +517,7 @@ int main(int argc, char **argv)
ctx = talloc_zero(NULL, struct regshell_context);
- ev_ctx = event_context_init(ctx);
+ ev_ctx = s4_event_context_init(ctx);
if (remote != NULL) {
ctx->registry = reg_common_open_remote(remote, cmdline_lp_ctx,
diff --git a/source4/lib/registry/tools/regtree.c b/source4/lib/registry/tools/regtree.c
index 440399f764..daca6957a1 100644
--- a/source4/lib/registry/tools/regtree.c
+++ b/source4/lib/registry/tools/regtree.c
@@ -129,7 +129,7 @@ int main(int argc, char **argv)
while((opt = poptGetNextOpt(pc)) != -1) {
}
- ev_ctx = event_context_init(NULL);
+ ev_ctx = s4_event_context_init(NULL);
if (remote != NULL) {
h = reg_common_open_remote(remote, cmdline_lp_ctx, cmdline_credentials);