diff options
Diffstat (limited to 'libuuid/man/uuid_generate.3')
-rw-r--r-- | libuuid/man/uuid_generate.3 | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/libuuid/man/uuid_generate.3 b/libuuid/man/uuid_generate.3 new file mode 100644 index 0000000..0043c62 --- /dev/null +++ b/libuuid/man/uuid_generate.3 @@ -0,0 +1,137 @@ +.\" Copyright 1999 Andreas Dilger (adilger@enel.ucalgary.ca) +.\" +.\" %Begin-Header% +.\" 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, and the entire permission notice in its entirety, +.\" including the disclaimer of warranties. +.\" 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. The name of the author may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +.\" WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF +.\" WHICH ARE HEREBY 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 NOT ADVISED OF THE POSSIBILITY OF SUCH +.\" DAMAGE. +.\" %End-Header% +.\" +.\" Created Wed Mar 10 17:42:12 1999, Andreas Dilger +.TH UUID_GENERATE 3 "May 2009" "util-linux" "Libuuid API" +.SH NAME +uuid_generate, uuid_generate_random, uuid_generate_time, +uuid_generate_time_safe \- create a new unique UUID value +.SH SYNOPSIS +.nf +.B #include <uuid.h> +.sp +.BI "void uuid_generate(uuid_t " out ); +.BI "void uuid_generate_random(uuid_t " out ); +.BI "void uuid_generate_time(uuid_t " out ); +.BI "int uuid_generate_time_safe(uuid_t " out ); +.BI "void uuid_generate_md5(uuid_t " out ", const uuid_t " ns ", const char " *name ", size_t " len ); +.BI "void uuid_generate_sha1(uuid_t " out ", const uuid_t " ns ", const char " *name ", size_t " len ); +.fi +.SH DESCRIPTION +The +.B uuid_generate +function creates a new universally unique identifier (UUID). The uuid will +be generated based on high-quality randomness from +.IR /dev/urandom , +if available. If it is not available, then +.B uuid_generate +will use an alternative algorithm which uses the current time, the +local ethernet MAC address (if available), and random data generated +using a pseudo-random generator. +.sp +The +.B uuid_generate_random +function forces the use of the all-random UUID format, even if +a high-quality random number generator (i.e., +.IR /dev/urandom ) +is not available, in which case a pseudo-random +generator will be substituted. Note that the use of a pseudo-random +generator may compromise the uniqueness of UUIDs +generated in this fashion. +.sp +The +.B uuid_generate_time +function forces the use of the alternative algorithm which uses the +current time and the local ethernet MAC address (if available). +This algorithm used to be the default one used to generate UUIDs, but +because of the use of the ethernet MAC address, it can leak +information about when and where the UUID was generated. This can cause +privacy problems in some applications, so the +.B uuid_generate +function only uses this algorithm if a high-quality source of +randomness is not available. To guarantee uniqueness of UUIDs generated +by concurrently running processes, the uuid library uses a global +clock state counter (if the process has permissions to gain exclusive access +to this file) and/or the +.B uuidd +daemon, if it is running already or can be spawned by the process (if +installed and the process has enough permissions to run it). If neither of +these two synchronization mechanisms can be used, it is theoretically possible +that two concurrently running processes obtain the same UUID(s). To tell +whether the UUID has been generated in a safe manner, use +.BR uuid_generate_time_safe . +.sp +The +.B uuid_generate_time_safe +function is similar to +.BR uuid_generate_time , +except that it returns a value which denotes whether any of the synchronization +mechanisms (see above) has been used. +.sp +The UUID is 16 bytes (128 bits) long, which gives approximately 3.4x10^38 +unique values (there are approximately 10^80 elementary particles in +the universe according to Carl Sagan's +.IR Cosmos ). +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. +.sp +The +.B uuid_generate_md5 +and +.B uuid_generate_sha1 +functions generate an MD5 and SHA1 hashed (predictable) UUID based on a +well-known UUID providing the namespace and an arbitrary binary string. The UUIDs +conform to V3 and V5 UUIDs per RFC-4122. +.SH RETURN VALUE +The newly created UUID is returned in the memory location pointed to by +.IR out . +.B uuid_generate_time_safe +returns zero if the UUID has been generated in a safe manner, \-1 otherwise. +.SH CONFORMING TO +This library generates UUIDs compatible with OSF DCE 1.1, and hash based UUIDs +V3 and V5 compatible with RFC-4122. +.SH AUTHORS +Theodore Y.\& Ts'o +.SH SEE ALSO +.BR uuidgen (1), +.BR uuid (3), +.BR uuid_clear (3), +.BR uuid_compare (3), +.BR uuid_copy (3), +.BR uuid_is_null (3), +.BR uuid_parse (3), +.BR uuid_time (3), +.BR uuid_unparse (3), +.BR uuidd (8) +.SH AVAILABILITY +.B libuuid +is part of the util-linux package since version 2.15.1 and is available from +https://www.kernel.org/pub/linux/utils/util-linux/. |