From owner-freebsd-ports-bugs@FreeBSD.ORG Mon Mar 5 03:30:06 2012 Return-Path: Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E5DCB1065676 for ; Mon, 5 Mar 2012 03:30:06 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id B300F8FC13 for ; Mon, 5 Mar 2012 03:30:06 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.5/8.14.5) with ESMTP id q253U6n5077093 for ; Mon, 5 Mar 2012 03:30:06 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.5/8.14.5/Submit) id q253U6wq077091; Mon, 5 Mar 2012 03:30:06 GMT (envelope-from gnats) Resent-Date: Mon, 5 Mar 2012 03:30:06 GMT Resent-Message-Id: <201203050330.q253U6wq077091@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Michael Gmelin Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 045AA106566C for ; Mon, 5 Mar 2012 03:21:05 +0000 (UTC) (envelope-from freebsd@grem.de) Received: from mail.grem.de (outcast.grem.de [213.239.217.27]) by mx1.freebsd.org (Postfix) with SMTP id AF52A8FC0C for ; Mon, 5 Mar 2012 03:21:03 +0000 (UTC) Received: (qmail 18388 invoked by uid 0); 5 Mar 2012 02:54:21 -0000 Message-Id: <20120305025421.18387.qmail@mail.grem.de> Date: 5 Mar 2012 02:54:21 -0000 From: Michael Gmelin To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Cc: Subject: ports/165702: [maintainer update] [patch] devel/ice: Support clang and gcc47, security fixes, cleanup X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 05 Mar 2012 03:30:07 -0000 >Number: 165702 >Category: ports >Synopsis: [maintainer update] [patch] devel/ice: Support clang and gcc47, security fixes, cleanup >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: maintainer-update >Submitter-Id: current-users >Arrival-Date: Mon Mar 05 03:30:06 UTC 2012 >Closed-Date: >Last-Modified: >Originator: Michael Gmelin >Release: FreeBSD 8.2-RELEASE amd64 >Organization: Grem Equity GmbH >Environment: System: System: FreeBSD bsd.grem.de 8.2-RELEASE-p1 FreeBSD 8.2-RELEASE-p1 #0: Sat May 7 08:49:13 UTC >Description: This update fixes a list of issues with devel/ice: 1. Support compilation with standards-compliant C++ compilers, especially lang/clang and lang/gcc4.7. This requires substantial changes which are fortunately backwards compatible, so compilation with older versions of gcc (especially gcc 4.2.1) still works as expected. See also: http://www.zeroc.com/forums/patches/5647-patch-compiling-ice-clang-gcc4-7-a.html 2. Patch to fix a critical memory leak in Glacier2 (Ice's firewall traversal service). See also: http://www.zeroc.com/forums/patches/5627-patch-3-ice-3-4-2-glacier2-memory-leak.html 3. Security patch to IceGrid (Ice's grid computing solution) to prevent node and registry name spoofing. See also: http://www.zeroc.com/forums/patches/5663-patch-prevent-icegrid-node-registry-replica-name-spoofing.html 4. Patches to Ice's unit tests to make them aware of FreeBSD. Add jail detection to disable unit tests that won't run inside of a jail. See also: http://www.zeroc.com/forums/patches/5646-improvements-unit-tests-fix-encoding-freebsd-support.html 5. Change Makefile so it actually runs Ice's unit tests. Until now these only have been compiled (which is time consuming) but never run. Add OPTIONS to allow the user to disable compilation of unit tests and demos to save build time. Provide test and regression-test targets. Added file(s): - files/patch-cpp-allTests.py - files/patch-cpp-demo-IceGrid-secure-README - files/patch-cpp-demo-IceGrid-secure-application.xml - files/patch-cpp-demo-IceGrid-secure-config.admin - files/patch-cpp-demo-IceGrid-secure-config.client - files/patch-cpp-demo-IceGrid-secure-config.master - files/patch-cpp-demo-IceGrid-secure-config.node - files/patch-cpp-demo-IceGrid-secure-config.registry - files/patch-cpp-demo-IceGrid-secure-config.slave - files/patch-cpp-demo-IceGrid-secure-makecerts.py - files/patch-cpp-include-Freeze-Map.h - files/patch-cpp-include-Ice-Buffer.h - files/patch-cpp-include-Ice-ConnectionIF.h - files/patch-cpp-include-Ice-IconvStringConverter.h - files/patch-cpp-include-Ice-IncomingAsyncF.h - files/patch-cpp-include-Ice-LocalObjectF.h - files/patch-cpp-include-Ice-ObjectF.h - files/patch-cpp-include-Ice-OutgoingAsyncF.h - files/patch-cpp-include-Ice-Proxy.h - files/patch-cpp-include-Ice-ProxyF.h - files/patch-cpp-include-Ice-Stream.h - files/patch-cpp-include-Ice-StreamF.h - files/patch-cpp-include-IceUtil-Mutex.h - files/patch-cpp-src-Freeze-MapDb.cpp - files/patch-cpp-src-Freeze-MapI.cpp - files/patch-cpp-src-Freeze-SharedDbEnv.cpp - files/patch-cpp-src-Glacier2-Blobject.cpp - files/patch-cpp-src-Glacier2-Blobject.h - files/patch-cpp-src-Glacier2-RequestQueue.cpp - files/patch-cpp-src-Glacier2-RequestQueue.h - files/patch-cpp-src-Glacier2-RouterI.cpp - files/patch-cpp-src-Ice-ConnectionI.cpp - files/patch-cpp-src-Ice-IncomingAsync.cpp - files/patch-cpp-src-Ice-LocalObject.cpp - files/patch-cpp-src-Ice-Object.cpp - files/patch-cpp-src-Ice-OutgoingAsync.cpp - files/patch-cpp-src-Ice-PropertyNames.cpp - files/patch-cpp-src-Ice-PropertyNames.h - files/patch-cpp-src-Ice-ProxyFactory.cpp - files/patch-cpp-src-Ice-Service.cpp - files/patch-cpp-src-Ice-Stream.cpp - files/patch-cpp-src-IceGrid-AdminCallbackRouter.cpp - files/patch-cpp-src-IceGrid-DescriptorHelper.cpp - files/patch-cpp-src-IceGrid-Internal.ice - files/patch-cpp-src-IceGrid-InternalRegistryI.cpp - files/patch-cpp-src-IceGrid-InternalRegistryI.h - files/patch-cpp-src-IceGrid-NodeSessionManager.cpp - files/patch-cpp-src-IceGrid-ReplicaCache.cpp - files/patch-cpp-src-IceGrid-ReplicaSessionManager.cpp - files/patch-cpp-src-IceGrid-SessionI.h - files/patch-cpp-src-IceSSL-Instance.cpp - files/patch-cpp-src-IceSSL-InstanceF.h - files/patch-cpp-src-IceSSL-TrustManager.cpp - files/patch-cpp-src-IceSSL-TrustManagerF.h - files/patch-cpp-src-IceSSL-Util.cpp - files/patch-cpp-src-IceSSL-UtilF.h - files/patch-cpp-src-IceStorm-NodeI.cpp - files/patch-cpp-src-IceUtil-Cond.cpp - files/patch-cpp-src-IceUtil-CountDownLatch.cpp - files/patch-cpp-src-IceUtil-CtrlCHandler.cpp - files/patch-cpp-src-IceUtil-FileUtil.cpp - files/patch-cpp-src-IceUtil-RecMutex.cpp - files/patch-cpp-src-Slice-CPlusPlusUtil.cpp - files/patch-cpp-src-Slice-FileTracker.cpp - files/patch-cpp-src-slice2cpp-Gen.cpp - files/patch-cpp-src-slice2cs-Gen.cpp - files/patch-cpp-src-slice2java-Gen.cpp - files/patch-cpp-test-Glacier2-ssl-Server.cpp - files/patch-cpp-test-Ice-background-EndpointI.h - files/patch-cpp-test-Ice-custom-AllTests.cpp - files/patch-cpp-test-Ice-info-AllTests.cpp - files/patch-cpp-test-Ice-properties-run.py - files/patch-cpp-test-IceUtil-unicode-Client.cpp - files/patch-cpp-test-Slice-keyword-Client.cpp - files/patch-cpp-test-include-TestCommon.h - files/patch-scripts-TestUtil.py Generated with FreeBSD Port Tools 0.99_4 (mode: change, diff: suffix) >How-To-Repeat: Check resources given in the description. >Fix: Apply the following patch by doing: cd /usr/ports/devel/ice patch -p0 < /path/to/Ice-3.4.2_2.patch --- Ice-3.4.2_2.patch begins here --- diff -ruN --exclude=CVS ../ice.orig/Makefile Makefile --- ../ice.orig/Makefile 2012-02-18 14:38:25.000000000 +0100 +++ Makefile 2012-03-05 02:14:10.000000000 +0100 @@ -7,7 +7,7 @@ PORTNAME= Ice PORTVERSION= 3.4.2 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= devel MASTER_SITES= http://download.zeroc.com/Ice/3.4/ @@ -17,6 +17,15 @@ LIB_DEPENDS= expat.6:${PORTSDIR}/textproc/expat2 \ mcpp.3:${PORTSDIR}/devel/mcpp +OPTIONS= TESTS "Build and run tests (requires lang/python)" on \ + DEMOS "Build demos" on + +.include + +.if defined(WITH_TESTS) +USE_PYTHON_BUILD= yes +.endif + USE_GMAKE= yes USE_ICONV= yes USE_BDB= 42+ @@ -45,6 +54,14 @@ MAKE_ENV= LP64=yes .endif +.if !defined(WITH_TESTS) +MAKE_ENV+= NOTESTS=yes +.endif + +.if !defined(WITH_DEMOS) +MAKE_ENV+= NODEMOS=yes +.endif + .if defined(NOPORTDOCS) MAKE_ENV+= NOPORTDOCS=yes .endif @@ -69,4 +86,12 @@ ${REINPLACE_CMD} '/LICENSE/s/prefix/install_slicedir/' \ ${WRKSRC}/config/Make.common.rules +.if defined(WITH_TESTS) +TEST_CMD= @cd ${BUILD_WRKSRC} && ${PYTHON_CMD} ./allTests.py +post-build: + ${TEST_CMD} +regression-test test: build + ${TEST_CMD} +.endif + .include diff -ruN --exclude=CVS ../ice.orig/files/patch-Makefile files/patch-Makefile --- ../ice.orig/files/patch-Makefile 2011-06-28 15:44:00.000000000 +0200 +++ files/patch-Makefile 2012-03-04 21:39:20.000000000 +0100 @@ -1,12 +1,26 @@ ---- cpp/Makefile.bak 2008-05-16 19:24:00.000000000 +0200 -+++ cpp/Makefile 2008-07-31 13:37:25.000000000 +0200 -@@ -12,6 +12,9 @@ +--- cpp.orig/Makefile 2012-03-04 21:38:42.000000000 +0100 ++++ cpp/Makefile 2012-03-04 21:38:42.000000000 +0100 +@@ -11,7 +11,22 @@ + include $(top_srcdir)/config/Make.rules - SUBDIRS = config src include test demo +-SUBDIRS = config src include test demo ++SUBDIRS = config src include ++ ++ifeq ($(NOTESTS),) ++SUBDIRS += test ++endif ++ ++ifeq ($(NODEMOS),) ++SUBDIRS += demo ++endif ++ +ifeq ($(NOPORTDOCS),) +SUBDIRS += doc +endif ++ ++ INSTALL_SUBDIRS = $(install_bindir) $(install_libdir) $(install_includedir) $(install_configdir) ++ INSTALL_SUBDIRS = $(install_bindir) $(install_libdir) $(install_includedir) $(install_configdir) diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-allTests.py files/patch-cpp-allTests.py --- ../ice.orig/files/patch-cpp-allTests.py 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-allTests.py 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,30 @@ +--- cpp.orig/allTests.py 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-demo-IceGrid-secure-README files/patch-cpp-demo-IceGrid-secure-README --- ../ice.orig/files/patch-cpp-demo-IceGrid-secure-README 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-demo-IceGrid-secure-README 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,15 @@ +--- cpp.orig/demo/IceGrid/secure/README 2011-06-15 21:44:00.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-demo-IceGrid-secure-application.xml files/patch-cpp-demo-IceGrid-secure-application.xml --- ../ice.orig/files/patch-cpp-demo-IceGrid-secure-application.xml 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-demo-IceGrid-secure-application.xml 2012-03-04 22:11:04.000000000 +0100 @@ -0,0 +1,13 @@ +--- cpp.orig/demo/IceGrid/secure/application.xml 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/demo/IceGrid/secure/application.xml 2012-03-04 19:55:44.000000000 +0100 +@@ -20,8 +20,8 @@ + + + +- +- ++ ++ + + + diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.admin files/patch-cpp-demo-IceGrid-secure-config.admin --- ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.admin 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-demo-IceGrid-secure-config.admin 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/demo/IceGrid/secure/config.admin 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.client files/patch-cpp-demo-IceGrid-secure-config.client --- ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.client 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-demo-IceGrid-secure-config.client 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/demo/IceGrid/secure/config.client 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.master files/patch-cpp-demo-IceGrid-secure-config.master --- ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.master 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-demo-IceGrid-secure-config.master 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,64 @@ +--- cpp.orig/demo/IceGrid/secure/config.master 2012-03-04 19:55:44.000000000 +0100 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.node files/patch-cpp-demo-IceGrid-secure-config.node --- ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.node 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-demo-IceGrid-secure-config.node 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,19 @@ +--- cpp.orig/demo/IceGrid/secure/config.node 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.registry files/patch-cpp-demo-IceGrid-secure-config.registry --- ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.registry 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-demo-IceGrid-secure-config.registry 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,57 @@ +--- cpp.orig/demo/IceGrid/secure/config.registry 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.slave files/patch-cpp-demo-IceGrid-secure-config.slave --- ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.slave 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-demo-IceGrid-secure-config.slave 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,69 @@ +--- cpp.orig/demo/IceGrid/secure/config.slave 2012-03-04 19:55:44.000000000 +0100 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-demo-IceGrid-secure-makecerts.py files/patch-cpp-demo-IceGrid-secure-makecerts.py --- ../ice.orig/files/patch-cpp-demo-IceGrid-secure-makecerts.py 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-demo-IceGrid-secure-makecerts.py 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,14 @@ +--- cpp.orig/demo/IceGrid/secure/makecerts.py 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Freeze-Map.h files/patch-cpp-include-Freeze-Map.h --- ../ice.orig/files/patch-cpp-include-Freeze-Map.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Freeze-Map.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/include/Freeze/Map.h 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-Buffer.h files/patch-cpp-include-Ice-Buffer.h --- ../ice.orig/files/patch-cpp-include-Ice-Buffer.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-Buffer.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,10 @@ +--- cpp.orig/include/Ice/Buffer.h 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-ConnectionIF.h files/patch-cpp-include-Ice-ConnectionIF.h --- ../ice.orig/files/patch-cpp-include-Ice-ConnectionIF.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-ConnectionIF.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,17 @@ +--- cpp.orig/include/Ice/ConnectionIF.h 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-IconvStringConverter.h files/patch-cpp-include-Ice-IconvStringConverter.h --- ../ice.orig/files/patch-cpp-include-Ice-IconvStringConverter.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-IconvStringConverter.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,21 @@ +--- cpp.orig/include/Ice/IconvStringConverter.h 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-IncomingAsyncF.h files/patch-cpp-include-Ice-IncomingAsyncF.h --- ../ice.orig/files/patch-cpp-include-Ice-IncomingAsyncF.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-IncomingAsyncF.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,15 @@ +--- cpp.orig/include/Ice/IncomingAsyncF.h 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-LocalObjectF.h files/patch-cpp-include-Ice-LocalObjectF.h --- ../ice.orig/files/patch-cpp-include-Ice-LocalObjectF.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-LocalObjectF.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,15 @@ +--- cpp.orig/include/Ice/LocalObjectF.h 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-ObjectF.h files/patch-cpp-include-Ice-ObjectF.h --- ../ice.orig/files/patch-cpp-include-Ice-ObjectF.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-ObjectF.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,22 @@ +--- cpp.orig/include/Ice/ObjectF.h 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-OutgoingAsyncF.h files/patch-cpp-include-Ice-OutgoingAsyncF.h --- ../ice.orig/files/patch-cpp-include-Ice-OutgoingAsyncF.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-OutgoingAsyncF.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,17 @@ +--- cpp.orig/include/Ice/OutgoingAsyncF.h 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-Proxy.h files/patch-cpp-include-Ice-Proxy.h --- ../ice.orig/files/patch-cpp-include-Ice-Proxy.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-Proxy.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,56 @@ +--- cpp.orig/include/Ice/Proxy.h 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-ProxyF.h files/patch-cpp-include-Ice-ProxyF.h --- ../ice.orig/files/patch-cpp-include-Ice-ProxyF.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-ProxyF.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,76 @@ +--- cpp.orig/include/Ice/ProxyF.h 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-Stream.h files/patch-cpp-include-Ice-Stream.h --- ../ice.orig/files/patch-cpp-include-Ice-Stream.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-Stream.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,79 @@ +--- cpp.orig/include/Ice/Stream.h 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-StreamF.h files/patch-cpp-include-Ice-StreamF.h --- ../ice.orig/files/patch-cpp-include-Ice-StreamF.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-StreamF.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,15 @@ +--- cpp.orig/include/Ice/StreamF.h 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-IceUtil-Mutex.h files/patch-cpp-include-IceUtil-Mutex.h --- ../ice.orig/files/patch-cpp-include-IceUtil-Mutex.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-IceUtil-Mutex.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,15 @@ +--- cpp.orig/include/IceUtil/Mutex.h 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Freeze-MapDb.cpp files/patch-cpp-src-Freeze-MapDb.cpp --- ../ice.orig/files/patch-cpp-src-Freeze-MapDb.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Freeze-MapDb.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,15 @@ +--- cpp.orig/src/Freeze/MapDb.cpp 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Freeze-MapI.cpp files/patch-cpp-src-Freeze-MapI.cpp --- ../ice.orig/files/patch-cpp-src-Freeze-MapI.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Freeze-MapI.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,41 @@ +--- cpp.orig/src/Freeze/MapI.cpp 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Freeze-SharedDbEnv.cpp files/patch-cpp-src-Freeze-SharedDbEnv.cpp --- ../ice.orig/files/patch-cpp-src-Freeze-SharedDbEnv.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Freeze-SharedDbEnv.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,15 @@ +--- cpp.orig/src/Freeze/SharedDbEnv.cpp 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Glacier2-Blobject.cpp files/patch-cpp-src-Glacier2-Blobject.cpp --- ../ice.orig/files/patch-cpp-src-Glacier2-Blobject.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Glacier2-Blobject.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,18 @@ +--- cpp.orig/src/Glacier2/Blobject.cpp 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Glacier2-Blobject.h files/patch-cpp-src-Glacier2-Blobject.h --- ../ice.orig/files/patch-cpp-src-Glacier2-Blobject.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Glacier2-Blobject.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/Glacier2/Blobject.h 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Glacier2-RequestQueue.cpp files/patch-cpp-src-Glacier2-RequestQueue.cpp --- ../ice.orig/files/patch-cpp-src-Glacier2-RequestQueue.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Glacier2-RequestQueue.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,74 @@ +--- cpp.orig/src/Glacier2/RequestQueue.cpp 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Glacier2-RequestQueue.h files/patch-cpp-src-Glacier2-RequestQueue.h --- ../ice.orig/files/patch-cpp-src-Glacier2-RequestQueue.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Glacier2-RequestQueue.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,23 @@ +--- cpp.orig/src/Glacier2/RequestQueue.h 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Glacier2-RouterI.cpp files/patch-cpp-src-Glacier2-RouterI.cpp --- ../ice.orig/files/patch-cpp-src-Glacier2-RouterI.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Glacier2-RouterI.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,15 @@ +--- cpp.orig/src/Glacier2/RouterI.cpp 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Ice-ConnectionI.cpp files/patch-cpp-src-Ice-ConnectionI.cpp --- ../ice.orig/files/patch-cpp-src-Ice-ConnectionI.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Ice-ConnectionI.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,27 @@ +--- cpp.orig/src/Ice/ConnectionI.cpp 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Ice-IncomingAsync.cpp files/patch-cpp-src-Ice-IncomingAsync.cpp --- ../ice.orig/files/patch-cpp-src-Ice-IncomingAsync.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Ice-IncomingAsync.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/Ice/IncomingAsync.cpp 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Ice-LocalObject.cpp files/patch-cpp-src-Ice-LocalObject.cpp --- ../ice.orig/files/patch-cpp-src-Ice-LocalObject.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Ice-LocalObject.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/Ice/LocalObject.cpp 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Ice-Object.cpp files/patch-cpp-src-Ice-Object.cpp --- ../ice.orig/files/patch-cpp-src-Ice-Object.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Ice-Object.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/Ice/Object.cpp 2011-06-15 21:43:58.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Ice-OutgoingAsync.cpp files/patch-cpp-src-Ice-OutgoingAsync.cpp --- ../ice.orig/files/patch-cpp-src-Ice-OutgoingAsync.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Ice-OutgoingAsync.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/Ice/OutgoingAsync.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Ice-PropertyNames.cpp files/patch-cpp-src-Ice-PropertyNames.cpp --- ../ice.orig/files/patch-cpp-src-Ice-PropertyNames.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Ice-PropertyNames.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,20 @@ +--- cpp.orig/src/Ice/PropertyNames.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Ice-PropertyNames.h files/patch-cpp-src-Ice-PropertyNames.h --- ../ice.orig/files/patch-cpp-src-Ice-PropertyNames.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Ice-PropertyNames.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/Ice/PropertyNames.h 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Ice-ProxyFactory.cpp files/patch-cpp-src-Ice-ProxyFactory.cpp --- ../ice.orig/files/patch-cpp-src-Ice-ProxyFactory.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Ice-ProxyFactory.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,10 @@ +--- cpp.orig/src/Ice/ProxyFactory.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Ice-Service.cpp files/patch-cpp-src-Ice-Service.cpp --- ../ice.orig/files/patch-cpp-src-Ice-Service.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Ice-Service.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,32 @@ +--- cpp.orig/src/Ice/Service.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Ice-Stream.cpp files/patch-cpp-src-Ice-Stream.cpp --- ../ice.orig/files/patch-cpp-src-Ice-Stream.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Ice-Stream.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,24 @@ +--- cpp.orig/src/Ice/Stream.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceGrid-AdminCallbackRouter.cpp files/patch-cpp-src-IceGrid-AdminCallbackRouter.cpp --- ../ice.orig/files/patch-cpp-src-IceGrid-AdminCallbackRouter.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceGrid-AdminCallbackRouter.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,16 @@ +--- cpp.orig/src/IceGrid/AdminCallbackRouter.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceGrid-DescriptorHelper.cpp files/patch-cpp-src-IceGrid-DescriptorHelper.cpp --- ../ice.orig/files/patch-cpp-src-IceGrid-DescriptorHelper.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceGrid-DescriptorHelper.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,35 @@ +--- cpp.orig/src/IceGrid/DescriptorHelper.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceGrid-Internal.ice files/patch-cpp-src-IceGrid-Internal.ice --- ../ice.orig/files/patch-cpp-src-IceGrid-Internal.ice 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceGrid-Internal.ice 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,20 @@ +--- cpp.orig/src/IceGrid/Internal.ice 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceGrid-InternalRegistryI.cpp files/patch-cpp-src-IceGrid-InternalRegistryI.cpp --- ../ice.orig/files/patch-cpp-src-IceGrid-InternalRegistryI.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceGrid-InternalRegistryI.cpp 2012-03-04 22:13:12.000000000 +0100 @@ -0,0 +1,136 @@ +--- cpp.orig/src/IceGrid/InternalRegistryI.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceGrid-InternalRegistryI.h files/patch-cpp-src-IceGrid-InternalRegistryI.h --- ../ice.orig/files/patch-cpp-src-IceGrid-InternalRegistryI.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceGrid-InternalRegistryI.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/IceGrid/InternalRegistryI.h 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceGrid-NodeSessionManager.cpp files/patch-cpp-src-IceGrid-NodeSessionManager.cpp --- ../ice.orig/files/patch-cpp-src-IceGrid-NodeSessionManager.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceGrid-NodeSessionManager.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,17 @@ +--- cpp.orig/src/IceGrid/NodeSessionManager.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceGrid-ReplicaCache.cpp files/patch-cpp-src-IceGrid-ReplicaCache.cpp --- ../ice.orig/files/patch-cpp-src-IceGrid-ReplicaCache.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceGrid-ReplicaCache.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/IceGrid/ReplicaCache.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceGrid-ReplicaSessionManager.cpp files/patch-cpp-src-IceGrid-ReplicaSessionManager.cpp --- ../ice.orig/files/patch-cpp-src-IceGrid-ReplicaSessionManager.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceGrid-ReplicaSessionManager.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,17 @@ +--- cpp.orig/src/IceGrid/ReplicaSessionManager.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceGrid-SessionI.h files/patch-cpp-src-IceGrid-SessionI.h --- ../ice.orig/files/patch-cpp-src-IceGrid-SessionI.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceGrid-SessionI.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/IceGrid/SessionI.h 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceSSL-Instance.cpp files/patch-cpp-src-IceSSL-Instance.cpp --- ../ice.orig/files/patch-cpp-src-IceSSL-Instance.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceSSL-Instance.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/IceSSL/Instance.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceSSL-InstanceF.h files/patch-cpp-src-IceSSL-InstanceF.h --- ../ice.orig/files/patch-cpp-src-IceSSL-InstanceF.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceSSL-InstanceF.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,17 @@ +--- cpp.orig/src/IceSSL/InstanceF.h 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceSSL-TrustManager.cpp files/patch-cpp-src-IceSSL-TrustManager.cpp --- ../ice.orig/files/patch-cpp-src-IceSSL-TrustManager.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceSSL-TrustManager.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/IceSSL/TrustManager.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceSSL-TrustManagerF.h files/patch-cpp-src-IceSSL-TrustManagerF.h --- ../ice.orig/files/patch-cpp-src-IceSSL-TrustManagerF.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceSSL-TrustManagerF.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,17 @@ +--- cpp.orig/src/IceSSL/TrustManagerF.h 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceSSL-Util.cpp files/patch-cpp-src-IceSSL-Util.cpp --- ../ice.orig/files/patch-cpp-src-IceSSL-Util.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceSSL-Util.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/IceSSL/Util.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceSSL-UtilF.h files/patch-cpp-src-IceSSL-UtilF.h --- ../ice.orig/files/patch-cpp-src-IceSSL-UtilF.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceSSL-UtilF.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,17 @@ +--- cpp.orig/src/IceSSL/UtilF.h 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceStorm-NodeI.cpp files/patch-cpp-src-IceStorm-NodeI.cpp --- ../ice.orig/files/patch-cpp-src-IceStorm-NodeI.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceStorm-NodeI.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,14 @@ +--- cpp.orig/src/IceStorm/NodeI.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceUtil-Cond.cpp files/patch-cpp-src-IceUtil-Cond.cpp --- ../ice.orig/files/patch-cpp-src-IceUtil-Cond.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceUtil-Cond.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,15 @@ +--- cpp.orig/src/IceUtil/Cond.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceUtil-CountDownLatch.cpp files/patch-cpp-src-IceUtil-CountDownLatch.cpp --- ../ice.orig/files/patch-cpp-src-IceUtil-CountDownLatch.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceUtil-CountDownLatch.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,21 @@ +--- cpp.orig/src/IceUtil/CountDownLatch.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceUtil-CtrlCHandler.cpp files/patch-cpp-src-IceUtil-CtrlCHandler.cpp --- ../ice.orig/files/patch-cpp-src-IceUtil-CtrlCHandler.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceUtil-CtrlCHandler.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,49 @@ +--- cpp.orig/src/IceUtil/CtrlCHandler.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceUtil-FileUtil.cpp files/patch-cpp-src-IceUtil-FileUtil.cpp --- ../ice.orig/files/patch-cpp-src-IceUtil-FileUtil.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceUtil-FileUtil.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,13 @@ +--- cpp.orig/src/IceUtil/FileUtil.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceUtil-RecMutex.cpp files/patch-cpp-src-IceUtil-RecMutex.cpp --- ../ice.orig/files/patch-cpp-src-IceUtil-RecMutex.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceUtil-RecMutex.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,28 @@ +--- cpp.orig/src/IceUtil/RecMutex.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Slice-CPlusPlusUtil.cpp files/patch-cpp-src-Slice-CPlusPlusUtil.cpp --- ../ice.orig/files/patch-cpp-src-Slice-CPlusPlusUtil.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Slice-CPlusPlusUtil.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,20 @@ +--- cpp.orig/src/Slice/CPlusPlusUtil.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Slice-FileTracker.cpp files/patch-cpp-src-Slice-FileTracker.cpp --- ../ice.orig/files/patch-cpp-src-Slice-FileTracker.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Slice-FileTracker.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,13 @@ +--- cpp.orig/src/Slice/FileTracker.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-slice2cpp-Gen.cpp files/patch-cpp-src-slice2cpp-Gen.cpp --- ../ice.orig/files/patch-cpp-src-slice2cpp-Gen.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-slice2cpp-Gen.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,111 @@ +--- cpp.orig/src/slice2cpp/Gen.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-slice2cs-Gen.cpp files/patch-cpp-src-slice2cs-Gen.cpp --- ../ice.orig/files/patch-cpp-src-slice2cs-Gen.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-slice2cs-Gen.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,28 @@ +--- cpp.orig/src/slice2cs/Gen.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-slice2java-Gen.cpp files/patch-cpp-src-slice2java-Gen.cpp --- ../ice.orig/files/patch-cpp-src-slice2java-Gen.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-slice2java-Gen.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,20 @@ +--- cpp.orig/src/slice2java/Gen.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-test-Glacier2-ssl-Server.cpp files/patch-cpp-test-Glacier2-ssl-Server.cpp --- ../ice.orig/files/patch-cpp-test-Glacier2-ssl-Server.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-test-Glacier2-ssl-Server.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,43 @@ +--- cpp.orig/test/Glacier2/ssl/Server.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-test-Ice-background-EndpointI.h files/patch-cpp-test-Ice-background-EndpointI.h --- ../ice.orig/files/patch-cpp-test-Ice-background-EndpointI.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-test-Ice-background-EndpointI.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/test/Ice/background/EndpointI.h 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-test-Ice-custom-AllTests.cpp files/patch-cpp-test-Ice-custom-AllTests.cpp --- ../ice.orig/files/patch-cpp-test-Ice-custom-AllTests.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-test-Ice-custom-AllTests.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,32 @@ +--- cpp.orig/test/Ice/custom/AllTests.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-test-Ice-info-AllTests.cpp files/patch-cpp-test-Ice-info-AllTests.cpp --- ../ice.orig/files/patch-cpp-test-Ice-info-AllTests.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-test-Ice-info-AllTests.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,31 @@ +--- cpp.orig/test/Ice/info/AllTests.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-test-Ice-properties-run.py files/patch-cpp-test-Ice-properties-run.py --- ../ice.orig/files/patch-cpp-test-Ice-properties-run.py 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-test-Ice-properties-run.py 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,18 @@ +--- cpp.orig/test/Ice/properties/run.py 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-test-IceUtil-unicode-Client.cpp files/patch-cpp-test-IceUtil-unicode-Client.cpp --- ../ice.orig/files/patch-cpp-test-IceUtil-unicode-Client.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-test-IceUtil-unicode-Client.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,13 @@ +--- cpp.orig/test/IceUtil/unicode/Client.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-test-Slice-keyword-Client.cpp files/patch-cpp-test-Slice-keyword-Client.cpp --- ../ice.orig/files/patch-cpp-test-Slice-keyword-Client.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-test-Slice-keyword-Client.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,20 @@ +--- cpp.orig/test/Slice/keyword/Client.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-cpp-test-include-TestCommon.h files/patch-cpp-test-include-TestCommon.h --- ../ice.orig/files/patch-cpp-test-include-TestCommon.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-test-include-TestCommon.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,25 @@ +--- cpp.orig/test/include/TestCommon.h 2011-06-15 21:43:59.000000000 +0200 ++++ 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 -ruN --exclude=CVS ../ice.orig/files/patch-scripts-TestUtil.py files/patch-scripts-TestUtil.py --- ../ice.orig/files/patch-scripts-TestUtil.py 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-scripts-TestUtil.py 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,44 @@ +--- scripts.orig/TestUtil.py 2011-06-15 21:44:00.000000000 +0200 ++++ 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 --- Ice-3.4.2_2.patch ends here --- >Release-Note: >Audit-Trail: >Unformatted: