summaryrefslogtreecommitdiffstats
path: root/utils/gssd
diff options
context:
space:
mode:
Diffstat (limited to 'utils/gssd')
-rw-r--r--utils/gssd/gssd.c6
-rw-r--r--utils/gssd/gssd.h1
-rw-r--r--utils/gssd/gssd_main_loop.c4
3 files changed, 9 insertions, 2 deletions
diff --git a/utils/gssd/gssd.c b/utils/gssd/gssd.c
index 8ee478b..fdad153 100644
--- a/utils/gssd/gssd.c
+++ b/utils/gssd/gssd.c
@@ -54,6 +54,7 @@
#include "err_util.h"
#include "gss_util.h"
#include "krb5_util.h"
+#include "nfslib.h"
char pipefs_dir[PATH_MAX] = GSSD_PIPEFS_DIR;
char keytabfile[PATH_MAX] = GSSD_DEFAULT_KEYTAB_FILE;
@@ -63,6 +64,7 @@ int use_memcache = 0;
int root_uses_machine_creds = 1;
unsigned int context_timeout = 0;
char *preferred_realm = NULL;
+int pipefds[2] = { -1, -1 };
void
sig_die(int signal)
@@ -187,8 +189,8 @@ main(int argc, char *argv[])
if (gssd_check_mechs() != 0)
errx(1, "Problem with gssapi library");
- if (!fg && daemon(0, 0) < 0)
- errx(1, "fork");
+ if (!fg)
+ mydaemon(0, 0, pipefds);
signal(SIGINT, sig_die);
signal(SIGTERM, sig_die);
diff --git a/utils/gssd/gssd.h b/utils/gssd/gssd.h
index e44ea40..56a18d6 100644
--- a/utils/gssd/gssd.h
+++ b/utils/gssd/gssd.h
@@ -67,6 +67,7 @@ extern int use_memcache;
extern int root_uses_machine_creds;
extern unsigned int context_timeout;
extern char *preferred_realm;
+extern int pipefds[2];
TAILQ_HEAD(clnt_list_head, clnt_info) clnt_list;
diff --git a/utils/gssd/gssd_main_loop.c b/utils/gssd/gssd_main_loop.c
index ccf7fe5..9970028 100644
--- a/utils/gssd/gssd_main_loop.c
+++ b/utils/gssd/gssd_main_loop.c
@@ -53,6 +53,7 @@
#include "gssd.h"
#include "err_util.h"
+#include "nfslib.h"
extern struct pollfd *pollarray;
extern unsigned long pollsize;
@@ -245,6 +246,9 @@ gssd_run()
/* Error msg is already printed */
exit(1);
}
+
+ /* release the parent after the initial dir scan */
+ release_parent(pipefds);
}
gssd_poll(pollarray, pollsize);
}