diff options
25 files changed, 1965 insertions, 51 deletions
diff --git a/databases/postgresql84-contrib/Makefile b/databases/postgresql84-contrib/Makefile index 4375c8544c03..e5afacf001ac 100644 --- a/databases/postgresql84-contrib/Makefile +++ b/databases/postgresql84-contrib/Makefile @@ -23,7 +23,7 @@ INSTALL_DIRS= contrib SLAVE_ONLY= yes COMPONENT= -contrib -CONFIGURE_ARGS+=--with-libxslt --with-libxml --with-openssl +CONFIGURE_ARGS+=--with-libxslt --with-libxml --with-openssl --with-ossp-uuid post-install: @- ${INSTALL_DATA} ${WRKSRC}/contrib/README ${STAGEDIR}${DOCSDIR}/contrib/README diff --git a/databases/postgresql84-server/Makefile b/databases/postgresql84-server/Makefile index aaf02d4e2b0a..ba4ba65a3bcf 100644 --- a/databases/postgresql84-server/Makefile +++ b/databases/postgresql84-server/Makefile @@ -2,7 +2,7 @@ # $FreeBSD$ PORTNAME?= postgresql -DISTVERSION?= 8.4.20 +DISTVERSION?= 8.4.21 PORTREVISION?= 0 CATEGORIES?= databases MASTER_SITES= PGSQL diff --git a/databases/postgresql84-server/distinfo b/databases/postgresql84-server/distinfo index e7f7867e4524..e932ce55d541 100644 --- a/databases/postgresql84-server/distinfo +++ b/databases/postgresql84-server/distinfo @@ -1,4 +1,4 @@ -SHA256 (postgresql/postgresql-8.4.20.tar.bz2) = e84e46083a6accd2bf37f0bd7253415649afcafc49f2564bc8481c10ed90d7c1 -SIZE (postgresql/postgresql-8.4.20.tar.bz2) = 14642312 +SHA256 (postgresql/postgresql-8.4.21.tar.bz2) = 388f67e59f2a16c27e84f50656f5d755adf3d0a883138366d091aa0c727c1e2c +SIZE (postgresql/postgresql-8.4.21.tar.bz2) = 14645050 SHA256 (postgresql/pg-8419-icu-2014-02-10.diff.gz) = a67fc17ef9985200cd25d6d534338305978496ea13d86fc6d1f6125d36ecf78f SIZE (postgresql/pg-8419-icu-2014-02-10.diff.gz) = 4374 diff --git a/databases/postgresql84-server/files/patch-contrib-uuid b/databases/postgresql84-server/files/patch-contrib-uuid new file mode 100644 index 000000000000..a1b312cc2406 --- /dev/null +++ b/databases/postgresql84-server/files/patch-contrib-uuid @@ -0,0 +1,371 @@ +--- contrib/uuid-ossp/Makefile.orig 2014-03-17 20:38:14.000000000 +0100 ++++ contrib/uuid-ossp/Makefile 2014-03-19 23:02:37.000000000 +0100 +@@ -5,8 +5,8 @@ + 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 + PGXS := $(shell $(PG_CONFIG) --pgxs) +--- contrib/uuid-ossp/uuid-ossp.c.orig 2014-03-17 20:38:14.000000000 +0100 ++++ contrib/uuid-ossp/uuid-ossp.c 2014-03-19 23:01:59.000000000 +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,163 +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. */ + +-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; +- +- rc = uuid_export(uuid, UUID_FMT_STR, &ptr, &len); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- +- return buf; +-} +- +- +-static void +-string_to_uuid(const char *str, uuid_t *uuid) ++static Datum ++internal_uuid_create(int v, unsigned char *ns, char *ptr, int len) + { +- uuid_rc_t rc; +- +- rc = uuid_import(uuid, UUID_FMT_STR, str, UUID_LEN_STR + 1); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +-} ++ char strbuf[40]; + ++ switch (v) ++ { ++ case 0: /* constant-value uuids: nil, or namespace uuids */ ++ strlcpy(strbuf, ptr, 37); ++ break; ++ ++ 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; ++ } ++ ++ case 1: /* time/node-based uuids */ ++ { ++ uuid_t uu; ++ uint32_t status = uuid_s_ok; ++ char *str = NULL; ++ ++ uuid_create(&uu, &status); ++ ++ if (status == uuid_s_ok) ++ { ++ uuid_to_string(&uu, &str, &status); ++ if (status == uuid_s_ok) ++ { ++ strlcpy(strbuf, str, 37); ++ ++ /* 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); ++ } + +-static Datum +-special_uuid_value(const char *name) +-{ +- uuid_t *uuid; +- char *str; +- uuid_rc_t rc; +- +- rc = uuid_create(&uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- rc = uuid_load(uuid, name); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- str = uuid_to_string(uuid); +- rc = uuid_destroy(uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); ++ if (status != uuid_s_ok) ++ { ++ ereport(ERROR, ++ (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), ++ errmsg("FreeBSD uuid library failure: %d", (int) status))); ++ } ++ ++ break; ++ } ++ ++ 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]); ++ ++ 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]); ++ ++ 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; +- char *str; +- uuid_rc_t rc; +- +- rc = uuid_create(&uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- rc = uuid_make(uuid, mode, ns, name); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- str = uuid_to_string(uuid); +- rc = uuid_destroy(uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- +- 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; +- Datum result; +- uuid_rc_t rc; +- +- rc = uuid_create(&ns_uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- string_to_uuid(DatumGetCString(DirectFunctionCall1(uuid_out, UUIDPGetDatum(ns))), +- ns_uuid); +- +- result = uuid_generate_internal(mode, +- ns_uuid, +- text_to_cstring(name)); +- +- rc = uuid_destroy(ns_uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); ++ char buf[20]; + +- return result; ++ 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); + } + + +@@ -230,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); + } + + +@@ -247,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); + } diff --git a/databases/postgresql84-server/pkg-plist-contrib b/databases/postgresql84-server/pkg-plist-contrib index fbd362a54b26..52fddbc11b9f 100644 --- a/databases/postgresql84-server/pkg-plist-contrib +++ b/databases/postgresql84-server/pkg-plist-contrib @@ -38,6 +38,7 @@ lib/postgresql/tablefunc.so lib/postgresql/test_parser.so lib/postgresql/timetravel.so lib/postgresql/tsearch2.so +lib/postgresql/uuid-ossp.so %%DOCSDIR%%/README-contrib %%DOCSDIR%%/contrib/README %%DOCSDIR%%/contrib/autoinc.example @@ -112,6 +113,8 @@ share/postgresql/contrib/uninstall_sslinfo.sql share/postgresql/contrib/uninstall_tablefunc.sql share/postgresql/contrib/uninstall_test_parser.sql share/postgresql/contrib/uninstall_tsearch2.sql +share/postgresql/contrib/uninstall_uuid-ossp.sql +share/postgresql/contrib/uuid-ossp.sql share/postgresql/tsearch_data/xsyn_sample.rules @dirrmtry share/postgresql/tsearch_data @dirrmtry share/postgresql/contrib diff --git a/databases/postgresql90-contrib/Makefile b/databases/postgresql90-contrib/Makefile index 6077b09c11a5..864079113fd0 100644 --- a/databases/postgresql90-contrib/Makefile +++ b/databases/postgresql90-contrib/Makefile @@ -23,13 +23,9 @@ INSTALL_DIRS= contrib SLAVE_ONLY= yes COMPONENT= -contrib -CONFIGURE_ARGS+=--with-libxslt --with-libxml --with-openssl +CONFIGURE_ARGS+=--with-libxslt --with-libxml --with-openssl --with-ossp-uuid LDFLAGS+= ${PTHREAD_LIBS} -L${PREFIX}/lib -OPTIONS_DEFINE= OSSP_UUID -OSSP_UUID_DESC= Enable / disable ossp-uuid support -OPTIONS_DEFAULT= OSSP_UUID - post-install: @- ${INSTALL_DATA} ${WRKSRC}/contrib/README ${STAGEDIR}${DOCSDIR}/contrib/README diff --git a/databases/postgresql90-server/Makefile b/databases/postgresql90-server/Makefile index fd4415212a00..fa4e981fa6b4 100644 --- a/databases/postgresql90-server/Makefile +++ b/databases/postgresql90-server/Makefile @@ -1,7 +1,7 @@ # Created by: Marc G. Fournier <scrappy@FreeBSD.org> # $FreeBSD$ -DISTVERSION?= 9.0.16 +DISTVERSION?= 9.0.17 PORTREVISION= 0 PKGNAMESUFFIX?= ${DISTVERSION:R:S/.//}${COMPONENT} diff --git a/databases/postgresql90-server/distinfo b/databases/postgresql90-server/distinfo index 95858f049a90..eaaeee387017 100644 --- a/databases/postgresql90-server/distinfo +++ b/databases/postgresql90-server/distinfo @@ -1,4 +1,4 @@ -SHA256 (postgresql/postgresql-9.0.16.tar.bz2) = 900f6ab00fc36c94b17430e7cb22499708025da1e34d7a70aefaf9a875f0fabf -SIZE (postgresql/postgresql-9.0.16.tar.bz2) = 14956681 +SHA256 (postgresql/postgresql-9.0.17.tar.bz2) = d2f6d09cf941e7cbab6ee399f14080dbe822af58fda9fd132efb05c2b7d160ad +SIZE (postgresql/postgresql-9.0.17.tar.bz2) = 14961682 SHA256 (postgresql/pg-9015-icu-2014-02-10.diff.gz) = ee4a9a9cac56842ed532597f3e9e52ca2363f809a9283c01b2514df19173763a SIZE (postgresql/pg-9015-icu-2014-02-10.diff.gz) = 4386 diff --git a/databases/postgresql90-server/files/patch-contrib-uuid b/databases/postgresql90-server/files/patch-contrib-uuid new file mode 100644 index 000000000000..a1b312cc2406 --- /dev/null +++ b/databases/postgresql90-server/files/patch-contrib-uuid @@ -0,0 +1,371 @@ +--- contrib/uuid-ossp/Makefile.orig 2014-03-17 20:38:14.000000000 +0100 ++++ contrib/uuid-ossp/Makefile 2014-03-19 23:02:37.000000000 +0100 +@@ -5,8 +5,8 @@ + 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 + PGXS := $(shell $(PG_CONFIG) --pgxs) +--- contrib/uuid-ossp/uuid-ossp.c.orig 2014-03-17 20:38:14.000000000 +0100 ++++ contrib/uuid-ossp/uuid-ossp.c 2014-03-19 23:01:59.000000000 +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,163 +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. */ + +-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; +- +- rc = uuid_export(uuid, UUID_FMT_STR, &ptr, &len); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- +- return buf; +-} +- +- +-static void +-string_to_uuid(const char *str, uuid_t *uuid) ++static Datum ++internal_uuid_create(int v, unsigned char *ns, char *ptr, int len) + { +- uuid_rc_t rc; +- +- rc = uuid_import(uuid, UUID_FMT_STR, str, UUID_LEN_STR + 1); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +-} ++ char strbuf[40]; + ++ switch (v) ++ { ++ case 0: /* constant-value uuids: nil, or namespace uuids */ ++ strlcpy(strbuf, ptr, 37); ++ break; ++ ++ 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; ++ } ++ ++ case 1: /* time/node-based uuids */ ++ { ++ uuid_t uu; ++ uint32_t status = uuid_s_ok; ++ char *str = NULL; ++ ++ uuid_create(&uu, &status); ++ ++ if (status == uuid_s_ok) ++ { ++ uuid_to_string(&uu, &str, &status); ++ if (status == uuid_s_ok) ++ { ++ strlcpy(strbuf, str, 37); ++ ++ /* 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); ++ } + +-static Datum +-special_uuid_value(const char *name) +-{ +- uuid_t *uuid; +- char *str; +- uuid_rc_t rc; +- +- rc = uuid_create(&uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- rc = uuid_load(uuid, name); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- str = uuid_to_string(uuid); +- rc = uuid_destroy(uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); ++ if (status != uuid_s_ok) ++ { ++ ereport(ERROR, ++ (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), ++ errmsg("FreeBSD uuid library failure: %d", (int) status))); ++ } ++ ++ break; ++ } ++ ++ 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]); ++ ++ 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]); ++ ++ 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; +- char *str; +- uuid_rc_t rc; +- +- rc = uuid_create(&uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- rc = uuid_make(uuid, mode, ns, name); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- str = uuid_to_string(uuid); +- rc = uuid_destroy(uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- +- 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; +- Datum result; +- uuid_rc_t rc; +- +- rc = uuid_create(&ns_uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- string_to_uuid(DatumGetCString(DirectFunctionCall1(uuid_out, UUIDPGetDatum(ns))), +- ns_uuid); +- +- result = uuid_generate_internal(mode, +- ns_uuid, +- text_to_cstring(name)); +- +- rc = uuid_destroy(ns_uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); ++ char buf[20]; + +- return result; ++ 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); + } + + +@@ -230,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); + } + + +@@ -247,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); + } diff --git a/databases/postgresql90-server/pkg-plist-contrib b/databases/postgresql90-server/pkg-plist-contrib index b3c4baf554cb..06f6e95af4b8 100644 --- a/databases/postgresql90-server/pkg-plist-contrib +++ b/databases/postgresql90-server/pkg-plist-contrib @@ -43,7 +43,7 @@ lib/postgresql/test_parser.so lib/postgresql/timetravel.so lib/postgresql/tsearch2.so lib/postgresql/unaccent.so -%%OSSP%%lib/postgresql/uuid-ossp.so +lib/postgresql/uuid-ossp.so %%DOCSDIR%%/README-contrib %%DOCSDIR%%/contrib/README %%DOCSDIR%%/contrib/autoinc.example @@ -88,8 +88,8 @@ share/postgresql/contrib/test_parser.sql share/postgresql/contrib/timetravel.sql share/postgresql/contrib/tsearch2.sql share/postgresql/contrib/unaccent.sql -%%OSSP%%share/postgresql/contrib/uninstall_uuid-ossp.sql -%%OSSP%%share/postgresql/contrib/uuid-ossp.sql +share/postgresql/contrib/uninstall_uuid-ossp.sql +share/postgresql/contrib/uuid-ossp.sql share/postgresql/contrib/uninstall__int.sql share/postgresql/contrib/uninstall_adminpack.sql share/postgresql/contrib/uninstall_btree_gin.sql diff --git a/databases/postgresql91-contrib/Makefile b/databases/postgresql91-contrib/Makefile index 2489fa1f91b9..5b3f5355d6fa 100644 --- a/databases/postgresql91-contrib/Makefile +++ b/databases/postgresql91-contrib/Makefile @@ -22,13 +22,9 @@ INSTALL_DIRS= contrib SLAVE_ONLY= yes COMPONENT= -contrib -CONFIGURE_ARGS+=--with-libxslt --with-libxml --with-openssl +CONFIGURE_ARGS+=--with-libxslt --with-libxml --with-openssl --with-ossp-uuid LDFLAGS+= ${PTHREAD_LIBS} -L${PREFIX}/lib -OPTIONS_DEFINE= OSSP_UUID -OSSP_UUID_DESC= Enable / disable ossp-uuid support -OPTIONS_DEFAULT= OSSP_UUID - post-install: @- ${INSTALL_DATA} ${WRKSRC}/contrib/README ${STAGEDIR}${DOCSDIR}/extension/README diff --git a/databases/postgresql91-server/Makefile b/databases/postgresql91-server/Makefile index a606bf0767b0..78557f96c3d5 100644 --- a/databases/postgresql91-server/Makefile +++ b/databases/postgresql91-server/Makefile @@ -2,7 +2,7 @@ # $FreeBSD$ PORTNAME?= postgresql -DISTVERSION?= 9.1.12 +DISTVERSION?= 9.1.13 PORTREVISION?= 0 CATEGORIES?= databases MASTER_SITES= PGSQL diff --git a/databases/postgresql91-server/distinfo b/databases/postgresql91-server/distinfo index 3788af231370..40dea481b02a 100644 --- a/databases/postgresql91-server/distinfo +++ b/databases/postgresql91-server/distinfo @@ -1,4 +1,4 @@ -SHA256 (postgresql/postgresql-9.1.12.tar.bz2) = 0b267ebab5feb39ad6ef945b9588787886e7f7e5284467921d18cc7b76bcb383 -SIZE (postgresql/postgresql-9.1.12.tar.bz2) = 15638909 +SHA256 (postgresql/postgresql-9.1.13.tar.bz2) = 20f8aa5dfcb47688ca6b6c41340cac61712d9cf87c34d58b0a75bb2f85d89b7f +SIZE (postgresql/postgresql-9.1.13.tar.bz2) = 15652239 SHA256 (postgresql/pg-923-icu-2014-02-10.diff.gz) = c7ca70433c819cea5fef0a9448da236b175d910177b18a8cb2ed9012a949aeb1 SIZE (postgresql/pg-923-icu-2014-02-10.diff.gz) = 4440 diff --git a/databases/postgresql91-server/files/patch-contrib-uuid b/databases/postgresql91-server/files/patch-contrib-uuid new file mode 100644 index 000000000000..bead2c6afd77 --- /dev/null +++ b/databases/postgresql91-server/files/patch-contrib-uuid @@ -0,0 +1,393 @@ +--- contrib/uuid-ossp/Makefile.orig 2014-03-17 20:36:46.000000000 +0100 ++++ contrib/uuid-ossp/Makefile 2014-03-19 21:19:28.000000000 +0100 +@@ -1,12 +1,14 @@ + # contrib/uuid-ossp/Makefile ++# modified using http://pgfoundry.org/projects/uuid-freebsd/ ++# to actually not use ossp, since uuid methods are all ++# built in into libc in FreeBSD /girgen@ + + MODULE_big = uuid-ossp + OBJS = uuid-ossp.o + + EXTENSION = uuid-ossp + DATA = uuid-ossp--1.0.sql uuid-ossp--unpackaged--1.0.sql +- +-SHLIB_LINK += $(OSSP_UUID_LIBS) ++SHLIB_LINK = -lmd + + ifdef USE_PGXS + PG_CONFIG = pg_config +--- contrib/uuid-ossp/uuid-ossp--1.0.sql.orig 2014-03-17 20:36:46.000000000 +0100 ++++ contrib/uuid-ossp/uuid-ossp--1.0.sql 2014-03-19 21:19:28.000000000 +0100 +@@ -1,5 +1,12 @@ + /* contrib/uuid-ossp/uuid-ossp--1.0.sql */ + ++-- this module is modified by girgen@ for FreeBSD using ++-- http://pgfoundry.org/projects/uuid-freebsd/ ++-- based on the work of Andrew Gierth. ++-- The name is still uuid-ossp to maintain verbatim compatibility ++-- with the original ossp based module, although the built-in libc ++-- routines are actually used instead, not ossp. ++ + -- complain if script is sourced in psql, rather than via CREATE EXTENSION + \echo Use '''CREATE EXTENSION "uuid-ossp"''' to load this file. \quit + +--- contrib/uuid-ossp/uuid-ossp.c.orig 2014-03-17 20:36:46.000000000 +0100 ++++ contrib/uuid-ossp/uuid-ossp.c 2014-03-19 21:20:56.000000000 +0100 +@@ -6,6 +6,10 @@ + * + * contrib/uuid-ossp/uuid-ossp.c + * ++ * 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,163 +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. */ + +-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; +- +- rc = uuid_export(uuid, UUID_FMT_STR, &ptr, &len); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- +- return buf; +-} +- +- +-static void +-string_to_uuid(const char *str, uuid_t *uuid) ++static Datum ++internal_uuid_create(int v, unsigned char *ns, char *ptr, int len) + { +- uuid_rc_t rc; +- +- rc = uuid_import(uuid, UUID_FMT_STR, str, UUID_LEN_STR + 1); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +-} ++ char strbuf[40]; + ++ switch (v) ++ { ++ case 0: /* constant-value uuids: nil, or namespace uuids */ ++ strlcpy(strbuf, ptr, 37); ++ break; ++ ++ 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; ++ } ++ ++ case 1: /* time/node-based uuids */ ++ { ++ uuid_t uu; ++ uint32_t status = uuid_s_ok; ++ char *str = NULL; ++ ++ uuid_create(&uu, &status); ++ ++ if (status == uuid_s_ok) ++ { ++ uuid_to_string(&uu, &str, &status); ++ if (status == uuid_s_ok) ++ { ++ strlcpy(strbuf, str, 37); ++ ++ /* 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); ++ } + +-static Datum +-special_uuid_value(const char *name) +-{ +- uuid_t *uuid; +- char *str; +- uuid_rc_t rc; +- +- rc = uuid_create(&uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- rc = uuid_load(uuid, name); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- str = uuid_to_string(uuid); +- rc = uuid_destroy(uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); ++ if (status != uuid_s_ok) ++ { ++ ereport(ERROR, ++ (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), ++ errmsg("FreeBSD uuid library failure: %d", (int) status))); ++ } ++ ++ break; ++ } ++ ++ 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]); ++ ++ 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]); ++ ++ 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; +- char *str; +- uuid_rc_t rc; +- +- rc = uuid_create(&uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- rc = uuid_make(uuid, mode, ns, name); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- str = uuid_to_string(uuid); +- rc = uuid_destroy(uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- +- 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; +- Datum result; +- uuid_rc_t rc; +- +- rc = uuid_create(&ns_uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- string_to_uuid(DatumGetCString(DirectFunctionCall1(uuid_out, UUIDPGetDatum(ns))), +- ns_uuid); +- +- result = uuid_generate_internal(mode, +- ns_uuid, +- text_to_cstring(name)); +- +- rc = uuid_destroy(ns_uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); ++ char buf[20]; + +- return result; ++ 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); + } + + +@@ -230,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); + } + + +@@ -247,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); + } diff --git a/databases/postgresql91-server/pkg-plist-contrib b/databases/postgresql91-server/pkg-plist-contrib index 79ffa385162c..a46c13ac889e 100644 --- a/databases/postgresql91-server/pkg-plist-contrib +++ b/databases/postgresql91-server/pkg-plist-contrib @@ -43,7 +43,7 @@ lib/postgresql/test_parser.so lib/postgresql/timetravel.so lib/postgresql/tsearch2.so lib/postgresql/unaccent.so -%%OSSP%%lib/postgresql/uuid-ossp.so +lib/postgresql/uuid-ossp.so %%DOCSDIR%%/README-contrib %%DOCSDIR%%/extension/README bin/pg_test_fsync @@ -164,9 +164,9 @@ share/postgresql/extension/tsearch2.control share/postgresql/extension/unaccent--1.0.sql share/postgresql/extension/unaccent--unpackaged--1.0.sql share/postgresql/extension/unaccent.control -%%OSSP%%share/postgresql/extension/uuid-ossp--1.0.sql -%%OSSP%%share/postgresql/extension/uuid-ossp--unpackaged--1.0.sql -%%OSSP%%share/postgresql/extension/uuid-ossp.control +share/postgresql/extension/uuid-ossp--1.0.sql +share/postgresql/extension/uuid-ossp--unpackaged--1.0.sql +share/postgresql/extension/uuid-ossp.control share/postgresql/extension/xml2--1.0.sql share/postgresql/extension/xml2--unpackaged--1.0.sql share/postgresql/extension/xml2.control diff --git a/databases/postgresql92-contrib/Makefile b/databases/postgresql92-contrib/Makefile index 08fd1810b216..7c947dca17f6 100644 --- a/databases/postgresql92-contrib/Makefile +++ b/databases/postgresql92-contrib/Makefile @@ -22,13 +22,9 @@ INSTALL_DIRS= contrib SLAVE_ONLY= yes COMPONENT= -contrib -CONFIGURE_ARGS+=--with-libxslt --with-libxml --with-openssl +CONFIGURE_ARGS+=--with-libxslt --with-libxml --with-ossp-uuid --with-openssl LDFLAGS+= ${PTHREAD_LIBS} -L${PREFIX}/lib -OPTIONS_DEFINE= OSSP_UUID -OSSP_UUID_DESC= Enable / disable ossp-uuid support -OPTIONS_DEFAULT= OSSP_UUID - post-install: @- ${INSTALL_DATA} ${WRKSRC}/contrib/README ${STAGEDIR}${DOCSDIR}/extension/README diff --git a/databases/postgresql92-server/Makefile b/databases/postgresql92-server/Makefile index 4e3998297633..e224e662008e 100644 --- a/databases/postgresql92-server/Makefile +++ b/databases/postgresql92-server/Makefile @@ -2,7 +2,7 @@ # $FreeBSD$ PORTNAME?= postgresql -DISTVERSION?= 9.2.7 +DISTVERSION?= 9.2.8 PORTREVISION?= 0 CATEGORIES?= databases MASTER_SITES= PGSQL diff --git a/databases/postgresql92-server/distinfo b/databases/postgresql92-server/distinfo index 000477310294..c587ffb60213 100644 --- a/databases/postgresql92-server/distinfo +++ b/databases/postgresql92-server/distinfo @@ -1,4 +1,4 @@ -SHA256 (postgresql/postgresql-9.2.7.tar.bz2) = 83c042c3f61c69b176d3e4344e59104f844bc8b8628dad2bb9022a64cf5afe86 -SIZE (postgresql/postgresql-9.2.7.tar.bz2) = 16248445 +SHA256 (postgresql/postgresql-9.2.8.tar.bz2) = 568ba482340219097475cce9ab744766889692ee7c9df886563e8292d66ed87c +SIZE (postgresql/postgresql-9.2.8.tar.bz2) = 16665845 SHA256 (postgresql/pg-923-icu-2014-02-10.diff.gz) = c7ca70433c819cea5fef0a9448da236b175d910177b18a8cb2ed9012a949aeb1 SIZE (postgresql/pg-923-icu-2014-02-10.diff.gz) = 4440 diff --git a/databases/postgresql92-server/files/patch-contrib-uuid b/databases/postgresql92-server/files/patch-contrib-uuid new file mode 100644 index 000000000000..bead2c6afd77 --- /dev/null +++ b/databases/postgresql92-server/files/patch-contrib-uuid @@ -0,0 +1,393 @@ +--- contrib/uuid-ossp/Makefile.orig 2014-03-17 20:36:46.000000000 +0100 ++++ contrib/uuid-ossp/Makefile 2014-03-19 21:19:28.000000000 +0100 +@@ -1,12 +1,14 @@ + # contrib/uuid-ossp/Makefile ++# modified using http://pgfoundry.org/projects/uuid-freebsd/ ++# to actually not use ossp, since uuid methods are all ++# built in into libc in FreeBSD /girgen@ + + MODULE_big = uuid-ossp + OBJS = uuid-ossp.o + + EXTENSION = uuid-ossp + DATA = uuid-ossp--1.0.sql uuid-ossp--unpackaged--1.0.sql +- +-SHLIB_LINK += $(OSSP_UUID_LIBS) ++SHLIB_LINK = -lmd + + ifdef USE_PGXS + PG_CONFIG = pg_config +--- contrib/uuid-ossp/uuid-ossp--1.0.sql.orig 2014-03-17 20:36:46.000000000 +0100 ++++ contrib/uuid-ossp/uuid-ossp--1.0.sql 2014-03-19 21:19:28.000000000 +0100 +@@ -1,5 +1,12 @@ + /* contrib/uuid-ossp/uuid-ossp--1.0.sql */ + ++-- this module is modified by girgen@ for FreeBSD using ++-- http://pgfoundry.org/projects/uuid-freebsd/ ++-- based on the work of Andrew Gierth. ++-- The name is still uuid-ossp to maintain verbatim compatibility ++-- with the original ossp based module, although the built-in libc ++-- routines are actually used instead, not ossp. ++ + -- complain if script is sourced in psql, rather than via CREATE EXTENSION + \echo Use '''CREATE EXTENSION "uuid-ossp"''' to load this file. \quit + +--- contrib/uuid-ossp/uuid-ossp.c.orig 2014-03-17 20:36:46.000000000 +0100 ++++ contrib/uuid-ossp/uuid-ossp.c 2014-03-19 21:20:56.000000000 +0100 +@@ -6,6 +6,10 @@ + * + * contrib/uuid-ossp/uuid-ossp.c + * ++ * 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,163 +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. */ + +-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; +- +- rc = uuid_export(uuid, UUID_FMT_STR, &ptr, &len); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- +- return buf; +-} +- +- +-static void +-string_to_uuid(const char *str, uuid_t *uuid) ++static Datum ++internal_uuid_create(int v, unsigned char *ns, char *ptr, int len) + { +- uuid_rc_t rc; +- +- rc = uuid_import(uuid, UUID_FMT_STR, str, UUID_LEN_STR + 1); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +-} ++ char strbuf[40]; + ++ switch (v) ++ { ++ case 0: /* constant-value uuids: nil, or namespace uuids */ ++ strlcpy(strbuf, ptr, 37); ++ break; ++ ++ 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; ++ } ++ ++ case 1: /* time/node-based uuids */ ++ { ++ uuid_t uu; ++ uint32_t status = uuid_s_ok; ++ char *str = NULL; ++ ++ uuid_create(&uu, &status); ++ ++ if (status == uuid_s_ok) ++ { ++ uuid_to_string(&uu, &str, &status); ++ if (status == uuid_s_ok) ++ { ++ strlcpy(strbuf, str, 37); ++ ++ /* 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); ++ } + +-static Datum +-special_uuid_value(const char *name) +-{ +- uuid_t *uuid; +- char *str; +- uuid_rc_t rc; +- +- rc = uuid_create(&uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- rc = uuid_load(uuid, name); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- str = uuid_to_string(uuid); +- rc = uuid_destroy(uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); ++ if (status != uuid_s_ok) ++ { ++ ereport(ERROR, ++ (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), ++ errmsg("FreeBSD uuid library failure: %d", (int) status))); ++ } ++ ++ break; ++ } ++ ++ 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]); ++ ++ 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]); ++ ++ 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; +- char *str; +- uuid_rc_t rc; +- +- rc = uuid_create(&uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- rc = uuid_make(uuid, mode, ns, name); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- str = uuid_to_string(uuid); +- rc = uuid_destroy(uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- +- 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; +- Datum result; +- uuid_rc_t rc; +- +- rc = uuid_create(&ns_uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- string_to_uuid(DatumGetCString(DirectFunctionCall1(uuid_out, UUIDPGetDatum(ns))), +- ns_uuid); +- +- result = uuid_generate_internal(mode, +- ns_uuid, +- text_to_cstring(name)); +- +- rc = uuid_destroy(ns_uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); ++ char buf[20]; + +- return result; ++ 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); + } + + +@@ -230,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); + } + + +@@ -247,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); + } diff --git a/databases/postgresql92-server/pkg-plist-contrib b/databases/postgresql92-server/pkg-plist-contrib index 9d1186bf7ef3..dfc3cc414ee4 100644 --- a/databases/postgresql92-server/pkg-plist-contrib +++ b/databases/postgresql92-server/pkg-plist-contrib @@ -45,7 +45,7 @@ lib/postgresql/test_parser.so lib/postgresql/timetravel.so lib/postgresql/tsearch2.so lib/postgresql/unaccent.so -%%OSSP%%lib/postgresql/uuid-ossp.so +lib/postgresql/uuid-ossp.so %%DOCSDIR%%/README-contrib %%DOCSDIR%%/extension/README bin/pg_test_fsync @@ -170,9 +170,9 @@ share/postgresql/extension/tsearch2.control share/postgresql/extension/unaccent--1.0.sql share/postgresql/extension/unaccent--unpackaged--1.0.sql share/postgresql/extension/unaccent.control -%%OSSP%%share/postgresql/extension/uuid-ossp--1.0.sql -%%OSSP%%share/postgresql/extension/uuid-ossp--unpackaged--1.0.sql -%%OSSP%%share/postgresql/extension/uuid-ossp.control +share/postgresql/extension/uuid-ossp--1.0.sql +share/postgresql/extension/uuid-ossp--unpackaged--1.0.sql +share/postgresql/extension/uuid-ossp.control share/postgresql/extension/xml2--1.0.sql share/postgresql/extension/xml2--unpackaged--1.0.sql share/postgresql/extension/xml2.control diff --git a/databases/postgresql93-contrib/Makefile b/databases/postgresql93-contrib/Makefile index 688cd0d2f75b..a02a6e53125d 100644 --- a/databases/postgresql93-contrib/Makefile +++ b/databases/postgresql93-contrib/Makefile @@ -23,13 +23,9 @@ INSTALL_DIRS= contrib SLAVE_ONLY= yes COMPONENT= -contrib -CONFIGURE_ARGS+=--with-libxslt --with-libxml --with-openssl --disable-nls +CONFIGURE_ARGS+=--with-libxslt --with-libxml --with-openssl --with-ossp-uuid --disable-nls LDFLAGS+= ${PTHREAD_LIBS} -L${PREFIX}/lib -OPTIONS_DEFINE= OSSP_UUID -OSSP_UUID_DESC= Enable / disable ossp-uuid support -OPTIONS_DEFAULT= OSSP_UUID - post-install: @- ${INSTALL_DATA} ${WRKSRC}/contrib/README ${STAGEDIR}${DOCSDIR}/extension/README diff --git a/databases/postgresql93-server/Makefile b/databases/postgresql93-server/Makefile index 3789f88833dc..432172bb934c 100644 --- a/databases/postgresql93-server/Makefile +++ b/databases/postgresql93-server/Makefile @@ -1,7 +1,7 @@ # Created by: Marc G. Fournier <scrappy@FreeBSD.org> # $FreeBSD$ -DISTVERSION?= 9.3.3 +DISTVERSION?= 9.3.4 PORTREVISION?= 0 PKGNAMESUFFIX?= ${DISTVERSION:R:S/.//}${COMPONENT} diff --git a/databases/postgresql93-server/distinfo b/databases/postgresql93-server/distinfo index 7788796a4919..90361f6134c2 100644 --- a/databases/postgresql93-server/distinfo +++ b/databases/postgresql93-server/distinfo @@ -1,4 +1,4 @@ -SHA256 (postgresql/postgresql-9.3.3.tar.bz2) = e925d8abe7157bd8bece6b7c0dd0c343d87a2b4336f85f4681ce596af99c3879 -SIZE (postgresql/postgresql-9.3.3.tar.bz2) = 16665845 +SHA256 (postgresql/postgresql-9.3.4.tar.bz2) = 9ee819574dfc8798a448dc23a99510d2d8924c2f8b49f8228cd77e4efc8a6621 +SIZE (postgresql/postgresql-9.3.4.tar.bz2) = 16691447 SHA256 (postgresql/pg-923-icu-2014-02-10.diff.gz) = c7ca70433c819cea5fef0a9448da236b175d910177b18a8cb2ed9012a949aeb1 SIZE (postgresql/pg-923-icu-2014-02-10.diff.gz) = 4440 diff --git a/databases/postgresql93-server/files/patch-contrib-uuid b/databases/postgresql93-server/files/patch-contrib-uuid new file mode 100644 index 000000000000..7cbcb6f7a81e --- /dev/null +++ b/databases/postgresql93-server/files/patch-contrib-uuid @@ -0,0 +1,399 @@ +--- contrib/uuid-ossp/Makefile.orig 2014-03-17 20:35:47.000000000 +0100 ++++ contrib/uuid-ossp/Makefile 2014-03-19 20:51:44.000000000 +0100 +@@ -1,12 +1,14 @@ + # contrib/uuid-ossp/Makefile ++# modified using http://pgfoundry.org/projects/uuid-freebsd/ ++# to actually not use ossp, since uuid methods are all ++# built in into libc in FreeBSD /girgen@ + + MODULE_big = uuid-ossp + OBJS = uuid-ossp.o + + EXTENSION = uuid-ossp + DATA = uuid-ossp--1.0.sql uuid-ossp--unpackaged--1.0.sql +- +-SHLIB_LINK += $(OSSP_UUID_LIBS) ++SHLIB_LINK = -lmd + + ifdef USE_PGXS + PG_CONFIG = pg_config +--- contrib/uuid-ossp/uuid-ossp--1.0.sql.orig 2014-03-17 20:35:47.000000000 +0100 ++++ contrib/uuid-ossp/uuid-ossp--1.0.sql 2014-03-19 20:51:44.000000000 +0100 +@@ -1,5 +1,12 @@ + /* contrib/uuid-ossp/uuid-ossp--1.0.sql */ + ++-- this module is modified by girgen@ for FreeBSD using ++-- http://pgfoundry.org/projects/uuid-freebsd/ ++-- based on the work of Andrew Gierth. ++-- The name is still uuid-ossp to maintain verbatim compatibility ++-- with the original ossp based module, although the built-in libc ++-- routines are actually used instead, not ossp. ++ + -- complain if script is sourced in psql, rather than via CREATE EXTENSION + \echo Use '''CREATE EXTENSION "uuid-ossp"''' to load this file. \quit + +--- contrib/uuid-ossp/uuid-ossp.c.orig 2014-03-17 20:35:47.000000000 +0100 ++++ contrib/uuid-ossp/uuid-ossp.c 2014-03-19 21:12:11.000000000 +0100 +@@ -1,11 +1,15 @@ + /*------------------------------------------------------------------------- + * +- * UUID generation functions using the OSSP UUID library ++ * UUID generation functions for FreeBSD + * + * Copyright (c) 2007-2013, PostgreSQL Global Development Group + * + * contrib/uuid-ossp/uuid-ossp.c + * ++ * 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,163 +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. */ + +-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; +- +- rc = uuid_export(uuid, UUID_FMT_STR, &ptr, &len); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- +- return buf; +-} +- +- +-static void +-string_to_uuid(const char *str, uuid_t *uuid) ++static Datum ++internal_uuid_create(int v, unsigned char *ns, char *ptr, int len) + { +- uuid_rc_t rc; +- +- rc = uuid_import(uuid, UUID_FMT_STR, str, UUID_LEN_STR + 1); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +-} ++ char strbuf[40]; + ++ switch (v) ++ { ++ case 0: /* constant-value uuids: nil, or namespace uuids */ ++ strlcpy(strbuf, ptr, 37); ++ break; ++ ++ 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; ++ } ++ ++ case 1: /* time/node-based uuids */ ++ { ++ uuid_t uu; ++ uint32_t status = uuid_s_ok; ++ char *str = NULL; ++ ++ uuid_create(&uu, &status); ++ ++ if (status == uuid_s_ok) ++ { ++ uuid_to_string(&uu, &str, &status); ++ if (status == uuid_s_ok) ++ { ++ strlcpy(strbuf, str, 37); ++ ++ /* 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); ++ } + +-static Datum +-special_uuid_value(const char *name) +-{ +- uuid_t *uuid; +- char *str; +- uuid_rc_t rc; +- +- rc = uuid_create(&uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- rc = uuid_load(uuid, name); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- str = uuid_to_string(uuid); +- rc = uuid_destroy(uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); ++ if (status != uuid_s_ok) ++ { ++ ereport(ERROR, ++ (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), ++ errmsg("FreeBSD uuid library failure: %d", (int) status))); ++ } ++ ++ break; ++ } ++ ++ 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]); ++ ++ 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]); ++ ++ 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; +- char *str; +- uuid_rc_t rc; +- +- rc = uuid_create(&uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- rc = uuid_make(uuid, mode, ns, name); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- str = uuid_to_string(uuid); +- rc = uuid_destroy(uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- +- 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; +- Datum result; +- uuid_rc_t rc; +- +- rc = uuid_create(&ns_uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); +- string_to_uuid(DatumGetCString(DirectFunctionCall1(uuid_out, UUIDPGetDatum(ns))), +- ns_uuid); +- +- result = uuid_generate_internal(mode, +- ns_uuid, +- text_to_cstring(name)); +- +- rc = uuid_destroy(ns_uuid); +- if (rc != UUID_RC_OK) +- pguuid_complain(rc); ++ char buf[20]; + +- return result; ++ 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); + } + + +@@ -230,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); + } + + +@@ -247,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); + } diff --git a/databases/postgresql93-server/pkg-plist-contrib b/databases/postgresql93-server/pkg-plist-contrib index ef93ceb17d93..f7651c8e36ff 100644 --- a/databases/postgresql93-server/pkg-plist-contrib +++ b/databases/postgresql93-server/pkg-plist-contrib @@ -48,7 +48,7 @@ lib/postgresql/timetravel.so lib/postgresql/tsearch2.so lib/postgresql/unaccent.so lib/postgresql/worker_spi.so -%%OSSP%%lib/postgresql/uuid-ossp.so +lib/postgresql/uuid-ossp.so %%DOCSDIR%%/README-contrib %%DOCSDIR%%/extension/README bin/pg_test_fsync @@ -181,9 +181,9 @@ share/postgresql/extension/tsearch2.control share/postgresql/extension/unaccent--1.0.sql share/postgresql/extension/unaccent--unpackaged--1.0.sql share/postgresql/extension/unaccent.control -%%OSSP%%share/postgresql/extension/uuid-ossp--1.0.sql -%%OSSP%%share/postgresql/extension/uuid-ossp--unpackaged--1.0.sql -%%OSSP%%share/postgresql/extension/uuid-ossp.control +share/postgresql/extension/uuid-ossp--1.0.sql +share/postgresql/extension/uuid-ossp--unpackaged--1.0.sql +share/postgresql/extension/uuid-ossp.control share/postgresql/extension/xml2--1.0.sql share/postgresql/extension/xml2--unpackaged--1.0.sql share/postgresql/extension/xml2.control |