diff options
-rw-r--r-- | initscripts.spec | 1 | ||||
-rw-r--r-- | src/Makefile | 4 | ||||
-rw-r--r-- | src/genhostid.1 | 12 | ||||
-rw-r--r-- | src/genhostid.c | 32 |
4 files changed, 48 insertions, 1 deletions
diff --git a/initscripts.spec b/initscripts.spec index 49bdc61f..dec694e9 100644 --- a/initscripts.spec +++ b/initscripts.spec @@ -226,6 +226,7 @@ rm -rf $RPM_BUILD_ROOT /bin/usleep %attr(4755,root,root) /usr/sbin/usernetctl /sbin/consoletype +/sbin/genhostid /sbin/getkey %attr(2755,root,root) /sbin/netreport /sbin/initlog diff --git a/src/Makefile b/src/Makefile index 71491075..1c155765 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,7 +1,7 @@ CFLAGS+=$(RPM_OPT_FLAGS) -Wall -D_GNU_SOURCE PROGS=usernetctl doexec netreport testd usleep ipcalc initlog minilogd \ - getkey ppp-watch consoletype + getkey ppp-watch consoletype genhostid PPPWATCH_OBJS=ppp-watch.o shvar.o INITLOG_OBJS=initlog.o process.o USLEEP_OBJS=usleep.o @@ -20,12 +20,14 @@ install: install -m 4755 usernetctl $(ROOT)/usr/sbin/usernetctl install -m 2755 netreport $(ROOT)/sbin/netreport install -m 755 ipcalc $(ROOT)/bin/ipcalc + install -m 755 genhostid $(ROOT)/sbin/genhostid install -m 755 initlog $(ROOT)/sbin/initlog install -m 755 minilogd $(ROOT)/sbin/minilogd install -m 755 getkey $(ROOT)/sbin/getkey install -m 755 ppp-watch $(ROOT)/sbin/ppp-watch install -m 755 consoletype $(ROOT)/sbin/consoletype install -m 644 initlog.1 $(ROOT)$(mandir)/man1 + install -m 644 genhostid.1 $(ROOT)$(mandir)/man1 install -m 644 doexec.1 $(ROOT)$(mandir)/man1 install -m 644 netreport.1 $(ROOT)$(mandir)/man1 install -m 644 usleep.1 $(ROOT)$(mandir)/man1 diff --git a/src/genhostid.1 b/src/genhostid.1 new file mode 100644 index 00000000..436d9537 --- /dev/null +++ b/src/genhostid.1 @@ -0,0 +1,12 @@ +.TH GENHOSTID 1 +.SH NAME +genhostid \- generate and set a hostid for the current host +.SH SYNOPSIS +.B genhostid + +.SH DESCRIPTION +\fBgenhostid\fR generates a random hostid and stores it in /etc/hostid, +if /etc/hostid does not already exist. + +.SH "SEE ALSO" +hostid(1), gethostid(2), sethostid(2) diff --git a/src/genhostid.c b/src/genhostid.c new file mode 100644 index 00000000..a56cad83 --- /dev/null +++ b/src/genhostid.c @@ -0,0 +1,32 @@ +/* Copyright (C) 2003 Red Hat, Inc. + * + * This software may be freely redistributed under the terms of the GNU + * public license. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#include <fcntl.h> +#include <stdlib.h> +#include <time.h> +#include <unistd.h> +#include <sys/stat.h> +int +main (void) +{ + struct stat st; + long int n; + if (stat ("/etc/hostid", &st) == 0 && S_ISREG (st.st_mode) + && st.st_size >= sizeof (n)) + return 0; + int fd = open ("/dev/random", O_RDONLY); + if (fd == -1 || read (fd, &n, sizeof (n)) != sizeof (n)) + { + srand48 ((long int) time (NULL) ^ (long int) getpid ()); + n = lrand48 (); + } + return sethostid (n); +} |