11305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood/* $OpenBSD: daemon.c,v 1.6 2005/08/08 08:05:33 espie Exp $ */ 21305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood/*- 31305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * Copyright (c) 1990, 1993 41305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * The Regents of the University of California. All rights reserved. 51305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * 61305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * Redistribution and use in source and binary forms, with or without 71305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * modification, are permitted provided that the following conditions 81305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * are met: 91305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * 1. Redistributions of source code must retain the above copyright 101305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * notice, this list of conditions and the following disclaimer. 111305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * 2. Redistributions in binary form must reproduce the above copyright 121305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * notice, this list of conditions and the following disclaimer in the 131305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * documentation and/or other materials provided with the distribution. 141305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * 3. Neither the name of the University nor the names of its contributors 151305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * may be used to endorse or promote products derived from this software 161305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * without specific prior written permission. 171305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * 181305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 191305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 201305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 211305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 221305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 231305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 241305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 251305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 261305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 271305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 281305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * SUCH DAMAGE. 291305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood */ 301305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 311305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood/* OPENBSD ORIGINAL: lib/libc/gen/daemon.c */ 321305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 331305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#include "includes.h" 341305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 351305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef HAVE_DAEMON 361305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 371305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#include <sys/types.h> 381305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 391305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifdef HAVE_SYS_STAT_H 401305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# include <sys/stat.h> 411305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif 421305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 431305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifdef HAVE_FCNTL_H 441305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# include <fcntl.h> 451305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif 461305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 471305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifdef HAVE_UNISTD_H 481305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# include <unistd.h> 491305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif 501305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 511305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodint 521305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddaemon(int nochdir, int noclose) 531305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood{ 541305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood int fd; 551305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 561305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood switch (fork()) { 571305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood case -1: 581305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood return (-1); 591305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood case 0: 601305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood break; 611305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood default: 621305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood _exit(0); 631305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood } 641305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 651305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood if (setsid() == -1) 661305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood return (-1); 671305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 681305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood if (!nochdir) 691305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood (void)chdir("/"); 701305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 711305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood if (!noclose && (fd = open(_PATH_DEVNULL, O_RDWR, 0)) != -1) { 721305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood (void)dup2(fd, STDIN_FILENO); 731305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood (void)dup2(fd, STDOUT_FILENO); 741305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood (void)dup2(fd, STDERR_FILENO); 751305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood if (fd > 2) 761305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood (void)close (fd); 771305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood } 781305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood return (0); 791305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood} 801305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 811305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif /* !HAVE_DAEMON */ 821305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 83