You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by bi...@apache.org on 2003/06/21 06:23:55 UTC
cvs commit: jakarta-commons-sandbox/daemon/src/native/unix/native arguments.c arguments.h jsvc-unix.c
billbarker 2003/06/20 21:23:55
Modified: daemon/src/native/unix/native arguments.c arguments.h
jsvc-unix.c
Log:
As discussed, adding a call to 'setsid' on platforms that support it, redirect stdin to /dev/null, and make in configurable where to redirect stdout and stderr.
Revision Changes Path
1.7 +16 -2 jakarta-commons-sandbox/daemon/src/native/unix/native/arguments.c
Index: arguments.c
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/daemon/src/native/unix/native/arguments.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- arguments.c 10 Jun 2003 15:42:11 -0000 1.6
+++ arguments.c 21 Jun 2003 04:23:55 -0000 1.7
@@ -93,6 +93,8 @@
args->opts=(char **)malloc(argc*sizeof(char *));
args->clas=NULL; /* No class predefined */
args->anum=0; /* Zero class specific arguments but make room*/
+ args->outfile="/dev/null"; /* Swallow by default */
+ args->errfile="/dev/null"; /* Swallow by default */
args->args=(char **)malloc(argc*sizeof(char *));
/* Set up the command name */
@@ -176,7 +178,19 @@
return(NULL);
}
- } else if (strstr(argv[x],"-verbose")==argv[x]) {
+ } else if(strcmp(argv[x],"-outfile") == 0) {
+ args->outfile=optional(argc, argv, x++);
+ if(args->outfile == NULL) {
+ log_error("Invalid Output File specified");
+ return(NULL);
+ }
+ } else if(strcmp(argv[x],"-errfile") == 0) {
+ args->errfile=optional(argc, argv, x++);
+ if(args->errfile == NULL) {
+ log_error("Invalid Error File specified");
+ return(NULL);
+ }
+ }else if (strstr(argv[x],"-verbose")==argv[x]) {
args->opts[args->onum++]=strdup(argv[x]);
} else if (strcmp(argv[x],"-D")==0) {
1.5 +5 -1 jakarta-commons-sandbox/daemon/src/native/unix/native/arguments.h
Index: arguments.h
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/daemon/src/native/unix/native/arguments.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- arguments.h 10 Jun 2003 15:42:11 -0000 1.4
+++ arguments.h 21 Jun 2003 04:23:55 -0000 1.5
@@ -99,6 +99,10 @@
bool remove;
/** Run as a service (win32) */
bool service;
+ /** Destination for stdout */
+ char *outfile;
+ /** Destination for stderr */
+ char *errfile;
} arg_data;
/**
1.6 +32 -1 jakarta-commons-sandbox/daemon/src/native/unix/native/jsvc-unix.c
Index: jsvc-unix.c
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/daemon/src/native/unix/native/jsvc-unix.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- jsvc-unix.c 10 Jun 2003 15:42:11 -0000 1.5
+++ jsvc-unix.c 21 Jun 2003 04:23:55 -0000 1.6
@@ -364,6 +364,32 @@
return(ret);
}
+/**
+ * Redirect stdin, stdout, stderr.
+ */
+static void set_output(char *outfile, char *errfile) {
+ freopen("/dev/null", "r", stdin);
+
+ /* Handle malicious case here */
+ if(strcmp(outfile, "&2") == 0 && strcmp(errfile,"&1") == 0) {
+ outfile="/dev/null";
+ }
+ if(strcmp(outfile, "&2") != 0) {
+ freopen(outfile, "w", stdout);
+ }
+
+ if(strcmp(errfile,"&1") != 0) {
+ freopen(errfile, "w", stderr);
+ } else {
+ close(2);
+ dup(1);
+ }
+ if(strcmp(outfile, "&2") == 0) {
+ close(1);
+ dup(2);
+ }
+}
+
int main(int argc, char *argv[]) {
arg_data *args=NULL;
home_data *data=NULL;
@@ -435,7 +461,12 @@
}
/* If we're in the parent process, we siply quit */
if (pid!=0) return(0);
+#ifndef NO_SETSID
+ setsid();
+#endif
}
+
+ set_output(args->outfile, args->errfile);
/* We have to fork: this process will become the controller and the other
will be the child */
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org