diff --git a/libs/uuid/AUTHORS b/libs/uuid/AUTHORS new file mode 100644 index 0000000000..9f9d65e79d --- /dev/null +++ b/libs/uuid/AUTHORS @@ -0,0 +1,15 @@ + _ ___ ____ ____ ____ _ _ + |_|_ _ / _ \/ ___/ ___|| _ \ _ _ _ _(_) __| | + _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` | + |_||_|_| | |_| |___) |__) | __/ | |_| | |_| | | (_| | + |_|_|_| \___/|____/____/|_| \__,_|\__,_|_|\__,_| + + OSSP uuid - Universally Unique Identifier + + AUTHORS + + This is a list of authors who have written + or edited major parts of the OSSP uuid sources. + + Ralf S. Engelschall + diff --git a/libs/uuid/BINDINGS b/libs/uuid/BINDINGS new file mode 100644 index 0000000000..7342f8103c --- /dev/null +++ b/libs/uuid/BINDINGS @@ -0,0 +1,35 @@ + + _ ___ ____ ____ ____ _ _ + |_|_ _ / _ \/ ___/ ___|| _ \ _ _ _ _(_) __| | + _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` | + |_||_|_| | |_| |___) |__) | __/ | |_| | |_| | | (_| | + |_|_|_| \___/|____/____/|_| \__,_|\__,_|_|\__,_| + + OSSP uuid - Universally Unique Identifier + + LANGUAGE BINDINGS + + Various programming language bindings exist for OSSP uuid. + The following is the list of known bindings: + + o C + (native API) + + o C++ + (addon API; part of the OSSP uuid distribution; see uuid++.* files) + + o Perl + (addon API; part of the OSSP uuid distribution; see perl/ directory) + + o PHP + (addon API; part of the OSSP uuid distribution; see php/ directory) + + o PostgreSQL + (addon API; part of the OSSP uuid distribution; see pgsql/ directory) + + o GNU Guile GEE (Scheme) + https://gna.org/projects/gee + + o Chicken (Scheme) + http://www.call-with-current-continuation.org/eggs/uuid-ossp.html + diff --git a/libs/uuid/ChangeLog b/libs/uuid/ChangeLog new file mode 100644 index 0000000000..eadc313d9d --- /dev/null +++ b/libs/uuid/ChangeLog @@ -0,0 +1,624 @@ + _ ___ ____ ____ ____ _ _ + |_|_ _ / _ \/ ___/ ___|| _ \ _ _ _ _(_) __| | + _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` | + |_||_|_| | |_| |___) |__) | __/ | |_| | |_| | | (_| | + |_|_|_| \___/|____/____/|_| \__,_|\__,_|_|\__,_| + + OSSP uuid - Universally Unique Identifier + + CHANGELOG + + This is a list of all changes to OSSP uuid. + For a more brief summary please have a look at the NEWS file. + + Changes between 1.6.1 and 1.6.2 (21-Feb-2008 to 04-Jul-2008) + + o Adjust "devtool.func" for latest GNU Libtool compatibility. + [Ralf S. Engelschall] + + o Improve PRNG under Win32. + [Hiroshi Saito] + + o Consistently annotate "RFC-XXXX" with "IETF" to clearly + indicate from which standards body this comes from. + [Ralf S. Engelschall] + + o Resolve namespace conflicts of recently introduced time_xxx() + functions by using a propoer "uuid_" prefix. + [Ralf S. Engelschall] + + o Remove unused "struct timezone" from time_gettimeofday() in + order to simplify portability. + [Ralf S. Engelschall] + + o Add support for POSIX clock_gettime(3) in case the Unix/POSIX + gettimeofday(3) is not available. + [Ralf S. Engelschall] + + o Upgrade build environment to GNU autoconf 2.62. + [Ralf S. Engelschall] + + o Upgrade build environment to GNU libtool 2.2.4. + [Ralf S. Engelschall] + + Changes between 1.6.0 and 1.6.1 (19-May-2007 to 21-Feb-2008) + + o Port to Win32 API. + [Hiroshi Saito, Wu Yongwei, Ralf S. Engelschall] + + o Adjust copyright messages for new year 2008. + [Ralf S. Engelschall] + + o Fix __VA_COPY_USE_{CSP,CPP} fallback macros for va_copy. + [Mark A. Lindner ] + + o PostgreSQL bindings: use SET_VARSIZE() instead + of assigning to bytea->v_len under PostgreSQL >= 8.3 + [Ralf S. Engelschall] + + o Upgrade build environment to GNU libtool 1.5.26 + [Ralf S. Engelschall] + + Changes between 1.5.1 and 1.6.0 (31-Jul-2006 to 19-May-2007) + + o Expand unused "datarootdir" in Makefile.in and uuid-config.in to + make newer GNU autoconf versions happy. + [Ralf S. Engelschall] + + o Upgrade build environment to GNU shtool 2.0.7 + [Ralf S. Engelschall] + + o Make GNU autoconf procedure of PHP binding more robust by using + -Wl,-Bsymbolic only on platforms where uuid_create(3) actually + exists and where -Wl,-Bsymbolic is really accepted by the tool + chain. This especially unbreaks MacOS X. + [Ralf S. Engelschall] + + o Fix "uuid_export" function in PHP bindings under + UUID_FMT_SIV, UUID_FMT_STR and UUID_FMT_TXT where the + NUL-termination character should be not passed back to PHP. + [Neil Caunt , Ralf S. Engelschall] + + o Adjust copyright messages for new year 2007. + [Ralf S. Engelschall] + + o Upgrade build environment to GNU autoconf 2.61 + [Ralf S. Engelschall] + + o Disable PostgreSQL "(CSTRING AS uuid)" and "(uuid AS CSTRING)" + CASTS as PostgreSQL 8.2 and higher explicitly disallow this. + [David Wheeler , Ralf S. Engelschall] + + o Fix PostgreSQL bindings by mapping the correct DSO symbol + to the functions "uuid_send" and "uuid_recv". + [Ralf S. Engelschall] + + o Silence PostgreSQL processing messages + [David Wheeler ] + + o Support MacOS X (aka Darwin) in PostgreSQL bindings by passing + a "-bundle_loader" option to the linker in order to resolve the + "undefined symbols" problem. + [David Wheeler , Ralf S. Engelschall] + + o Pass the correct type to PostgreSQL's errmsg(). + [David Wheeler , Ralf S. Engelschall] + + o Added PostgreSQL 8.2 PG_MODULE_MAGIC support. + [David Wheeler ] + + o Fix the Data::UUID::to_b64string() function of the Perl backward + compatibility API: an empty string was not supplied as the EOL + marker to MIME::Base64::encode_base64() and hence the returned + string ended with a newline character (which in turn breaks many + applications using Data::UUID). + [Piotr Roszatycki ] + + o Change type of "data_ptr" argument in uuid_export() API signature + from "void **" to "void *" as there is unfortunately no + "generic pointer to pointer type" in ISO C (see also + http://c-faq.com/ptrs/genericpp.html) and "void **" is just a + "pointer to a 'void *'". + + The "void **" especially had the nasty side-effect that it breaks + strict pointer aliasing rules of ISO C and hence would require + fiddling with temporary variables on all uuid_export() calls if + one would be 100% correct and avoid aliasing related compiler + warnings. Instead, as uuid_export() internally has to cast the + "data_ptr" to the particular expected type anyway, it is better + to have "data_ptr" just be a really generic "void *" in the API + signature. + + Keep in mind that although this is an API change, it doesn't cause + any incompatibilities as the function still expects the same + "pointer to a pointer of a particular type". This expected pointer + is just now passed the more correct although less intuitive way. + [Hrvoje Niksic , Ralf S. Engelschall] + + o Optional DMALLOC based memory debugging support. + [Ralf S. Engelschall] + + o Consistently include "uuid_ac.h" in all source files to have GNU + autoconf results and standard system defines available everywhere. + [Ralf S. Engelschall] + + Changes between 1.5.0 and 1.5.1 (28-Jul-2006 to 31-Jul-2006) + + o Use "MODULE_PATHNAME" instead of "@MODULE_PATHNAME@" in + uuid.sql.in to be more aligned to the PostgreSQL styles. + [Simon "janus" Dassow ] + + o Use the available variables $(LIB_NAME), $(DCE_NAME) and + $(CXX_NAME) more consistently in Makefile.in to allow packagers to + override the library name with less patching. + [Piotr Roszatycki ] + + o Fix the "make distclean" target of php/Makefile.local + to make sure the ".deps" file is not left over. + [Ralf S. Engelschall] + + o Fix the tarball rolling procedure to make sure we + do not distribute binary files again. This now especially uses + a MANIFEST file which explicitly lists all files which form the + distribution tarball. We compare the tarball and the MANIFEST file + for differences in the "devtool dist" now. + [Ralf S. Engelschall] + + Changes between 1.4.2 and 1.5.0 (13-Mar-2006 to 28-Jul-2006) + + o Fixed potential memory leak in uuid_create() as spotted by SPLINT. + [Ralf S. Engelschall] + + o Cleanup source code according to complains by SPLINT. + [Ralf S. Engelschall] + + o Cleanup internal uuid_mac.h header. + [Ralf S. Engelschall] + + o Numerous fixed to the error handling in the PostgreSQL bindings. + [Neil Conway ] + + o Add Hash indexing support UUID data type of PostgreSQL bindings. + [Ralf S. Engelschall] + + o Add comparison operators and B-Tree indexing support UUID data + type of PostgreSQL bindings. + [Roman Neuhauser ] + + o Fix PHP bindings: the wrong argument to uuid_create() + was forced to a reference + [Roman Neuhauser ] + + o Add full support for Single Integer Value (SIV) UUID representation + for both importing and exporting in C/C++/Perl/PHP APIs. + [Ralf S. Engelschall] + + o Upgrade build environment to GNU shtool 2.0.6 and GNU autoconf 2.60 + [Ralf S. Engelschall] + + o Added an "OVERVIEW" file which tries to give the "big picture" + about UUIDs and allows to survice during the nasty UUID bit fiddling. + [Ralf S. Engelschall] + + o Replaced "clock_seq_and_reserved" with + "clock_seq_high_and_reserved" in uuid.pod to already reflect the + description in the forthcoming RFC. + [Ralf S. Engelschall] + + o Speed up processing in uuid_str.c by reducing va_copy() calls from + two to just one per formatting. + [Ralf S. Engelschall] + + Changes between 1.4.1 and 1.4.2 (07-Feb-2006 to 13-Mar-2006) + + o Fix uuid_export() function by fixing the internal + uuid_s[ar]printf() functions which require the backup of va_list + arguments between subsequent processing. + [Ralf S. Engelschall, Thomas Lotterer ] + + o Fix Perl API's "export" function by not taking over NUL-termination + character under UUID_FMT_TXT. + [Thomas Lotterer ] + + o Declare "install", "uninstall" and "clean" make(1) targets + ".PHONY". This especially workarounds problems on case insensitive + filesystems (like MacOS X' filesystem) where the "INSTALL" document + conflicts with the "install" target. + [Ralf S. Engelschall, David Wheeler ] + + Changes between 1.4.0 and 1.4.1 (15-Jan-2006 to 07-Feb-2006) + + o Upgrade to GNU shtool 2.0.5 + [Ralf S. Engelschall] + + o Apply workaround to uuid.h to avoid conflicts with + vendor UUID implementations where uuid_t (Darwin/MacOSX) + or uuid_create/uuid_compare (POSIX) might exist. + [Ralf S. Engelschall] + + Changes between 1.3.2 and 1.4.0 (06-Dec-2005 to 15-Jan-2006) + + o Created a top-level Perl ExtUtils::MakeMaker wrapper script + [Ralf S. Engelschall] + + o Adjust copyright messages for new year 2006. + [Ralf S. Engelschall] + + o Added experimental PostgreSQL bindings. + [Ralf S. Engelschall] + + o Fixed documentation of uuid_make() function. + [Ralf S. Engelschall] + + o Upgrade build environment to GNU libtool 1.5.22 + [Ralf S. Engelschall] + + Changes between 1.3.1 and 1.3.2 (24-Sep-2005 to 06-Dec-2005) + + o Cleaned up and speed optimized perl/uuid_compat.pm + (the Data::UUID compatibility module for Perl) + [David Wheeler ] + + o Upgrade to GNU shtool 2.0.3 + [Ralf S. Engelschall] + + o Consistently use "return" in uuid++.cc + [Ralf S. Engelschall] + + Changes between 1.3.0 and 1.3.1 (02-Sep-2005 to 24-Sep-2005) + + o Fix two incorrect casts, detected by compiling the C code + under C++ constraints. + [Ralf S. Engelschall] + + o Remove a compiler warning in the PHP bindings. + [Ralf S. Engelschall] + + o Plug memory leak in PRNG sub-library. + [Ralf S. Engelschall] + + o Add VPATH/srcdir support for at the default + build procedure plus at least C++ and DCE build options. + [Ralf S. Engelschall] + + Changes between 1.2.1 and 1.3.0 (30-Aug-2005 to 02-Sep-2005) + + o Add an experimental PHP 4/5 language API binding which + can be enabled under build-time with opption --with-php. + [Ralf S. Engelschall] + + o Upgrade to GNU libtool 1.5.20 + [Ralf S. Engelschall] + + o Add missing "const" in manual page. + [Ralf S. Engelschall] + + o Add an experimental C++ API binding which can be + enabled under build-time with option --with-cxx. + [Ralf S. Engelschall] + + o Cleanup the internals of the uuid_create() function and + add a new corresponding uuid_clone() API function. + [Ralf S. Engelschall] + + o Cleanup some Makefile parts. + [Ralf S. Engelschall] + + o Added a pkg-config(1) specification uuid.pc which is also + installed by default in addition to the old-style uuid-config tool. + [Ralf S. Engelschall] + + o Added optional Data::UUID backward compatibility Perl API which can + be enabled with the build-time option --with-perl-compat. + [Piotr Roszatycki , Ralf S. Engelschall] + + o Add a functionality-reduced TIE-style Perl API OSSP::uuid::tie, + intended for very high-level convenience programming. + [Ralf S. Engelschall] + + o Reference the new officially published RFC 4122. + [Ralf S. Engelschall] + + Changes between 1.2.0 and 1.2.1 (23-Jan-2005 to 30-Aug-2005) + + o Add SEEALSO document which references all known + UUID implementations. + [Ralf S. Engelschall] + + o Improve the PRNG in case no stronger system PRNG device is + available by passing time and rand(3) based entropy into the MD5 + one-way hash function to achieve at least some sort of weaker PRN data. + [Ralf S. Engelschall] + + o Fix MAC address determination under Solaris by using the result of + ioctl(...,SIOCGARP,...) only if arp_flags had ATF_COM set. + [Ralf S. Engelschall] + + o Upgrade to GNU libtool 1.5.18 and GNU shtool 2.0.2. + [Ralf S. Engelschall] + + o Cleanup the source code even more by following a large + set of FlexeLint's suggestions. + [Ralf S. Engelschall] + + o Fixed generated "section" number in uuid-config(1). + [Piotr Roszatycki ] + + Changes between 1.1.2 and 1.2.0 (13-Jan-2005 to 23-Jan-2005) + + o Added support for new version 5 UUIDs (name-based, SHA-1) + according to latest draft-mealling-uuid-urn-05.txt. + [Ralf S. Engelschall] + + o Reference new ISO/IEC 9834-8:2004 / ITU-T Rec. X.667 2004 standard + and latest IETF draft-mealling-uuid-urn-05.txt. + [Ralf S. Engelschall] + + Changes between 1.1.1 and 1.1.2 (18-Nov-2004 to 13-Jan-2005) + + o Fix generation of v3 UUIDs by adding support for 64-bit platforms + to the underlying uuid_md5.c code (which internally is based on + the RFC reference code which in turn assumes a 32-bit environment). + [Ralf S. Engelschall, Piotr Roszatycki ] + + o Optimize internal md5_store() function by directly finalizing MD5 + calculation on buffer copy instead of finalizing original buffer + and having to restore it from the buffer copy. + [Ralf S. Engelschall] + + o Adjust copyright messages for new year 2005. + [Ralf S. Engelschall] + + o Do not rebuild the Perl API if there were no actual changes. + [Ralf S. Engelschall] + + Changes between 1.1.0 and 1.1.1 (03-Nov-2004 to 18-Nov-2004) + + o Apply the FreeBSD libc uuid_create() related workaround + in the Perl bindings also under FreeBSD 6.0-CURRENT. + [Ralf S. Engelschall] + + o Fix --with-perl configure option processing: Perl is + only required if --with-perl is used although we search for Perl + always in order to provide the PERL variable substitution. + [Ralf S. Engelschall] + + Changes between 1.0.4 and 1.1.0 (16-Oct-2004 to 03-Nov-2004) + + o Add --with-perl configure option for optionally enabling + the Perl language bindings. + [Ralf S. Engelschall] + + o Add Perl language bindings providing both a C-style and OO-style API. + [Ralf S. Engelschall] + + Changes between 1.0.3 and 1.0.4 (15-Oct-2004 to 16-Oct-2004) + + o Fix version detection from uuid_vers.h + [Ralf S. Engelschall] + + Changes between 1.0.2 and 1.0.3 (12-Sep-2004 to 15-Oct-2004) + + o Support configuring/building/installing from an arbitrary + directory via srcdir/top_srcdir/VPATH. + [David Lee , Ralf S. Engelschall] + + o Upgrade build environment to GNU libtool 1.5.10. + [Ralf S. Engelschall] + + Changes between 1.0.1 and 1.0.2 (16-Jul-2004 to 12-Sep-2004) + + o Upgrade build environment to GNU libtool 1.5.8 and GNU shtool 2.0.1 + [Ralf S. Engelschall] + + Changes between 1.0.0 and 1.0.1 (16-Feb-2004 to 16-Jul-2004) + + o Made documentation of uuid_export() more clear. + [Ralf S. Engelschall] + + o Upgrade build environment to GNU libtool 1.5.6 and GNU shtool 2.0.0 + [Ralf S. Engelschall] + + o Remove some warnings occurring under GCC 3.5 + [Ralf S. Engelschall] + + Changes between 0.9.7 and 1.0.0 (13-Feb-2004 to 16-Feb-2004) + + o Replace remaining (old) UUID_VERSIONX names with UUID_MAKE_VX + in the documentation (uuid.pod). + [Ralf S. Engelschall] + + o Resolve namespace conflicts with GCC 3.4 internal pow10() and round() + functions within uuid_str.c. + [Ralf S. Engelschall] + + o Fix buffer handling in "uuid_export(..., UUID_FMT_TXT, vp, ...)" in + case "vp" is not NULL. + [Fuyuki ] + + Changes between 0.9.6 and 0.9.7 (11-Feb-2004 to 13-Feb-2004) + + o remove --with-rfc2518 option and functionality because + even the IETF/IESG has finally approved our report about the broken + random multicast MAC address generation in the standard (and + will fix it in new versions of the draft-mealling-uuid-urn). So, + finally get rid of this broken-by-design backward compatibility + functionality. + [Ralf S. Engelschall] + + o Add support to uuid(1) CLI for decoding from stdin for + both binary and string representations. + [Ralf S. Engelschall] + + o Add missing documentation entries for UUID_XXXX API constants and + uuid_version() function. + [Fuyuki ] + + o Adjust references for new draft-mealling-uuid-urn-02.txt. + [Fuyuki ] + + o Replaced overlooked references to old + uuid_{unpack,pack,parse,format,dump}() functions with their + current uuid_{import,export}() replacements. + [Fuyuki ] + + o Fixed "uuid -h" command. + [Fuyuki ] + + Changes between 0.9.5 and 0.9.6 (06-Feb-2004 to 11-Feb-2004) + + o Added an experimental additional DCE 1.1 API for backward + compatibility with existing applications. + [Ralf S. Engelschall] + + Changes between 0.9.4 and 0.9.5 (19-Jan-2004 to 06-Feb-2004) + + o Fixed filedescriptor leak in the PRNG sub-API. + [Guerry Semones ] + + o Upgraded build environment to GNU libtool 1.5.2. + [Ralf S. Engelschall] + + Changes between 0.9.3 and 0.9.4 (16-Jan-2004 to 19-Jan-2004) + + o Include in uuid.h because of size_t usage. + [Ralf S. Engelschall] + + o INCOMPATIBILITY: Refactor the API and rename uuid_generate() + to uuid_make() and use a "uuid_t" pointer for the namespace + on UUID_VERSION3 generation. To allow access to the internal + pre-defined namespace UUIDs, provide a new uuid_load() function. + Because uuid_load() now also allows the loading of the "nil" UUID, + remove uuid_nil() from the API. After this second refactoring the + API is now the one we originally wished for the forthcoming version + 1.0 of OSSP uuid. + [Ralf S. Engelschall] + + o INCOMPATIBILITY: rename UUID_VERSIONx to UUID_MAKE_Vx and + UUID_MCASTRND to UUID_MAKE_MC to be more consistent throughout API. + [Ralf S. Engelschall] + + o Add version support to API via UUID_VERSION (compile-time) + and uuid_version() (link-time). + [Ralf S. Engelschall] + + o INCOMPATIBILITY: Refactor the API by merging + uuid_{unpack,pack,parse,format,dump}() functions into unified + uuid_{import,export}() functions. This allows us to easily add + support for other formats (e.g. XML) in the future without having + the change the API in principle. + [Ralf S. Engelschall] + + o Document what DCE 1.1 UUID versions exist and what they are + intended for. + [Ralf S. Engelschall] + + o Cleanup the C code to also pass warning-free a C++ compiler. + [Ralf S. Engelschall] + + o Support C++ by enclosing the C API declarations in + 'extern "C" {...}' within uuid.h. + [Guerry Semones ] + + o Improvide decoding in uuid_dump() by at least hex-dumping the + binary representation in case of v3, v4 and Nil UUIDs. Also, + annotate with better hints. + [Ralf S. Engelschall] + + o Recognize special "Nil UUID" on decoding in uuid_dump(). + [Ralf S. Engelschall] + + Changes between 0.9.2 and 0.9.3 (15-Jan-2004 to 16-Jan-2004) + + o Tested OSSP uuid on 16 particular Unix platforms and list + those in the new PORTING file. + [Ralf S. Engelschall] + + o Fixed minor formatting bug in call to str_rsprintf(). + [Ralf S. Engelschall] + + o Fix syntax error in uuid.ac. + [Ralf S. Engelschall] + + Changes between 0.9.1 and 0.9.2 (13-Jan-2004 to 15-Jan-2004) + + o Provide both incorrect RFC2518-based and correct IEEE 802 + multicast address generation. The default now is the correct + IEEE 802 multicast address generation but compile-time option + --with-rfc2518 selects the broken variant. + [Ralf S. Engelschall] + + o Decode also the IEEE 802 MAC address local/global bit. + [Ralf S. Engelschall] + + o Added missing documentation for uuid_dump(). + [Ralf S. Engelschall] + + o Fixed BM_POW2() macro implementation. + [Ralf S. Engelschall] + + o Use BM_XXX() and str_xxx() APIs throughout internal implementation. + [Ralf S. Engelschall] + + o Added missing manual page uuid-config(1). + [Ralf S. Engelschall] + + o Fixed output of "uuid-config --version" + [Ralf S. Engelschall] + + o Fixed typos in uuid.pod + [Ralf S. Engelschall] + + o Cleanup uuid.ac for unused elements. + [Ralf S. Engelschall] + + o Moved uuid_[u]int{8,16,32}_t auto-configuration into + own internal header uuid_ac.h. + [Ralf S. Engelschall] + + o Fixed portability by replacing accidentally introduced + uint{8,16,32}_t with the portable uuid_uint{8,16,32}_t. + [Guerry Semones ] + + o Prefix all variable symbols in uuid.h with underscores + to avoid namespace conflicts. + [Ralf S. Engelschall] + + o Add decoding examples to uuid(1) manual page. + [Ralf S. Engelschall] + + Changes between 0.9.0 and 0.9.1 (11-Jan-2004 to 13-Jan-2004) + + o Make "md5_init" and "mac_address" symbols namespace clean + by adding correct embedding support via "uuid_" prefix. + [Ralf S. Engelschall] + + o Implement uuid_dump() and corresponding uuid CLI "-d" + option for dumping a given UUID into clear text. For convenience + reasons add uuid_bm.h (bit mask API) and uuid_str (string + formatting API) sub-modules. + [Ralf S. Engelschall] + + o Add "-m" option to CLI for allowing to generate v1 UUIDs + with random multi-cast addresses (API UUID_MCASTRND option). + [Ralf S. Engelschall] + + o Disable the C++ and F77 checks in GNU libtool. + [Ralf S. Engelschall] + + o Print involved option character (instead of '?') on invalid + option for uuid(1) CLI. + [Matthias Andree ] + + o Fixed "make install" and "make uninstall": the uuid(1) CLI + has to be [un]installed through GNU libtool, too. + [Matthias Andree ] + + o Document in uuid(1) [uuid_cli.pod] that for version 3 + UUIDs additional arguments are required and what pre-defined + namespace ids are known. + [Ralf S. Engelschall, M.Daniel ] + + o cleaned up source tree documentation files. + [Ralf S. Engelschall] + diff --git a/libs/uuid/HISTORY b/libs/uuid/HISTORY new file mode 100644 index 0000000000..74ab1d31e4 --- /dev/null +++ b/libs/uuid/HISTORY @@ -0,0 +1,358 @@ + _ ___ ____ ____ ____ _ _ + |_|_ _ / _ \/ ___/ ___|| _ \ _ _ _ _(_) __| | + _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` | + |_||_|_| | |_| |___) |__) | __/ | |_| | |_| | | (_| | + |_|_|_| \___/|____/____/|_| \__,_|\__,_|_|\__,_| + + OSSP uuid - Universally Unique Identifier + + HISTORY + + During OSSP uuid we were totally puzzled by a subtle bug in the UUID + standards related to the generation of multi-cast MAC addresses. + This part of the history shows a very interesting technical bug, + the unusual way of having to fix a standard (which was multiple + times revised by different standard authorities, including the + IETF, the OpenGroup and ISO/IEC) afterwards plus the fixing of six + implementations into which the bug was inherited similarly. Below are + some snapshot of this part of history: the first implementation fix + (for FreeBSD) and the notification of the IETF standards authors. + + ___________________________________________________________________________ + + Date: Fri, 13 Feb 2004 16:09:31 +0100 + From: "Ralf S. Engelschall" + To: paulle@microsoft.com, michael@neonym.net, rsalz@datapower.com + Subject: [PATCH] draft-mealling-uuid-urn-02.txt + Message-ID: <20040213150931.GA7656@engelschall.com> + + During implementation of OSSP uuid (a flexible CLI and C API for + generation and partial decoding of version 1, 3 and 4 UUIDs, see + http://www.ossp.org/pkg/lib/uuid/ for details), I discovered a nasty bug + in the generation of random multicast MAC addresses. It is present in + all standards and drafts (both expired ones and current ones) and was + also inherited (until I fixed it by submitting patches to the authors + recently) by all six freely available UUID implementations (Apache APR, + FreeBSD uuidgen(2), Java JUG, Linux's libuuid from e2fsutil, Perl's + Data::UUID and WINE's UUID generator)). + + In case no real/physical IEEE 802 address is available, both the + expired "draft-leach-uuids-guids-01" (section "4. Node IDs when no IEEE + 802 network card is available"), RFC 2518 (section "6.4.1 Node Field + Generation Without the IEEE 802 Address") and now even your current + "draft-mealling-uuid-urn-02.txt" (section "4.5 Node IDs that do not + identify the host") recommend: + + "A better solution is to obtain a 47-bit cryptographic quality + random number, and use it as the low 47 bits of the node ID, with + the _most_ significant bit of the first octet of the node ID set to + one. This bit is the unicast/multicast bit, which will never be set + in IEEE 802 addresses obtained from network cards; hence, there can + never be a conflict between UUIDs generated by machines with and + without network cards." + + Unfortunately, this incorrectly explains how to implement this and even + the example implementation (draft-mealling-uuid-urn-02.txt, "Appendix + A. Appendix A - Sample Implementation") inherited this. Correct is + "the _least_ significant bit of the first octet of the node ID" as the + multicast bit in a memory and hexadecimal string representation of a + 48-bit IEEE 802 MAC address. + + This standards bug arised from a false interpretation, as the multicast + bit is actually the _most_ significant bit in IEEE 802.3 (Ethernet) + _transmission order_ of an IEEE 802 MAC address. But you forgot that the + bitwise order of an _octet_ from a MAC address _memory_ and hexadecimal + string representation is still always from left (MSB, bit 7) to right + (LSB, bit 0). And the standard deals with memory representations only, + so the transmission order of a MAC doesnt' matter here. + + As mentioned, OSSP uuid already implements this correctly. The FreeBSD + uuidgen(2) and Apache APR generators I've also fixed myself recently in + CVS. And for the remaining implementations I've submitted patches to the + authors and they all (except for WINE) responded that they took over the + patch. So the results of this long-standing bug we were able to fix -- + at least for the free software world ;-). What is now remaining is that + you finally also should fix this in your standard so the bug does not + spread any longer into other implementations. + + Here is the minimal required patch against your draft: + + --- draft-mealling-uuid-urn-02.txt.orig Mon Feb 2 21:50:35 2004 + +++ draft-mealling-uuid-urn-02.txt Fri Feb 13 15:41:49 2004 + @@ -751,7 +751,7 @@ + [6], and the cost was US$550. + + A better solution is to obtain a 47-bit cryptographic quality random + - number, and use it as the low 47 bits of the node ID, with the most + + number, and use it as the low 47 bits of the node ID, with the least + significant bit of the first octet of the node ID set to one. This + bit is the unicast/multicast bit, which will never be set in IEEE 802 + addresses obtained from network cards; hence, there can never be a + @@ -1369,7 +1369,7 @@ + } + else { + get_random_info(seed); + - seed[0] |= 0x80; + + seed[0] |= 0x01; + memcpy(&saved_node, seed, sizeof saved_node); + fp = fopen("nodeid", "wb"); + if (fp) { + + But I recommend you to perhaps also add one or two sentences which + explain what I explained above (the difference between memory and + transmission order), just to make sure people are not confused in the + other direction and then think there is a bug (in the then fixed and + correct) standard, because they know about the transmission order of MAC + addresses. + + Yours, + Ralf S. Engelschall + rse@engelschall.com + www.engelschall.com + + Date: Fri, 13 Feb 2004 11:05:51 -0500 + From: Rich Salz + To: rse@engelschall.com + Cc: paulle@microsoft.com, michael@neonym.net + Message-ID: <402CF5DF.4020601@datapower.com> + Subject: Re: [PATCH] draft-mealling-uuid-urn-02.txt + References: <20040213150931.GA7656@engelschall.com> + Content-Length: 431 + Lines: 11 + + Thanks for writing, Ralf. + + You're correct, and this has been noted by the IESG and will be fixed in + the next draft. It's unfortunate we made it this far with the bug. + + /r$ + -- + Rich Salz, Chief Security Architect + DataPower Technology http://www.datapower.com + XS40 XML Security Gateway http://www.datapower.com/products/xs40.html + XML Security Overview http://www.datapower.com/xmldev/xmlsecurity.html + + Date: Thu, 22 Jan 2004 05:34:11 -0800 (PST) + From: "Ralf S. Engelschall" + Message-Id: <200401221334.i0MDYB1K018137@repoman.freebsd.org> + To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org + Subject: cvs commit: src/sys/kern kern_uuid.c + X-FreeBSD-CVS-Branch: HEAD + X-Loop: FreeBSD.ORG + Content-Length: 1907 + Lines: 42 + + rse 2004/01/22 05:34:11 PST + + FreeBSD src repository + + Modified files: + sys/kern kern_uuid.c + Log: + Fix generation of random multicast MAC address. + + In case no real/physical IEEE 802 address is available, both the expired + "draft-leach-uuids-guids-01" (section "4. Node IDs when no IEEE 802 + network card is available") and RFC 2518 (section "6.4.1 Node Field + Generation Without the IEEE 802 Address") recommend (quoted from RFC + 2518): + + "The ideal solution is to obtain a 47 bit cryptographic quality random + number, and use it as the low 47 bits of the node ID, with the _most_ + significant bit of the first octet of the node ID set to 1. This bit + is the unicast/multicast bit, which will never be set in IEEE 802 + addresses obtained from network cards; hence, there can never be a + conflict between UUIDs generated by machines with and without network + cards." + + Unfortunately, this incorrectly explains how to implement this and + the FreeBSD UUID generator code inherited this generation bug from + the broken reference code in the standards draft. They should instead + specify the "_least_ significant bit of the first octet of the node ID" + as the multicast bit in a memory and hexadecimal string representation + of a 48-bit IEEE 802 MAC address. + + This standards bug arised from a false interpretation, as the multicast + bit is actually the _most_ significant bit in IEEE 802.3 (Ethernet) + _transmission order_ of an IEEE 802 MAC address. The standards authors + forgot that the bitwise order of an _octet_ from a MAC address _memory_ + and hexadecimal string representation is still always from left (MSB, + bit 7) to right (LSB, bit 0). + + Fortunately, this UUID generation bug could have occurred on systems + without any Ethernet NICs only. + + Revision Changes Path + 1.7 +1 -1 src/sys/kern/kern_uuid.c + + Date: Thu, 22 Jan 2004 15:20:22 -0800 + From: Marcel Moolenaar + To: "Ralf S. Engelschall" + Cc: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org + Subject: Re: cvs commit: src/sys/kern kern_uuid.c + Message-ID: <20040122232022.GA77798@ns1.xcllnt.net> + References: <200401221334.i0MDYB1K018137@repoman.freebsd.org> + Content-Length: 380 + Lines: 14 + + On Thu, Jan 22, 2004 at 05:34:11AM -0800, Ralf S. Engelschall wrote: + > rse 2004/01/22 05:34:11 PST + > + > FreeBSD src repository + > + > Modified files: + > sys/kern kern_uuid.c + > Log: + > Fix generation of random multicast MAC address. + + An excellent catch and an outstanding commit log. Chapeau! + + -- + Marcel Moolenaar USPA: A-39004 marcel@xcllnt.net + + ___________________________________________________________________________ + + Index: ChangeLog + =================================================================== + RCS file: /e/ossp/cvs/ossp-pkg/uuid/ChangeLog,v + retrieving revision 1.42 + diff -u -d -r1.42 ChangeLog + --- ChangeLog 13 Feb 2004 16:17:07 -0000 1.42 + +++ ChangeLog 13 Feb 2004 21:01:07 -0000 + @@ -13,6 +13,14 @@ + + Changes between 0.9.6 and 0.9.7 (11-Feb-2004 to 13-Feb-2004) + + + o remove --with-rfc2518 option and functionality because + + even the IETF/IESG has finally approved our report about the broken + + random multicast MAC address generation in the standard (and + + will fix it in new versions of the draft-mealling-uuid-urn). So, + + finally get rid of this broken-by-design backward compatibility + + functionality. + + [Ralf S. Engelschall] + + + o Add support to uuid(1) CLI for decoding from stdin for + both binary and string representations. + [Ralf S. Engelschall] + Index: uuid.ac + =================================================================== + RCS file: /e/ossp/cvs/ossp-pkg/uuid/uuid.ac,v + retrieving revision 1.10 + diff -u -d -r1.10 uuid.ac + --- uuid.ac 11 Feb 2004 14:38:40 -0000 1.10 + +++ uuid.ac 13 Feb 2004 19:20:32 -0000 + @@ -71,12 +71,6 @@ + AC_CHECK_SIZEOF(unsigned long long, 8) + + dnl # options + - AC_ARG_WITH(rfc2518, + - AC_HELP_STRING([--with-rfc2518], [use incorrect generation of IEEE 802 multicast addresses according to RFC2518]), + - [ac_cv_with_rfc2518=$withval], [ac_cv_with_rfc2518=no]) + - if test ".$ac_cv_with_rfc2518" = ".yes"; then + - AC_DEFINE(WITH_RFC2518, 1, [whether to use incorrect generation of IEEE 802 multicast addresses according to RFC2518]) + - fi + AC_ARG_WITH(dce, + AC_HELP_STRING([--with-dce], [build DCE 1.1 backward compatibility API]), + [ac_cv_with_dce=$withval], [ac_cv_with_dce=no]) + Index: uuid.c + =================================================================== + RCS file: /e/ossp/cvs/ossp-pkg/uuid/uuid.c,v + retrieving revision 1.44 + diff -u -d -r1.44 uuid.c + --- uuid.c 19 Jan 2004 14:56:35 -0000 1.44 + +++ uuid.c 13 Feb 2004 19:22:01 -0000 + @@ -61,69 +61,9 @@ + Unix UTC base time is January 1, 1970) */ + #define UUID_TIMEOFFSET "01B21DD213814000" + + -/* IEEE 802 MAC address encoding/decoding bit fields + - + - ATTENTION: + - + - In case no real/physical IEEE 802 address is available, both + - "draft-leach-uuids-guids-01" (section "4. Node IDs when no IEEE 802 + - network card is available") and RFC 2518 (section "6.4.1 Node Field + - Generation Without the IEEE 802 Address") recommend (quoted from RFC + - 2518): + - + - "The ideal solution is to obtain a 47 bit cryptographic quality + - random number, and use it as the low 47 bits of the node ID, with + - the most significant bit of the first octet of the node ID set to + - 1. This bit is the unicast/multicast bit, which will never be set + - in IEEE 802 addresses obtained from network cards; hence, there can + - never be a conflict between UUIDs generated by machines with and + - without network cards." + - + - This passage clearly explains the intention to use IEEE 802 multicast + - addresses. Unfortunately, it incorrectly explains how to implement + - this! It should instead specify the "*LEAST* significant bit of the + - first octet of the node ID" as the multicast bit in a memory and + - hexadecimal string representation of a 48-bit IEEE 802 MAC address. + - + - Unfortunately, even the reference implementation included in the + - expired IETF "draft-leach-uuids-guids-01" incorrectly set the + - multicast bit with an OR bit operation and an incorrect mask of + - 0x80. Hence, several other UUID implementations found on the + - Internet have inherited this bug. + - + - Luckily, neither DCE 1.1 nor ISO/IEC 11578:1996 are affected by this + - problem. They disregard the topic of missing IEEE 802 addresses + - entirely, and thus avoid adopting this bug from the original draft + - and code ;-) + - + - It seems that this standards bug arises from a false interpretation, + - as the multicast bit is actually the *MOST* significant bit in IEEE + - 802.3 (Ethernet) _transmission order_ of an IEEE 802 MAC address. The + - authors were likely not aware that the bitwise order of an octet from + - a MAC address memory and hexadecimal string representation is still + - always from left (MSB, bit 7) to right (LSB, bit 0). + - + - For more information, see "Understanding Physical Addresses" in + - "Ethernet -- The Definitive Guide", p.43, and the section "ETHERNET + - MULTICAST ADDRESSES" in http://www.iana.org/assignments/ethernet-numbers. + - + - At OSSP, we do it the intended/correct way and generate a real + - IEEE 802 multicast address. Those wanting to encode broken IEEE + - 802 MAC addresses (as specified) can nevertheless use a brain dead + - compile-time option to switch off the correct behavior. When decoding + - we always use the correct behavior of course. */ + - + -/* encoding */ + -#ifdef WITH_RFC2518 + -#define IEEE_MAC_MCBIT_ENC BM_OCTET(1,0,0,0,0,0,0,0) + -#else + -#define IEEE_MAC_MCBIT_ENC BM_OCTET(0,0,0,0,0,0,0,1) + -#endif + -#define IEEE_MAC_LOBIT_ENC BM_OCTET(0,0,0,0,0,0,1,0) + - + -/* decoding */ + -#define IEEE_MAC_MCBIT_DEC BM_OCTET(0,0,0,0,0,0,0,1) + -#define IEEE_MAC_LOBIT_DEC BM_OCTET(0,0,0,0,0,0,1,0) + +/* IEEE 802 MAC address encoding/decoding bit fields */ + +#define IEEE_MAC_MCBIT BM_OCTET(0,0,0,0,0,0,0,1) + +#define IEEE_MAC_LOBIT BM_OCTET(0,0,0,0,0,0,1,0) + + /* IEEE 802 MAC address octet length */ + #define IEEE_MAC_OCTETS 6 + @@ -622,8 +562,8 @@ + (unsigned int)uuid->obj.node[3], + (unsigned int)uuid->obj.node[4], + (unsigned int)uuid->obj.node[5], + - (uuid->obj.node[0] & IEEE_MAC_LOBIT_DEC ? "local" : "global"), + - (uuid->obj.node[0] & IEEE_MAC_MCBIT_DEC ? "multicast" : "unicast")); + + (uuid->obj.node[0] & IEEE_MAC_LOBIT ? "local" : "global"), + + (uuid->obj.node[0] & IEEE_MAC_MCBIT ? "multicast" : "unicast")); + } + else { + /* decode anything else as hexadecimal byte-string only */ + @@ -843,8 +783,8 @@ + if ((mode & UUID_MAKE_MC) || (uuid->mac[0] & BM_OCTET(1,0,0,0,0,0,0,0))) { + /* generate random IEEE 802 local multicast MAC address */ + prng_data(uuid->prng, (void *)&(uuid->obj.node), sizeof(uuid->obj.node)); + - uuid->obj.node[0] |= IEEE_MAC_MCBIT_ENC; + - uuid->obj.node[0] |= IEEE_MAC_LOBIT_ENC; + + uuid->obj.node[0] |= IEEE_MAC_MCBIT; + + uuid->obj.node[0] |= IEEE_MAC_LOBIT; + } + else { + /* use real regular MAC address */ diff --git a/libs/uuid/INSTALL b/libs/uuid/INSTALL new file mode 100644 index 0000000000..938a4dada0 --- /dev/null +++ b/libs/uuid/INSTALL @@ -0,0 +1,23 @@ + _ ___ ____ ____ ____ _ _ + |_|_ _ / _ \/ ___/ ___|| _ \ _ _ _ _(_) __| | + _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` | + |_||_|_| | |_| |___) |__) | __/ | |_| | |_| | | (_| | + |_|_|_| \___/|____/____/|_| \__,_|\__,_|_|\__,_| + + OSSP uuid - Universally Unique Identifier + + INSTALLATION + + To install OSSP uuid into /path/to/uuid/ perform + the following steps in your shell: + + $ ./configure + --prefix=/path/to/uuid + [--with-dce] + [--with-perl[=/path/to/[bin[/perl] + --with-perl-compat]] + [--with-php] + $ make + $ make check + $ make install [DESTDIR=/path/to/temp/root] + diff --git a/libs/uuid/MANIFEST b/libs/uuid/MANIFEST new file mode 100644 index 0000000000..faed39747d --- /dev/null +++ b/libs/uuid/MANIFEST @@ -0,0 +1,83 @@ +AUTHORS +BINDINGS +ChangeLog +HISTORY +INSTALL +MANIFEST +Makefile.PL +Makefile.in +NEWS +OVERVIEW +PORTING +README +SEEALSO +THANKS +TODO +USERS +aclocal.m4 +config.guess +config.h.in +config.sub +configure +configure.ac +libtool.m4 +ltmain.sh +perl/MANIFEST +perl/Makefile.PL +perl/uuid.pm +perl/uuid.pod +perl/uuid.tm +perl/uuid.ts +perl/uuid.xs +perl/uuid_compat.pm +perl/uuid_compat.pod +perl/uuid_compat.ts +pgsql/Makefile +pgsql/uuid.c +pgsql/uuid.sql.in +pgsql/uuid.txt +php/Makefile.local +php/config.m4 +php/package.xml +php/uuid.c +php/uuid.php4 +php/uuid.php5 +php/uuid.ts +shtool +uuid++.3 +uuid++.cc +uuid++.hh +uuid++.pod +uuid-config.1 +uuid-config.in +uuid-config.pod +uuid.1 +uuid.3 +uuid.ac +uuid.c +uuid.h.in +uuid.pc.in +uuid.pod +uuid_ac.h +uuid_bm.h +uuid_cli.c +uuid_cli.pod +uuid_dce.c +uuid_dce.h +uuid_mac.c +uuid_mac.h +uuid_md5.c +uuid_md5.h +uuid_prng.c +uuid_prng.h +uuid_sha1.c +uuid_sha1.h +uuid_str.c +uuid_str.h +uuid_time.c +uuid_time.h +uuid_ui128.c +uuid_ui128.h +uuid_ui64.c +uuid_ui64.h +uuid_vers.h diff --git a/libs/uuid/Makefile.PL b/libs/uuid/Makefile.PL new file mode 100644 index 0000000000..a6d9cc8f37 --- /dev/null +++ b/libs/uuid/Makefile.PL @@ -0,0 +1,67 @@ +## +## OSSP uuid - Universally Unique Identifier +## Copyright (c) 2004-2008 Ralf S. Engelschall +## Copyright (c) 2004-2008 The OSSP Project +## +## This file is part of OSSP uuid, a library for the generation +## of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/ +## +## Permission to use, copy, modify, and distribute this software for +## any purpose with or without fee is hereby granted, provided that +## the above copyright notice and this permission notice appear in all +## copies. +## +## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR +## 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. +## +## Makefile.PL: top-level Perl ExtUtils::MakeMaker wrapper script +## + +require 5.008; +use IO::File; + +my $ARGS = join(" ", @ARGV); + +print "++ writing Makefile\n"; + +my $mk = new IO::File ">Makefile" or die; +$mk->print(<< "EOF"); + +PERL = $^X +FULLPERL = $^X +ARGS = $ARGS + +all pure_all: + \@if [ ! -d build ]; then mkdir build; fi + \@if [ ! -f build/Makefile ]; then (cd build && ../configure --disable-shared); fi + \@if [ ! -f build/libuuid.la ]; then (cd build && \$(MAKE) \$(MFLAGS) libuuid.la); fi + \@if [ ! -f perl/Makefile ]; then (cd perl && \$(PERL) Makefile.PL \$(ARGS)); fi + \@cd perl && \$(MAKE) \$(MFLAGS) \$\@ + +install pure_install test: + \@cd perl && \$(MAKE) \$(MFLAGS) \$\@ + +clean: + \@cd build && \$(MAKE) \$(MFLAGS) \$\@ + \@cd perl && \$(MAKE) \$(MFLAGS) \$\@ + +distclean realclean: + \@cd build && \$(MAKE) \$(MFLAGS) \$\@ + \@cd perl && \$(MAKE) \$(MFLAGS) \$\@ + -rm -rf build || true + -rm -rf Makefile || true + +EOF + +$mk->close(); + diff --git a/libs/uuid/Makefile.in b/libs/uuid/Makefile.in new file mode 100644 index 0000000000..d28f4be8cc --- /dev/null +++ b/libs/uuid/Makefile.in @@ -0,0 +1,357 @@ +## +## OSSP uuid - Universally Unique Identifier +## Copyright (c) 2004-2008 Ralf S. Engelschall +## Copyright (c) 2004-2008 The OSSP Project +## +## This file is part of OSSP uuid, a library for the generation +## of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/ +## +## Permission to use, copy, modify, and distribute this software for +## any purpose with or without fee is hereby granted, provided that +## the above copyright notice and this permission notice appear in all +## copies. +## +## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR +## 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. +## +## Makefile.in: make(1) build procedure +## + +@SET_MAKE@ + +VPATH = @srcdir@ +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +S = $(srcdir) +C = . + +DESTDIR = +prefix = @prefix@ +exec_prefix = @exec_prefix@ +datarootdir = @datarootdir@ +bindir = @bindir@ +libdir = @libdir@ +includedir = @includedir@ +mandir = @mandir@ + +CC = @CC@ +CXX = @CXX@ +CPPFLAGS = -I. -I$(S) @CPPFLAGS@ @DEFS@ +CFLAGS = @CFLAGS@ +CXXFLAGS = @CXXFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +RM = rm -f +CP = cp +RMDIR = rmdir +SHTOOL = $(S)/shtool +LIBTOOL = $(C)/libtool +TRUE = true +POD2MAN = pod2man +PERL = @PERL@ +PHP = @PHP@ +PG_CONFIG = @PG_CONFIG@ + +LIB_NAME = libuuid.la +LIB_OBJS = uuid.lo uuid_md5.lo uuid_sha1.lo uuid_prng.lo uuid_mac.lo uuid_time.lo uuid_ui64.lo uuid_ui128.lo uuid_str.lo + +DCE_NAME = libuuid_dce.la +DCE_OBJS = uuid_dce.lo $(LIB_OBJS) + +CXX_NAME = libuuid++.la +CXX_OBJS = uuid++.lo $(LIB_OBJS) + +PRG_NAME = uuid +PRG_OBJS = uuid_cli.o + +MAN_NAME = uuid.3 uuid++.3 uuid.1 + +PERL_NAME = $(S)/perl/blib/lib/OSSP/uuid.pm +PERL_OBJS = $(S)/perl/uuid.pm + +PHP_NAME = $(S)/php/modules/uuid.so +PHP_OBJS = $(S)/php/uuid.c + +PGSQL_NAME = $(S)/pgsql/libuuid.so +PGSQL_OBJS = $(S)/pgsql/uuid.c + +TARGETS = $(LIB_NAME) @DCE_NAME@ @CXX_NAME@ $(PRG_NAME) @PERL_NAME@ @PHP_NAME@ @PGSQL_NAME@ + +WITH_DCE = @WITH_DCE@ +WITH_CXX = @WITH_CXX@ +WITH_PERL = @WITH_PERL@ +WITH_PERL_COMPAT = @WITH_PERL_COMPAT@ +WITH_PHP = @WITH_PHP@ +WITH_PGSQL = @WITH_PGSQL@ + +.SUFFIXES: +.SUFFIXES: .c .cc .o .lo + +all: $(TARGETS) + +.c.o: + $(CC) $(CPPFLAGS) $(CFLAGS) -c $< + +.cc.o: + $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< + +.c.lo: + @$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $< + +.cc.lo: + @$(LIBTOOL) --mode=compile $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< + +$(LIB_NAME): $(LIB_OBJS) + @$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \ + -version-info `$(SHTOOL) version -l c -d libtool $(S)/uuid_vers.h` + +$(DCE_NAME): $(DCE_OBJS) + @$(LIBTOOL) --mode=link $(CC) -o $(DCE_NAME) $(DCE_OBJS) -rpath $(libdir) \ + -version-info `$(SHTOOL) version -l c -d libtool $(S)/uuid_vers.h` + +$(CXX_NAME): $(CXX_OBJS) + @$(LIBTOOL) --mode=link $(CXX) -o $(CXX_NAME) $(CXX_OBJS) -rpath $(libdir) \ + -version-info `$(SHTOOL) version -l c -d libtool $(S)/uuid_vers.h` + +$(PRG_NAME): $(PRG_OBJS) $(LIB_NAME) + @$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(PRG_NAME) $(PRG_OBJS) $(LIB_NAME) $(LIBS) + +$(PERL_NAME): $(PERL_OBJS) $(LIB_NAME) + @cd $(S)/perl && $(PERL) Makefile.PL PREFIX=$(prefix) COMPAT=$(WITH_PERL_COMPAT) && $(MAKE) $(MFLAGS) all + @touch $(PERL_NAME) + +$(PHP_NAME): $(PHP_OBJS) $(LIB_NAME) + @cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local PHP=$(PHP) + @touch $(PHP_NAME) + +$(PGSQL_NAME): $(PGSQL_OBJS) $(LIB_NAME) + @cd $(S)/pgsql && $(MAKE) $(MFLAGS) PG_CONFIG=$(PG_CONFIG) + @touch $(PGSQL_NAME) + +uuid.lo: $(S)/uuid.c uuid.h $(S)/uuid_md5.h $(S)/uuid_sha1.h $(S)/uuid_prng.h $(S)/uuid_mac.h $(S)/uuid_ui64.h $(S)/uuid_ui128.h $(S)/uuid_str.h $(S)/uuid_bm.h $(S)/uuid_ac.h +uuid_mac.lo: $(S)/uuid_mac.c $(S)/uuid_mac.h +uuid_md5.lo: $(S)/uuid_md5.c $(S)/uuid_md5.h +uuid_sha1.lo: $(S)/uuid_sha1.c $(S)/uuid_sha1.h +uuid_prng.lo: $(S)/uuid_prng.c $(S)/uuid_prng.h +uuid_str.lo: $(S)/uuid_str.c $(S)/uuid_str.h +uuid_ui64.lo: $(S)/uuid_ui64.c $(S)/uuid_ui64.h +uuid_ui128.lo: $(S)/uuid_ui64.c $(S)/uuid_ui128.h +uuid_dce.lo: $(S)/uuid_dce.c uuid.h $(S)/uuid_dce.h +uuid_cli.o: $(S)/uuid_cli.c uuid.h +uuid++.lo: $(S)/uuid++.cc $(S)/uuid++.hh + +man: uuid.3 uuid++.3 uuid-config.1 uuid.1 +uuid.3: uuid.pod + V1=`$(SHTOOL) version -l c -d short $(S)/uuid_vers.h`; \ + V2=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h`; \ + D=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \ + $(POD2MAN) --quotes=none \ + --section=3 --center="Universally Unique Identifier" \ + --release="$$D" --date="OSSP uuid $$V1" $(S)/uuid.pod | \ + sed -e "s;UUID_VERSION_STR;$$V2;" >uuid.3 +uuid++.3: uuid++.pod + V1=`$(SHTOOL) version -l c -d short $(S)/uuid_vers.h`; \ + V2=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h`; \ + D=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \ + $(POD2MAN) --quotes=none \ + --section=3 --center="Universally Unique Identifier" \ + --release="$$D" --date="OSSP uuid $$V1" $(S)/uuid++.pod | \ + sed -e "s;UUID_VERSION_STR;$$V2;" >uuid++.3 +uuid-config.1: uuid-config.pod + V1=`$(SHTOOL) version -l c -d short $(S)/uuid_vers.h`; \ + V2=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h`; \ + D=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \ + $(POD2MAN) --quotes=none \ + --section=1 --center="Universally Unique Identifier" \ + --release="$$D" --date="OSSP uuid $$V1" $(S)/uuid-config.pod | \ + sed -e "s;UUID_VERSION_STR;$$V2;" >uuid-config.1 +uuid.1: uuid_cli.pod + V1=`$(SHTOOL) version -l c -d short $(S)/uuid_vers.h`; \ + V2=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h`; \ + D=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \ + $(CP) $(S)/uuid_cli.pod /tmp/uuid.pod; \ + $(POD2MAN) --quotes=none \ + --section=1 --center="Universally Unique Identifier" \ + --release="$$D" --date="OSSP uuid $$V1" /tmp/uuid.pod | \ + sed -e "s;UUID_VERSION_STR;$$V2;" >uuid.1; \ + $(RM) /tmp/uuid.pod + +check: all + @echo "==== UUID version 1 (time and node based): 4 single iterations"; \ + $(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1 -n 4 -1 + @echo "==== UUID version 1 (time and node based): 4 subsequent iterations"; \ + $(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1 -n 4 + @echo "==== UUID version 3 (name based, MD5): 2 times repeated"; \ + $(LIBTOOL) --mode=execute ./$(PRG_NAME) -v3 -n 2 ns:URL http://www.ossp.org/ + @echo "==== UUID version 5 (name based, SHA-1): 2 times repeated"; \ + $(LIBTOOL) --mode=execute ./$(PRG_NAME) -v5 -n 2 ns:URL http://www.ossp.org/ + @echo "==== UUID version 4 (random data based): 4 single iterations"; \ + $(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4 -n 4 -1 + @echo "==== UUID version 4 (random data based): 4 subsequent iterations"; \ + $(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4 -n 4 + @echo "==== UUID version 1 generation and decoding"; \ + $(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1`; \ + $(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1 -m` + @echo "==== UUID version 3 generation and decoding"; \ + $(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v3 ns:URL http://www.ossp.org/` + @echo "==== UUID version 5 generation and decoding"; \ + $(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v5 ns:URL http://www.ossp.org/` + @echo "==== UUID version 3 generation and decoding"; \ + $(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4` + -@if [ ".$(WITH_PERL)" = .yes ]; then \ + echo "==== Perl bindings to C API"; \ + (cd $(S)/perl && $(MAKE) $(MFLAGS) test); \ + fi + -@if [ ".$(WITH_PHP)" = .yes ]; then \ + echo "==== PHP bindings to C API"; \ + (cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local test PHP=$(PHP)); \ + fi + -@if [ ".$(WITH_PGSQL)" = .yes ]; then \ + echo "==== PGSQL bindings to C API"; \ + (cd $(S)/pgsql && $(MAKE) $(MFLAGS) test PG_CONFIG=$(PG_CONFIG)); \ + fi + +.PHONY: install +install: + $(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix) + $(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir) + $(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir) + $(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)/pkgconfig + $(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3 + $(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1 + $(SHTOOL) install -c -m 755 uuid-config $(DESTDIR)$(bindir)/ + $(SHTOOL) install -c -m 644 $(S)/uuid-config.1 $(DESTDIR)$(mandir)/man1/ + $(SHTOOL) install -c -m 644 $(S)/uuid.pc $(DESTDIR)$(libdir)/pkgconfig/ + $(SHTOOL) install -c -m 644 uuid.h $(DESTDIR)$(includedir)/ + -@if [ ".$(WITH_DCE)" = .yes ]; then \ + echo "$(SHTOOL) install -c -m 644 $(S)/uuid_dce.h $(DESTDIR)$(includedir)/"; \ + $(SHTOOL) install -c -m 644 $(S)/uuid_dce.h $(DESTDIR)$(includedir)/; \ + fi + -@if [ ".$(WITH_CXX)" = .yes ]; then \ + echo "$(SHTOOL) install -c -m 644 $(S)/uuid++.hh $(DESTDIR)$(includedir)/"; \ + $(SHTOOL) install -c -m 644 $(S)/uuid++.hh $(DESTDIR)$(includedir)/; \ + fi + $(SHTOOL) install -c -m 644 $(S)/uuid.3 $(DESTDIR)$(mandir)/man3/ + -@if [ ".$(WITH_CXX)" = .yes ]; then \ + echo "$(SHTOOL) install -c -m 644 $(S)/uuid++.3 $(DESTDIR)$(mandir)/man3/"; \ + $(SHTOOL) install -c -m 644 $(S)/uuid++.3 $(DESTDIR)$(mandir)/man3/; \ + fi + @$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 $(LIB_NAME) $(DESTDIR)$(libdir)/ + -@if [ ".$(WITH_DCE)" = .yes ]; then \ + $(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 $(DCE_NAME) $(DESTDIR)$(libdir)/; \ + fi + -@if [ ".$(WITH_CXX)" = .yes ]; then \ + $(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 $(CXX_NAME) $(DESTDIR)$(libdir)/; \ + fi + @$(LIBTOOL) --mode=install $(SHTOOL) install -c -s -m 755 uuid $(DESTDIR)$(bindir)/ + $(SHTOOL) install -c -m 644 $(S)/uuid.1 $(DESTDIR)$(mandir)/man1/ + -@if [ ".$(WITH_PERL)" = .yes ]; then \ + (cd $(S)/perl && $(MAKE) $(MFLAGS) install DESTDIR=$(DESTDIR)); \ + fi + -@if [ ".$(WITH_PHP)" = .yes ]; then \ + (cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local install EXTDIR=$(prefix)/lib/php PHP=$(PHP) DESTDIR=$(DESTDIR)); \ + fi + -@if [ ".$(WITH_PGSQL)" = .yes ]; then \ + (cd $(S)/pgsql && $(MAKE) $(MFLAGS) install DESTDIR=$(DESTDIR) PG_CONFIG=$(PG_CONFIG)); \ + fi + +.PHONY: uninstall +uninstall: + -$(RM) $(DESTDIR)$(mandir)/man1/uuid.1 + -@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(bindir)/uuid + -@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/$(LIB_NAME) + -@if [ ".$(WITH_DCE)" = .yes ]; then \ + $(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/$(DCE_NAME); \ + fi + -@if [ ".$(WITH_CXX)" = .yes ]; then \ + $(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/$(CXX_NAME); \ + fi + -$(RM) $(DESTDIR)$(mandir)/man3/uuid.3 + -@if [ ".$(WITH_CXX)" = .yes ]; then \ + echo "$(RM) $(DESTDIR)$(mandir)/man3/uuid++.3"; \ + $(RM) $(DESTDIR)$(mandir)/man3/uuid++.3; \ + fi + -$(RM) $(DESTDIR)$(includedir)/uuid.h + -@if [ ".$(WITH_DCE)" = .yes ]; then \ + echo "$(RM) $(DESTDIR)$(includedir)/uuid_dce.h"; \ + $(RM) $(DESTDIR)$(includedir)/uuid_dce.h; \ + fi + -@if [ ".$(WITH_CXX)" = .yes ]; then \ + echo "$(RM) $(DESTDIR)$(includedir)/uuid++.hh"; \ + $(RM) $(DESTDIR)$(includedir)/uuid++.hh; \ + fi + -$(RM) $(DESTDIR)$(libdir)/pkgconfig/uuid.pc + -$(RM) $(DESTDIR)$(mandir)/man1/uuid-config.1 + -$(RM) $(DESTDIR)$(bindir)/uuid-config + -$(RMDIR) $(DESTDIR)$(mandir)/man1 >/dev/null 2>&1 || $(TRUE) + -$(RMDIR) $(DESTDIR)$(mandir)/man3 >/dev/null 2>&1 || $(TRUE) + -$(RMDIR) $(DESTDIR)$(mandir) >/dev/null 2>&1 || $(TRUE) + -$(RMDIR) $(DESTDIR)$(libdir)/pkgconfig >/dev/null 2>&1 || $(TRUE) + -$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE) + -$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE) + -$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE) + -$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE) + +.PHONY: clean +clean: + -$(RM) $(LIB_NAME) $(LIB_OBJS) + -@if [ ".$(WITH_DCE)" = .yes ]; then \ + echo "$(RM) $(DCE_NAME) $(DCE_OBJS)"; \ + $(RM) $(DCE_NAME) $(DCE_OBJS); \ + fi + -@if [ ".$(WITH_CXX)" = .yes ]; then \ + echo "$(RM) $(CXX_NAME) $(CXX_OBJS)"; \ + $(RM) $(CXX_NAME) $(CXX_OBJS); \ + fi + -$(RM) $(PRG_NAME) $(PRG_OBJS) + -$(RM) -r .libs >/dev/null 2>&1 || $(TRUE) + -$(RM) *.o *.lo + -@if [ ".$(WITH_PERL)" = .yes ]; then \ + (cd $(S)/perl && $(MAKE) $(MFLAGS) clean || true); \ + fi + -@if [ ".$(WITH_PHP)" = .yes ]; then \ + (cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local clean || true); \ + fi + -@if [ ".$(WITH_PGSQL)" = .yes ]; then \ + (cd $(S)/pgsql && $(MAKE) $(MFLAGS) clean PG_CONFIG=$(PG_CONFIG) || true); \ + fi + +distclean: clean + -$(RM) config.log config.status config.cache + -$(RM) Makefile config.h uuid-config uuid.h uuid.pc + -$(RM) libtool + -@if [ ".$(WITH_PERL)" = .yes ]; then \ + (cd $(S)/perl && $(MAKE) $(MFLAGS) distclean || true; rm -f Makefile.old); \ + fi + -@if [ ".$(WITH_PHP)" = .yes ]; then \ + (cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local distclean || true); \ + fi + -@if [ ".$(WITH_PGSQL)" = .yes ]; then \ + (cd $(S)/pgsql && $(MAKE) $(MFLAGS) distclean PG_CONFIG=$(PG_CONFIG) || true); \ + fi + +realclean: distclean + -$(RM) uuid.3 uuid.1 + -$(RM) configure config.h.in + -$(RM) shtool + -$(RM) ltmain.sh libtool.m4 config.guess config.sub + -@if [ ".$(WITH_PERL)" = .yes ]; then \ + (cd $(S)/perl && $(MAKE) $(MFLAGS) realclean || true; rm -f Makefile.old); \ + fi + -@if [ ".$(WITH_PHP)" = .yes ]; then \ + (cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local realclean || true); \ + fi + -@if [ ".$(WITH_PGSQL)" = .yes ]; then \ + (cd $(S)/pgsql && $(MAKE) $(MFLAGS) realclean PG_CONFIG=$(PG_CONFIG) || true); \ + fi + diff --git a/libs/uuid/NEWS b/libs/uuid/NEWS new file mode 100644 index 0000000000..015a42cc64 --- /dev/null +++ b/libs/uuid/NEWS @@ -0,0 +1,42 @@ + _ ___ ____ ____ ____ _ _ + |_|_ _ / _ \/ ___/ ___|| _ \ _ _ _ _(_) __| | + _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` | + |_||_|_| | |_| |___) |__) | __/ | |_| | |_| | | (_| | + |_|_|_| \___/|____/____/|_| \__,_|\__,_|_|\__,_| + + OSSP uuid - Universally Unique Identifier + + NEWS + + This is a list of major changes to OSSP uuid. For more detailed + change descriptions, please have a look at the ChangeLog file. + + Major changes between 1.4 and 1.5 + + o Many internal code cleanups and fixes. + o Improved and fixed PostgreSQL API. + o Improved and fixed PHP API. + + Major changes between 1.3 and 1.4 + + o Added PostgreSQL API. + + Major changes between 1.2 and 1.3 + + o Added Perl TIE-style API. + o Added Perl Data::UUID backward compatibility API. + o Added C++ API. + o Added PHP API. + + Major changes between 1.1 and 1.2 + + o Added support for version 5 UUIDs (name-based, SHA-1) + + Major changes between 1.0 and 1.1 + + o Added Perl API + + Major changes between 0.9 and 1.0 + + o Initial functionality + diff --git a/libs/uuid/OVERVIEW b/libs/uuid/OVERVIEW new file mode 100644 index 0000000000..2fb518f18d --- /dev/null +++ b/libs/uuid/OVERVIEW @@ -0,0 +1,81 @@ + + _ ___ ____ ____ ____ _ _ + |_|_ _ / _ \/ ___/ ___|| _ \ _ _ _ _(_) __| | + _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` | + |_||_|_| | |_| |___) |__) | __/ | |_| | |_| | | (_| | + |_|_|_| \___/|____/____/|_| \__,_|\__,_|_|\__,_| + + OSSP uuid - Universally Unique Identifier + + OVERVIEW + + A UUID consists of 128 bits (16-octets) which are split into 6 + octet-bounded unsigned integer fields ("time_low", "time_mid", + "time_hi_and_version", "clk_seq_hi_res", "clk_seq_low" and "node") and + where two fields are multiplexed with a fixed size 4-bit "version" and + a variable sized 2-3 bit "variant" field. + + The UUID octets are counted from left to right 15 to 0 and the bits + in each octet are counted from left to right 7 to 0 (most significant + bit first, least significant bit last). The unsigned integer fields + formed out of multiple octets are stored in "network byte order" (most + significant octet first, least significant octet last). A UUID is + stored and transmitted from left to right, i.e., in "network byte + order" with the most significant octet first and the least significant + octet last. + + Illustration 1: + (single octet array, less compact, more annotations) + + + Bits: [4] [2-3] + Field: version variant + MSO -->| |<-- -->| |<-- LSO + \ | | | | / + Octet: 15 14 13 12 11 10 | |9 8 | | 7 6 5 4 3 2 1 0 + +------++------++------++------++------++------++------++------++------++------++------++------++------++------++------++------+ + UUID: | || || || || || |#### || |##: || || || || || || || | + +------++------++------++------++------++------++------++------++------++------++------++------++------++------++------++------+ + Bit: 76543210765432107654321076543210765432107654321076543210765432107654321076543210765432107654321076543210765432107654321076543210 + /| || || || || || |\ + MSB | || || || || || | LSB + |<---------------------------->||<------------>||<------------>||<---->||<---->||<-------------------------------------------->| + time_hi clk_seq clk_seq + Field: time_low time_mid _and_version _hi_res _low node + Bits: [32] [16] [16] [5-6] [8] [48] + + + Illustration 2: + (two octet arrays, more compact, less annotations) + + [4] + version + -->| |<-- + | | + | | [16] + [32] [16] | |time_hi + time_low time_mid | _and_version + |<---------------------------->||<------------>||<------------>| + | MSO || || | | + | / || || | | + | 15 14 13 12 || 11 10 || |9 8 | + 7654321076543210765432107654321076543210765432107654321076543210 + /+------++------++------++------++------++------++------++------+~ + MSB | || || || || || |#### || | ... + +------++------++------++------++------++------++------++------+~ + ~+------++------++------++------++------++------++------++------+ + ... ##: || || || || || || || | LSB + ~+------++------++------++------++------++------++------++------+/ + 7654321076543210765432107654321076543210765432107654321076543210 + | | 7 || 6 || 5 4 3 2 1 0 | + | | || || / | + | | || || LSO | + |<---->||<---->||<-------------------------------------------->| + |clk_seq clk_seq node + |_hi_res _low [48] + |[5-6] [8] + | | + -->| |<-- + variant + [2-3] + diff --git a/libs/uuid/PORTING b/libs/uuid/PORTING new file mode 100644 index 0000000000..b507a7fd13 --- /dev/null +++ b/libs/uuid/PORTING @@ -0,0 +1,33 @@ + _ ___ ____ ____ ____ _ _ + |_|_ _ / _ \/ ___/ ___|| _ \ _ _ _ _(_) __| | + _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` | + |_||_|_| | |_| |___) |__) | __/ | |_| | |_| | | (_| | + |_|_|_| \___/|____/____/|_| \__,_|\__,_|_|\__,_| + + OSSP uuid - Universally Unique Identifier + + PORTING + + OSSP uuid was already written with maximum portability in mind, so + there should be no great effort required to get it running on any Unix + platform with a reasonable POSIX API. Additionally, the portability + was tested by successfully building and running it on the following + particular Unix platforms (syntax is "- ()"): + + alpha-tru644.0 (cc) + alpha-tru645.1 (gcc, cc) + hppa-hpux11.11 (cc) + ia64-hpux11.23 (cc) + ix86-debian2.2 (gcc, icc) + ix86-debian3.0 (gcc) + ix86-debian3.1 (gcc) + ix86-freebsd4.9 (gcc) + ix86-freebsd5.2 (gcc, icc) + ix86-netbsd1.6 (gcc) + ix86-qnx6.2 (gcc) + ix86-solaris10 (gcc) + ix86-unixware7.1.3 (cc) + mips64-irix6.5 (gcc) + sparc64-solaris8 (gcc, forte) + sparc64-solaris9 (gcc) + diff --git a/libs/uuid/README b/libs/uuid/README new file mode 100644 index 0000000000..539330609e --- /dev/null +++ b/libs/uuid/README @@ -0,0 +1,62 @@ + _ ___ ____ ____ ____ _ _ + |_|_ _ / _ \/ ___/ ___|| _ \ _ _ _ _(_) __| | + _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` | + |_||_|_| | |_| |___) |__) | __/ | |_| | |_| | | (_| | + |_|_|_| \___/|____/____/|_| \__,_|\__,_|_|\__,_| + + OSSP uuid - Universally Unique Identifier + Version 1.6.2 (04-Jul-2008) + + ABSTRACT + + OSSP uuid is a ISO-C:1999 application programming interface (API) + and corresponding command line interface (CLI) for the generation of + DCE 1.1, ISO/IEC 11578:1996 and IETF RFC-4122 compliant Universally + Unique Identifier (UUID). It supports DCE 1.1 variant UUIDs of version + 1 (time and node based), version 3 (name based, MD5), version 4 + (random number based) and version 5 (name based, SHA-1). Additional + API bindings are provided for the languages ISO-C++:1998, Perl:5 and + PHP:4/5. Optional backward compatibility exists for the ISO-C DCE-1.1 + and Perl Data::UUID APIs. + + UUIDs are 128 bit numbers which are intended to have a high likelihood + of uniqueness over space and time and are computationally difficult + to guess. They are globally unique identifiers which can be locally + generated without contacting a global registration authority. UUIDs + are intended as unique identifiers for both mass tagging objects + with an extremely short lifetime and to reliably identifying very + persistent objects across a network. + + COPYRIGHT AND LICENSE + + Copyright (c) 2004-2008 Ralf S. Engelschall + Copyright (c) 2004-2008 The OSSP Project + + This file is part of OSSP uuid, a library for the generation + of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/ + + Permission to use, copy, modify, and distribute this software for + any purpose with or without fee is hereby granted, provided that + the above copyright notice and this permission notice appear in all + copies. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR + 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. + + HOME AND DOCUMENTATION + + The documentation and latest release can be found on + + o http://www.ossp.org/pkg/lib/uuid/ + o ftp://ftp.ossp.org/pkg/lib/uuid/ + diff --git a/libs/uuid/SEEALSO b/libs/uuid/SEEALSO new file mode 100644 index 0000000000..f5a8af1eb7 --- /dev/null +++ b/libs/uuid/SEEALSO @@ -0,0 +1,52 @@ + _ ___ ____ ____ ____ _ _ + |_|_ _ / _ \/ ___/ ___|| _ \ _ _ _ _(_) __| | + _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` | + |_||_|_| | |_| |___) |__) | __/ | |_| | |_| | | (_| | + |_|_|_| \___/|____/____/|_| \__,_|\__,_|_|\__,_| + + OSSP uuid - Universally Unique Identifier + + SEE ALSO + + Although we consider OSSP uuid the ultimate reference implementation + of an UUID generator, there are multiple alternatives available. + Following is a short reference of all currently known UUID + implementations for platforms with an Unix/POSIX API: + + o OSSP uuid (ISO-C), OSSP::uuid (Perl) + http://www.ossp.org/pkg/lib/uuid/ + http://cvs.ossp.org/ossp-pkg/uuid/ + + o FreeBSD libc (ISO-C) + http://www.freebsd.org/ + http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/uuid/ + + o Sun Solaris libc (ISO-C), DCE::UUID (Perl/XS) + http://www.opensolaris.org/ + http://cvs.opensolaris.org/source/xref/usr/src/lib/libuuid/ + + o APR libaprutil (ISO-C), APR::UUID (Perl/XS) + http://svn.apache.org/repos/asf/apr/apr-util/trunk/crypto/ + + o e2fsprogs/libuuid (ISO-C), UUID (Perl/XS) + http://e2fsprogs.sourceforge.net/ + http://thunk.org/hg/e2fsprogs/ + + o Wine rpcrt4 DLL (ISO-C) + http://www.winehq.org/ + + o Data::UUID (Perl/XS) + http://search.cpan.org/src/AGOLOMSH/ + http://www.cpan.org/modules/by-module/Data/ + + o JUG (Java/JNI) + http://www.doomdark.org/doomdark/proj/jug/ + + o Mozilla (ISO-C, ISO-C++) + http://www.mozilla.org/ + http://lxr.mozilla.org/mozilla1.7/source/calendar/libxpical/token.c + + o HelixPlayer (ISO-C, ISO-C++) + https://player.helixcommunity.org/ + common/util/chxuuid.cpp + diff --git a/libs/uuid/THANKS b/libs/uuid/THANKS new file mode 100644 index 0000000000..c126239ff1 --- /dev/null +++ b/libs/uuid/THANKS @@ -0,0 +1,29 @@ + _ ___ ____ ____ ____ _ _ + |_|_ _ / _ \/ ___/ ___|| _ \ _ _ _ _(_) __| | + _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` | + |_||_|_| | |_| |___) |__) | __/ | |_| | |_| | | (_| | + |_|_|_| \___/|____/____/|_| \__,_|\__,_|_|\__,_| + + OSSP uuid - Universally Unique Identifier + + THANKS + + Credit has to be given to the following people who contributed ideas, + bugfixes, hints, gave platform feedback, etc. (in alphabetical order): + + o Matthias Andree + o Neil Caunt + o Neil Conway + o M. Daniel + o Simon "janus" Dassow + o Fuyuki + o Thomas Lotterer + o Roman Neuhauser + o Hrvoje Niksic + o Piotr Roszatycki + o Hiroshi Saito + o Michael Schloh + o Guerry Semones + o David Wheeler + o Wu Yongwei + diff --git a/libs/uuid/TODO b/libs/uuid/TODO new file mode 100644 index 0000000000..9bf2bdb633 --- /dev/null +++ b/libs/uuid/TODO @@ -0,0 +1,23 @@ + _ ___ ____ ____ ____ _ _ + |_|_ _ / _ \/ ___/ ___|| _ \ _ _ _ _(_) __| | + _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` | + |_||_|_| | |_| |___) |__) | __/ | |_| | |_| | | (_| | + |_|_|_| \___/|____/____/|_| \__,_|\__,_|_|\__,_| + + OSSP uuid - Universally Unique Identifier + + TODO + ==== + + - + + CANDO + ===== + + - allow to re-create version 1 UUIDs by specifying time, etc. + - getopt_long support for CLI? + - a more sophisticated test suite with UUID references?! + - more platform support in uuid_mac.c?! + - global memory locking according to standard hints?? + - persistent/non-volatile state writing according to standard hints?? + diff --git a/libs/uuid/USERS b/libs/uuid/USERS new file mode 100644 index 0000000000..9ce7ed4f32 --- /dev/null +++ b/libs/uuid/USERS @@ -0,0 +1,49 @@ + _ ___ ____ ____ ____ _ _ + |_|_ _ / _ \/ ___/ ___|| _ \ _ _ _ _(_) __| | + _|_||_| | | | \___ \___ \| |_) | | | | | | | | |/ _` | + |_||_|_| | |_| |___) |__) | __/ | |_| | |_| | | (_| | + |_|_|_| \___/|____/____/|_| \__,_|\__,_|_|\__,_| + + OSSP uuid - Universally Unique Identifier + + USERS + + OSSP uuid is known to be used by at least the following + Open Source software packages: + + o PostgreSQL + Relational Database Management System (RDBMS) + http://www.postgresql.org/ + + o Aegis + Software Configuration Management (SCM) System + http://aegis.sourceforge.net/ + + o Heartbeat + Core component of the High-Availability Linux (Linux-HA) project + http://linux-ha.org/heartbeat/ + + o GAT + Grid Application Toolkit (GAT) + https://www.gridlab.org/WorkPackages/wp-1/ + + o Menes + High-Level C++ Library for mutexes, networking, etc. + http://www.saurik.com/ + http://svn.saurik.com/repos/menes/trunk/ + + o OpenAether OAPR + C++ wrapper for NSPR + http://www.openaether.org/oapr.html + + o Gauche Scheme Interpreter, UUID extension + http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/gauche/Gauche-uuid/ + http://www.shiro.dreamhost.com/scheme/gauche/ + + o Guile Extension Examples (GEE) + https://gna.org/projects/gee + + o CGI::Session::ID::uuid + UUID based ID generator backend for CGI::Session + http://www.cpan.org/modules/by-authors/id/RSE/ + diff --git a/libs/uuid/acinclude.m4 b/libs/uuid/acinclude.m4 new file mode 100644 index 0000000000..c81d368304 --- /dev/null +++ b/libs/uuid/acinclude.m4 @@ -0,0 +1,352 @@ +dnl ## +dnl ## SA - OSSP Socket Abstraction Library +dnl ## Copyright (c) 2001-2003 Ralf S. Engelschall +dnl ## Copyright (c) 2001-2003 The OSSP Project +dnl ## Copyright (c) 2001-2003 Cable & Wireless Deutschland +dnl ## +dnl ## This file is part of OSSP SA, a socket abstraction library which +dnl ## can be found at http://www.ossp.org/pkg/sa/. +dnl ## +dnl ## Permission to use, copy, modify, and distribute this software for +dnl ## any purpose with or without fee is hereby granted, provided that +dnl ## the above copyright notice and this permission notice appear in all +dnl ## copies. +dnl ## +dnl ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED +dnl ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +dnl ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +dnl ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR +dnl ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +dnl ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +dnl ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +dnl ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +dnl ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +dnl ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +dnl ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +dnl ## SUCH DAMAGE. +dnl ## +dnl ## aclocal.m4: GNU Autoconf local macro definitions +dnl ## + +dnl ## +dnl ## Check whether compiler option works +dnl ## +dnl ## configure.in: +dnl ## AC_COMPILER_OPTION(, ,