From: des Date: Tue, 16 Oct 2007 14:12:23 +0000 (+0000) Subject: Pull in FreeBSD's daemon(3) for platforms that lack it. X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=acf960c0fd0fe937a5473f2b9fec3e467c0341e3;p=varnish Pull in FreeBSD's daemon(3) for platforms that lack it. git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@2106 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- diff --git a/varnish-cache/include/Makefile.am b/varnish-cache/include/Makefile.am index 8e37c04d..5454502d 100644 --- a/varnish-cache/include/Makefile.am +++ b/varnish-cache/include/Makefile.am @@ -7,12 +7,13 @@ pkginclude_HEADERS = \ stats.h \ varnishapi.h -noinst_HEADERS = \ +nobase_noinst_HEADERS = \ binary_heap.h \ cli.h \ cli_common.h \ cli_priv.h \ compat/asprintf.h \ + compat/daemon.h \ compat/setproctitle.h \ compat/srandomdev.h \ compat/strlcat.h \ diff --git a/varnish-cache/include/compat/daemon.h b/varnish-cache/include/compat/daemon.h new file mode 100644 index 00000000..7cb39b39 --- /dev/null +++ b/varnish-cache/include/compat/daemon.h @@ -0,0 +1,39 @@ +/*- + * Copyright (c) 2006 Verdens Gang AS + * Copyright (c) 2006-2007 Linpro AS + * All rights reserved. + * + * Author: Dag-Erling Smørgrav + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $Id$ + */ + +#ifndef COMPAT_DAEMON_H_INCLUDED +#define COMPAT_DAEMON_H_INCLUDED + +#ifndef HAVE_DAEMON +int daemon(int nochdir, int noclose); +#endif + +#endif diff --git a/varnish-cache/lib/libvarnishcompat/Makefile.am b/varnish-cache/lib/libvarnishcompat/Makefile.am index 94d207cf..07a4ebda 100644 --- a/varnish-cache/lib/libvarnishcompat/Makefile.am +++ b/varnish-cache/lib/libvarnishcompat/Makefile.am @@ -6,6 +6,7 @@ lib_LTLIBRARIES = libvarnishcompat.la libvarnishcompat_la_SOURCES = \ asprintf.c \ + daemon.c \ vasprintf.c \ setproctitle.c \ srandomdev.c \ diff --git a/varnish-cache/lib/libvarnishcompat/daemon.c b/varnish-cache/lib/libvarnishcompat/daemon.c new file mode 100644 index 00000000..f571d199 --- /dev/null +++ b/varnish-cache/lib/libvarnishcompat/daemon.c @@ -0,0 +1,92 @@ +/*- + * Copyright (c) 1990, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $Id$ + * Derived from: + * $FreeBSD: src/lib/libc/gen/daemon.c,v 1.8 2007/01/09 00:27:53 imp Exp $ + */ + +#ifndef HAVE_DAEMON + +#include +#include +#include +#include +#include +#include + +#include "compat/daemon.h" + +int +daemon(int nochdir, int noclose) +{ + struct sigaction osa, sa; + int fd; + pid_t newgrp; + int oerrno; + int osa_ok; + + /* A SIGHUP may be thrown when the parent exits below. */ + sigemptyset(&sa.sa_mask); + sa.sa_handler = SIG_IGN; + sa.sa_flags = 0; + osa_ok = sigaction(SIGHUP, &sa, &osa); + + switch (fork()) { + case -1: + return (-1); + case 0: + break; + default: + exit(0); + } + + newgrp = setsid(); + oerrno = errno; + if (osa_ok != -1) + sigaction(SIGHUP, &osa, NULL); + + if (newgrp == -1) { + errno = oerrno; + return (-1); + } + + if (!nochdir) + (void)chdir("/"); + + if (!noclose && (fd = open(_PATH_DEVNULL, O_RDWR, 0)) != -1) { + (void)dup2(fd, STDIN_FILENO); + (void)dup2(fd, STDOUT_FILENO); + (void)dup2(fd, STDERR_FILENO); + if (fd > 2) + (void)close(fd); + } + return (0); +} + +#endif