]> granicus.if.org Git - p11-kit/commitdiff
server: Make it possible to eval envvar settings
authorDaiki Ueno <dueno@redhat.com>
Thu, 5 Oct 2017 08:59:02 +0000 (10:59 +0200)
committerDaiki Ueno <ueno@gnu.org>
Thu, 5 Oct 2017 12:10:51 +0000 (14:10 +0200)
Previously, calling "eval $(p11-kit server)" from shell hung because
the program didn't properly close stdout before forking.

p11-kit/server.c

index 97e18e25e890574e4144da9bad51a561a4cf9092..96c77ecb833bc6165471a8c06fbc4b2f91fb0e6b 100644 (file)
@@ -346,6 +346,17 @@ server_loop (Server *server,
        if (server->socket == -1)
                return 1;
 
+       if (!quiet) {
+               char *path;
+
+               path = p11_path_encode (server->socket_name);
+               printf ("P11_KIT_SERVER_ADDRESS=unix:path=%s\n", path);
+               free (path);
+               printf ("P11_KIT_SERVER_PID=%d\n", getpid ());
+               fflush (stdout);
+               close (STDOUT_FILENO);
+       }
+
        /* run as daemon */
        if (!foreground) {
                pid = fork ();
@@ -372,15 +383,6 @@ server_loop (Server *server,
 
        sigprocmask (SIG_BLOCK, &blockset, NULL);
 
-       if (!quiet) {
-               char *path;
-
-               path = p11_path_encode (server->socket_name);
-               printf ("P11_KIT_SERVER_ADDRESS=unix:path=%s\n", path);
-               free (path);
-               printf ("P11_KIT_SERVER_PID=%d\n", getpid ());
-       }
-
        /* accept connections */
        ret = 0;
        for (;;) {