smbcontrol: add ringbuf-log
authorRalph Boehme <slow@samba.org>
Sun, 8 Jan 2017 15:47:30 +0000 (16:47 +0100)
committerVolker Lendecke <vl@samba.org>
Fri, 20 Jan 2017 21:33:14 +0000 (22:33 +0100)
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
Autobuild-User(master): Volker Lendecke <vl@samba.org>
Autobuild-Date(master): Fri Jan 20 22:33:14 CET 2017 on sn-devel-144

docs-xml/manpages/smbcontrol.1.xml
source3/utils/smbcontrol.c

index 99f141df093508d58e735b142294a20eb0c422fa..127e9197bdb7523730f5b79c40f106c5716f73bd 100644 (file)
        for both smbd and nmbd.</para></listitem>
        </varlistentry>
 
+       <varlistentry>
+       <term>ringbuf-log</term>
+       <listitem><para>Fetch and print the ringbuf log. Requires
+       <parameter>logging = ringbuf</parameter>. Available for smbd, winbindd
+       and nmbd.</para></listitem>
+       </varlistentry>
+
        <varlistentry>
        <term>drvupgrade</term>
        <listitem><para>Force clients of printers using specified driver 
index ad602b33d4b4bfb9ce815bd695c59a90d4338b63..8c0f636957a4103167bf2f67715714d7ac920f3b 100644 (file)
@@ -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 <dest> 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" },