aboutsummaryrefslogtreecommitdiffstats
path: root/databases/postgresql90-server/files/patch-contrib-uuid
diff options
context:
space:
mode:
Diffstat (limited to 'databases/postgresql90-server/files/patch-contrib-uuid')
-rw-r--r--databases/postgresql90-server/files/patch-contrib-uuid384
1 files changed, 0 insertions, 384 deletions
diff --git a/databases/postgresql90-server/files/patch-contrib-uuid b/databases/postgresql90-server/files/patch-contrib-uuid
deleted file mode 100644
index f6132e31c0ae..000000000000
--- a/databases/postgresql90-server/files/patch-contrib-uuid
+++ /dev/null
@@ -1,384 +0,0 @@
---- contrib/Makefile.orig 2014-07-21 20:16:01.000000000 +0100
-+++ contrib/Makefile 2014-07-30 17:59:54.904934814 +0100
-@@ -43,6 +43,7 @@
- tablefunc \
- test_parser \
- tsearch2 \
-+ uuid-ossp \
- unaccent \
- vacuumlo
-
---- contrib/uuid-ossp/uuid-ossp.c.orig 2014-07-21 20:16:01.000000000 +0100
-+++ contrib/uuid-ossp/uuid-ossp.c 2014-07-30 18:00:21.427935273 +0100
-@@ -6,6 +6,10 @@
- *
- * $PostgreSQL: pgsql/contrib/uuid-ossp/uuid-ossp.c,v 1.12 2010/01/02 16:57:33 momjian Exp $
- *
-+ * Modified to use FreeBSD's built in uuid instead of ossp:
-+ * Copyright (c) 2009 Andrew Gierth
-+ *
-+ * URL: http://pgfoundry.org/projects/uuid-freebsd
- *-------------------------------------------------------------------------
- */
-
-@@ -14,27 +18,14 @@
- #include "utils/builtins.h"
- #include "utils/uuid.h"
-
--/*
-- * There's some confusion over the location of the uuid.h header file.
-- * On Debian, it's installed as ossp/uuid.h, while on Fedora, or if you
-- * install ossp-uuid from a tarball, it's installed as uuid.h. Don't know
-- * what other systems do.
-- */
--#ifdef HAVE_OSSP_UUID_H
--#include <ossp/uuid.h>
--#else
--#ifdef HAVE_UUID_H
--#include <uuid.h>
--#else
--#error OSSP uuid.h not found
--#endif
--#endif
--
--/* better both be 16 */
--#if (UUID_LEN != UUID_LEN_BIN)
--#error UUID length mismatch
--#endif
-+/* OS has a uuid_hash that conflicts with ours; kill it*/
-+/* explicit path since we do _not_ want to get any other version */
-+#define uuid_hash freebsd_uuid_hash
-+#include "/usr/include/uuid.h"
-+#undef uuid_hash
-
-+#include <md5.h>
-+#include <sha.h>
-
- PG_MODULE_MAGIC;
-
-@@ -64,177 +55,175 @@
- PG_FUNCTION_INFO_V1(uuid_generate_v4);
- PG_FUNCTION_INFO_V1(uuid_generate_v5);
-
--static void
--pguuid_complain(uuid_rc_t rc)
--{
-- char *err = uuid_error(rc);
--
-- if (err != NULL)
-- ereport(ERROR,
-- (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
-- errmsg("OSSP uuid library failure: %s", err)));
-- else
-- ereport(ERROR,
-- (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
-- errmsg("OSSP uuid library failure: error code %d", rc)));
--}
-+/* we assume that the string representation is portable and that the
-+ * native binary representation might not be. But for *ns, we assume
-+ * that pg's internal storage of uuids is the simple byte-oriented
-+ * binary format. */
-
--/*
-- * We create a uuid_t object just once per session and re-use it for all
-- * operations in this module. OSSP UUID caches the system MAC address and
-- * other state in this object. Reusing the object has a number of benefits:
-- * saving the cycles needed to fetch the system MAC address over and over,
-- * reducing the amount of entropy we draw from /dev/urandom, and providing a
-- * positive guarantee that successive generated V1-style UUIDs don't collide.
-- * (On a machine fast enough to generate multiple UUIDs per microsecond,
-- * or whatever the system's wall-clock resolution is, we'd otherwise risk
-- * collisions whenever random initialization of the uuid_t's clock sequence
-- * value chanced to produce duplicates.)
-- *
-- * However: when we're doing V3 or V5 UUID creation, uuid_make needs two
-- * uuid_t objects, one holding the namespace UUID and one for the result.
-- * It's unspecified whether it's safe to use the same uuid_t for both cases,
-- * so let's cache a second uuid_t for use as the namespace holder object.
-- */
--static uuid_t *
--get_cached_uuid_t(int which)
-+static Datum
-+internal_uuid_create(int v, unsigned char *ns, char *ptr, int len)
- {
-- static uuid_t *cached_uuid[2] = {NULL, NULL};
-+ char strbuf[40];
-
-- if (cached_uuid[which] == NULL)
-+ switch (v)
- {
-- uuid_rc_t rc;
-+ case 0: /* constant-value uuids: nil, or namespace uuids */
-+ strlcpy(strbuf, ptr, 37);
-+ break;
-
-- rc = uuid_create(&cached_uuid[which]);
-- if (rc != UUID_RC_OK)
-- {
-- cached_uuid[which] = NULL;
-- pguuid_complain(rc);
-- }
-+ case 4: default: /* random uuid */
-+ {
-+ sprintf(strbuf, "%08lx-%04x-%04x-%04x-%04x%08lx",
-+ (unsigned long) arc4random(),
-+ (unsigned) (arc4random() & 0xffff),
-+ (unsigned) ((arc4random() & 0xfff) | 0x4000),
-+ (unsigned) ((arc4random() & 0x3fff) | 0x8000),
-+ (unsigned) (arc4random() & 0xffff),
-+ (unsigned long) arc4random());
-+ break;
- }
-- return cached_uuid[which];
--}
-+
-+ case 1: /* time/node-based uuids */
-+ {
-+ uuid_t uu;
-+ uint32_t status = uuid_s_ok;
-+ char *str = NULL;
-
--static char *
--uuid_to_string(const uuid_t *uuid)
--{
-- char *buf = palloc(UUID_LEN_STR + 1);
-- void *ptr = buf;
-- size_t len = UUID_LEN_STR + 1;
-- uuid_rc_t rc;
-+ uuid_create(&uu, &status);
-
-- rc = uuid_export(uuid, UUID_FMT_STR, &ptr, &len);
-- if (rc != UUID_RC_OK)
-- pguuid_complain(rc);
-+ if (status == uuid_s_ok)
-+ {
-+ uuid_to_string(&uu, &str, &status);
-+ if (status == uuid_s_ok)
-+ {
-+ strlcpy(strbuf, str, 37);
-
-- return buf;
--}
-+ /* PTR, if set, replaces the trailing characters of the uuid;
-+ * this is to support v1mc, where a random multicast MAC is
-+ * used instead of the physical one
-+ */
-+
-+ if (ptr && len <= 36)
-+ strcpy(strbuf + (36 - len), ptr);
-+ }
-+ if (str)
-+ free(str);
-+ }
-
-+ if (status != uuid_s_ok)
-+ {
-+ ereport(ERROR,
-+ (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
-+ errmsg("FreeBSD uuid library failure: %d", (int) status)));
-+ }
-+
-+ break;
-+ }
-
--static void
--string_to_uuid(const char *str, uuid_t *uuid)
--{
-- uuid_rc_t rc;
-+ case 3: /* namespace-based MD5 uuids */
-+ {
-+ /* we could use pg's md5(), but we're already pulling in libmd */
-+ MD5_CTX ctx;
-+ unsigned char buf[16];
-+
-+ MD5Init(&ctx);
-+ MD5Update(&ctx, ns, 16);
-+ MD5Update(&ctx, (unsigned char *)ptr, len);
-+ MD5Final(buf, &ctx);
-+
-+ sprintf(strbuf,
-+ "%02x%02x%02x%02x-"
-+ "%02x%02x-%02x%02x-%02x%02x-"
-+ "%02x%02x%02x%02x%02x%02x",
-+ buf[0], buf[1], buf[2], buf[3],
-+ buf[4], buf[5], ((buf[6] & 0xf) | 0x30), buf[7],
-+ ((buf[8] & 0x3F) | 0x80), buf[9], buf[10], buf[11],
-+ buf[12], buf[13], buf[14], buf[15]);
-
-- rc = uuid_import(uuid, UUID_FMT_STR, str, UUID_LEN_STR + 1);
-- if (rc != UUID_RC_OK)
-- pguuid_complain(rc);
--}
-+ break;
-+ }
-+
-+ case 5: /* namespace-based SHA1 uuids */
-+ {
-+ SHA_CTX ctx;
-+ unsigned char buf[20];
-
-+ SHA1_Init(&ctx);
-+ SHA1_Update(&ctx, ns, 16);
-+ SHA1_Update(&ctx, (unsigned char *)ptr, len);
-+ SHA1_Final(buf, &ctx);
-+
-+ sprintf(strbuf,
-+ "%02x%02x%02x%02x-"
-+ "%02x%02x-%02x%02x-%02x%02x-"
-+ "%02x%02x%02x%02x%02x%02x",
-+ buf[0], buf[1], buf[2], buf[3],
-+ buf[4], buf[5], ((buf[6] & 0xf) | 0x30), buf[7],
-+ ((buf[8] & 0x3F) | 0x80), buf[9], buf[10], buf[11],
-+ buf[12], buf[13], buf[14], buf[15]);
-
--static Datum
--special_uuid_value(const char *name)
--{
-- uuid_t *uuid = get_cached_uuid_t(0);
-- char *str;
-- uuid_rc_t rc;
--
-- rc = uuid_load(uuid, name);
-- if (rc != UUID_RC_OK)
-- pguuid_complain(rc);
-- str = uuid_to_string(uuid);
-+ break;
-+ }
-+ }
-
-- return DirectFunctionCall1(uuid_in, CStringGetDatum(str));
-+ return DirectFunctionCall1(uuid_in, CStringGetDatum(strbuf));
- }
-
-
- Datum
- uuid_nil(PG_FUNCTION_ARGS)
- {
-- return special_uuid_value("nil");
-+ return internal_uuid_create(0, NULL, "00000000-0000-0000-0000-000000000000", 36);
- }
-
-
- Datum
- uuid_ns_dns(PG_FUNCTION_ARGS)
- {
-- return special_uuid_value("ns:DNS");
-+ return internal_uuid_create(0, NULL, "6ba7b810-9dad-11d1-80b4-00c04fd430c8", 36);
- }
-
-
- Datum
- uuid_ns_url(PG_FUNCTION_ARGS)
- {
-- return special_uuid_value("ns:URL");
-+ return internal_uuid_create(0, NULL, "6ba7b811-9dad-11d1-80b4-00c04fd430c8", 36);
- }
-
-
- Datum
- uuid_ns_oid(PG_FUNCTION_ARGS)
- {
-- return special_uuid_value("ns:OID");
-+ return internal_uuid_create(0, NULL, "6ba7b812-9dad-11d1-80b4-00c04fd430c8", 36);
- }
-
-
- Datum
- uuid_ns_x500(PG_FUNCTION_ARGS)
- {
-- return special_uuid_value("ns:X500");
--}
--
--
--static Datum
--uuid_generate_internal(int mode, const uuid_t *ns, const char *name)
--{
-- uuid_t *uuid = get_cached_uuid_t(0);
-- char *str;
-- uuid_rc_t rc;
--
-- rc = uuid_make(uuid, mode, ns, name);
-- if (rc != UUID_RC_OK)
-- pguuid_complain(rc);
-- str = uuid_to_string(uuid);
--
-- return DirectFunctionCall1(uuid_in, CStringGetDatum(str));
-+ return internal_uuid_create(0, NULL, "6ba7b814-9dad-11d1-80b4-00c04fd430c8", 36);
- }
-
-
- Datum
- uuid_generate_v1(PG_FUNCTION_ARGS)
- {
-- return uuid_generate_internal(UUID_MAKE_V1, NULL, NULL);
-+ return internal_uuid_create(1, NULL, NULL, 0);
- }
-
-
- Datum
- uuid_generate_v1mc(PG_FUNCTION_ARGS)
- {
-- return uuid_generate_internal(UUID_MAKE_V1 | UUID_MAKE_MC, NULL, NULL);
--}
--
--
--static Datum
--uuid_generate_v35_internal(int mode, pg_uuid_t *ns, text *name)
--{
-- uuid_t *ns_uuid = get_cached_uuid_t(1);
--
-- string_to_uuid(DatumGetCString(DirectFunctionCall1(uuid_out,
-- UUIDPGetDatum(ns))),
-- ns_uuid);
-+ char buf[20];
-
-- return uuid_generate_internal(mode,
-- ns_uuid,
-- text_to_cstring(name));
-+ sprintf(buf, "-%04x-%04x%08lx",
-+ (unsigned)((arc4random() & 0x3FFF) | 0x8000),
-+ /* set IEEE802 multicast and local-admin bits */
-+ (unsigned)((arc4random() & 0xffff) | 0x0300),
-+ (unsigned long) arc4random());
-+
-+ return internal_uuid_create(1, NULL, buf, 18);
- }
-
-
-@@ -244,14 +233,15 @@
- pg_uuid_t *ns = PG_GETARG_UUID_P(0);
- text *name = PG_GETARG_TEXT_P(1);
-
-- return uuid_generate_v35_internal(UUID_MAKE_V3, ns, name);
-+ return internal_uuid_create(3, (unsigned char *)ns,
-+ VARDATA(name), VARSIZE(name) - VARHDRSZ);
- }
-
-
- Datum
- uuid_generate_v4(PG_FUNCTION_ARGS)
- {
-- return uuid_generate_internal(UUID_MAKE_V4, NULL, NULL);
-+ return internal_uuid_create(4, NULL, NULL, 0);
- }
-
-
-@@ -261,5 +251,6 @@
- pg_uuid_t *ns = PG_GETARG_UUID_P(0);
- text *name = PG_GETARG_TEXT_P(1);
-
-- return uuid_generate_v35_internal(UUID_MAKE_V5, ns, name);
-+ return internal_uuid_create(5, (unsigned char *)ns,
-+ VARDATA(name), VARSIZE(name) - VARHDRSZ);
- }
---- contrib/uuid-ossp/Makefile.orig 2014-07-21 20:16:01.000000000 +0100
-+++ contrib/uuid-ossp/Makefile 2014-07-30 18:00:13.141935988 +0100
-@@ -5,7 +5,7 @@
- DATA_built = uuid-ossp.sql
- DATA = uninstall_uuid-ossp.sql
-
--SHLIB_LINK += $(OSSP_UUID_LIBS)
-+SHLIB_LINK += -lmd
-
- ifdef USE_PGXS
- PG_CONFIG = pg_config