From 0140c3972bd68ccfe3a418a0c5c5b4117d6e931c Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Thu, 21 May 2009 16:02:42 +0200 Subject: [PATCH] uuidgen: new command (from e2fsprogs) Signed-off-by: Karel Zak --- misc-utils/.gitignore | 1 + misc-utils/Makefile.am | 8 ++++- misc-utils/uuidgen.1 | 62 ++++++++++++++++++++++++++++++++++ misc-utils/uuidgen.c | 77 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 misc-utils/uuidgen.1 create mode 100644 misc-utils/uuidgen.c diff --git a/misc-utils/.gitignore b/misc-utils/.gitignore index 122b1920..ddb44213 100644 --- a/misc-utils/.gitignore +++ b/misc-utils/.gitignore @@ -12,3 +12,4 @@ setterm whereis kill write +uuidgen diff --git a/misc-utils/Makefile.am b/misc-utils/Makefile.am index 40610c14..781e5d2e 100644 --- a/misc-utils/Makefile.am +++ b/misc-utils/Makefile.am @@ -17,6 +17,13 @@ CLEANFILES = chkdupexe dist_man_MANS = cal.1 chkdupexe.1 ddate.1 logger.1 look.1 mcookie.1 \ namei.1 script.1 whereis.1 scriptreplay.1 +if BUILD_LIBUUID +usrbinexec_PROGRAMS += uuidgen +dist_man_MANS += uuidgen.1 +uuidgen_LDADD = $(ul_libuuid_la) +uuidgen_CFLAGS = -I$(ul_libuuid_srcdir) +endif + if HAVE_TINFO cal_LDADD = -ltinfo @NCURSES_LIBS@ else @@ -63,7 +70,6 @@ endif EXTRA_DIST += README.reset reset.033c if BUILD_WRITE - usrbinexec_PROGRAMS += write dist_man_MANS += write.1 write_CFLAGS = $(SUID_CFLAGS) $(AM_CFLAGS) diff --git a/misc-utils/uuidgen.1 b/misc-utils/uuidgen.1 new file mode 100644 index 00000000..13b13c42 --- /dev/null +++ b/misc-utils/uuidgen.1 @@ -0,0 +1,62 @@ +.\" Copyright 1999 Andreas Dilger (adilger@enel.ucalgary.ca) +.\" +.\" This man page was created for libuuid.so.1.1 from e2fsprogs-1.14. +.\" +.\" This file may be copied under the terms of the GNU Public License. +.\" +.\" Created Wed Mar 10 17:42:12 1999, Andreas Dilger +.TH UUIDGEN 1 "May 2009" "Linux" +.SH NAME +uuidgen \- command\-line utility to create a new UUID value +.SH SYNOPSIS +.B uuidgen +[ +.B \-r +| +.B \-t +] +.SH DESCRIPTION +The +.B uuidgen +program creates (and prints) +a new universally unique identifier (UUID) using the +.BR libuuid (3) +library. The new UUID can reasonably be considered unique among +all UUIDs created on the local system, +and among UUIDs created on other systems in the past +and in the future. +.PP +There are two types of UUID's which +.B uuidgen +can generate: time-based UUID's and random-based UUID's. By +default +.B uuidgen +will generate a random-based UUID if a high-quality random number +generator is present. Otherwise, it will chose a time-based UUID. It +is possible to force the generation of one of these two +UUID types by using the +.B \-r +or +.B \-t +options. +.SH OPTIONS +.TP +.B \-r +Generate a random-based UUID. This method creates a UUID consisting mostly +of random bits. It requires that the operating system have a high +quality random number generator, such as +.IR /dev/random . +.TP +.B \-t +Generate a time-based UUID. This method creates a UUID based on the system +clock plus the system's ethernet hardware address, if present. +.SH "CONFORMING TO" +OSF DCE 1.1 +.SH AUTHOR +.B uuidgen +was written by Andreas Dilger for libuuid. +.SH AVAILABILITY +The uuidgen command is part of the util-linux-ng package and is available from +ftp://ftp.kernel.org/pub/linux/utils/util-linux-ng/. +.SH "SEE ALSO" +.BR libuuid (3) diff --git a/misc-utils/uuidgen.c b/misc-utils/uuidgen.c new file mode 100644 index 00000000..3cf6ec91 --- /dev/null +++ b/misc-utils/uuidgen.c @@ -0,0 +1,77 @@ +/* + * gen_uuid.c --- generate a DCE-compatible uuid + * + * Copyright (C) 1999, Andreas Dilger and Theodore Ts'o + * + * %Begin-Header% + * This file may be redistributed under the terms of the GNU Public + * License. + * %End-Header% + */ + +#include +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_GETOPT_H +#include +#else +extern int getopt(int argc, char * const argv[], const char *optstring); +extern char *optarg; +extern int optind; +#endif + +#include "uuid.h" +#include "nls.h" + +#define DO_TYPE_TIME 1 +#define DO_TYPE_RANDOM 2 + +static void usage(const char *progname) +{ + fprintf(stderr, _("Usage: %s [-r] [-t]\n"), progname); + exit(1); +} + +int +main (int argc, char *argv[]) +{ + int c; + int do_type = 0; + char str[37]; + uuid_t uu; + + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); + + while ((c = getopt (argc, argv, "tr")) != EOF) + switch (c) { + case 't': + do_type = DO_TYPE_TIME; + break; + case 'r': + do_type = DO_TYPE_RANDOM; + break; + default: + usage(argv[0]); + } + + switch (do_type) { + case DO_TYPE_TIME: + uuid_generate_time(uu); + break; + case DO_TYPE_RANDOM: + uuid_generate_random(uu); + break; + default: + uuid_generate(uu); + break; + } + + uuid_unparse(uu, str); + + printf("%s\n", str); + + return 0; +} -- 2.39.5