tPrint child PID when forking agent - safe - password protected secret keeper
(HTM) git clone git://git.z3bra.org/safe.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 4cf289d713e858ae1ed0dc4e2c744787562aa3b9
(DIR) parent 91a51b83db319c0421378197ce9998a1d71a6cfc
(HTM) Author: Willy Goiffon <dev@z3bra.org>
Date: Mon, 24 Jun 2019 12:33:33 +0200
Print child PID when forking agent
Diffstat:
M safe-agent.c | 37 +++++++++++++++++++++++++------
1 file changed, 30 insertions(+), 7 deletions(-)
---
(DIR) diff --git a/safe-agent.c b/safe-agent.c
t@@ -192,7 +192,7 @@ int
main(int argc, char *argv[])
{
pid_t pid;
- int dflag, timeout;
+ int timeout, fd, dflag;
size_t dirlen;
char path[PATH_MAX] = SOCKDIR;
t@@ -223,14 +223,37 @@ main(int argc, char *argv[])
sockp = path;
}
- printf("SAFE_PID=%d\n", pid);
- printf("SAFE_SOCK=%s\n", sockp);
- printf("export SAFE_PID SAFE_SOCK\n");
- fflush(stdout);
+ if (dflag) {
+ printf("SAFE_PID=%d; export SAFE_PID\n", pid);
+ printf("SAFE_SOCK=%s; export SAFE_SOCK\n", sockp);
+ fflush(stdout);
+ goto skip;
+ }
+
+ pid = fork();
+ if (pid < 0)
+ err(1, "fork");
+
+ if (pid) {
+ printf("SAFE_PID=%d; export SAFE_PID\n", pid);
+ printf("SAFE_SOCK=%s; export SAFE_SOCK\n", sockp);
+ return 0;
+ }
- if (!dflag)
- daemon(0, 0);
+ if (setsid() < 0)
+ err(1, "setsid");
+ chdir("/");
+ if ((fd = open("/dev/null", O_RDWR, 0)) != -1) {
+ (void)dup2(fd, STDIN_FILENO);
+ (void)dup2(fd, STDOUT_FILENO);
+ (void)dup2(fd, STDERR_FILENO);
+ if (fd > 2)
+ close(fd);
+ }
+
+skip:
+ pid = getpid();
signal(SIGINT, sighandler);
signal(SIGTERM, sighandler);
signal(SIGUSR1, sighandler);