/* Define to 1 if you have the `chroot' function. */
#undef HAVE_CHROOT
+/* Define to 1 if you have the `daemon' function. */
+#undef HAVE_DAEMON
+
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
-for ac_func in tzset sigprocmask fcntl getpwnam getrlimit setsid sbrk chroot kill sleep usleep random srandom recvmsg sendmsg writev setresuid setreuid setresgid setregid
+
+for ac_func in tzset sigprocmask fcntl getpwnam getrlimit setsid sbrk chroot kill sleep usleep random srandom recvmsg sendmsg writev setresuid setreuid setresgid setregid daemon
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
{ echo "$as_me:$LINENO: checking for $ac_func" >&5
if test $ac_cv_func_getaddrinfo = no; then
AC_LIBOBJ([fake-rfc2553])
fi
-AC_CHECK_FUNCS([tzset sigprocmask fcntl getpwnam getrlimit setsid sbrk chroot kill sleep usleep random srandom recvmsg sendmsg writev setresuid setreuid setresgid setregid])
+AC_CHECK_FUNCS([tzset sigprocmask fcntl getpwnam getrlimit setsid sbrk chroot kill sleep usleep random srandom recvmsg sendmsg writev setresuid setreuid setresgid setregid daemon])
# check mkdir
AC_MSG_CHECKING([whether mkdir has one arg])
static void
detach(struct config_file* cfg)
{
+#ifdef HAVE_DAEMON
+ int err;
+ if(daemon(1,0)!=0) {
+ err=errno;
+ unlink(cfg->pidfile);
+ fatal_exit("daemon(3) failed: %s", strerror(err));
+ }
+#else /* !HAVE_DAEMON */
#ifdef HAVE_WORKING_FORK
- int fd;
+ int fd, err;
/* Take off... */
switch (fork()) {
case 0:
break;
case -1:
+ err=errno;
unlink(cfg->pidfile);
- fatal_exit("fork failed: %s", strerror(errno));
+ fatal_exit("fork failed: %s", strerror(err));
default:
/* exit interactive session */
exit(0);
#else
(void)cfg;
#endif /* HAVE_WORKING_FORK */
+#endif /* HAVE_DAEMON */
}
/** daemonize, drop user priviliges and chroot if needed */
- added scrub filter for overreaching NSEC records and unit test.
- iana portlist update
- use of setresuid or setreuid when available.
+ - use daemon(3) if available.
25 August 2008: Wouter
- realclean patch from Robert Edmonds.