summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kmo@daterainc.com>2014-10-28 17:48:41 -0700
committerKent Overstreet <kmo@daterainc.com>2014-10-28 17:48:41 -0700
commit16defacee8bbd84d0b5e0671cb01e68dbcddd5d5 (patch)
tree52c65264f4748f491f1c83ac845783b0becf0f68
parent8a98e238ec39eeac1abe9b7c91a0074b5757e3bf (diff)
kmo-batch: Various fixes
Change-Id: I9f917dd18f546e44eac600a47a20c8dba37a5d78
-rw-r--r--kmo-batch/kmo-batch.cpp23
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");