From 98d05dcac39da0a6589f9d47a30c47a650e08470 Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Sun, 8 Jan 2017 16:47:30 +0100 Subject: [PATCH] smbcontrol: add ringbuf-log Signed-off-by: Ralph Boehme Reviewed-by: Volker Lendecke Autobuild-User(master): Volker Lendecke Autobuild-Date(master): Fri Jan 20 22:33:14 CET 2017 on sn-devel-144 --- docs-xml/manpages/smbcontrol.1.xml | 7 +++++ source3/utils/smbcontrol.c | 45 ++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/docs-xml/manpages/smbcontrol.1.xml b/docs-xml/manpages/smbcontrol.1.xml index 99f141df093..127e9197bdb 100644 --- a/docs-xml/manpages/smbcontrol.1.xml +++ b/docs-xml/manpages/smbcontrol.1.xml @@ -256,6 +256,13 @@ for both smbd and nmbd. + + ringbuf-log + Fetch and print the ringbuf log. Requires + logging = ringbuf. Available for smbd, winbindd + and nmbd. + + drvupgrade Force clients of printers using specified driver diff --git a/source3/utils/smbcontrol.c b/source3/utils/smbcontrol.c index ad602b33d4b..8c0f636957a 100644 --- a/source3/utils/smbcontrol.c +++ b/source3/utils/smbcontrol.c @@ -886,6 +886,50 @@ static bool do_poolusage(struct tevent_context *ev_ctx, return num_replies; } +/* Fetch and print the ringbuf log */ + +static void print_ringbuf_log_cb(struct messaging_context *msg, + void *private_data, + uint32_t msg_type, + struct server_id pid, + DATA_BLOB *data) +{ + printf("%s", (const char *)data->data); + num_replies++; +} + +static bool do_ringbuflog(struct tevent_context *ev_ctx, + struct messaging_context *msg_ctx, + const struct server_id pid, + const int argc, const char **argv) +{ + if (argc != 1) { + fprintf(stderr, "Usage: smbcontrol ringbuf-log\n"); + return false; + } + + messaging_register(msg_ctx, NULL, MSG_RINGBUF_LOG, + print_ringbuf_log_cb); + + /* Send a message and register our interest in a reply */ + + if (!send_message(msg_ctx, pid, MSG_REQ_RINGBUF_LOG, NULL, 0)) { + return false; + } + + wait_replies(ev_ctx, msg_ctx, procid_to_pid(&pid) == 0); + + /* No replies were received within the timeout period */ + + if (num_replies == 0) { + printf("No replies received\n"); + } + + messaging_deregister(msg_ctx, MSG_RINGBUF_LOG, NULL); + + return num_replies != 0; +} + /* Perform a dmalloc mark */ static bool do_dmalloc_mark(struct tevent_context *ev_ctx, @@ -1385,6 +1429,7 @@ static const struct { { "lockretry", do_lockretry, "Force a blocking lock retry" }, { "brl-revalidate", do_brl_revalidate, "Revalidate all brl entries" }, { "pool-usage", do_poolusage, "Display talloc memory usage" }, + { "ringbuf-log", do_ringbuflog, "Display ringbuf log" }, { "dmalloc-mark", do_dmalloc_mark, "" }, { "dmalloc-log-changed", do_dmalloc_changed, "" }, { "shutdown", do_shutdown, "Shut down daemon" },