diff --git a/distrib/sets/lists/base/mi b/distrib/sets/lists/base/mi index f126e949f46a..4c4f3b697985 100644 --- a/distrib/sets/lists/base/mi +++ b/distrib/sets/lists/base/mi @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.500 2004/09/11 01:19:14 ian Exp $ +# $NetBSD: mi,v 1.501 2004/09/13 23:35:19 thorpej Exp $ . base-sys-root ./altroot base-sys-root ./bin base-sys-root @@ -626,6 +626,7 @@ ./usr/bin/uucp base-uucp-bin uucp ./usr/bin/uudecode base-util-bin ./usr/bin/uuencode base-util-bin +./usr/bin/uuidgen base-util-bin ./usr/bin/uulog base-uucp-bin uucp ./usr/bin/uuname base-uucp-bin uucp ./usr/bin/uupick base-uucp-bin uucp diff --git a/distrib/sets/lists/man/mi b/distrib/sets/lists/man/mi index 07e4e6a788b2..efb1e324587f 100644 --- a/distrib/sets/lists/man/mi +++ b/distrib/sets/lists/man/mi @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.724 2004/09/05 06:32:03 manu Exp $ +# $NetBSD: mi,v 1.725 2004/09/13 23:35:19 thorpej Exp $ ./etc/mtree/set.man man-sys-root ./usr/share/info/am-utils.info man-amd-info info ./usr/share/info/as.info man-computil-info bfd,info @@ -435,6 +435,7 @@ ./usr/share/man/cat1/uucp.0 man-uucp-catman uucp,.cat ./usr/share/man/cat1/uudecode.0 man-uucp-catman .cat ./usr/share/man/cat1/uuencode.0 man-uucp-catman .cat +./usr/share/man/cat1/uuidgen.0 man-util-catman .cat ./usr/share/man/cat1/uustat.0 man-uucp-catman uucp,.cat ./usr/share/man/cat1/uux.0 man-uucp-catman uucp,.cat ./usr/share/man/cat1/vacation.0 man-mail-catman .cat @@ -2566,6 +2567,7 @@ ./usr/share/man/man1/uucp.1 man-uucp-man uucp,.man ./usr/share/man/man1/uudecode.1 man-uucp-man .man ./usr/share/man/man1/uuencode.1 man-uucp-man .man +./usr/share/man/man1/uuidgen.1 man-util-man .man ./usr/share/man/man1/uustat.1 man-uucp-man uucp,.man ./usr/share/man/man1/uux.1 man-uucp-man uucp,.man ./usr/share/man/man1/vacation.1 man-mail-man .man diff --git a/usr.bin/Makefile b/usr.bin/Makefile index 77fb4dfe33e1..2b341c763815 100644 --- a/usr.bin/Makefile +++ b/usr.bin/Makefile @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.140 2004/05/25 10:31:45 lha Exp $ +# $NetBSD: Makefile,v 1.141 2004/09/13 23:35:19 thorpej Exp $ # from: @(#)Makefile 8.3 (Berkeley) 1/7/94 .include @@ -24,7 +24,7 @@ SUBDIR= apply apropos asa at audio awk banner basename biff \ tcopy tee telnet tftp time tip tn3270 top touch tput \ tr true tset tsort tty ul uname unexpand unifdef \ uniq units unvis usbhidaction usbhidctl users \ - uudecode uuencode vacation vgrind vi vis vmstat w \ + uudecode uuencode uuidgen vacation vgrind vi vis vmstat w \ wall wc what whatis whereis who whois window \ write xargs xinstall xlint xstr yacc yes diff --git a/usr.bin/uuidgen/Makefile b/usr.bin/uuidgen/Makefile new file mode 100644 index 000000000000..77e18f418192 --- /dev/null +++ b/usr.bin/uuidgen/Makefile @@ -0,0 +1,6 @@ +# $NetBSD: Makefile,v 1.1 2004/09/13 23:35:19 thorpej Exp $ + +PROG= uuidgen +WARNS= 2 + +.include diff --git a/usr.bin/uuidgen/uuidgen.1 b/usr.bin/uuidgen/uuidgen.1 new file mode 100644 index 000000000000..7fcb36c5c046 --- /dev/null +++ b/usr.bin/uuidgen/uuidgen.1 @@ -0,0 +1,88 @@ +.\" $NetBSD: uuidgen.1,v 1.1 2004/09/13 23:35:19 thorpej Exp $ +.\" +.\" Copyright (c) 2002 Marcel Moolenaar +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" $FreeBSD: src/usr.bin/uuidgen/uuidgen.1,v 1.5 2003/05/22 13:10:32 ru Exp $ +.\" +.Dd September 13, 2004 +.Dt UUIDGEN 1 +.Os +.Sh NAME +.Nm uuidgen +.Nd generate universally unique identifiers +.Sh SYNOPSIS +.Nm +.Op Fl 1 +.Op Fl n Ar count +.Op Fl o Ar filename +.Op Fl s +.Sh DESCRIPTION +The +.Nm +utility by default generates a single universally unique identifier (UUID), +also known as a globally unique identifier (GUID). +By default, +.Nm +generates a single UUID and outputs it in the standard string representation +to stdout. +The following options can be used to change the behavior of +.Nm : +.Bl -tag -width indent +.It Fl 1 +This option only has effect if multiple identifiers are to be generated and +instructs +.Nm +to not generate them in batch, but one at a time. +.It Fl n +This option controls the number of identifiers generated. +By default, multiple +identifiers are generated in batch. +.It Fl o +Redirect output to +.Ar filename +instead of stdout. +.It Fl c +Output UUIDs as initialized C structures, rather than in the standard +string format. +.El +.Pp +Batched generation yields a dense set of identifiers in such a way that there +is no identifier that is larger than the smallest identifier in the set and +smaller than the largest identifier in the set and that is not already in the +set. +.Pp +When generating the identifiers one at a time, the identifiers will be close +to each other, but operating system latency and processing time will be +reflected in the distance between two successive identifiers. +.Sh DIAGNOSTICS +.Ex -std +.Sh SEE ALSO +.Xr uuidgen 2 , +.Xr uuid 3 +.Sh HISTORY +The +.Nm +command first appeared in +.Nx 3.0 . diff --git a/usr.bin/uuidgen/uuidgen.c b/usr.bin/uuidgen/uuidgen.c new file mode 100644 index 000000000000..de71bda99c95 --- /dev/null +++ b/usr.bin/uuidgen/uuidgen.c @@ -0,0 +1,192 @@ +/* $NetBSD: uuidgen.c,v 1.1 2004/09/13 23:35:19 thorpej Exp $ */ + +/*- + * Copyright (c) 2004 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Copyright (c) 2002 Marcel Moolenaar + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__RCSID("$NetBSD: uuidgen.c,v 1.1 2004/09/13 23:35:19 thorpej Exp $"); + +#include +#include +#include +#include +#include + +static void +usage(void) +{ + + (void)fprintf(stderr, "usage: %s [-1] [-n count] [-o filename] [-s]\n", + getprogname()); + exit(1); +} + +int +main(int argc, char *argv[]) +{ + FILE *fp; + uuid_t *store, *uuid; + char *p; + int ch, count, i, iterate, c_struct; + + count = -1; /* no count yet */ + fp = stdout; /* default output file */ + iterate = 0; /* not one at a time */ + c_struct = 0; /* not as a C structure */ + + while ((ch = getopt(argc, argv, "1n:o:s")) != -1) { + switch (ch) { + case '1': + iterate = 1; + break; + case 'n': + if (count > 0) + usage(); + count = strtol(optarg, &p, 10); + if (*p != 0 || count < 1) + usage(); + break; + case 'o': + if (fp != stdout) + errx(1, "multiple output files not allowed"); + fp = fopen(optarg, "w"); + if (fp == NULL) + err(1, "fopen"); + break; + case 's': + c_struct = 1; + break; + default: + usage(); + } + } + argv += optind; + argc -= optind; + + if (argc) + usage(); + + if (count == -1) + count = 1; + + store = (uuid_t*)malloc(sizeof(uuid_t) * count); + if (store == NULL) + err(1, "malloc()"); + + if (!iterate) { + /* Get them all in a single batch */ + if (uuidgen(store, count) != 0) + err(1, "uuidgen()"); + } else { + uuid = store; + for (i = 0; i < count; i++) { + if (uuidgen(uuid++, 1) != 0) + err(1, "uuidgen()"); + } + } + + uuid = store; + while (count--) { + uuid_to_string(uuid++, &p, NULL); + if (c_struct) { + fprintf(fp, "= { /* %s */\n", p); /* } */ + /* + * Chunk up the string for processing: + * + * aaaaaaaa-bbbb-cccc-dddd-0123456789ab + * + * We output it like so: + * + * = { \/\* aaaaaaaa-bbbb-cccc-ddee-0123456789ab \*\/ + * 0xaaaaaaaa, + * 0xbbbb, + * 0xcccc, + * 0xdd, + * 0xee, + * { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab } + * }; + */ + p[8] = '\0'; /* aaaaaaaa */ + p[13] = '\0'; /* bbbb */ + p[18] = '\0'; /* cccc */ + p[23] = '\0'; /* dddd */ + fprintf(fp, "\t0x%s,\n", p); + fprintf(fp, "\t0x%s,\n", &p[9]); + fprintf(fp, "\t0x%s,\n", &p[14]); + fprintf(fp, "\t0x%c%c,\n", p[19], p[20]); + fprintf(fp, "\t0x%c%c,\n", p[21], p[22]); + fprintf(fp, "\t{ 0x%c%c, 0x%c%c, 0x%c%c, 0x%c%c, " + "0x%c%c, 0x%c%c }\n", + p[24], p[25], p[26], p[27], + p[28], p[29], p[30], p[31], + p[32], p[33], p[34], p[35]); + /* { */ fprintf(fp, "};\n"); + } else + fprintf(fp, "%s\n", p); + free(p); + } + + free(store); + if (fp != stdout) + fclose(fp); + return (0); +}