diff options
author | Simo Sorce <idra@samba.org> | 2008-06-14 13:00:53 -0400 |
---|---|---|
committer | Simo Sorce <idra@samba.org> | 2008-06-14 13:00:53 -0400 |
commit | 2daf2897d5c70c0efbeba9b827c62700b9a9537c (patch) | |
tree | d0236f23f6774f775d2a150361c2f5a9674eaf06 /source4/lib | |
parent | 929adc9efa5cf985f0585214d30d18521aa1a821 (diff) | |
download | samba-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.h | 1 | ||||
-rw-r--r-- | source4/lib/events/events_debug.c | 13 | ||||
-rw-r--r-- | source4/lib/events/events_s4.c | 51 | ||||
-rw-r--r-- | source4/lib/ldb/ldb_ildap/ldb_ildap.c | 6 | ||||
-rw-r--r-- | source4/lib/messaging/pymessaging.c | 4 | ||||
-rw-r--r-- | source4/lib/registry/registry_wrap.c | 6 | ||||
-rw-r--r-- | source4/lib/registry/tools/regdiff.c | 2 | ||||
-rw-r--r-- | source4/lib/registry/tools/regpatch.c | 2 | ||||
-rw-r--r-- | source4/lib/registry/tools/regshell.c | 2 | ||||
-rw-r--r-- | source4/lib/registry/tools/regtree.c | 2 |
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); |