aboutsummaryrefslogtreecommitdiff
path: root/databases/postgresql93-server
diff options
context:
space:
mode:
authorPalle Girgensohn <girgen@FreeBSD.org>2014-03-20 13:43:15 +0000
committerPalle Girgensohn <girgen@FreeBSD.org>2014-03-20 13:43:15 +0000
commit4082f0b6dba043fe86d64e243da1aa668a9d4622 (patch)
tree0ec8ad8f7ba3fb1bc1116cbdd9b0b39202bfe63a /databases/postgresql93-server
parent5abd1787feece3fe8207e8ecba7e46efdca612f8 (diff)
downloadports-4082f0b6dba043fe86d64e243da1aa668a9d4622.tar.gz
ports-4082f0b6dba043fe86d64e243da1aa668a9d4622.zip
Notes
Diffstat (limited to 'databases/postgresql93-server')
-rw-r--r--databases/postgresql93-server/Makefile2
-rw-r--r--databases/postgresql93-server/distinfo4
-rw-r--r--databases/postgresql93-server/files/patch-contrib-uuid399
-rw-r--r--databases/postgresql93-server/pkg-plist-contrib8
4 files changed, 406 insertions, 7 deletions
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