From e4a17036ff6672cafaf1d8eed90566cb28fd8dfd Mon Sep 17 00:00:00 2001 From: Sumit Bose Date: Mon, 10 Nov 2008 13:55:06 +0100 Subject: started external command execution --- worker/Makefile | 4 ++-- worker/worker.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 56 insertions(+), 4 deletions(-) diff --git a/worker/Makefile b/worker/Makefile index c4a2341..b8259a3 100644 --- a/worker/Makefile +++ b/worker/Makefile @@ -1,6 +1,6 @@ -CFLAGS=-Wall -Werror `xml2-config --cflags` `xslt-config --cflags` -LDFLAGS=`xml2-config --libs` `xslt-config --libs` +CFLAGS=-Wall -Werror `xml2-config --cflags` `xslt-config --cflags` -g +LDFLAGS=`xml2-config --libs` `xslt-config --libs` -g INDENTFLAGS=-kr -nut -l80 SRCS = worker.c debug.c diff --git a/worker/worker.c b/worker/worker.c index 52abf5d..5f5af5b 100644 --- a/worker/worker.c +++ b/worker/worker.c @@ -1,3 +1,4 @@ +#define _GNU_SOURCE #include #include #include @@ -10,6 +11,7 @@ #include #include #include +#include @@ -43,6 +45,56 @@ xmlChar *default_namespace_prefix = (xmlChar *) "def"; #define XSLT_METADATA_NAMESPACE_PREFIX (xmlChar *) "md" #define XPATH_OUTPUT_HANDLER (xmlChar *) "//md:output_handler/*" +int exec_command(const char *command, const uid_t uid, const gid_t gid, char *arguments, char *extra_args) { + char *argv[10]; /* FIXME */ + int c=0; + int i; + char *cur; + char *next_arg; + pid_t pid; + int ret; + int status; + + argv[c++]=strdup(command); + if (arguments!=NULL) { + cur=arguments; + while( (next_arg=strchr(cur, ' '))!=NULL) { + argv[c++]=strndup(cur, next_arg-cur); + cur=next_arg+1; + } + argv[c++]=strdup(cur); + } + if (extra_args!=NULL) { + cur=extra_args; + while( (next_arg=strchr(cur, ' '))!=NULL) { + argv[c++]=strndup(cur, next_arg-cur); + cur=next_arg+1; + } + argv[c++]=strdup(cur); + } + argv[c++]=NULL; + + for(i=0;ipw_uid, grp_info->gr_gid, arguments, cur); cur=end_of_line+1; }; -- cgit