2
* $Id: daemonize.c,v 2.2 2001/02/15 10:38:12 gul Exp $
5
* $Log: daemonize.c,v $
6
* Revision 2.2 2001/02/15 10:38:12 gul
9
* Revision 2.1 2001/01/16 03:57:06 gul
10
* Added HAVE_SYS_IOCTL_H
12
* Revision 2.0 2001/01/16 03:49:26 gul
13
* *** empty log message ***
15
* Revision 1.1 2001/01/15 22:04:52 gul
16
* Added -D switch (run as daemon)
29
#include <sys/ioctl.h>
31
#include <sys/types.h>
34
#include "../daemonize.h"
37
/* Daemonize binkd if we know how to do it */
38
/* Alex Semenyaka, Andrew Kolchoogin */
40
int already_daemonized = 0;
42
int binkd_daemonize(int nochdir)
45
if (already_daemonized)
49
if (daemon(nochdir,0) == -1)
50
{ Log(2,"Daemon() failed, %s",strerror(errno)); return -1; }
53
if (fork() != 0) exit(0);
56
/* Sendmail wisdom has been used */
57
if ((setpgrp(0, 0) < 0) || (setsid() < 0))
59
{ Log(2,"Setsid() failed, %s",strerror(errno)); return -1; }
61
freopen("/dev/null","r",stdin);
62
freopen("/dev/null","w",stdout);
63
freopen("/dev/null","w",stderr);
71
if (fork() != 0) exit(0);
73
{ Log(2,"Setpgrp failed, %s",strerror(errno)); return -1; }
75
if ((fd = open("/dev/tty", 2)) >= 0)
77
(void) ioctl(fd, TIOCNOTTY, (char*)0);
81
{ Log(2,"Cannot open /dev/tty, %s", strerror(errno)); return -1; }
86
freopen("/dev/null","r",stdin);
87
freopen("/dev/null","w",stdout);
88
freopen("/dev/null","w",stderr);
90
#endif /* HAVE_TIOCNOTTY, HAVE_SETSID, HAVE_DAEMON */
92
/* BinkD is either daemonized here or OS does not support known methods to */
95
already_daemonized = 1;