9df9edff6a034566c134318a4a62c020e5ad2ddf
[rpld.git] / util.c
1 /*************************************************
2 *     rpld - an IBM style RIPL server            *
3 *************************************************/
4
5 /* Copyright (c) 1999,2000,2001 James McKenzie.
6  *                      All rights reserved
7  * Copyright (c) 1998,2000,2001 Christopher Lightfoot.
8  *                      All rights reserved
9  *
10  * NetBSD and BPF support by Takashi YAMAMOTO
11  * Copyright (C) 2001 YAMAMOTO Takashi <yamt@netbsd.org>.
12  *
13  *
14  * By using this file, you agree to the terms and conditions set
15  * forth in the LICENCE file which can be found at the top level of
16  * the rpld distribution.
17  *
18  * IBM is a trademark of IBM corp.
19  *
20  */
21
22
23 static char rcsid[] = "$Id: util.c,v 1.9 2001/11/01 15:24:26 root Exp $";
24
25 /*
26  * $Log: util.c,v $
27  * Revision 1.9  2001/11/01 15:24:26  root
28  * #
29  *
30  * Revision 1.8  2001/11/01 15:23:59  root
31  * #
32  *
33  * Revision 1.7  2000/07/16 14:05:28  root
34  * #
35  *
36  * Revision 1.6  2000/07/16 13:18:10  root
37  * #
38  *
39  * Revision 1.1  2000/07/16 13:16:33  root
40  * #
41  *
42  * Revision 1.5  1999/09/13 11:17:35  root
43  * \#
44  *
45  * Revision 1.4  1999/09/13 11:05:27  root
46  * \#
47  *
48  * Revision 1.3  1999/09/13 11:04:13  root
49  * \#
50  *
51  */
52
53 #include "project.h"
54
55
56 unsigned char ethtoaret[1024];
57
58 unsigned char *
59 ethtoa (void *in)
60 {
61   unsigned char *p = (unsigned char *) in;
62   int i = ETH_ALEN;
63   int len = 0;
64
65   len += sprintf (ethtoaret + len, "%02x", *(p++));
66
67   while (--i)
68     len += sprintf (ethtoaret + len, ":%02x", *(p++));
69
70   return (ethtoaret);
71 }
72
73 #ifdef __NetBSD__
74 void
75 daemonize (void)
76 {
77   if (daemon (1, 0) == -1)
78     {
79       openlog ("rpld", LOG_PID, LOG_DAEMON);
80       syslog (LOG_ERR, "fork failed: %m");
81       exit (1);
82     }
83 }
84 #else
85 void
86 daemonize (void)
87 {
88   int fd;
89
90   switch (fork ())
91     {
92     case 0:
93       break;
94     case -1:
95       openlog ("rpld", LOG_PID, LOG_DAEMON);
96       syslog (LOG_ERR, "fork failed: %m");
97       exit (1);
98     default:
99       exit (0);
100     }
101
102   setpgrp ();
103
104   fd = open ("/dev/null", O_RDWR);
105   dup2 (fd, 0);
106   dup2 (fd, 1);
107   dup2 (fd, 2);
108   close (fd);
109 }
110 #endif