1b528cefcSMark Murray /*- 2b528cefcSMark Murray * Copyright (c) 1990, 1993 3b528cefcSMark Murray * The Regents of the University of California. All rights reserved. 4b528cefcSMark Murray * 5b528cefcSMark Murray * Redistribution and use in source and binary forms, with or without 6b528cefcSMark Murray * modification, are permitted provided that the following conditions 7b528cefcSMark Murray * are met: 8b528cefcSMark Murray * 1. Redistributions of source code must retain the above copyright 9b528cefcSMark Murray * notice, this list of conditions and the following disclaimer. 10b528cefcSMark Murray * 2. Redistributions in binary form must reproduce the above copyright 11b528cefcSMark Murray * notice, this list of conditions and the following disclaimer in the 12b528cefcSMark Murray * documentation and/or other materials provided with the distribution. 13c19800e8SDoug Rabson * 3. Neither the name of the University nor the names of its contributors 14b528cefcSMark Murray * may be used to endorse or promote products derived from this software 15b528cefcSMark Murray * without specific prior written permission. 16b528cefcSMark Murray * 17b528cefcSMark Murray * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 18b528cefcSMark Murray * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19b528cefcSMark Murray * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20b528cefcSMark Murray * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 21b528cefcSMark Murray * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22b528cefcSMark Murray * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23b528cefcSMark Murray * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24b528cefcSMark Murray * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25b528cefcSMark Murray * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26b528cefcSMark Murray * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27b528cefcSMark Murray * SUCH DAMAGE. 28b528cefcSMark Murray */ 29b528cefcSMark Murray 30b528cefcSMark Murray #if defined(LIBC_SCCS) && !defined(lint) 31b528cefcSMark Murray static char sccsid[] = "@(#)daemon.c 8.1 (Berkeley) 6/4/93"; 32b528cefcSMark Murray #endif /* LIBC_SCCS and not lint */ 33b528cefcSMark Murray 34b528cefcSMark Murray #include <config.h> 35b528cefcSMark Murray 36b528cefcSMark Murray #ifndef HAVE_DAEMON 37b528cefcSMark Murray 38b528cefcSMark Murray #ifdef HAVE_FCNTL_H 39b528cefcSMark Murray #include <fcntl.h> 40b528cefcSMark Murray #endif 41b528cefcSMark Murray #ifdef HAVE_PATHS_H 42b528cefcSMark Murray #include <paths.h> 43b528cefcSMark Murray #endif 44b528cefcSMark Murray #ifdef HAVE_UNISTD_H 45b528cefcSMark Murray #include <unistd.h> 46b528cefcSMark Murray #endif 47b528cefcSMark Murray 48b528cefcSMark Murray #include "roken.h" 49b528cefcSMark Murray 50*ae771770SStanislav Sedov ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 51b528cefcSMark Murray daemon(int nochdir, int noclose) 52b528cefcSMark Murray { 53b528cefcSMark Murray int fd; 54b528cefcSMark Murray 55b528cefcSMark Murray switch (fork()) { 56b528cefcSMark Murray case -1: 57b528cefcSMark Murray return (-1); 58b528cefcSMark Murray case 0: 59b528cefcSMark Murray break; 60b528cefcSMark Murray default: 61b528cefcSMark Murray _exit(0); 62b528cefcSMark Murray } 63b528cefcSMark Murray 64b528cefcSMark Murray if (setsid() == -1) 65b528cefcSMark Murray return (-1); 66b528cefcSMark Murray 67b528cefcSMark Murray if (!nochdir) 68b528cefcSMark Murray chdir("/"); 69b528cefcSMark Murray 70b528cefcSMark Murray if (!noclose && (fd = open(_PATH_DEVNULL, O_RDWR, 0)) != -1) { 71b528cefcSMark Murray dup2(fd, STDIN_FILENO); 72b528cefcSMark Murray dup2(fd, STDOUT_FILENO); 73b528cefcSMark Murray dup2(fd, STDERR_FILENO); 74b528cefcSMark Murray if (fd > 2) 75b528cefcSMark Murray close (fd); 76b528cefcSMark Murray } 77b528cefcSMark Murray return (0); 78b528cefcSMark Murray } 79b528cefcSMark Murray 80b528cefcSMark Murray #endif /* HAVE_DAEMON */ 81