diff -urN Portfile.orig Portfile
--- Portfile.orig 2012-03-05 12:57:27.000000000 +0100
+++ Portfile 2012-03-05 13:29:30.000000000 +0100
@@ -5,7 +5,7 @@
name ice-cpp
version 3.4.2
-revision 1
+revision 2
set branch [join [lrange [split ${version} .] 0 1] .]
categories devel
maintainers blair
@@ -40,7 +40,85 @@
sha1 8c84d6e3b227f583d05e08251e07047e6c3a6b42 \
rmd160 7ce680a4eb5fa9d0bb6f8b8910e267dfc2373d75
patchfiles patch-ice.cpp.config.Make.rules.diff \
- patch-ice.cpp.config.Make.rules.Darwin.diff
+ patch-ice.cpp.config.Make.rules.Darwin.diff \
+ patch-ice.cpp.allTests.py.diff \
+ patch-ice.cpp.demo.IceGrid.secure.README.diff \
+ patch-ice.cpp.demo.IceGrid.secure.application.xml.diff \
+ patch-ice.cpp.demo.IceGrid.secure.config.admin.diff \
+ patch-ice.cpp.demo.IceGrid.secure.config.client.diff \
+ patch-ice.cpp.demo.IceGrid.secure.config.master.diff \
+ patch-ice.cpp.demo.IceGrid.secure.config.node.diff \
+ patch-ice.cpp.demo.IceGrid.secure.config.registry.diff \
+ patch-ice.cpp.demo.IceGrid.secure.config.slave.diff \
+ patch-ice.cpp.demo.IceGrid.secure.makecerts.py.diff \
+ patch-ice.cpp.include.Freeze.Map.h.diff \
+ patch-ice.cpp.include.Ice.Buffer.h.diff \
+ patch-ice.cpp.include.Ice.ConnectionIF.h.diff \
+ patch-ice.cpp.include.Ice.IconvStringConverter.h.diff \
+ patch-ice.cpp.include.Ice.IncomingAsyncF.h.diff \
+ patch-ice.cpp.include.Ice.LocalObjectF.h.diff \
+ patch-ice.cpp.include.Ice.ObjectF.h.diff \
+ patch-ice.cpp.include.Ice.OutgoingAsyncF.h.diff \
+ patch-ice.cpp.include.Ice.Proxy.h.diff \
+ patch-ice.cpp.include.Ice.ProxyF.h.diff \
+ patch-ice.cpp.include.Ice.Stream.h.diff \
+ patch-ice.cpp.include.Ice.StreamF.h.diff \
+ patch-ice.cpp.include.IceUtil.Mutex.h.diff \
+ patch-ice.cpp.src.Freeze.MapDb.cpp.diff \
+ patch-ice.cpp.src.Freeze.MapI.cpp.diff \
+ patch-ice.cpp.src.Freeze.SharedDbEnv.cpp.diff \
+ patch-ice.cpp.src.Glacier2.Blobject.cpp.diff \
+ patch-ice.cpp.src.Glacier2.Blobject.h.diff \
+ patch-ice.cpp.src.Glacier2.RequestQueue.cpp.diff \
+ patch-ice.cpp.src.Glacier2.RequestQueue.h.diff \
+ patch-ice.cpp.src.Glacier2.RouterI.cpp.diff \
+ patch-ice.cpp.src.Ice.ConnectionI.cpp.diff \
+ patch-ice.cpp.src.Ice.IncomingAsync.cpp.diff \
+ patch-ice.cpp.src.Ice.LocalObject.cpp.diff \
+ patch-ice.cpp.src.Ice.Network.cpp.diff \
+ patch-ice.cpp.src.Ice.Object.cpp.diff \
+ patch-ice.cpp.src.Ice.OutgoingAsync.cpp.diff \
+ patch-ice.cpp.src.Ice.PropertyNames.cpp.diff \
+ patch-ice.cpp.src.Ice.PropertyNames.h.diff \
+ patch-ice.cpp.src.Ice.ProxyFactory.cpp.diff \
+ patch-ice.cpp.src.Ice.Service.cpp.diff \
+ patch-ice.cpp.src.Ice.Stream.cpp.diff \
+ patch-ice.cpp.src.IceGrid.AdminCallbackRouter.cpp.diff \
+ patch-ice.cpp.src.IceGrid.DescriptorHelper.cpp.diff \
+ patch-ice.cpp.src.IceGrid.Internal.ice.diff \
+ patch-ice.cpp.src.IceGrid.InternalRegistryI.cpp.diff \
+ patch-ice.cpp.src.IceGrid.InternalRegistryI.h.diff \
+ patch-ice.cpp.src.IceGrid.NodeSessionManager.cpp.diff \
+ patch-ice.cpp.src.IceGrid.ReplicaCache.cpp.diff \
+ patch-ice.cpp.src.IceGrid.ReplicaSessionManager.cpp.diff \
+ patch-ice.cpp.src.IceGrid.SessionI.h.diff \
+ patch-ice.cpp.src.IceSSL.Instance.cpp.diff \
+ patch-ice.cpp.src.IceSSL.InstanceF.h.diff \
+ patch-ice.cpp.src.IceSSL.TrustManager.cpp.diff \
+ patch-ice.cpp.src.IceSSL.TrustManagerF.h.diff \
+ patch-ice.cpp.src.IceSSL.Util.cpp.diff \
+ patch-ice.cpp.src.IceSSL.UtilF.h.diff \
+ patch-ice.cpp.src.IceStorm.NodeI.cpp.diff \
+ patch-ice.cpp.src.IceUtil.Cond.cpp.diff \
+ patch-ice.cpp.src.IceUtil.CountDownLatch.cpp.diff \
+ patch-ice.cpp.src.IceUtil.CtrlCHandler.cpp.diff \
+ patch-ice.cpp.src.IceUtil.FileUtil.cpp.diff \
+ patch-ice.cpp.src.IceUtil.RecMutex.cpp.diff \
+ patch-ice.cpp.src.Slice.CPlusPlusUtil.cpp.diff \
+ patch-ice.cpp.src.Slice.FileTracker.cpp.diff \
+ patch-ice.cpp.src.slice2cpp.Gen.cpp.diff \
+ patch-ice.cpp.src.slice2cs.Gen.cpp.diff \
+ patch-ice.cpp.src.slice2java.Gen.cpp.diff \
+ patch-ice.cpp.test.Glacier2.ssl.Server.cpp.diff \
+ patch-ice.cpp.test.Ice.background.EndpointI.h.diff \
+ patch-ice.cpp.test.Ice.custom.AllTests.cpp.diff \
+ patch-ice.cpp.test.Ice.info.AllTests.cpp.diff \
+ patch-ice.cpp.test.Ice.properties.run.py.diff \
+ patch-ice.cpp.test.IceUtil.unicode.Client.cpp.diff \
+ patch-ice.cpp.test.Slice.keyword.Client.cpp.diff \
+ patch-ice.cpp.test.include.TestCommon.h.diff \
+ patch-ice.scripts.TestUtil.py.diff
+
patch.pre_args -p1
platforms darwin
@@ -85,12 +163,6 @@
use_configure no
-# Work around invalid C++ code by compiling with g++ instead of clang. See
-# http://www.zeroc.com/forums/bug-reports/4965-slice2cpp-output-does-not-compile-standards-conformant-compiler.html
-if {${configure.compiler} == "clang"} {
- configure.compiler llvm-gcc-4.2
-}
-
build {
set cmd "cd ${build.dir} && make prefix='${prefix}' embedded_runpath_prefix='${prefix}' CC='${configure.cc}' CXX='${configure.cxx}' OPTIMIZE='yes' BZIP2_HOME='${prefix}' DB_HOME='${prefix}' EXPAT_HOME='${prefix}' OPENSSL_HOME='${prefix}' READLINE_HOME='${prefix}' USE_READLINE=yes MCPP_HOME='${prefix}' LDPLATFORMFLAGS= all && cd doc && make"
ui_debug ${cmd}
diff -urN files/patch-ice.cpp.allTests.py.diff.orig files/patch-ice.cpp.allTests.py.diff
--- files/patch-ice.cpp.allTests.py.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.allTests.py.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,30 @@
+--- Ice-3.4.2.orig/cpp/allTests.py 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/allTests.py 2012-03-04 20:14:52.000000000 +0100
+@@ -25,6 +25,7 @@
+ # List of all basic tests.
+ #
+ tests = [
++
+ ("IceUtil/condvar", ["once", "win32only"]),
+ ("IceUtil/thread", ["once"]),
+ ("IceUtil/unicode", ["once"]),
+@@ -62,7 +63,7 @@
+ ("Ice/servantLocator", ["core"]),
+ ("Ice/interceptor", ["core"]),
+ ("Ice/stringConverter", ["core"]),
+- ("Ice/udp", ["core"]),
++ ("Ice/udp", ["core", "nofreebsdjail"]),
+ ("Ice/defaultServant", ["core"]),
+ ("Ice/defaultValue", ["core"]),
+ ("Ice/invoke", ["core", "novc6"]),
+@@ -106,8 +107,8 @@
+ #
+ if TestUtil.isWin32() or os.getuid() == 0:
+ tests += [
+- ("IceUtil/priority", ["core", "nodarwin"]),
+- ("Ice/threadPoolPriority", ["core", "nodarwin"])
++ ("IceUtil/priority", ["core", "nodarwin", "nofreebsd"]),
++ ("Ice/threadPoolPriority", ["core", "nodarwin", "nofreebsd"])
+ ]
+
+ if __name__ == "__main__":
diff -urN files/patch-ice.cpp.demo.IceGrid.secure.README.diff.orig files/patch-ice.cpp.demo.IceGrid.secure.README.diff
--- files/patch-ice.cpp.demo.IceGrid.secure.README.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.demo.IceGrid.secure.README.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,15 @@
+--- Ice-3.4.2.orig/cpp/demo/IceGrid/secure/README 2011-06-15 21:44:00.000000000 +0200
++++ Ice-3.4.2/cpp/demo/IceGrid/secure/README 2012-03-04 19:55:44.000000000 +0100
+@@ -31,9 +31,10 @@
+ the filesystem permissions to restrict access to the certificate.
+
+ Once the certificates are generated, you can start the IceGrid
+-registry, node, and Glacier2 router:
++registries, node, and Glacier2 router:
+
+-$ icegridregistry --Ice.Config=config.registry
++$ icegridregistry --Ice.Config=config.master
++$ icegridregistry --Ice.Config=config.slave
+ $ icegridnode --Ice.Config=config.node
+ $ glacier2router --Ice.Config=config.glacier2
+
diff -urN files/patch-ice.cpp.demo.IceGrid.secure.application.xml.diff.orig files/patch-ice.cpp.demo.IceGrid.secure.application.xml.diff
--- files/patch-ice.cpp.demo.IceGrid.secure.application.xml.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.demo.IceGrid.secure.application.xml.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,13 @@
+--- Ice-3.4.2.orig/cpp/demo/IceGrid/secure/application.xml 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/demo/IceGrid/secure/application.xml 2012-03-04 19:55:44.000000000 +0100
+@@ -20,8 +20,8 @@
+
+
+
+-
+-
++
++
+
+
+
diff -urN files/patch-ice.cpp.demo.IceGrid.secure.config.admin.diff.orig files/patch-ice.cpp.demo.IceGrid.secure.config.admin.diff
--- files/patch-ice.cpp.demo.IceGrid.secure.config.admin.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.demo.IceGrid.secure.config.admin.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,11 @@
+--- Ice-3.4.2.orig/cpp/demo/IceGrid/secure/config.admin 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/demo/IceGrid/secure/config.admin 2012-03-04 19:55:44.000000000 +0100
+@@ -14,7 +14,7 @@
+ # SSL Configuration
+ #
+ IceSSL.DefaultDir=certs
+-IceSSL.TrustOnly.Client=CN="IceGrid Registry";CN="Glacier2"
++IceSSL.TrustOnly.Client=CN="Master";CN="Slave";CN="Glacier2"
+
+ # C++ configuration
+ Ice.Plugin.IceSSL.cpp=IceSSL:createIceSSL
diff -urN files/patch-ice.cpp.demo.IceGrid.secure.config.client.diff.orig files/patch-ice.cpp.demo.IceGrid.secure.config.client.diff
--- files/patch-ice.cpp.demo.IceGrid.secure.config.client.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.demo.IceGrid.secure.config.client.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,11 @@
+--- Ice-3.4.2.orig/cpp/demo/IceGrid/secure/config.client 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/demo/IceGrid/secure/config.client 2012-03-04 19:55:44.000000000 +0100
+@@ -1,7 +1,7 @@
+ #
+ # The IceGrid locator proxy.
+ #
+-Ice.Default.Locator=DemoIceGrid/Locator:tcp -p 4061
++Ice.Default.Locator=DemoIceGrid/Locator:tcp -p 4061:tcp -p 14061
+
+ #
+ # Trace properties.
diff -urN files/patch-ice.cpp.demo.IceGrid.secure.config.master.diff.orig files/patch-ice.cpp.demo.IceGrid.secure.config.master.diff
--- files/patch-ice.cpp.demo.IceGrid.secure.config.master.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.demo.IceGrid.secure.config.master.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,64 @@
+--- Ice-3.4.2.orig/cpp/demo/IceGrid/secure/config.master 2012-03-04 19:55:44.000000000 +0100
++++ Ice-3.4.2/cpp/demo/IceGrid/secure/config.master 2012-03-04 19:55:44.000000000 +0100
+@@ -0,0 +1,61 @@
++#
++# The IceGrid instance name.
++#
++IceGrid.InstanceName=DemoIceGrid
++
++#
++# IceGrid registry configuration.
++#
++IceGrid.Registry.Client.Endpoints=tcp -p 4061 -t 10000:ssl -p 4062 -t 10000
++IceGrid.Registry.Server.Endpoints=ssl -t 10000
++IceGrid.Registry.Internal.Endpoints=ssl -t 10000
++IceGrid.Registry.Data=db/master
++
++#
++# Ensure that nodes and slaves connecting to this registry have a name
++# matching the certificate CN.
++#
++IceGrid.Registry.RequireNodeCertCN=1
++IceGrid.Registry.RequireReplicaCertCN=1
++
++#
++# IceGrid admin clients must use a secure connection to connect to the
++# registry or use Glacier2.
++#
++IceGrid.Registry.AdminSessionManager.Endpoints=ssl -t 10000
++IceGrid.Registry.AdminPermissionsVerifier=DemoIceGrid/NullPermissionsVerifier
++
++#
++# IceGrid SQL configuration if using SQL database.
++#
++#Ice.Plugin.DB=IceGridSqlDB:createSqlDB
++#IceGrid.SQL.DatabaseType=QSQLITE
++#IceGrid.SQL.DatabaseName=db/master/Registry.db
++
++#
++# Trace properties.
++#
++Ice.ProgramName=Master
++IceGrid.Registry.Trace.Node=2
++IceGrid.Registry.Trace.Replica=2
++
++#
++# SSL Configuration
++#
++Ice.Plugin.IceSSL=IceSSL:createIceSSL
++IceSSL.DefaultDir=certs
++IceSSL.CertAuthFile=ca_cert.pem
++IceSSL.CertFile=master_cert.pem
++IceSSL.KeyFile=master_key.pem
++
++#
++# Don't require certificates. This is useful for admin clients that don't
++# use certificate but still need to establish a secure connection for the
++# username/password authentication
++#
++IceSSL.VerifyPeer=1
++
++IceSSL.TrustOnly.Client=CN="Master";CN="Slave";CN="Node";CN="Glacier2"
++IceSSL.TrustOnly.Server.IceGrid.Registry.Server=CN="Server"
++IceSSL.TrustOnly.Server.IceGrid.Registry.Internal=CN="Node";CN="Master";CN="Slave"
++IceSSL.TrustOnly.Server.IceGrid.Registry.AdminSessionManager=CN="Glacier2"
diff -urN files/patch-ice.cpp.demo.IceGrid.secure.config.node.diff.orig files/patch-ice.cpp.demo.IceGrid.secure.config.node.diff
--- files/patch-ice.cpp.demo.IceGrid.secure.config.node.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.demo.IceGrid.secure.config.node.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,19 @@
+--- Ice-3.4.2.orig/cpp/demo/IceGrid/secure/config.node 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/demo/IceGrid/secure/config.node 2012-03-04 19:55:44.000000000 +0100
+@@ -1,7 +1,7 @@
+ #
+ # The IceGrid locator proxy.
+ #
+-Ice.Default.Locator=DemoIceGrid/Locator:ssl -p 4062 -t 10000
++Ice.Default.Locator=DemoIceGrid/Locator:ssl -p 4062 -t 10000:ssl -p 14062 -t 10000
+
+ #
+ # IceGrid node configuration.
+@@ -26,5 +26,5 @@
+ IceSSL.CertFile=node_cert.pem
+ IceSSL.KeyFile=node_key.pem
+
+-IceSSL.TrustOnly.Client=CN="Server";CN="IceGrid Registry"
+-IceSSL.TrustOnly.Server=CN="IceGrid Registry"
++IceSSL.TrustOnly.Client=CN="Server";CN="Master";CN="Slave"
++IceSSL.TrustOnly.Server=CN="Master";CN="Slave"
diff -urN files/patch-ice.cpp.demo.IceGrid.secure.config.registry.diff.orig files/patch-ice.cpp.demo.IceGrid.secure.config.registry.diff
--- files/patch-ice.cpp.demo.IceGrid.secure.config.registry.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.demo.IceGrid.secure.config.registry.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,57 @@
+--- Ice-3.4.2.orig/cpp/demo/IceGrid/secure/config.registry 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/demo/IceGrid/secure/config.registry 2012-03-04 19:55:44.000000000 +0100
+@@ -1,54 +0,0 @@
+-#
+-# The IceGrid instance name.
+-#
+-IceGrid.InstanceName=DemoIceGrid
+-
+-#
+-# IceGrid registry configuration.
+-#
+-IceGrid.Registry.Client.Endpoints=tcp -p 4061 -t 10000:ssl -p 4062 -t 10000
+-IceGrid.Registry.Server.Endpoints=ssl -t 10000
+-IceGrid.Registry.Internal.Endpoints=ssl -t 10000
+-IceGrid.Registry.Data=db/registry
+-
+-#
+-# IceGrid admin clients must use a secure connection to connect to the
+-# registry or use Glacier2.
+-#
+-IceGrid.Registry.AdminSessionManager.Endpoints=ssl -t 10000
+-IceGrid.Registry.AdminPermissionsVerifier=DemoIceGrid/NullPermissionsVerifier
+-
+-#
+-# IceGrid SQL configuration if using SQL database.
+-#
+-#Ice.Plugin.DB=IceGridSqlDB:createSqlDB
+-#IceGrid.SQL.DatabaseType=QSQLITE
+-#IceGrid.SQL.DatabaseName=db/registry/Registry.db
+-
+-#
+-# Trace properties.
+-#
+-Ice.ProgramName=Registry
+-IceGrid.Registry.Trace.Node=2
+-IceGrid.Registry.Trace.Replica=2
+-
+-#
+-# SSL Configuration
+-#
+-Ice.Plugin.IceSSL=IceSSL:createIceSSL
+-IceSSL.DefaultDir=certs
+-IceSSL.CertAuthFile=ca_cert.pem
+-IceSSL.CertFile=registry_cert.pem
+-IceSSL.KeyFile=registry_key.pem
+-
+-#
+-# Don't require certificates. This is useful for admin clients that don't
+-# use certificate but still need to establish a secure connection for the
+-# username/password authentication
+-#
+-IceSSL.VerifyPeer=1
+-
+-IceSSL.TrustOnly.Client=CN="IceGrid Registry";CN="IceGrid Node";CN="Glacier2"
+-IceSSL.TrustOnly.Server.IceGrid.Registry.Server=CN="Server"
+-IceSSL.TrustOnly.Server.IceGrid.Registry.Internal=CN="IceGrid Node";CN="IceGrid Registry"
+-IceSSL.TrustOnly.Server.IceGrid.Registry.AdminSessionManager=CN="Glacier2"
diff -urN files/patch-ice.cpp.demo.IceGrid.secure.config.slave.diff.orig files/patch-ice.cpp.demo.IceGrid.secure.config.slave.diff
--- files/patch-ice.cpp.demo.IceGrid.secure.config.slave.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.demo.IceGrid.secure.config.slave.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,69 @@
+--- Ice-3.4.2.orig/cpp/demo/IceGrid/secure/config.slave 2012-03-04 19:55:44.000000000 +0100
++++ Ice-3.4.2/cpp/demo/IceGrid/secure/config.slave 2012-03-04 19:55:44.000000000 +0100
+@@ -0,0 +1,66 @@
++#
++# The IceGrid locator proxy.
++#
++Ice.Default.Locator=DemoIceGrid/Locator:ssl -p 4062 -t 10000
++
++#
++# The IceGrid instance name.
++#
++IceGrid.InstanceName=DemoIceGrid
++
++#
++# IceGrid registry configuration.
++#
++IceGrid.Registry.Client.Endpoints=tcp -p 14061 -t 10000:ssl -p 14062 -t 10000
++IceGrid.Registry.Server.Endpoints=ssl -t 10000
++IceGrid.Registry.Internal.Endpoints=ssl -t 10000
++IceGrid.Registry.Data=db/slave
++IceGrid.Registry.ReplicaName=Slave
++
++#
++# Ensure that nodes connecting to this registry have a name matching
++# the certificate CN.
++#
++IceGrid.Registry.RequireNodeCertCN=1
++
++#
++# IceGrid admin clients must use a secure connection to connect to the
++# registry or use Glacier2.
++#
++IceGrid.Registry.AdminSessionManager.Endpoints=ssl -t 10000
++IceGrid.Registry.AdminPermissionsVerifier=DemoIceGrid/NullPermissionsVerifier
++
++#
++# IceGrid SQL configuration if using SQL database.
++#
++#Ice.Plugin.DB=IceGridSqlDB:createSqlDB
++#IceGrid.SQL.DatabaseType=QSQLITE
++#IceGrid.SQL.DatabaseName=db/slave/Registry.db
++
++#
++# Trace properties.
++#
++Ice.ProgramName=Slave
++IceGrid.Registry.Trace.Node=2
++IceGrid.Registry.Trace.Replica=2
++
++#
++# SSL Configuration
++#
++Ice.Plugin.IceSSL=IceSSL:createIceSSL
++IceSSL.DefaultDir=certs
++IceSSL.CertAuthFile=ca_cert.pem
++IceSSL.CertFile=slave_cert.pem
++IceSSL.KeyFile=slave_key.pem
++
++#
++# Don't require certificates. This is useful for admin clients that don't
++# use certificate but still need to establish a secure connection for the
++# username/password authentication
++#
++IceSSL.VerifyPeer=1
++
++IceSSL.TrustOnly.Client=CN="Master";CN="Slave";CN="Node";CN="Glacier2"
++IceSSL.TrustOnly.Server.IceGrid.Registry.Server=CN="Server"
++IceSSL.TrustOnly.Server.IceGrid.Registry.Internal=CN="Node";CN="Master";CN="Slave"
++IceSSL.TrustOnly.Server.IceGrid.Registry.AdminSessionManager=CN="Glacier2"
diff -urN files/patch-ice.cpp.demo.IceGrid.secure.makecerts.py.diff.orig files/patch-ice.cpp.demo.IceGrid.secure.makecerts.py.diff
--- files/patch-ice.cpp.demo.IceGrid.secure.makecerts.py.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.demo.IceGrid.secure.makecerts.py.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,14 @@
+--- Ice-3.4.2.orig/cpp/demo/IceGrid/secure/makecerts.py 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/demo/IceGrid/secure/makecerts.py 2012-03-04 19:55:44.000000000 +0100
+@@ -44,8 +44,9 @@
+ print
+ print
+
+-createCertificate("registry", "IceGrid Registry")
+-createCertificate("node", "IceGrid Node")
++createCertificate("master", "Master")
++createCertificate("slave", "Slave")
++createCertificate("node", "Node")
+ createCertificate("glacier2", "Glacier2")
+ createCertificate("server", "Server")
+
diff -urN files/patch-ice.cpp.include.Freeze.Map.h.diff.orig files/patch-ice.cpp.include.Freeze.Map.h.diff
--- files/patch-ice.cpp.include.Freeze.Map.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.include.Freeze.Map.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,11 @@
+--- Ice-3.4.2.orig/cpp/include/Freeze/Map.h 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/include/Freeze/Map.h 2012-03-04 20:14:52.000000000 +0100
+@@ -426,7 +426,7 @@
+
+ ConstIterator(MapHelper& mapHelper, const Ice::CommunicatorPtr& communicator) :
+ _helper(IteratorHelper::create(mapHelper, true)),
+- _communicator(_communicator),
++ _communicator(communicator),
+ _refValid(false)
+ {
+ }
diff -urN files/patch-ice.cpp.include.Ice.Buffer.h.diff.orig files/patch-ice.cpp.include.Ice.Buffer.h.diff
--- files/patch-ice.cpp.include.Ice.Buffer.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.include.Ice.Buffer.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,10 @@
+--- Ice-3.4.2.orig/cpp/include/Ice/Buffer.h 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/include/Ice/Buffer.h 2012-03-04 20:14:52.000000000 +0100
+@@ -10,6 +10,7 @@
+ #ifndef ICEE_BUFFER_H
+ #define ICEE_BUFFER_H
+
++#include
+ #include
+
+ namespace IceInternal
diff -urN files/patch-ice.cpp.include.Ice.ConnectionIF.h.diff.orig files/patch-ice.cpp.include.Ice.ConnectionIF.h.diff
--- files/patch-ice.cpp.include.Ice.ConnectionIF.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.include.Ice.ConnectionIF.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,17 @@
+--- Ice-3.4.2.orig/cpp/include/Ice/ConnectionIF.h 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/include/Ice/ConnectionIF.h 2012-03-04 20:14:52.000000000 +0100
+@@ -17,13 +17,13 @@
+ {
+
+ class ConnectionI;
++ICE_API Ice::LocalObject* upCast(Ice::ConnectionI*);
+
+ }
+
+ namespace IceInternal
+ {
+
+-ICE_API Ice::LocalObject* upCast(Ice::ConnectionI*);
+
+ enum AsyncStatus
+ {
diff -urN files/patch-ice.cpp.include.Ice.IconvStringConverter.h.diff.orig files/patch-ice.cpp.include.Ice.IconvStringConverter.h.diff
--- files/patch-ice.cpp.include.Ice.IconvStringConverter.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.include.Ice.IconvStringConverter.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,21 @@
+--- Ice-3.4.2.orig/cpp/include/Ice/IconvStringConverter.h 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/include/Ice/IconvStringConverter.h 2012-03-04 20:14:52.000000000 +0100
+@@ -225,10 +225,16 @@
+ template /*static*/ void
+ IconvStringConverter::close(std::pair cdp)
+ {
+- int rs = iconv_close(cdp.first);
++#ifndef NDEBUG
++ int rs =
++#endif
++ iconv_close(cdp.first);
+ assert(rs == 0);
+
+- rs = iconv_close(cdp.second);
++#ifndef NDEBUG
++ rs =
++#endif
++ iconv_close(cdp.second);
+ assert(rs == 0);
+ }
+
diff -urN files/patch-ice.cpp.include.Ice.IncomingAsyncF.h.diff.orig files/patch-ice.cpp.include.Ice.IncomingAsyncF.h.diff
--- files/patch-ice.cpp.include.Ice.IncomingAsyncF.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.include.Ice.IncomingAsyncF.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,15 @@
+--- Ice-3.4.2.orig/cpp/include/Ice/IncomingAsyncF.h 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/include/Ice/IncomingAsyncF.h 2012-03-04 20:14:52.000000000 +0100
+@@ -28,12 +28,6 @@
+
+ class AMD_Object_ice_invoke;
+ class AMD_Array_Object_ice_invoke;
+-
+-}
+-
+-namespace IceInternal
+-{
+-
+ ICE_API IceUtil::Shared* upCast(::Ice::AMD_Object_ice_invoke*);
+ ICE_API IceUtil::Shared* upCast(::Ice::AMD_Array_Object_ice_invoke*);
+
diff -urN files/patch-ice.cpp.include.Ice.LocalObjectF.h.diff.orig files/patch-ice.cpp.include.Ice.LocalObjectF.h.diff
--- files/patch-ice.cpp.include.Ice.LocalObjectF.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.include.Ice.LocalObjectF.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,15 @@
+--- Ice-3.4.2.orig/cpp/include/Ice/LocalObjectF.h 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/include/Ice/LocalObjectF.h 2012-03-04 20:14:52.000000000 +0100
+@@ -18,12 +18,6 @@
+ {
+
+ class LocalObject;
+-
+-}
+-
+-namespace IceInternal
+-{
+-
+ ICE_API IceUtil::Shared* upCast(::Ice::LocalObject*);
+
+ }
diff -urN files/patch-ice.cpp.include.Ice.ObjectF.h.diff.orig files/patch-ice.cpp.include.Ice.ObjectF.h.diff
--- files/patch-ice.cpp.include.Ice.ObjectF.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.include.Ice.ObjectF.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,22 @@
+--- Ice-3.4.2.orig/cpp/include/Ice/ObjectF.h 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/include/Ice/ObjectF.h 2012-03-04 20:14:52.000000000 +0100
+@@ -17,19 +17,8 @@
+ {
+
+ class Object;
+-
+-}
+-
+-namespace IceInternal
+-{
+-
+ ICE_API IceUtil::Shared* upCast(::Ice::Object*);
+
+-}
+-
+-namespace Ice
+-{
+-
+ typedef IceInternal::Handle< Object > ObjectPtr;
+
+ void ICE_API __patch__ObjectPtr(void*, ObjectPtr&);
diff -urN files/patch-ice.cpp.include.Ice.OutgoingAsyncF.h.diff.orig files/patch-ice.cpp.include.Ice.OutgoingAsyncF.h.diff
--- files/patch-ice.cpp.include.Ice.OutgoingAsyncF.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.include.Ice.OutgoingAsyncF.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,17 @@
+--- Ice-3.4.2.orig/cpp/include/Ice/OutgoingAsyncF.h 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/include/Ice/OutgoingAsyncF.h 2012-03-04 20:14:52.000000000 +0100
+@@ -19,13 +19,13 @@
+
+ class AsyncResult;
+ typedef IceInternal::Handle AsyncResultPtr;
++ICE_API IceUtil::Shared* upCast(::Ice::AsyncResult*);
+
+ }
+
+ namespace IceInternal
+ {
+
+-ICE_API IceUtil::Shared* upCast(::Ice::AsyncResult*);
+
+ class OutgoingAsync;
+ ICE_API IceUtil::Shared* upCast(OutgoingAsync*);
diff -urN files/patch-ice.cpp.include.Ice.Proxy.h.diff.orig files/patch-ice.cpp.include.Ice.Proxy.h.diff
--- files/patch-ice.cpp.include.Ice.Proxy.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.include.Ice.Proxy.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,56 @@
+--- Ice-3.4.2.orig/cpp/include/Ice/Proxy.h 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/include/Ice/Proxy.h 2012-03-04 20:14:52.000000000 +0100
+@@ -38,6 +38,8 @@
+
+ class Locator;
+ class Router;
++ICE_API ::IceProxy::Ice::Object* upCast(::IceProxy::Ice::Locator*);
++ICE_API ::IceProxy::Ice::Object* upCast(::IceProxy::Ice::Router*);
+
+ }
+
+@@ -46,8 +48,6 @@
+ namespace IceInternal
+ {
+
+-ICE_API ::IceProxy::Ice::Object* upCast(::IceProxy::Ice::Locator*);
+-ICE_API ::IceProxy::Ice::Object* upCast(::IceProxy::Ice::Router*);
+
+ class LocalExceptionWrapper;
+
+@@ -1172,7 +1172,7 @@
+
+ TwowayCallbackNC(const TPtr& instance, bool cb, Exception excb, Sent sentcb) : CallbackNC(instance, excb, sentcb)
+ {
+- checkCallback(instance, cb || excb != 0);
++ this->checkCallback(instance, cb || excb != 0);
+ }
+ };
+
+@@ -1188,7 +1188,7 @@
+
+ TwowayCallback(const TPtr& instance, bool cb, Exception excb, Sent sentcb) : Callback(instance, excb, sentcb)
+ {
+- checkCallback(instance, cb || excb != 0);
++ this->checkCallback(instance, cb || excb != 0);
+ }
+ };
+
+@@ -1209,7 +1209,7 @@
+ OnewayCallbackNC(const TPtr& instance, Response cb, Exception excb, Sent sentcb) :
+ CallbackNC(instance, excb, sentcb), response(cb)
+ {
+- checkCallback(instance, cb != 0 || excb != 0);
++ this->checkCallback(instance, cb != 0 || excb != 0);
+ }
+
+ virtual void __completed(const ::Ice::AsyncResultPtr& result) const
+@@ -1254,7 +1254,7 @@
+ OnewayCallback(const TPtr& instance, Response cb, Exception excb, Sent sentcb) :
+ Callback(instance, excb, sentcb), response(cb)
+ {
+- checkCallback(instance, cb != 0 || excb != 0);
++ this->checkCallback(instance, cb != 0 || excb != 0);
+ }
+
+ virtual void __completed(const ::Ice::AsyncResultPtr& result) const
diff -urN files/patch-ice.cpp.include.Ice.ProxyF.h.diff.orig files/patch-ice.cpp.include.Ice.ProxyF.h.diff
--- files/patch-ice.cpp.include.Ice.ProxyF.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.include.Ice.ProxyF.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,76 @@
+--- Ice-3.4.2.orig/cpp/include/Ice/ProxyF.h 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/include/Ice/ProxyF.h 2012-03-04 20:14:52.000000000 +0100
+@@ -22,6 +22,11 @@
+ {
+
+ class Object;
++inline ::IceProxy::Ice::Object*
++upCast(::IceProxy::Ice::Object* o)
++{
++ return o;
++}
+
+ }
+
+@@ -34,6 +39,11 @@
+ {
+
+ class Object;
++inline ::IceDelegate::Ice::Object*
++upCast(::IceDelegate::Ice::Object* o)
++{
++ return o;
++}
+
+ }
+
+@@ -47,6 +57,12 @@
+
+ class Object;
+
++inline ::IceDelegateM::Ice::Object*
++upCast(::IceDelegateM::Ice::Object* o)
++{
++ return o;
++}
++
+ }
+
+ }
+@@ -58,36 +74,12 @@
+ {
+
+ class Object;
+-
+-}
+-
+-}
+-
+-namespace IceInternal
+-{
+-
+-inline ::IceProxy::Ice::Object*
+-upCast(::IceProxy::Ice::Object* o)
+-{
+- return o;
+-}
+-
+-inline ::IceDelegate::Ice::Object*
+-upCast(::IceDelegate::Ice::Object* o)
+-{
+- return o;
+-}
+-
+ inline ::IceDelegateD::Ice::Object*
+ upCast(::IceDelegateD::Ice::Object* o)
+ {
+ return o;
+ }
+
+-inline ::IceDelegateM::Ice::Object*
+-upCast(::IceDelegateM::Ice::Object* o)
+-{
+- return o;
+ }
+
+ }
diff -urN files/patch-ice.cpp.include.Ice.Stream.h.diff.orig files/patch-ice.cpp.include.Ice.Stream.h.diff
--- files/patch-ice.cpp.include.Ice.Stream.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.include.Ice.Stream.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,79 @@
+--- Ice-3.4.2.orig/cpp/include/Ice/Stream.h 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/include/Ice/Stream.h 2012-03-04 20:14:52.000000000 +0100
+@@ -17,6 +17,12 @@
+ #include
+ #include
+
++namespace IceInternal
++{
++ // Forward declaration required for writer specializations.
++ void delegateThrowMarshalException(const char*, int, const ::std::string&);
++}
++
+ namespace Ice
+ {
+
+@@ -45,9 +51,6 @@
+ StreamTraitTypeUnknown
+ };
+
+-// Forward declaration required for writer specializations.
+-class MarshalException;
+-
+ //
+ // Base trait template. This doesn't actually do anything -- we just
+ // use it as a template that we can specialize.
+@@ -542,7 +545,7 @@
+ {
+ if(static_cast(v) < 0 || static_cast(v) >= StreamTrait::enumLimit)
+ {
+- throw MarshalException(__FILE__, __LINE__, "enumerator out of range");
++ IceInternal::delegateThrowMarshalException(__FILE__, __LINE__, "enumerator out of range");
+ }
+ outS->write(static_cast(v));
+ }
+@@ -558,7 +561,7 @@
+ inS->read(val);
+ if(val > StreamTrait::enumLimit)
+ {
+- throw MarshalException(__FILE__, __LINE__, "enumerator out of range");
++ IceInternal::delegateThrowMarshalException(__FILE__, __LINE__, "enumerator out of range");
+ }
+ v = static_cast(val);
+ }
+@@ -573,7 +576,7 @@
+ {
+ if(static_cast(v) < 0 || static_cast(v) >= StreamTrait::enumLimit)
+ {
+- throw MarshalException(__FILE__, __LINE__, "enumerator out of range");
++ IceInternal::delegateThrowMarshalException(__FILE__, __LINE__, "enumerator out of range");
+ }
+ outS->write(static_cast(v));
+ }
+@@ -589,7 +592,7 @@
+ inS->read(val);
+ if(val < 0 || val > StreamTrait::enumLimit)
+ {
+- throw MarshalException(__FILE__, __LINE__, "enumerator out of range");
++ IceInternal::delegateThrowMarshalException(__FILE__, __LINE__, "enumerator out of range");
+ }
+ v = static_cast(val);
+ }
+@@ -603,7 +606,7 @@
+ {
+ if(static_cast(v) < 0 || static_cast(v) >= StreamTrait::enumLimit)
+ {
+- throw MarshalException(__FILE__, __LINE__, "enumerator out of range");
++ IceInternal::delegateThrowMarshalException(__FILE__, __LINE__, "enumerator out of range");
+ }
+ outS->write(static_cast(v));
+ }
+@@ -619,7 +622,7 @@
+ inS->read(val);
+ if(val < 0 || val > StreamTrait::enumLimit)
+ {
+- throw MarshalException(__FILE__, __LINE__, "enumerator out of range");
++ IceInternal::delegateThrowMarshalException(__FILE__, __LINE__, "enumerator out of range");
+ }
+ v = static_cast(val);
+ }
diff -urN files/patch-ice.cpp.include.Ice.StreamF.h.diff.orig files/patch-ice.cpp.include.Ice.StreamF.h.diff
--- files/patch-ice.cpp.include.Ice.StreamF.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.include.Ice.StreamF.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,15 @@
+--- Ice-3.4.2.orig/cpp/include/Ice/StreamF.h 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/include/Ice/StreamF.h 2012-03-04 20:14:52.000000000 +0100
+@@ -19,12 +19,6 @@
+
+ class InputStream;
+ class OutputStream;
+-
+-}
+-
+-namespace IceInternal
+-{
+-
+ ICE_API IceUtil::Shared* upCast(::Ice::InputStream*);
+ ICE_API IceUtil::Shared* upCast(::Ice::OutputStream*);
+
diff -urN files/patch-ice.cpp.include.IceUtil.Mutex.h.diff.orig files/patch-ice.cpp.include.IceUtil.Mutex.h.diff
--- files/patch-ice.cpp.include.IceUtil.Mutex.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.include.IceUtil.Mutex.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,15 @@
+--- Ice-3.4.2.orig/cpp/include/IceUtil/Mutex.h 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/include/IceUtil/Mutex.h 2012-03-04 20:14:52.000000000 +0100
+@@ -251,8 +251,11 @@
+ inline
+ Mutex::~Mutex()
+ {
++#ifndef NDEBUG
+ int rc = 0;
+- rc = pthread_mutex_destroy(&_mutex);
++ rc =
++#endif
++ pthread_mutex_destroy(&_mutex);
+ assert(rc == 0);
+ }
+
diff -urN files/patch-ice.cpp.src.Freeze.MapDb.cpp.diff.orig files/patch-ice.cpp.src.Freeze.MapDb.cpp.diff
--- files/patch-ice.cpp.src.Freeze.MapDb.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Freeze.MapDb.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,15 @@
+--- Ice-3.4.2.orig/cpp/src/Freeze/MapDb.cpp 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/src/Freeze/MapDb.cpp 2012-03-04 20:14:52.000000000 +0100
+@@ -229,7 +229,11 @@
+ #ifndef NDEBUG
+ bool inserted =
+ #endif
+- _indices.insert(IndexMap::value_type(indexBase->name(), indexI.get())).second;
++ _indices.insert(IndexMap::value_type(indexBase->name(), indexI.get()))
++#ifndef NDEBUG
++ .second
++#endif
++ ;
+ assert(inserted);
+
+ indexBase->_impl = indexI.release();
diff -urN files/patch-ice.cpp.src.Freeze.MapI.cpp.diff.orig files/patch-ice.cpp.src.Freeze.MapI.cpp.diff
--- files/patch-ice.cpp.src.Freeze.MapI.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Freeze.MapI.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,41 @@
+--- Ice-3.4.2.orig/cpp/src/Freeze/MapI.cpp 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/src/Freeze/MapI.cpp 2012-03-04 20:14:52.000000000 +0100
+@@ -749,8 +749,11 @@
+
+ try
+ {
++#ifndef NDEBUG
+ int err;
+- err = _dbc->put(&dbKey, &dbValue, DB_CURRENT);
++ err =
++#endif
++ _dbc->put(&dbKey, &dbValue, DB_CURRENT);
+ assert(err == 0);
+ }
+ catch(const ::DbDeadlockException& dx)
+@@ -1023,7 +1026,11 @@
+ #ifndef NDEBUG
+ bool inserted =
+ #endif
+- _indices.insert(IndexMap::value_type(indexBase->name(), indexBase)).second;
++ _indices.insert(IndexMap::value_type(indexBase->name(), indexBase))
++#ifndef NDEBUG
++ .second
++#endif
++ ;
+ assert(inserted);
+ indexBase->_map = this;
+ }
+@@ -1360,8 +1367,11 @@
+ try
+ {
+ u_int32_t count;
++#ifndef NDEBUG
+ int err;
+- err = _db->truncate(txn, &count, txn != 0 ? 0 : DB_AUTO_COMMIT);
++ err =
++#endif
++ _db->truncate(txn, &count, txn != 0 ? 0 : DB_AUTO_COMMIT);
+ assert(err == 0);
+ break;
+ }
diff -urN files/patch-ice.cpp.src.Freeze.SharedDbEnv.cpp.diff.orig files/patch-ice.cpp.src.Freeze.SharedDbEnv.cpp.diff
--- files/patch-ice.cpp.src.Freeze.SharedDbEnv.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Freeze.SharedDbEnv.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,15 @@
+--- Ice-3.4.2.orig/cpp/src/Freeze/SharedDbEnv.cpp 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/src/Freeze/SharedDbEnv.cpp 2012-03-04 20:14:52.000000000 +0100
+@@ -336,8 +336,11 @@
+ // Remove from map
+ //
+
++#ifndef NDEBUG
+ size_t one;
+- one = sharedDbEnvMap->erase(key);
++ one =
++#endif
++ sharedDbEnvMap->erase(key);
+ assert(one == 1);
+
+ if(sharedDbEnvMap->size() == 0)
diff -urN files/patch-ice.cpp.src.Glacier2.Blobject.cpp.diff.orig files/patch-ice.cpp.src.Glacier2.Blobject.cpp.diff
--- files/patch-ice.cpp.src.Glacier2.Blobject.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Glacier2.Blobject.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,18 @@
+--- Ice-3.4.2.orig/cpp/src/Glacier2/Blobject.cpp 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/src/Glacier2/Blobject.cpp 2012-03-04 19:39:27.000000000 +0100
+@@ -171,6 +171,15 @@
+ }
+
+ void
++Glacier2::Blobject::destroy()
++{
++ if(_requestQueue)
++ {
++ _requestQueue->destroy();
++ }
++}
++
++void
+ Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Object_ice_invokePtr& amdCB,
+ const std::pair& inParams, const Current& current)
+ {
diff -urN files/patch-ice.cpp.src.Glacier2.Blobject.h.diff.orig files/patch-ice.cpp.src.Glacier2.Blobject.h.diff
--- files/patch-ice.cpp.src.Glacier2.Blobject.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Glacier2.Blobject.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,11 @@
+--- Ice-3.4.2.orig/cpp/src/Glacier2/Blobject.h 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/src/Glacier2/Blobject.h 2012-03-04 19:39:27.000000000 +0100
+@@ -24,6 +24,8 @@
+ Blobject(const InstancePtr&, const Ice::ConnectionPtr&, const Ice::Context&);
+ virtual ~Blobject();
+
++ void destroy();
++
+ protected:
+
+ void invoke(Ice::ObjectPrx&, const Ice::AMD_Object_ice_invokePtr&,
diff -urN files/patch-ice.cpp.src.Glacier2.RequestQueue.cpp.diff.orig files/patch-ice.cpp.src.Glacier2.RequestQueue.cpp.diff
--- files/patch-ice.cpp.src.Glacier2.RequestQueue.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Glacier2.RequestQueue.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,74 @@
+--- Ice-3.4.2.orig/cpp/src/Glacier2/RequestQueue.cpp 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/src/Glacier2/RequestQueue.cpp 2012-03-04 19:39:27.000000000 +0100
+@@ -185,7 +185,8 @@
+ _callback(newCallback_Object_ice_invoke(this, &RequestQueue::response, &RequestQueue::exception,
+ &RequestQueue::sent)),
+ _flushCallback(newCallback_Connection_flushBatchRequests(this, &RequestQueue::exception, &RequestQueue::sent)),
+- _pendingSend(false)
++ _pendingSend(false),
++ _destroyed(false)
+ {
+ }
+
+@@ -241,6 +242,37 @@
+ }
+
+ void
++Glacier2::RequestQueue::destroy()
++{
++ IceUtil::Mutex::Lock lock(*this);
++
++ _destroyed = true;
++
++ //
++ // Although the session has been destroyed, we cannot destroy this queue
++ // until all requests have completed.
++ //
++ if(_requests.empty())
++ {
++ destroyInternal();
++ }
++}
++
++void
++Glacier2::RequestQueue::destroyInternal()
++{
++ //
++ // Must be called with the mutex locked.
++ //
++
++ //
++ // Remove cyclic references.
++ //
++ const_cast(_callback) = 0;
++ const_cast(_flushCallback) = 0;
++}
++
++void
+ Glacier2::RequestQueue::flush()
+ {
+ assert(_connection);
+@@ -289,6 +321,11 @@
+ _pendingSendRequest = 0;
+ }
+ }
++
++ if(_destroyed && _requests.empty())
++ {
++ destroyInternal();
++ }
+ }
+
+ void
+@@ -312,6 +349,11 @@
+ }
+ }
+ _requests.clear();
++
++ if(_destroyed)
++ {
++ destroyInternal();
++ }
+ }
+
+ void
diff -urN files/patch-ice.cpp.src.Glacier2.RequestQueue.h.diff.orig files/patch-ice.cpp.src.Glacier2.RequestQueue.h.diff
--- files/patch-ice.cpp.src.Glacier2.RequestQueue.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Glacier2.RequestQueue.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,23 @@
+--- Ice-3.4.2.orig/cpp/src/Glacier2/RequestQueue.h 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/src/Glacier2/RequestQueue.h 2012-03-04 19:39:27.000000000 +0100
+@@ -65,8 +65,12 @@
+ bool addRequest(const RequestPtr&);
+ void flushRequests(std::set&);
+
++ void destroy();
++
+ private:
+
++ void destroyInternal();
++
+ void flush();
+ void flush(std::set&);
+
+@@ -83,6 +87,7 @@
+ std::deque _requests;
+ bool _pendingSend;
+ RequestPtr _pendingSendRequest;
++ bool _destroyed;
+ };
+ typedef IceUtil::Handle RequestQueuePtr;
+
diff -urN files/patch-ice.cpp.src.Glacier2.RouterI.cpp.diff.orig files/patch-ice.cpp.src.Glacier2.RouterI.cpp.diff
--- files/patch-ice.cpp.src.Glacier2.RouterI.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Glacier2.RouterI.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,15 @@
+--- Ice-3.4.2.orig/cpp/src/Glacier2/RouterI.cpp 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/src/Glacier2/RouterI.cpp 2012-03-04 19:39:27.000000000 +0100
+@@ -98,6 +98,12 @@
+ _session->destroy_async(amiCB);
+ }
+ }
++
++ _clientBlobject->destroy();
++ if(_serverBlobject)
++ {
++ _serverBlobject->destroy();
++ }
+ }
+
+ ObjectPrx
diff -urN files/patch-ice.cpp.src.Ice.ConnectionI.cpp.diff.orig files/patch-ice.cpp.src.Ice.ConnectionI.cpp.diff
--- files/patch-ice.cpp.src.Ice.ConnectionI.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Ice.ConnectionI.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,27 @@
+--- Ice-3.4.2.orig/cpp/src/Ice/ConnectionI.cpp 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/src/Ice/ConnectionI.cpp 2012-03-04 20:14:52.000000000 +0100
+@@ -31,7 +31,7 @@
+ using namespace Ice;
+ using namespace IceInternal;
+
+-Ice::LocalObject* IceInternal::upCast(ConnectionI* p) { return p; }
++Ice::LocalObject* Ice::upCast(ConnectionI* p) { return p; }
+
+ namespace
+ {
+@@ -600,6 +600,7 @@
+ }
+ catch(const LocalException& ex)
+ {
++ status = IceInternal::AsyncStatusQueued; // this is only to apeace the compiler
+ setState(StateClosed, ex);
+ assert(_exception.get());
+ _exception->ice_throw();
+@@ -971,6 +972,7 @@
+ }
+ catch(const Ice::LocalException& ex)
+ {
++ status = IceInternal::AsyncStatusQueued; // this is only to apeace the compiler
+ setState(StateClosed, ex);
+ assert(_exception.get());
+ _exception->ice_throw();
diff -urN files/patch-ice.cpp.src.Ice.IncomingAsync.cpp.diff.orig files/patch-ice.cpp.src.Ice.IncomingAsync.cpp.diff
--- files/patch-ice.cpp.src.Ice.IncomingAsync.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Ice.IncomingAsync.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,11 @@
+--- Ice-3.4.2.orig/cpp/src/Ice/IncomingAsync.cpp 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/src/Ice/IncomingAsync.cpp 2012-03-04 20:14:52.000000000 +0100
+@@ -24,7 +24,7 @@
+ using namespace IceInternal;
+
+ IceUtil::Shared* IceInternal::upCast(IncomingAsync* p) { return p; }
+-IceUtil::Shared* IceInternal::upCast(AMD_Object_ice_invoke* p) { return p; }
++IceUtil::Shared* Ice::upCast(AMD_Object_ice_invoke* p) { return p; }
+
+ namespace
+ {
diff -urN files/patch-ice.cpp.src.Ice.LocalObject.cpp.diff.orig files/patch-ice.cpp.src.Ice.LocalObject.cpp.diff
--- files/patch-ice.cpp.src.Ice.LocalObject.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Ice.LocalObject.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,11 @@
+--- Ice-3.4.2.orig/cpp/src/Ice/LocalObject.cpp 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/src/Ice/LocalObject.cpp 2012-03-04 20:14:52.000000000 +0100
+@@ -13,7 +13,7 @@
+ using namespace Ice;
+ using namespace IceInternal;
+
+-IceUtil::Shared* IceInternal::upCast(LocalObject* obj) { return obj; }
++IceUtil::Shared* Ice::upCast(LocalObject* obj) { return obj; }
+
+ bool
+ Ice::LocalObject::operator==(const LocalObject& r) const
diff -urN files/patch-ice.cpp.src.Ice.Network.cpp.diff.orig files/patch-ice.cpp.src.Ice.Network.cpp.diff
--- files/patch-ice.cpp.src.Ice.Network.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Ice.Network.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,15 @@
+--- Ice-3.4.2.orig/cpp/src/Ice/Network.cpp 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/src/Ice/Network.cpp 2011-07-15 23:40:26.000000000 +0200
+@@ -715,7 +715,11 @@
+ WSASetLastError(error);
+ #else
+ int error = errno;
+- if(close(fd) == SOCKET_ERROR)
++ if(close(fd) == SOCKET_ERROR
++# if defined(__FreeBSD__)
++ && getSocketErrno() != ECONNRESET
++# endif
++ )
+ {
+ SocketException ex(__FILE__, __LINE__);
+ ex.error = getSocketErrno();
diff -urN files/patch-ice.cpp.src.Ice.Object.cpp.diff.orig files/patch-ice.cpp.src.Ice.Object.cpp.diff
--- files/patch-ice.cpp.src.Ice.Object.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Ice.Object.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,11 @@
+--- Ice-3.4.2.orig/cpp/src/Ice/Object.cpp 2011-06-15 21:43:58.000000000 +0200
++++ Ice-3.4.2/cpp/src/Ice/Object.cpp 2012-03-04 20:14:52.000000000 +0100
+@@ -19,7 +19,7 @@
+ using namespace Ice;
+ using namespace IceInternal;
+
+-IceUtil::Shared* IceInternal::upCast(Object* p) { return p; }
++IceUtil::Shared* Ice::upCast(Object* p) { return p; }
+
+ bool
+ Ice::Object::operator==(const Object& r) const
diff -urN files/patch-ice.cpp.src.Ice.OutgoingAsync.cpp.diff.orig files/patch-ice.cpp.src.Ice.OutgoingAsync.cpp.diff
--- files/patch-ice.cpp.src.Ice.OutgoingAsync.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Ice.OutgoingAsync.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,11 @@
+--- Ice-3.4.2.orig/cpp/src/Ice/OutgoingAsync.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/Ice/OutgoingAsync.cpp 2012-03-04 20:14:52.000000000 +0100
+@@ -30,7 +30,7 @@
+ using namespace Ice;
+ using namespace IceInternal;
+
+-IceUtil::Shared* IceInternal::upCast(AsyncResult* p) { return p; }
++IceUtil::Shared* Ice::upCast(AsyncResult* p) { return p; }
+
+ IceUtil::Shared* IceInternal::upCast(OutgoingAsyncMessageCallback* p) { return p; }
+ IceUtil::Shared* IceInternal::upCast(OutgoingAsync* p) { return p; }
diff -urN files/patch-ice.cpp.src.Ice.PropertyNames.cpp.diff.orig files/patch-ice.cpp.src.Ice.PropertyNames.cpp.diff
--- files/patch-ice.cpp.src.Ice.PropertyNames.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Ice.PropertyNames.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,20 @@
+--- Ice-3.4.2.orig/cpp/src/Ice/PropertyNames.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/Ice/PropertyNames.cpp 2012-03-04 19:55:44.000000000 +0100
+@@ -8,7 +8,7 @@
+ // **********************************************************************
+
+ //
+-// Generated by makeprops.py from file ..\config\PropertyNames.xml, Mon May 09 07:39:43 2011
++// Generated by makeprops.py from file ../config/PropertyNames.xml, Tue Jul 12 07:22:34 2011
+
+ // IMPORTANT: Do not edit this file -- any edits made here will be lost!
+
+@@ -335,6 +335,8 @@
+ IceInternal::Property("IceGrid.Registry.PermissionsVerifier", false, 0),
+ IceInternal::Property("IceGrid.Registry.ReplicaName", false, 0),
+ IceInternal::Property("IceGrid.Registry.ReplicaSessionTimeout", false, 0),
++ IceInternal::Property("IceGrid.Registry.RequireNodeCertCN", false, 0),
++ IceInternal::Property("IceGrid.Registry.RequireReplicaCertCN", false, 0),
+ IceInternal::Property("IceGrid.Registry.Server.ACM", false, 0),
+ IceInternal::Property("IceGrid.Registry.Server.AdapterId", false, 0),
+ IceInternal::Property("IceGrid.Registry.Server.Endpoints", false, 0),
diff -urN files/patch-ice.cpp.src.Ice.PropertyNames.h.diff.orig files/patch-ice.cpp.src.Ice.PropertyNames.h.diff
--- files/patch-ice.cpp.src.Ice.PropertyNames.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Ice.PropertyNames.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,11 @@
+--- Ice-3.4.2.orig/cpp/src/Ice/PropertyNames.h 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/Ice/PropertyNames.h 2012-03-04 19:55:44.000000000 +0100
+@@ -8,7 +8,7 @@
+ // **********************************************************************
+
+ //
+-// Generated by makeprops.py from file ..\config\PropertyNames.xml, Mon May 09 07:39:43 2011
++// Generated by makeprops.py from file ../config/PropertyNames.xml, Tue Jul 12 07:22:34 2011
+
+ // IMPORTANT: Do not edit this file -- any edits made here will be lost!
+
diff -urN files/patch-ice.cpp.src.Ice.ProxyFactory.cpp.diff.orig files/patch-ice.cpp.src.Ice.ProxyFactory.cpp.diff
--- files/patch-ice.cpp.src.Ice.ProxyFactory.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Ice.ProxyFactory.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,10 @@
+--- Ice-3.4.2.orig/cpp/src/Ice/ProxyFactory.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/Ice/ProxyFactory.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -229,6 +229,7 @@
+ }
+ else if(cnt > static_cast(_retryIntervals.size()))
+ {
++ interval = 0; // apeace compiler
+ if(traceLevels->retry >= 1)
+ {
+ Trace out(logger, traceLevels->retryCat);
diff -urN files/patch-ice.cpp.src.Ice.Service.cpp.diff.orig files/patch-ice.cpp.src.Ice.Service.cpp.diff
--- files/patch-ice.cpp.src.Ice.Service.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Ice.Service.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,32 @@
+--- Ice-3.4.2.orig/cpp/src/Ice/Service.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/Ice/Service.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -2136,17 +2136,26 @@
+ //
+ // Associate stdin, stdout and stderr with /dev/null.
+ //
++#ifndef NDEBUG
+ int fd;
+- fd = open("/dev/null", O_RDWR);
++ fd =
++#endif
++ open("/dev/null", O_RDWR);
+ assert(fd == 0);
+ if(stdOut.empty())
+ {
+- fd = dup2(0, 1);
++#ifndef NDEBUG
++ fd =
++#endif
++ dup2(0, 1);
+ assert(fd == 1);
+ }
+ if(stdErr.empty())
+ {
+- fd = dup2(1, 2);
++#ifndef NDEBUG
++ fd =
++#endif
++ dup2(1, 2);
+ assert(fd == 2);
+ }
+ }
diff -urN files/patch-ice.cpp.src.Ice.Stream.cpp.diff.orig files/patch-ice.cpp.src.Ice.Stream.cpp.diff
--- files/patch-ice.cpp.src.Ice.Stream.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Ice.Stream.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,24 @@
+--- Ice-3.4.2.orig/cpp/src/Ice/Stream.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/Ice/Stream.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -8,10 +8,19 @@
+ // **********************************************************************
+
+ #include
++#include
+
+ using namespace std;
+ using namespace Ice;
+ using namespace IceInternal;
+
+-IceUtil::Shared* IceInternal::upCast(InputStream* p) { return p; }
+-IceUtil::Shared* IceInternal::upCast(OutputStream* p) { return p; }
++IceUtil::Shared* Ice::upCast(InputStream* p) { return p; }
++IceUtil::Shared* Ice::upCast(OutputStream* p) { return p; }
++
++namespace IceInternal
++{
++ void delegateThrowMarshalException(const char* file, int line , const ::std::string& message)
++ {
++ throw Ice::MarshalException(file, line, message);
++ }
++}
diff -urN files/patch-ice.cpp.src.IceGrid.AdminCallbackRouter.cpp.diff.orig files/patch-ice.cpp.src.IceGrid.AdminCallbackRouter.cpp.diff
--- files/patch-ice.cpp.src.IceGrid.AdminCallbackRouter.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceGrid.AdminCallbackRouter.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,16 @@
+--- Ice-3.4.2.orig/cpp/src/IceGrid/AdminCallbackRouter.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceGrid/AdminCallbackRouter.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -49,7 +49,12 @@
+ #ifndef NDEBUG
+ bool inserted =
+ #endif
+- _categoryToConnection.insert(map::value_type(category, con)).second;
++ _categoryToConnection.insert(map::value_type(category, con))
++#ifndef NDEBUG
++ .second
++#endif
++ ;
++
+
+ assert(inserted == true);
+ }
diff -urN files/patch-ice.cpp.src.IceGrid.DescriptorHelper.cpp.diff.orig files/patch-ice.cpp.src.IceGrid.DescriptorHelper.cpp.diff
--- files/patch-ice.cpp.src.IceGrid.DescriptorHelper.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceGrid.DescriptorHelper.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,35 @@
+--- Ice-3.4.2.orig/cpp/src/IceGrid/DescriptorHelper.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceGrid/DescriptorHelper.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -198,15 +198,6 @@
+ return result;
+ }
+
+-template Dict
+-getDictUpdatedElts(const Dict& ldict, const Dict& rdict)
+-{
+-#if defined(_MSC_VER) && (_MSC_VER < 1300)
+- return getDictUpdatedEltsWithEq(ldict, rdict, equal_to());
+-#else
+- return getDictUpdatedEltsWithEq(ldict, rdict, equal_to());
+-#endif
+-}
+
+ template Dict
+ getDictUpdatedEltsWithEq(const Dict& ldict, const Dict& rdict, EqFunc eq)
+@@ -223,6 +214,16 @@
+ return result;
+ }
+
++template Dict
++getDictUpdatedElts(const Dict& ldict, const Dict& rdict)
++{
++#if defined(_MSC_VER) && (_MSC_VER < 1300)
++ return getDictUpdatedEltsWithEq(ldict, rdict, equal_to());
++#else
++ return getDictUpdatedEltsWithEq(ldict, rdict, equal_to());
++#endif
++}
++
+ template Ice::StringSeq
+ getDictRemovedElts(const Dict& ldict, const Dict& rdict)
+ {
diff -urN files/patch-ice.cpp.src.IceGrid.Internal.ice.diff.orig files/patch-ice.cpp.src.IceGrid.Internal.ice.diff
--- files/patch-ice.cpp.src.IceGrid.Internal.ice.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceGrid.Internal.ice.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,20 @@
+--- Ice-3.4.2.orig/cpp/src/IceGrid/Internal.ice 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceGrid/Internal.ice 2012-03-04 19:55:44.000000000 +0100
+@@ -702,7 +702,7 @@
+ *
+ **/
+ NodeSession* registerNode(InternalNodeInfo info, Node* prx, LoadInfo loadInf)
+- throws NodeActiveException;
++ throws NodeActiveException, PermissionDeniedException;
+
+ /**
+ *
+@@ -721,7 +721,7 @@
+ *
+ **/
+ ReplicaSession* registerReplica(InternalReplicaInfo info, InternalRegistry* prx)
+- throws ReplicaActiveException;
++ throws ReplicaActiveException, PermissionDeniedException;
+
+ /**
+ *
diff -urN files/patch-ice.cpp.src.IceGrid.InternalRegistryI.cpp.diff.orig files/patch-ice.cpp.src.IceGrid.InternalRegistryI.cpp.diff
--- files/patch-ice.cpp.src.IceGrid.InternalRegistryI.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceGrid.InternalRegistryI.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,136 @@
+--- Ice-3.4.2.orig/cpp/src/IceGrid/InternalRegistryI.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceGrid/InternalRegistryI.cpp 2012-03-04 19:55:44.000000000 +0100
+@@ -19,6 +19,8 @@
+ #include
+ #include
+ #include
++#include
++#include
+
+ using namespace std;
+ using namespace IceGrid;
+@@ -38,6 +40,8 @@
+ Ice::PropertiesPtr properties = database->getCommunicator()->getProperties();
+ _nodeSessionTimeout = properties->getPropertyAsIntWithDefault("IceGrid.Registry.NodeSessionTimeout", 30);
+ _replicaSessionTimeout = properties->getPropertyAsIntWithDefault("IceGrid.Registry.ReplicaSessionTimeout", 30);
++ _requireNodeCertCN = properties->getPropertyAsIntWithDefault("IceGrid.Registry.RequireNodeCertCN", 0);
++ _requireReplicaCertCN = properties->getPropertyAsIntWithDefault("IceGrid.Registry.RequireReplicaCertCN", 0);
+ }
+
+ InternalRegistryI::~InternalRegistryI()
+@@ -50,7 +54,56 @@
+ const LoadInfo& load,
+ const Ice::Current& current)
+ {
+- const Ice::LoggerPtr logger = _database->getTraceLevels()->logger;
++ const TraceLevelsPtr traceLevels = _database->getTraceLevels();
++ const Ice::LoggerPtr logger = traceLevels->logger;
++ if(!info || !node)
++ {
++ return 0;
++ }
++
++ if(_requireNodeCertCN)
++ {
++ try
++ {
++ IceSSL::ConnectionInfoPtr sslConnInfo = IceSSL::ConnectionInfoPtr::dynamicCast(current.con->getInfo());
++ if(sslConnInfo)
++ {
++ if (sslConnInfo->certs.empty() ||
++ !IceSSL::Certificate::decode(sslConnInfo->certs[0])->getSubjectDN().match("CN=" + info->name))
++ {
++ if(traceLevels->node > 0)
++ {
++ Ice::Trace out(logger, traceLevels->nodeCat);
++ out << "certificate CN doesn't match node name `" << info->name << "'";
++ }
++ throw PermissionDeniedException("certificate CN doesn't match node name `" + info->name + "'");
++ }
++ }
++ else
++ {
++ if(traceLevels->node > 0)
++ {
++ Ice::Trace out(logger, traceLevels->nodeCat);
++ out << "node certificate for `" << info->name << "' is required to connect to this registry";
++ }
++ throw PermissionDeniedException("node certificate is required to connect to this registry");
++ }
++ }
++ catch(const PermissionDeniedException& ex)
++ {
++ throw ex;
++ }
++ catch(const IceUtil::Exception&)
++ {
++ if(traceLevels->node > 0)
++ {
++ Ice::Trace out(logger, traceLevels->nodeCat);
++ out << "unexpected exception while verifying certificate for node `" << info->name << "'";
++ }
++ throw PermissionDeniedException("unable to verify certificate for node `" + info->name + "'");
++ }
++ }
++
+ try
+ {
+ NodeSessionIPtr session = new NodeSessionI(_database, node, info, _nodeSessionTimeout, load);
+@@ -68,7 +121,56 @@
+ const InternalRegistryPrx& prx,
+ const Ice::Current& current)
+ {
+- const Ice::LoggerPtr logger = _database->getTraceLevels()->logger;
++ const TraceLevelsPtr traceLevels = _database->getTraceLevels();
++ const Ice::LoggerPtr logger = traceLevels->logger;
++ if(!info || !prx)
++ {
++ return 0;
++ }
++
++ if(_requireReplicaCertCN)
++ {
++ try
++ {
++ IceSSL::ConnectionInfoPtr sslConnInfo = IceSSL::ConnectionInfoPtr::dynamicCast(current.con->getInfo());
++ if(sslConnInfo)
++ {
++ if (sslConnInfo->certs.empty() ||
++ !IceSSL::Certificate::decode(sslConnInfo->certs[0])->getSubjectDN().match("CN=" + info->name))
++ {
++ if(traceLevels->replica > 0)
++ {
++ Ice::Trace out(logger, traceLevels->replicaCat);
++ out << "certificate CN doesn't match replica name `" << info->name << "'";
++ }
++ throw PermissionDeniedException("certificate CN doesn't match replica name `" + info->name + "'");
++ }
++ }
++ else
++ {
++ if(traceLevels->replica > 0)
++ {
++ Ice::Trace out(logger, traceLevels->replicaCat);
++ out << "replica certificate for `" << info->name << "' is required to connect to this registry";
++ }
++ throw PermissionDeniedException("replica certificate is required to connect to this registry");
++ }
++ }
++ catch(const PermissionDeniedException& ex)
++ {
++ throw ex;
++ }
++ catch(const IceUtil::Exception&)
++ {
++ if(traceLevels->replica > 0)
++ {
++ Ice::Trace out(logger, traceLevels->replicaCat);
++ out << "unexpected exception while verifying certificate for replica `" << info->name << "'";
++ }
++ throw PermissionDeniedException("unable to verify certificate for replica `" + info->name + "'");
++ }
++ }
++
+ try
+ {
+ ReplicaSessionIPtr s = new ReplicaSessionI(_database, _wellKnownObjects, info, prx, _replicaSessionTimeout);
diff -urN files/patch-ice.cpp.src.IceGrid.InternalRegistryI.h.diff.orig files/patch-ice.cpp.src.IceGrid.InternalRegistryI.h.diff
--- files/patch-ice.cpp.src.IceGrid.InternalRegistryI.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceGrid.InternalRegistryI.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,11 @@
+--- Ice-3.4.2.orig/cpp/src/IceGrid/InternalRegistryI.h 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceGrid/InternalRegistryI.h 2012-03-04 19:55:44.000000000 +0100
+@@ -68,6 +68,8 @@
+ ReplicaSessionManager& _session;
+ int _nodeSessionTimeout;
+ int _replicaSessionTimeout;
++ bool _requireNodeCertCN;
++ bool _requireReplicaCertCN;
+ };
+
+ };
diff -urN files/patch-ice.cpp.src.IceGrid.NodeSessionManager.cpp.diff.orig files/patch-ice.cpp.src.IceGrid.NodeSessionManager.cpp.diff
--- files/patch-ice.cpp.src.IceGrid.NodeSessionManager.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceGrid.NodeSessionManager.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,17 @@
+--- Ice-3.4.2.orig/cpp/src/IceGrid/NodeSessionManager.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceGrid/NodeSessionManager.cpp 2012-03-04 19:55:44.000000000 +0100
+@@ -110,6 +110,14 @@
+ }
+ exception.reset(ex.ice_clone());
+ }
++ catch(const PermissionDeniedException& ex)
++ {
++ if(traceLevels)
++ {
++ traceLevels->logger->error("connection to the the registry `" + _name + "' was denied:\n" + ex.reason);
++ }
++ exception.reset(ex.ice_clone());
++ }
+ catch(const Ice::Exception& ex)
+ {
+ exception.reset(ex.ice_clone());
diff -urN files/patch-ice.cpp.src.IceGrid.ReplicaCache.cpp.diff.orig files/patch-ice.cpp.src.IceGrid.ReplicaCache.cpp.diff
--- files/patch-ice.cpp.src.IceGrid.ReplicaCache.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceGrid.ReplicaCache.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,11 @@
+--- Ice-3.4.2.orig/cpp/src/IceGrid/ReplicaCache.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceGrid/ReplicaCache.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -40,7 +40,7 @@
+ Lock sync(*this);
+
+ ReplicaEntryPtr entry;
+- while(entry = getImpl(name))
++ while((entry = getImpl(name)))
+ {
+ ReplicaSessionIPtr session = entry->getSession();
+ if(session->isDestroyed())
diff -urN files/patch-ice.cpp.src.IceGrid.ReplicaSessionManager.cpp.diff.orig files/patch-ice.cpp.src.IceGrid.ReplicaSessionManager.cpp.diff
--- files/patch-ice.cpp.src.IceGrid.ReplicaSessionManager.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceGrid.ReplicaSessionManager.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,17 @@
+--- Ice-3.4.2.orig/cpp/src/IceGrid/ReplicaSessionManager.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceGrid/ReplicaSessionManager.cpp 2012-03-04 19:55:44.000000000 +0100
+@@ -500,6 +500,14 @@
+ }
+ exception.reset(ex.ice_clone());
+ }
++ catch(const PermissionDeniedException& ex)
++ {
++ if(_traceLevels)
++ {
++ _traceLevels->logger->error("connection to the the registry `" + _name + "' was denied:\n" + ex.reason);
++ }
++ exception.reset(ex.ice_clone());
++ }
+ catch(const Ice::Exception& ex)
+ {
+ exception.reset(ex.ice_clone());
diff -urN files/patch-ice.cpp.src.IceGrid.SessionI.h.diff.orig files/patch-ice.cpp.src.IceGrid.SessionI.h.diff
--- files/patch-ice.cpp.src.IceGrid.SessionI.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceGrid.SessionI.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,11 @@
+--- Ice-3.4.2.orig/cpp/src/IceGrid/SessionI.h 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceGrid/SessionI.h 2012-03-04 20:14:53.000000000 +0100
+@@ -35,7 +35,7 @@
+ class SessionI;
+ typedef IceUtil::Handle SessionIPtr;
+
+-class BaseSessionI : virtual Ice::Object, public IceUtil::Mutex
++class BaseSessionI : virtual public Ice::Object, public IceUtil::Mutex
+ {
+ public:
+
diff -urN files/patch-ice.cpp.src.IceSSL.Instance.cpp.diff.orig files/patch-ice.cpp.src.IceSSL.Instance.cpp.diff
--- files/patch-ice.cpp.src.IceSSL.Instance.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceSSL.Instance.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,11 @@
+--- Ice-3.4.2.orig/cpp/src/IceSSL/Instance.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceSSL/Instance.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -38,7 +38,7 @@
+ using namespace Ice;
+ using namespace IceSSL;
+
+-IceUtil::Shared* IceInternal::upCast(IceSSL::Instance* p) { return p; }
++IceUtil::Shared* IceSSL::upCast(IceSSL::Instance* p) { return p; }
+
+ namespace
+ {
diff -urN files/patch-ice.cpp.src.IceSSL.InstanceF.h.diff.orig files/patch-ice.cpp.src.IceSSL.InstanceF.h.diff
--- files/patch-ice.cpp.src.IceSSL.InstanceF.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceSSL.InstanceF.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,17 @@
+--- Ice-3.4.2.orig/cpp/src/IceSSL/InstanceF.h 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceSSL/InstanceF.h 2012-03-04 20:14:53.000000000 +0100
+@@ -18,13 +18,13 @@
+ {
+
+ class Instance;
++IceUtil::Shared* upCast(IceSSL::Instance*);
+
+ }
+
+ namespace IceInternal
+ {
+
+-IceUtil::Shared* upCast(IceSSL::Instance*);
+
+ }
+
diff -urN files/patch-ice.cpp.src.IceSSL.TrustManager.cpp.diff.orig files/patch-ice.cpp.src.IceSSL.TrustManager.cpp.diff
--- files/patch-ice.cpp.src.IceSSL.TrustManager.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceSSL.TrustManager.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,11 @@
+--- Ice-3.4.2.orig/cpp/src/IceSSL/TrustManager.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceSSL/TrustManager.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -20,7 +20,7 @@
+ using namespace std;
+ using namespace IceSSL;
+
+-IceUtil::Shared* IceInternal::upCast(IceSSL::TrustManager* p) { return p; }
++IceUtil::Shared* IceSSL::upCast(IceSSL::TrustManager* p) { return p; }
+
+ TrustManager::TrustManager(const Ice::CommunicatorPtr& communicator) :
+ _communicator(communicator)
diff -urN files/patch-ice.cpp.src.IceSSL.TrustManagerF.h.diff.orig files/patch-ice.cpp.src.IceSSL.TrustManagerF.h.diff
--- files/patch-ice.cpp.src.IceSSL.TrustManagerF.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceSSL.TrustManagerF.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,17 @@
+--- Ice-3.4.2.orig/cpp/src/IceSSL/TrustManagerF.h 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceSSL/TrustManagerF.h 2012-03-04 20:14:53.000000000 +0100
+@@ -18,13 +18,13 @@
+ {
+
+ class TrustManager;
++IceUtil::Shared* upCast(IceSSL::TrustManager*);
+
+ }
+
+ namespace IceInternal
+ {
+
+-IceUtil::Shared* upCast(IceSSL::TrustManager*);
+
+ }
+
diff -urN files/patch-ice.cpp.src.IceSSL.Util.cpp.diff.orig files/patch-ice.cpp.src.IceSSL.Util.cpp.diff
--- files/patch-ice.cpp.src.IceSSL.Util.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceSSL.Util.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,11 @@
+--- Ice-3.4.2.orig/cpp/src/IceSSL/Util.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceSSL/Util.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -175,7 +175,7 @@
+ return dh;
+ }
+
+-IceUtil::Shared* IceInternal::upCast(IceSSL::DHParams* p) { return p; }
++IceUtil::Shared* IceSSL::upCast(IceSSL::DHParams* p) { return p; }
+
+ IceSSL::DHParams::DHParams() :
+ _dh512(0), _dh1024(0), _dh2048(0), _dh4096(0)
diff -urN files/patch-ice.cpp.src.IceSSL.UtilF.h.diff.orig files/patch-ice.cpp.src.IceSSL.UtilF.h.diff
--- files/patch-ice.cpp.src.IceSSL.UtilF.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceSSL.UtilF.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,17 @@
+--- Ice-3.4.2.orig/cpp/src/IceSSL/UtilF.h 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceSSL/UtilF.h 2012-03-04 20:14:53.000000000 +0100
+@@ -21,13 +21,13 @@
+ {
+
+ class DHParams;
++IceUtil::Shared* upCast(IceSSL::DHParams*);
+
+ }
+
+ namespace IceInternal
+ {
+
+-IceUtil::Shared* upCast(IceSSL::DHParams*);
+
+ }
+
diff -urN files/patch-ice.cpp.src.IceStorm.NodeI.cpp.diff.orig files/patch-ice.cpp.src.IceStorm.NodeI.cpp.diff
--- files/patch-ice.cpp.src.IceStorm.NodeI.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceStorm.NodeI.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,14 @@
+--- Ice-3.4.2.orig/cpp/src/IceStorm/NodeI.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceStorm/NodeI.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -18,11 +18,6 @@
+ namespace
+ {
+
+-bool operator==(const GroupNodeInfo& info, int id)
+-{
+- return info.id == id;
+-}
+-
+ class CheckTask : public IceUtil::TimerTask
+ {
+ const NodeIPtr _node;
diff -urN files/patch-ice.cpp.src.IceUtil.Cond.cpp.diff.orig files/patch-ice.cpp.src.IceUtil.Cond.cpp.diff
--- files/patch-ice.cpp.src.IceUtil.Cond.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceUtil.Cond.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,15 @@
+--- Ice-3.4.2.orig/cpp/src/IceUtil/Cond.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceUtil/Cond.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -330,8 +330,11 @@
+
+ IceUtil::Cond::~Cond()
+ {
++#ifndef NDEBUG
+ int rc = 0;
+- rc = pthread_cond_destroy(&_cond);
++ rc =
++#endif
++ pthread_cond_destroy(&_cond);
+ assert(rc == 0);
+ }
+
diff -urN files/patch-ice.cpp.src.IceUtil.CountDownLatch.cpp.diff.orig files/patch-ice.cpp.src.IceUtil.CountDownLatch.cpp.diff
--- files/patch-ice.cpp.src.IceUtil.CountDownLatch.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceUtil.CountDownLatch.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,21 @@
+--- Ice-3.4.2.orig/cpp/src/IceUtil/CountDownLatch.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceUtil/CountDownLatch.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -44,10 +44,16 @@
+ #ifdef _WIN32
+ CloseHandle(_event);
+ #else
++#ifndef NDEBUG
+ int rc = 0;
+- rc = pthread_mutex_destroy(&_mutex);
++ rc =
++#endif
++ pthread_mutex_destroy(&_mutex);
+ assert(rc == 0);
+- rc = pthread_cond_destroy(&_cond);
++#ifndef NDEBUG
++ rc =
++#endif
++ pthread_cond_destroy(&_cond);
+ assert(rc == 0);
+ #endif
+ }
diff -urN files/patch-ice.cpp.src.IceUtil.CtrlCHandler.cpp.diff.orig files/patch-ice.cpp.src.IceUtil.CtrlCHandler.cpp.diff
--- files/patch-ice.cpp.src.IceUtil.CtrlCHandler.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceUtil.CtrlCHandler.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,49 @@
+--- Ice-3.4.2.orig/cpp/src/IceUtil/CtrlCHandler.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceUtil/CtrlCHandler.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -219,29 +219,41 @@
+ sigaddset(&ctrlCLikeSignals, SIGHUP);
+ sigaddset(&ctrlCLikeSignals, SIGINT);
+ sigaddset(&ctrlCLikeSignals, SIGTERM);
+- int rc = pthread_sigmask(SIG_BLOCK, &ctrlCLikeSignals, 0);
++#ifndef NDEBUG
++ int rc =
++#endif
++ pthread_sigmask(SIG_BLOCK, &ctrlCLikeSignals, 0);
+ assert(rc == 0);
+
+ // Joinable thread
+- rc = pthread_create(&_tid, 0, sigwaitThread, 0);
++#ifndef NDEBUG
++ rc =
++#endif
++ pthread_create(&_tid, 0, sigwaitThread, 0);
+ assert(rc == 0);
+ }
+ }
+
+ CtrlCHandler::~CtrlCHandler()
+ {
+- int rc = pthread_cancel(_tid);
++#ifndef NDEBUG
++ int rc =
++#endif
++ pthread_cancel(_tid);
+ assert(rc == 0);
+ #if defined(__APPLE__)
+ //
+ // WORKAROUND: sigwait isn't a cancellation point on MacOS X, see
+ // comment in sigwaitThread
+ //
+- rc = pthread_kill(_tid, SIGTERM);
++ pthread_kill(_tid, SIGTERM);
+ //assert(rc == 0); For some reaosns, this assert is sometime triggered
+ #endif
+ void* status = 0;
+- rc = pthread_join(_tid, &status);
++#ifndef NDEBUG
++ rc =
++#endif
++ pthread_join(_tid, &status);
+ assert(rc == 0);
+ #if !defined(__APPLE__)
+ assert(status == PTHREAD_CANCELED);
diff -urN files/patch-ice.cpp.src.IceUtil.FileUtil.cpp.diff.orig files/patch-ice.cpp.src.IceUtil.FileUtil.cpp.diff
--- files/patch-ice.cpp.src.IceUtil.FileUtil.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceUtil.FileUtil.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,13 @@
+--- Ice-3.4.2.orig/cpp/src/IceUtil/FileUtil.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceUtil/FileUtil.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -26,6 +26,10 @@
+ # include
+ #endif
+
++#ifdef __FreeBSD__
++# include
++#endif
++
+ using namespace std;
+
+ //
diff -urN files/patch-ice.cpp.src.IceUtil.RecMutex.cpp.diff.orig files/patch-ice.cpp.src.IceUtil.RecMutex.cpp.diff
--- files/patch-ice.cpp.src.IceUtil.RecMutex.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.IceUtil.RecMutex.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,28 @@
+--- Ice-3.4.2.orig/cpp/src/IceUtil/RecMutex.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/IceUtil/RecMutex.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -148,8 +148,11 @@
+ IceUtil::RecMutex::~RecMutex()
+ {
+ assert(_count == 0);
++#ifndef NDEBUG
+ int rc = 0;
+- rc = pthread_mutex_destroy(&_mutex);
++ rc =
++#endif
++ pthread_mutex_destroy(&_mutex);
+ assert(rc == 0);
+ }
+
+@@ -196,8 +199,11 @@
+ {
+ if(--_count == 0)
+ {
++#ifndef NDEBUG
+ int rc = 0; // Prevent warnings when NDEBUG is defined.
+- rc = pthread_mutex_unlock(&_mutex);
++ rc =
++#endif
++ pthread_mutex_unlock(&_mutex);
+ assert(rc == 0);
+ }
+ }
diff -urN files/patch-ice.cpp.src.Slice.CPlusPlusUtil.cpp.diff.orig files/patch-ice.cpp.src.Slice.CPlusPlusUtil.cpp.diff
--- files/patch-ice.cpp.src.Slice.CPlusPlusUtil.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Slice.CPlusPlusUtil.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,20 @@
+--- Ice-3.4.2.orig/cpp/src/Slice/CPlusPlusUtil.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/Slice/CPlusPlusUtil.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -631,7 +631,7 @@
+ string scope = fixKwd(cl->scope());
+ if(marshal)
+ {
+- out << nl << stream << deref << "write(::Ice::ObjectPtr(::IceInternal::upCast(" << fixedParam
++ out << nl << stream << deref << "write(::Ice::ObjectPtr(" << scope << "upCast(" << fixedParam
+ << ".get())));";
+ }
+ else
+@@ -649,7 +649,7 @@
+ string scope = fixKwd(px->_class()->scope());
+ if(marshal)
+ {
+- out << nl << stream << deref << "write(::Ice::ObjectPrx(::IceInternal::upCast(" << fixedParam
++ out << nl << stream << deref << "write(::Ice::ObjectPrx(::IceProxy" << scope << "upCast(" << fixedParam
+ << ".get())));";
+ }
+ else
diff -urN files/patch-ice.cpp.src.Slice.FileTracker.cpp.diff.orig files/patch-ice.cpp.src.Slice.FileTracker.cpp.diff
--- files/patch-ice.cpp.src.Slice.FileTracker.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.Slice.FileTracker.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,13 @@
+--- Ice-3.4.2.orig/cpp/src/Slice/FileTracker.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/Slice/FileTracker.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -17,6 +17,10 @@
+ # include
+ #endif
+
++#ifdef __FreeBSD__
++# include
++#endif
++
+ using namespace std;
+
+ Slice::FileException::FileException(const char* file, int line, const string& r) :
diff -urN files/patch-ice.cpp.src.slice2cpp.Gen.cpp.diff.orig files/patch-ice.cpp.src.slice2cpp.Gen.cpp.diff
--- files/patch-ice.cpp.src.slice2cpp.Gen.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.slice2cpp.Gen.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,111 @@
+--- Ice-3.4.2.orig/cpp/src/slice2cpp/Gen.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/slice2cpp/Gen.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -1944,8 +1944,10 @@
+ }
+
+ string name = fixKwd(p->name());
++ string scoped = fixKwd(p->scoped());
+
+ H << sp << nl << "class " << name << ';';
++ H << nl << _dllExport << "::IceProxy::Ice::Object* upCast(::IceProxy" << scoped << "*);";
+ }
+
+ Slice::Gen::ProxyVisitor::ProxyVisitor(Output& h, Output& c, const string& dllExport) :
+@@ -3691,10 +3693,22 @@
+ Slice::Gen::ObjectDeclVisitor::visitClassDecl(const ClassDeclPtr& p)
+ {
+ string name = fixKwd(p->name());
++ string scoped = fixKwd(p->scoped());
+
+ H << sp << nl << "class " << name << ';';
+ H << nl << "bool operator==(const " << name << "&, const " << name << "&);";
+ H << nl << "bool operator<(const " << name << "&, const " << name << "&);";
++
++ H << sp;
++
++ if(!p->isLocal())
++ {
++ H << nl << _dllExport << "::Ice::Object* upCast(" << scoped << "*);";
++ }
++ else
++ {
++ H << nl << _dllExport << "::Ice::LocalObject* upCast(" << scoped << "*);";
++ }
+ }
+
+ void
+@@ -4922,13 +4936,13 @@
+ {
+ if((BuiltinPtr::dynamicCast(p) && BuiltinPtr::dynamicCast(p)->kind() == Builtin::KindObject)
+ || ClassDeclPtr::dynamicCast(p))
+- {
+- C << nl << "if(" << prefix << name << ')';
++ { C << nl << "if(" << prefix << name << ')';
+ C << sb;
+ ClassDeclPtr decl = ClassDeclPtr::dynamicCast(p);
+ if(decl)
+ {
+- C << nl << "::IceInternal::upCast(" << prefix << name << ".get())->__addObject(_c);";
++ string scope = fixKwd(decl->scope());
++ C << nl << scope << "upCast(" << prefix << name << ".get())->__addObject(_c);";
+ }
+ else
+ {
+@@ -4991,9 +5005,10 @@
+ ClassDeclPtr decl = ClassDeclPtr::dynamicCast(p);
+ if(decl)
+ {
+- C << nl << "if(" << "::IceInternal::upCast(" << prefix << name << ".get())->__usesClasses())";
++ string scope = fixKwd(decl->scope());
++ C << nl << "if(" << scope << "upCast(" << prefix << name << ".get())->__usesClasses())";
+ C << sb;
+- C << nl << "::IceInternal::upCast(" << prefix << name << ".get())->__decRefUnsafe();";
++ C << nl << scope << "upCast(" << prefix << name << ".get())->__decRefUnsafe();";
+ C << nl << prefix << name << ".__clearHandleUnsafe();";
+
+ }
+@@ -5629,40 +5644,30 @@
+ {
+ string scoped = fixKwd(p->scoped());
+
+- H << sp;
+-
+- if(!p->isLocal())
+- {
+- H << nl << _dllExport << "::Ice::Object* upCast(" << scoped << "*);";
+- H << nl << _dllExport << "::IceProxy::Ice::Object* upCast(::IceProxy" << scoped << "*);";
+- }
+- else
+- {
+- H << nl << _dllExport << "::Ice::LocalObject* upCast(" << scoped << "*);";
+- }
+ }
+
+ bool
+ Slice::Gen::IceInternalVisitor::visitClassDefStart(const ClassDefPtr& p)
+ {
+ string scoped = fixKwd(p->scoped());
++ string scope = fixKwd(p->scope());
+
+ C << sp;
+ if(!p->isLocal())
+ {
+ C << nl
+ << (_dllExport.empty() ? "" : "ICE_DECLSPEC_EXPORT ")
+- << "::Ice::Object* IceInternal::upCast(" << scoped << "* p) { return p; }";
++ << "::Ice::Object* " << scope << "upCast(" << scoped << "* p) { return p; }";
+ C << nl
+ << (_dllExport.empty() ? "" : "ICE_DECLSPEC_EXPORT ")
+- << "::IceProxy::Ice::Object* IceInternal::upCast(::IceProxy" << scoped
++ << "::IceProxy::Ice::Object* IceProxy" << scope << "upCast(::IceProxy" << scoped
+ << "* p) { return p; }";
+ }
+ else
+ {
+ C << nl
+ << (_dllExport.empty() ? "" : "ICE_DECLSPEC_EXPORT ")
+- << "::Ice::LocalObject* IceInternal::upCast(" << scoped << "* p) { return p; }";
++ << "::Ice::LocalObject* " << scope << "upCast(" << scoped << "* p) { return p; }";
+ }
+
+ return true;
diff -urN files/patch-ice.cpp.src.slice2cs.Gen.cpp.diff.orig files/patch-ice.cpp.src.slice2cs.Gen.cpp.diff
--- files/patch-ice.cpp.src.slice2cs.Gen.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.slice2cs.Gen.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,28 @@
+--- Ice-3.4.2.orig/cpp/src/slice2cs/Gen.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/slice2cs/Gen.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -1281,7 +1281,7 @@
+ {
+ _out << value << "F";
+ }
+- else if(ep = EnumPtr::dynamicCast(type))
++ else if((ep = EnumPtr::dynamicCast(type)))
+ {
+ string enumName = fixId(ep->scoped());
+ string::size_type colon = value.rfind(':');
+@@ -3914,16 +3914,6 @@
+ ClassDefPtr cl = ClassDefPtr::dynamicCast(p->container());
+ string name = fixId(p->name(), DotNet::ICloneable, true);
+ vector params = getParams(p);
+- bool hasOutParams = false;
+- ParamDeclList paramList = p->parameters();
+- for(ParamDeclList::const_iterator pli = paramList.begin(); pli != paramList.end(); ++pli)
+- {
+- if((*pli)->isOutParam())
+- {
+- hasOutParams = true;
+- break;
+- }
+- }
+
+ _out << sp;
+
diff -urN files/patch-ice.cpp.src.slice2java.Gen.cpp.diff.orig files/patch-ice.cpp.src.slice2java.Gen.cpp.diff
--- files/patch-ice.cpp.src.slice2java.Gen.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.src.slice2java.Gen.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,20 @@
+--- Ice-3.4.2.orig/cpp/src/slice2java/Gen.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/src/slice2java/Gen.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -1246,7 +1246,7 @@
+ {
+ BuiltinPtr bp;
+ EnumPtr ep;
+- if(bp = BuiltinPtr::dynamicCast(type))
++ if((bp = BuiltinPtr::dynamicCast(type)))
+ {
+ switch(bp->kind())
+ {
+@@ -1349,7 +1349,7 @@
+ }
+
+ }
+- else if(ep = EnumPtr::dynamicCast(type))
++ else if((ep = EnumPtr::dynamicCast(type)))
+ {
+ string val = value;
+ string::size_type pos = val.rfind(':');
diff -urN files/patch-ice.cpp.test.Glacier2.ssl.Server.cpp.diff.orig files/patch-ice.cpp.test.Glacier2.ssl.Server.cpp.diff
--- files/patch-ice.cpp.test.Glacier2.ssl.Server.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.test.Glacier2.ssl.Server.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,43 @@
+--- Ice-3.4.2.orig/cpp/test/Glacier2/ssl/Server.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/test/Glacier2/ssl/Server.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -31,9 +31,15 @@
+ test(ctx["_con.type"] == "ssl");
+ test(ctx["_con.localPort"] == "12348");
+ }
+- test(ctx["_con.localAddress"] == "127.0.0.1");
++ if (!inFreeBSDJail())
++ {
++ test(ctx["_con.localAddress"] == "127.0.0.1");
++ }
+ test(ctx["_con.remotePort"] != "");
+- test(ctx["_con.remoteAddress"] == "127.0.0.1");
++ if (!inFreeBSDJail())
++ {
++ test(ctx["_con.remoteAddress"] == "127.0.0.1");
++ }
+ }
+
+ }
+@@ -99,7 +105,7 @@
+ }
+
+ virtual void
+- ice_ping(const Ice::Current& current)
++ ice_ping(const Ice::Current& current) const
+ {
+ testContext(_ssl, current.ctx);
+ }
+@@ -133,8 +139,11 @@
+ {
+ testContext(true, current.ctx);
+
+- test(info.remoteHost == "127.0.0.1");
+- test(info.localHost == "127.0.0.1");
++ if (!inFreeBSDJail())
++ {
++ test(info.remoteHost == "127.0.0.1");
++ test(info.localHost == "127.0.0.1");
++ }
+ test(info.localPort == 12348);
+
+ try
diff -urN files/patch-ice.cpp.test.Ice.background.EndpointI.h.diff.orig files/patch-ice.cpp.test.Ice.background.EndpointI.h.diff
--- files/patch-ice.cpp.test.Ice.background.EndpointI.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.test.Ice.background.EndpointI.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,11 @@
+--- Ice-3.4.2.orig/cpp/test/Ice/background/EndpointI.h 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/test/Ice/background/EndpointI.h 2012-03-04 20:14:53.000000000 +0100
+@@ -48,7 +48,7 @@
+
+ virtual Ice::Int hashInit() const;
+ #if !defined(_MSC_VER) || _MSC_VER > 1300
+- using IceInternal::EndpointI::connectors;
++ using ::IceInternal::EndpointI::connectors;
+ #endif
+
+ private:
diff -urN files/patch-ice.cpp.test.Ice.custom.AllTests.cpp.diff.orig files/patch-ice.cpp.test.Ice.custom.AllTests.cpp.diff
--- files/patch-ice.cpp.test.Ice.custom.AllTests.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.test.Ice.custom.AllTests.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,32 @@
+--- Ice-3.4.2.orig/cpp/test/Ice/custom/AllTests.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/test/Ice/custom/AllTests.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -1384,7 +1384,8 @@
+ const ::Test::ClassStructSeq& seq,
+ const InParamPtr& cookie)
+ {
+- pair< ::Test::ClassStructPtr, ::Test::ClassStructSeq> in = getIn(in, cookie);
++ pair< ::Test::ClassStructPtr, ::Test::ClassStructSeq> in;
++ in = getIn(in, cookie);
+ test(ret == in.first);
+ test(cs1 == in.first);
+ test(seq == in.second);
+@@ -1432,7 +1433,8 @@
+
+ void throwExcept1(const Ice::AsyncResultPtr& result)
+ {
+- wstring in = getIn(in, InParamPtr::dynamicCast(result->getCookie()));
++ wstring in;
++ in = getIn(in, InParamPtr::dynamicCast(result->getCookie()));
+ try
+ {
+ Test1::WstringClassPrx t = Test1::WstringClassPrx::uncheckedCast(result->getProxy());
+@@ -1451,7 +1453,8 @@
+
+ void throwExcept2(const Ice::AsyncResultPtr& result)
+ {
+- wstring in = getIn(in, InParamPtr::dynamicCast(result->getCookie()));
++ wstring in;
++ in = getIn(in, InParamPtr::dynamicCast(result->getCookie()));
+ try
+ {
+ Test2::WstringClassPrx t = Test2::WstringClassPrx::uncheckedCast(result->getProxy());
diff -urN files/patch-ice.cpp.test.Ice.info.AllTests.cpp.diff.orig files/patch-ice.cpp.test.Ice.info.AllTests.cpp.diff
--- files/patch-ice.cpp.test.Ice.info.AllTests.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.test.Ice.info.AllTests.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,31 @@
+--- Ice-3.4.2.orig/cpp/test/Ice/info/AllTests.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/test/Ice/info/AllTests.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -141,9 +141,11 @@
+ test(info->adapterName.empty());
+ test(info->localPort > 0);
+ test(info->remotePort == 12010);
+- test(info->remoteAddress == defaultHost);
+- test(info->localAddress == defaultHost);
+-
++ if (!inFreeBSDJail())
++ {
++ test(info->remoteAddress == defaultHost);
++ test(info->localAddress == defaultHost);
++ }
+ ostringstream os;
+
+ Ice::Context ctx = testIntf->getConnectionInfoAsContext();
+@@ -163,8 +165,11 @@
+ test(info->adapterName.empty());
+ test(info->localPort > 0);
+ test(info->remotePort == 12010);
+- test(info->remoteAddress ==defaultHost);
+- test(info->localAddress == defaultHost);
++ if (!inFreeBSDJail())
++ {
++ test(info->remoteAddress == defaultHost);
++ test(info->localAddress == defaultHost);
++ }
+ }
+ cout << "ok" << endl;
+
diff -urN files/patch-ice.cpp.test.Ice.properties.run.py.diff.orig files/patch-ice.cpp.test.Ice.properties.run.py.diff
--- files/patch-ice.cpp.test.Ice.properties.run.py.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.test.Ice.properties.run.py.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,18 @@
+--- Ice-3.4.2.orig/cpp/test/Ice/properties/run.py 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/test/Ice/properties/run.py 2012-03-04 20:14:53.000000000 +0100
+@@ -26,7 +26,7 @@
+ #
+ # Write config
+ #
+-configPath = u"./config/中国_client.config"
++configPath = u"./config/中国_client.config".encode("utf-8")
+
+ TestUtil.createConfig(configPath,
+ ["# Automatically generated by Ice test driver.",
+@@ -38,4 +38,4 @@
+ TestUtil.simpleTest(client)
+
+ if os.path.exists(configPath):
+- os.remove(configPath)
+\ No newline at end of file
++ os.remove(configPath)
diff -urN files/patch-ice.cpp.test.IceUtil.unicode.Client.cpp.diff.orig files/patch-ice.cpp.test.IceUtil.unicode.Client.cpp.diff
--- files/patch-ice.cpp.test.IceUtil.unicode.Client.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.test.IceUtil.unicode.Client.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,13 @@
+--- Ice-3.4.2.orig/cpp/test/IceUtil/unicode/Client.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/test/IceUtil/unicode/Client.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -15,6 +15,10 @@
+ # include
+ #endif
+
++#ifdef __FreeBSD__
++# include
++#endif
++
+ using namespace IceUtil;
+ using namespace std;
+
diff -urN files/patch-ice.cpp.test.Slice.keyword.Client.cpp.diff.orig files/patch-ice.cpp.test.Slice.keyword.Client.cpp.diff
--- files/patch-ice.cpp.test.Slice.keyword.Client.cpp.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.test.Slice.keyword.Client.cpp.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,20 @@
+--- Ice-3.4.2.orig/cpp/test/Slice/keyword/Client.cpp 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/test/Slice/keyword/Client.cpp 2012-03-04 20:14:53.000000000 +0100
+@@ -73,6 +73,9 @@
+ virtual void ice_response(Ice::Int) {}
+ virtual void ice_exception(const ::Ice::Exception&) {}
+ };
++
++template
++void unused(T const &) { }
+
+ //
+ // This section of the test is present to ensure that the C++ types
+@@ -86,6 +89,7 @@
+
+ _cpp_and::_cpp_auto b;
+ b._cpp_default = 0;
++ unused(b);
+
+ _cpp_and::deletePtr c = new _cpp_and::_cpp_delete();
+ c->_cpp_else = "";
diff -urN files/patch-ice.cpp.test.include.TestCommon.h.diff.orig files/patch-ice.cpp.test.include.TestCommon.h.diff
--- files/patch-ice.cpp.test.include.TestCommon.h.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.cpp.test.include.TestCommon.h.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,25 @@
+--- Ice-3.4.2.orig/cpp/test/include/TestCommon.h 2011-06-15 21:43:59.000000000 +0200
++++ Ice-3.4.2/cpp/test/include/TestCommon.h 2012-03-04 20:14:53.000000000 +0100
+@@ -17,6 +17,22 @@
+ #include
+ #endif
+
++#if defined(__FreeBSD__)
++# include
++# include
++inline bool inFreeBSDJail()
++{
++ int jailed;
++ size_t size = sizeof(jailed);
++ return (sysctlbyname("security.jail.jailed", &jailed, &size, NULL, 0) != -1 || jailed);
++}
++#else
++inline bool inFreeBSDJail()
++{
++ return false;
++}
++#endif
++
+ void
+ inline testFailed(const char* expr, const char* file, unsigned int line)
+ {
diff -urN files/patch-ice.scripts.TestUtil.py.diff.orig files/patch-ice.scripts.TestUtil.py.diff
--- files/patch-ice.scripts.TestUtil.py.diff.orig 1970-01-01 01:00:00.000000000 +0100
+++ files/patch-ice.scripts.TestUtil.py.diff 2012-03-05 13:36:28.000000000 +0100
@@ -0,0 +1,44 @@
+--- Ice-3.4.2.orig/scripts/TestUtil.py 2011-06-15 21:44:00.000000000 +0200
++++ Ice-3.4.2/scripts/TestUtil.py 2012-03-04 20:14:53.000000000 +0100
+@@ -74,6 +74,25 @@
+ def isLinux():
+ return sys.platform.startswith("linux")
+
++def isFreeBSD():
++ return sys.platform.startswith("freebsd")
++
++def sysctl(key):
++ p = subprocess.Popen("sysctl "+key, shell=1, stdout=subprocess.PIPE)
++ try:
++ result = p.communicate()[0].strip().split()[1]
++ except IndexError:
++ return 0
++ if sys.version_info >= (3,):
++ result = str(result, sys.stdout.encoding)
++ try:
++ return int(result)
++ except ValueError:
++ return result
++
++def isFreeBSDJail():
++ return isFreeBSD() and sysctl("security.jail.jailed")
++
+ def getCppCompiler():
+ compiler = ""
+ if os.environ.get("CPP_COMPILER", "") != "":
+@@ -1590,7 +1609,15 @@
+ if isDarwin() and "nodarwin" in config:
+ print "%s*** test not supported under Darwin%s" % (prefix, suffix)
+ continue
++
++ if isFreeBSD() and "nofreebsd" in config:
++ print "%s*** test not supported under FreeBSD%s" % (prefix, suffix)
++ continue
+
++ if isFreeBSDJail() and "nofreebsdjail" in config:
++ print "%s*** test not supported within a FreeBSD Jail%s" % (prefix, suffix)
++ continue
++
+ if not isWin32() and "win32only" in config:
+ print "%s*** test only supported under Win32%s" % (prefix, suffix)
+ continue