summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexander Wenzel <Alexander.AW.Wenzel@bmw.de>2011-11-09 15:36:57 +0100
committerAlexander Wenzel <Alexander.AW.Wenzel@bmw.de>2011-11-09 15:36:57 +0100
commitd34560e81667493a6c7d6a6254d88cf30804bb1c (patch)
tree7761a8242456f6bf74c41841f0706353cd62a45f /src
parenta4b4599ea34d1abc6db0fedd0c8e612b7440736b (diff)
downloadDLT-daemon-d34560e81667493a6c7d6a6254d88cf30804bb1c.tar.gz
Added injection shell command to dlt-system.
Diffstat (limited to 'src')
-rwxr-xr-xsrc/system/dlt-system.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/system/dlt-system.c b/src/system/dlt-system.c
index fc45e1e..2040aab 100755
--- a/src/system/dlt-system.c
+++ b/src/system/dlt-system.c
@@ -82,6 +82,7 @@
#include <ctype.h>
#include <fcntl.h>
#include <pthread.h>
+#include <unistd.h>
#include <sys/timerfd.h>
#include <sys/stat.h>
@@ -101,6 +102,7 @@
DLT_DECLARE_CONTEXT(syslogContext);
DLT_DECLARE_CONTEXT(processesContext);
DLT_DECLARE_CONTEXT(filetransferContext);
+DLT_DECLARE_CONTEXT(shellContext);
DltContext logFileContext[DLT_SYSTEM_LOG_FILE_MAX];
DltSystemOptions options;
@@ -463,6 +465,8 @@ void dlt_system_cleanup()
if(options.LogProcessesEnable)
DLT_UNREGISTER_CONTEXT(processesContext);
+
+ DLT_UNREGISTER_CONTEXT(shellContext);
DLT_UNREGISTER_APP();
}
@@ -492,6 +496,34 @@ void dlt_system_signal_handler(int sig)
} /* switch */
} /* dlt_system_signal_handler() */
+int dlt_user_injection_callback(uint32_t service_id, void *data, uint32_t length)
+{
+ char text[1024];
+
+ strncpy(text,data,length);
+
+ switch(service_id)
+ {
+ case 0x1001:
+ /* Execute shell command */
+ //DLT_LOG(shellContext, DLT_LOG_INFO, DLT_STRING("Execute command:"), DLT_STRING(text));
+ printf("Execute command: %s\n",text);
+ system(text);
+ break;
+ default:
+ //DLT_LOG(shellContext, DLT_LOG_WARN, DLT_STRING("Unknown command received! Service ID:"), DLT_UINT32(service_id),DLT_STRING("Command:"),DLT_STRING(text));
+ printf("Unknown command received! Service ID: %u Command: %s\n",service_id,text);
+ break;
+ }
+
+ printf("Injection %d, Length=%d \n",service_id,length);
+ if (length>0)
+ {
+ }
+
+ return 0;
+}
+
int main(int argc, char* argv[])
{
int sock;
@@ -551,6 +583,8 @@ int main(int argc, char* argv[])
runtime.timeLogProcessDelay[num]=0;
}
}
+ DLT_REGISTER_CONTEXT(shellContext,"CMD","Execute Shell commands");
+ DLT_REGISTER_INJECTION_CALLBACK(shellContext, 0x1001, dlt_user_injection_callback);
/* create systemd socket */
if(options.SyslogEnable) {