From cd16f86a63b3da155d5b474ed8c1d6b7515773f4 Mon Sep 17 00:00:00 2001 From: hadaq Date: Mon, 28 Oct 2002 07:41:17 +0000 Subject: [PATCH] Allow to execute arbitrary shell commands via daq_agent -- mm --- hadaq/Makefile.am | 8 +++---- hadaq/Makefile.in | 60 ++++++++++++++--------------------------------- hadaq/agent.c | 18 ++++++++++++-- hadaq/agent.x | 1 + hadaq/sniff.c | 3 ++- hadaq/tcldaq.c | 25 ++++++++++++++++++-- 6 files changed, 63 insertions(+), 52 deletions(-) diff --git a/hadaq/Makefile.am b/hadaq/Makefile.am index c6db001..ad75418 100644 --- a/hadaq/Makefile.am +++ b/hadaq/Makefile.am @@ -2,19 +2,19 @@ AUTOMAKE_OPTIONS = foreign SUFFIXES = .x _clnt.c _svc.c _xdr.c .h .x_clnt.c: - rpcgen -l $< > $@ + (echo "#define _BSD_SOURCE"; rpcgen -l $<) > $@ .x_svc.c: - rpcgen -s tcp $< > $@ + (echo "#define _BSD_SOURCE"; rpcgen -s tcp $<) > $@ .x_xdr.c: - rpcgen -c $< > $@ + (echo "#define _BSD_SOURCE"; rpcgen -c $<) > $@ .x.h: rpcgen -h $< > $@ online_svc.c: online.x - rpcgen -m online.x >online_svc.c + (echo "#define _BSD_SOURCE"; rpcgen -m online.x) >online_svc.c BUILT_SOURCES = agent.h online.h diff --git a/hadaq/Makefile.in b/hadaq/Makefile.in index 0fece08..1006e70 100644 --- a/hadaq/Makefile.in +++ b/hadaq/Makefile.in @@ -1,6 +1,6 @@ -# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am +# Makefile.in generated automatically by automake 1.4 from Makefile.am -# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -77,50 +77,24 @@ BUILT_SOURCES = agent.h online.h bin_PROGRAMS = @daq_xmanage_prog@ @daq_manage_prog@ daq_agent daq_readout daq_memnet daq_netmem daq_evtbuild daq_sniff daq_anal daq_ctrlctu EXTRA_PROGRAMS = daq_xmanage daq_manage -daq_xmanage_SOURCES = tcldaq.c tkAppInit.c \ - agent_clnt.c agent_xdr.c worker.c psxshm.c +daq_xmanage_SOURCES = tcldaq.c tkAppInit.c agent_clnt.c agent_xdr.c worker.c psxshm.c -daq_manage_SOURCES = tcldaq.c tclAppInit.c \ - agent_clnt.c agent_xdr.c worker.c psxshm.c +daq_manage_SOURCES = tcldaq.c tclAppInit.c agent_clnt.c agent_xdr.c worker.c psxshm.c -daq_agent_SOURCES = agent.c agent_svc.c agent_xdr.c \ - worker.c psxshm.c +daq_agent_SOURCES = agent.c agent_svc.c agent_xdr.c worker.c psxshm.c -daq_readout_SOURCES = readout.c \ - worker.c \ - subevt.c \ - shmtrans.c hadtuqueue.c \ - psxshm.c \ - hadtu.c +daq_readout_SOURCES = readout.c worker.c subevt.c shmtrans.c hadtuqueue.c psxshm.c hadtu.c daq_readout_LDADD = @hw_objects@ daq_readout_DEPENDENCIES = @hw_objects@ EXTRA_daq_readout_SOURCES = hwsoft.c hwrich.c hwrace.c rc.c hwmdc.c hwsam.c hwshow.c hwship.c hwtrig.c hwtip.c -daq_memnet_SOURCES = memnet.c \ - worker.c \ - shmtrans.c hadtuqueue.c \ - psxshm.c \ - nettrans.c \ - hadtu.c - -daq_netmem_SOURCES = netmem.c \ - worker.c \ - shmtrans.c hadtuqueue.c \ - psxshm.c \ - nettrans.c \ - hadtu.c - -daq_evtbuild_SOURCES = evtbuild.c \ - worker.c \ - shmtrans.c hadtuqueue.c \ - psxshm.c \ - online.c online_svc.c online_xdr.c \ - evt.c subevt.c \ - hadtu.c \ - ansiTape.c ansiTapeLabel.c ansiTapeChar.c - -daq_ctrlctu_SOURCES = ctrlctu.c \ - worker.c psxshm.c +daq_memnet_SOURCES = memnet.c worker.c shmtrans.c hadtuqueue.c psxshm.c nettrans.c hadtu.c + +daq_netmem_SOURCES = netmem.c worker.c shmtrans.c hadtuqueue.c psxshm.c nettrans.c hadtu.c + +daq_evtbuild_SOURCES = evtbuild.c worker.c shmtrans.c hadtuqueue.c psxshm.c online.c online_svc.c online_xdr.c evt.c subevt.c hadtu.c ansiTape.c ansiTapeLabel.c ansiTapeChar.c + +daq_ctrlctu_SOURCES = ctrlctu.c worker.c psxshm.c daq_sniff_SOURCES = sniff.c online_clnt.c online_xdr.c daq_anal_SOURCES = showevt.c hldread.c evt.c subevt.c hadtu.c @@ -494,19 +468,19 @@ maintainer-clean-generic clean mostlyclean distclean maintainer-clean .x_clnt.c: - rpcgen -l $< > $@ + (echo "#define _BSD_SOURCE"; rpcgen -l $<) > $@ .x_svc.c: - rpcgen -s tcp $< > $@ + (echo "#define _BSD_SOURCE"; rpcgen -s tcp $<) > $@ .x_xdr.c: - rpcgen -c $< > $@ + (echo "#define _BSD_SOURCE"; rpcgen -c $<) > $@ .x.h: rpcgen -h $< > $@ online_svc.c: online.x - rpcgen -m online.x >online_svc.c + (echo "#define _BSD_SOURCE"; rpcgen -m online.x) >online_svc.c clean-local: rm -f agent.h online.h *_clnt.c *_svc.c *_xdr.c diff --git a/hadaq/agent.c b/hadaq/agent.c index c3eb040..7c2aee0 100644 --- a/hadaq/agent.c +++ b/hadaq/agent.c @@ -1,6 +1,6 @@ -static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/agent.c,v 6.8 2002-10-09 12:42:17 hadaq Exp $"; +static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/agent.c,v 6.9 2002-10-28 07:41:18 hadaq Exp $"; -#define _POSIX_C_SOURCE 199309L +#define _GNU_SOURCE #include #include #include "agent.h" @@ -90,3 +90,17 @@ int * rpcworker_stop_1_svc(int *dummy, struct svc_req *x) { return rpcworker_stop_1(dummy, NULL); } + +int *rpcsystem_1(char **command, CLIENT * cl) +{ + static int retVal; + + retVal = system(*command); + + return &retVal; +} + +int * rpcsystem_1_svc(char **dummy, struct svc_req *x) +{ + return rpcsystem_1(dummy, NULL); +} diff --git a/hadaq/agent.x b/hadaq/agent.x index 2f498fe..e3f5a52 100644 --- a/hadaq/agent.x +++ b/hadaq/agent.x @@ -10,5 +10,6 @@ program DAQAGENTPROG { int RpcWorker_start(RpcWorker_startArgs) = 1; string RpcWorker_status(int) = 2; int RpcWorker_stop(int) = 3; + int RpcSystem(string) = 4; } = 1; } = 0x20000002; diff --git a/hadaq/sniff.c b/hadaq/sniff.c index 4c40a03..c5f26e4 100644 --- a/hadaq/sniff.c +++ b/hadaq/sniff.c @@ -1,7 +1,8 @@ -static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/sniff.c,v 6.5 2002-10-09 12:42:19 hadaq Exp $"; +static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/sniff.c,v 6.6 2002-10-28 07:41:18 hadaq Exp $"; #define SYSLOG_NAMES +#define _GNU_SOURCE #include #include diff --git a/hadaq/tcldaq.c b/hadaq/tcldaq.c index c907762..cfb93d9 100644 --- a/hadaq/tcldaq.c +++ b/hadaq/tcldaq.c @@ -1,6 +1,6 @@ -static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/tcldaq.c,v 6.5 2002-10-09 12:42:19 hadaq Exp $"; +static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/tcldaq.c,v 6.6 2002-10-28 07:41:18 hadaq Exp $"; -#define _POSIX_C_SOURCE 199309L +#define _GNU_SOURCE #include #include @@ -91,6 +91,26 @@ int WorkerCmd(ClientData clientData, Tcl_Interp * interp, int argc, char *argv[] return TCL_OK; } +int SystemCmd(ClientData clientData, Tcl_Interp * interp, int argc, char *argv[]) +{ + CLIENT *cl; + int res, *resP; + + if (argc < 3) { + Tcl_AppendResult(interp, "usage: c_system command", NULL); + return TCL_ERROR; + } + sscanf(argv[1], "%p", &cl); + if (NULL == (resP = rpcsystem_1(&argv[2], cl))) { + Tcl_AppendResult(interp, clnt_sperror(cl, "rpcsystem_1"), NULL); + return TCL_ERROR; + } + res = *resP; + sprintf(interp->result, "%d", res); + + return TCL_OK; +} + int Daq_Init(Tcl_Interp * interp) { /* @@ -99,6 +119,7 @@ int Daq_Init(Tcl_Interp * interp) */ Tcl_CreateCommand(interp, "c_worker", WorkerCmd, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); Tcl_CreateCommand(interp, "c_agent", AgentCmd, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); + Tcl_CreateCommand(interp, "c_system", SystemCmd, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); /* * Specify a user-specific startup file to invoke if the application -- 2.43.0