diff options
author | Kent Overstreet <kmo@daterainc.com> | 2014-10-28 17:48:41 -0700 |
---|---|---|
committer | Kent Overstreet <kmo@daterainc.com> | 2014-10-28 17:48:41 -0700 |
commit | 16defacee8bbd84d0b5e0671cb01e68dbcddd5d5 (patch) | |
tree | 52c65264f4748f491f1c83ac845783b0becf0f68 | |
parent | 8a98e238ec39eeac1abe9b7c91a0074b5757e3bf (diff) |
kmo-batch: Various fixes
Change-Id: I9f917dd18f546e44eac600a47a20c8dba37a5d78
-rw-r--r-- | kmo-batch/kmo-batch.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/kmo-batch/kmo-batch.cpp b/kmo-batch/kmo-batch.cpp index d528844..bf2579c 100644 --- a/kmo-batch/kmo-batch.cpp +++ b/kmo-batch/kmo-batch.cpp @@ -13,6 +13,7 @@ #include <sys/epoll.h> #include <sys/select.h> #include <sys/socket.h> +#include <sys/stat.h> #include <sys/time.h> #include <sys/types.h> #include <sys/un.h> @@ -248,6 +249,9 @@ static int cmd_daemon(int argc, char **argv) if (detach) make_daemon(); + /* Allow anyone to connect */ + umask(0); + auto listenfd = socket(AF_UNIX, SOCK_STREAM|SOCK_NONBLOCK, 0); struct sockaddr_un addr; @@ -333,6 +337,11 @@ static int cmd_list(int argc, char **argv) static int cmd_run(int argc, char **argv) { + if (argc <= 1) { + fprintf(stderr, "Please supply a command to run\n"); + exit(EXIT_FAILURE); + } + auto daemonfd = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0); struct sockaddr_un addr; @@ -368,12 +377,18 @@ static int cmd_run(int argc, char **argv) perror("fork error"); exit(EXIT_FAILURE); } else if (pid) { - int status = 1; + int status, ret = EXIT_FAILURE; + + while (1) { + auto child = wait(&status); + if (child < 0) + break; - while (!(wait(&status) == -1 && errno == ECHILD)) - ; + if (child == pid && WIFEXITED(status)) + ret = WEXITSTATUS(status); + } - return status; + exit(ret); } else { execvp(argv[1], argv + 1); fprintf(stderr, "Error running command\n"); |