summaryrefslogtreecommitdiff
path: root/source3/rpc_client
diff options
context:
space:
mode:
authorJean-François Micouleau <jfm@samba.org>1999-05-03 21:52:29 +0000
committerJean-François Micouleau <jfm@samba.org>1999-05-03 21:52:29 +0000
commit60c211a3abd5eadb359db5f02941f32e2d881e52 (patch)
tree9372eb8073495bc12c2fac159247753e2693e685 /source3/rpc_client
parente3a888d5a935047367e531321981cbed8618c5a3 (diff)
downloadsamba-60c211a3abd5eadb359db5f02941f32e2d881e52.tar.gz
samba-60c211a3abd5eadb359db5f02941f32e2d881e52.tar.bz2
samba-60c211a3abd5eadb359db5f02941f32e2d881e52.zip
Added a new command to rpcclient: eventlog <log> where <log> is System,
Security or Application. That's a crude equivalent to the eventviewer. Jean Francois (This used to be commit 66b4b896fbcabb964a427d0c0aa2f57997e0f6bb)
Diffstat (limited to 'source3/rpc_client')
-rw-r--r--source3/rpc_client/cli_eventlog.c201
1 files changed, 201 insertions, 0 deletions
diff --git a/source3/rpc_client/cli_eventlog.c b/source3/rpc_client/cli_eventlog.c
new file mode 100644
index 0000000000..580f4f0dee
--- /dev/null
+++ b/source3/rpc_client/cli_eventlog.c
@@ -0,0 +1,201 @@
+/*
+ * Unix SMB/Netbios implementation.
+ * Version 2.1.
+ * RPC client routines: scheduler service
+ * Copyright (C) Jean Francois Micouleau 1998-1999,
+ * Copyright (C) Luke Kenneth Casson Leighton 1996-1999,
+ * Copyright (C) Andrew Tridgell 1992-1999.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "includes.h"
+
+extern int DEBUGLEVEL;
+
+/****************************************************************************
+****************************************************************************/
+BOOL do_event_open(struct cli_state *cli, uint16 fnum, char *log, POLICY_HND *hnd)
+{
+ prs_struct rbuf;
+ prs_struct buf;
+ EVENTLOG_Q_OPEN q;
+ BOOL p = False;
+ BOOL valid_pol = False;
+
+ prs_init(&buf , 1024, 4, SAFETY_MARGIN, False);
+ prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True );
+
+ /* store the parameters */
+ make_eventlog_q_open(&q, log);
+
+ /* turn parameters into data stream */
+ eventlog_io_q_open("", &q, &buf, 0);
+
+ /* send the data on \PIPE\ */
+ if (rpc_api_pipe_req(cli, fnum, EVENTLOG_OPEN, &buf, &rbuf))
+ {
+ EVENTLOG_R_OPEN r;
+
+ eventlog_io_r_open("", &r, &rbuf, 0);
+ p = rbuf.offset != 0;
+
+ if (p && r.status != 0)
+ {
+ /* report error code */
+ DEBUG(0,("do_event_open: %s\n", get_nt_error_msg(r.status)));
+ p = False;
+ }
+
+ if (p)
+ {
+ /*copy handle */
+ memcpy(hnd->data, r.pol.data, sizeof(hnd->data));
+ valid_pol = True;
+ }
+ }
+
+ prs_mem_free(&rbuf);
+ prs_mem_free(&buf );
+
+ return p;
+}
+
+/****************************************************************************
+****************************************************************************/
+BOOL do_event_close(struct cli_state *cli, uint16 fnum, POLICY_HND *hnd)
+{
+ prs_struct rbuf;
+ prs_struct buf;
+ EVENTLOG_Q_CLOSE q;
+ BOOL p = False;
+
+ prs_init(&buf , 1024, 4, SAFETY_MARGIN, False);
+ prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True );
+
+ /* store the parameters */
+ make_eventlog_q_close(&q, hnd);
+
+ /* turn parameters into data stream */
+ eventlog_io_q_close("", &q, &buf, 0);
+
+ /* send the data on \PIPE\ */
+ if (rpc_api_pipe_req(cli, fnum, EVENTLOG_CLOSE, &buf, &rbuf))
+ {
+ EVENTLOG_R_CLOSE r;
+
+ eventlog_io_r_close("", &r, &rbuf, 0);
+ p = rbuf.offset != 0;
+
+ if (p && r.status != 0)
+ {
+ /* report error code */
+ DEBUG(0,("do_event_close: %s\n", get_nt_error_msg(r.status)));
+ p = False;
+ }
+
+ }
+
+ prs_mem_free(&rbuf);
+ prs_mem_free(&buf );
+
+ return p;
+}
+
+/****************************************************************************
+****************************************************************************/
+BOOL do_event_numofeventlogrec(struct cli_state *cli, uint16 fnum, POLICY_HND *hnd, uint32 *number)
+{
+ prs_struct rbuf;
+ prs_struct buf;
+ EVENTLOG_Q_NUMOFEVENTLOGREC q;
+ BOOL p = False;
+
+ prs_init(&buf , 1024, 4, SAFETY_MARGIN, False);
+ prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True );
+
+ /* store the parameters */
+ make_eventlog_q_numofeventlogrec(&q, hnd);
+
+ /* turn parameters into data stream */
+ eventlog_io_q_numofeventlogrec("", &q, &buf, 0);
+
+ /* send the data on \PIPE\ */
+ if (rpc_api_pipe_req(cli, fnum, EVENTLOG_NUMOFEVENTLOGRECORDS, &buf, &rbuf))
+ {
+ EVENTLOG_R_NUMOFEVENTLOGREC r;
+
+ eventlog_io_r_numofeventlogrec("", &r, &rbuf, 0);
+ p = rbuf.offset != 0;
+
+ if (p && r.status != 0)
+ {
+ /* report error code */
+ DEBUG(0,("do_event_close: %s\n", get_nt_error_msg(r.status)));
+ p = False;
+ }
+
+ if (p)
+ {
+ *number=r.number;
+ }
+ }
+
+ prs_mem_free(&rbuf);
+ prs_mem_free(&buf );
+
+ return p;
+}
+
+/****************************************************************************
+****************************************************************************/
+BOOL do_event_readeventlog(struct cli_state *cli, uint16 fnum, POLICY_HND *hnd,
+ uint32 number, uint32 flags, uint32 offset,
+ uint32 *number_of_bytes, EVENTLOGRECORD *ev)
+{
+ prs_struct rbuf;
+ prs_struct buf;
+ EVENTLOG_Q_READEVENTLOG q;
+ EVENTLOG_R_READEVENTLOG r;
+ BOOL p = False;
+
+ prs_init(&buf , 1024, 4, SAFETY_MARGIN, False);
+ prs_init(&rbuf, 0 , 4, SAFETY_MARGIN, True );
+
+ /* store the parameters */
+ make_eventlog_q_readeventlog(&q, hnd, flags, offset, *number_of_bytes);
+
+ /* turn parameters into data stream */
+ eventlog_io_q_readeventlog("", &q, &buf, 0);
+
+ /* send the data on \PIPE\ */
+ if (rpc_api_pipe_req(cli, fnum, EVENTLOG_READEVENTLOG, &buf, &rbuf))
+ {
+ r.event=ev;
+ eventlog_io_r_readeventlog("", &r, &rbuf, 0);
+ p = rbuf.offset != 0;
+
+ if (p)
+ {
+ *number_of_bytes=r.real_size;
+ }
+ }
+
+ prs_mem_free(&rbuf);
+ prs_mem_free(&buf );
+
+ return p;
+}
+