summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/Security/Big_Request
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/tests/Security/Big_Request')
-rw-r--r--TAO/orbsvcs/tests/Security/Big_Request/Big_Request.mpc34
-rw-r--r--TAO/orbsvcs/tests/Security/Big_Request/Makefile.am125
-rw-r--r--TAO/orbsvcs/tests/Security/Big_Request/README35
-rw-r--r--TAO/orbsvcs/tests/Security/Big_Request/TX_Object.idl27
-rw-r--r--TAO/orbsvcs/tests/Security/Big_Request/TX_Object_i.cpp55
-rw-r--r--TAO/orbsvcs/tests/Security/Big_Request/TX_Object_i.h56
-rw-r--r--TAO/orbsvcs/tests/Security/Big_Request/cacert.pem21
-rw-r--r--TAO/orbsvcs/tests/Security/Big_Request/client.conf4
-rw-r--r--TAO/orbsvcs/tests/Security/Big_Request/client.conf.xml9
-rw-r--r--TAO/orbsvcs/tests/Security/Big_Request/client.cpp126
-rw-r--r--TAO/orbsvcs/tests/Security/Big_Request/client_cert.pem16
-rw-r--r--TAO/orbsvcs/tests/Security/Big_Request/client_key.pem15
-rwxr-xr-xTAO/orbsvcs/tests/Security/Big_Request/run_test.pl54
-rw-r--r--TAO/orbsvcs/tests/Security/Big_Request/server.conf4
-rw-r--r--TAO/orbsvcs/tests/Security/Big_Request/server.conf.xml9
-rw-r--r--TAO/orbsvcs/tests/Security/Big_Request/server.cpp121
-rw-r--r--TAO/orbsvcs/tests/Security/Big_Request/server_cert.pem16
-rw-r--r--TAO/orbsvcs/tests/Security/Big_Request/server_key.pem15
18 files changed, 742 insertions, 0 deletions
diff --git a/TAO/orbsvcs/tests/Security/Big_Request/Big_Request.mpc b/TAO/orbsvcs/tests/Security/Big_Request/Big_Request.mpc
new file mode 100644
index 00000000000..c5089718b4d
--- /dev/null
+++ b/TAO/orbsvcs/tests/Security/Big_Request/Big_Request.mpc
@@ -0,0 +1,34 @@
+// -*- MPC -*-
+// $Id$
+
+project(*idl): taoidldefaults {
+ IDL_Files {
+ TX_Object.idl
+ }
+ custom_only = 1
+}
+
+project(*security client): taoclient, anytypecode, ssl {
+ after += *idl
+
+ Source_Files {
+ TX_ObjectC.cpp
+ client.cpp
+ }
+ IDL_Files {
+ }
+}
+
+project(*security server): taoserver, ssl {
+ after += *idl
+
+ Source_Files {
+ TX_Object_i.cpp
+ TX_ObjectS.cpp
+ TX_ObjectC.cpp
+ server.cpp
+ }
+ IDL_Files {
+ }
+}
+
diff --git a/TAO/orbsvcs/tests/Security/Big_Request/Makefile.am b/TAO/orbsvcs/tests/Security/Big_Request/Makefile.am
new file mode 100644
index 00000000000..21c8934a1bd
--- /dev/null
+++ b/TAO/orbsvcs/tests/Security/Big_Request/Makefile.am
@@ -0,0 +1,125 @@
+## Process this file with automake to create Makefile.in
+##
+## $Id$
+##
+## This file was generated by MPC. Any changes made directly to
+## this file will be lost the next time it is generated.
+##
+## MPC Command:
+## ../bin/mwc.pl -type automake -noreldefs TAO.mwc
+
+ACE_BUILDDIR = $(top_builddir)/..
+ACE_ROOT = $(top_srcdir)/..
+TAO_BUILDDIR = $(top_builddir)
+TAO_IDL = ACE_ROOT=$(ACE_ROOT) TAO_ROOT=$(TAO_ROOT) $(TAO_BUILDDIR)/TAO_IDL/tao_idl
+TAO_IDL_DEP = $(TAO_BUILDDIR)/TAO_IDL/tao_idl
+TAO_IDLFLAGS = -Ge 1 -Wb,pre_include=ace/pre.h -Wb,post_include=ace/post.h -I$(TAO_ROOT) -I$(srcdir) -g $(ACE_BUILDDIR)/apps/gperf/src/gperf
+TAO_ROOT = $(top_srcdir)
+
+noinst_PROGRAMS =
+
+## Makefile.Big_Request_Idl.am
+
+BUILT_SOURCES = \
+ TX_ObjectC.cpp \
+ TX_ObjectC.h \
+ TX_ObjectC.inl \
+ TX_ObjectS.cpp \
+ TX_ObjectS.h \
+ TX_ObjectS.inl
+
+CLEANFILES = \
+ TX_Object-stamp \
+ TX_ObjectC.cpp \
+ TX_ObjectC.h \
+ TX_ObjectC.inl \
+ TX_ObjectS.cpp \
+ TX_ObjectS.h \
+ TX_ObjectS.inl
+
+TX_ObjectC.cpp TX_ObjectC.h TX_ObjectC.inl TX_ObjectS.cpp TX_ObjectS.h TX_ObjectS.inl: TX_Object-stamp
+
+TX_Object-stamp: $(srcdir)/TX_Object.idl $(TAO_IDL_DEP)
+ $(TAO_IDL) $(TAO_IDLFLAGS) -Sa -St $(srcdir)/TX_Object.idl
+ @touch $@
+
+
+noinst_HEADERS = \
+ TX_Object.idl
+
+## Makefile.Big_Request_Security_Client.am
+
+if BUILD_SSL
+if !BUILD_ACE_FOR_TAO
+
+noinst_PROGRAMS += client
+
+client_CPPFLAGS = \
+ -I$(ACE_ROOT) \
+ -I$(ACE_BUILDDIR) \
+ -I$(TAO_ROOT) \
+ -I$(TAO_BUILDDIR) \
+ -DACE_HAS_SSL=1 \
+ @ACE_TLS_CPPFLAGS@
+
+client_SOURCES = \
+ TX_ObjectC.cpp \
+ client.cpp \
+ TX_Object_i.h
+
+client_LDFLAGS = \
+ @ACE_TLS_LDFLAGS@
+
+client_LDADD = \
+ $(ACE_BUILDDIR)/ace/SSL/libACE_SSL.la \
+ $(TAO_BUILDDIR)/tao/libTAO_AnyTypeCode.la \
+ $(TAO_BUILDDIR)/tao/libTAO.la \
+ $(ACE_BUILDDIR)/ace/libACE.la \
+ @ACE_TLS_LIBS@
+
+endif !BUILD_ACE_FOR_TAO
+endif BUILD_SSL
+
+## Makefile.Big_Request_Security_Server.am
+
+if BUILD_SSL
+if !BUILD_ACE_FOR_TAO
+
+noinst_PROGRAMS += server
+
+server_CPPFLAGS = \
+ -I$(ACE_ROOT) \
+ -I$(ACE_BUILDDIR) \
+ -I$(TAO_ROOT) \
+ -I$(TAO_BUILDDIR) \
+ -DACE_HAS_SSL=1 \
+ @ACE_TLS_CPPFLAGS@
+
+server_SOURCES = \
+ TX_ObjectC.cpp \
+ TX_ObjectS.cpp \
+ TX_Object_i.cpp \
+ server.cpp \
+ TX_Object_i.h
+
+server_LDFLAGS = \
+ @ACE_TLS_LDFLAGS@
+
+server_LDADD = \
+ $(ACE_BUILDDIR)/ace/SSL/libACE_SSL.la \
+ $(TAO_BUILDDIR)/tao/libTAO_PortableServer.la \
+ $(TAO_BUILDDIR)/tao/libTAO_AnyTypeCode.la \
+ $(TAO_BUILDDIR)/tao/libTAO.la \
+ $(ACE_BUILDDIR)/ace/libACE.la \
+ @ACE_TLS_LIBS@
+
+endif !BUILD_ACE_FOR_TAO
+endif BUILD_SSL
+
+## Clean up template repositories, etc.
+clean-local:
+ -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.*
+ -rm -f gcctemp.c gcctemp so_locations *.ics
+ -rm -rf cxx_repository ptrepository ti_files
+ -rm -rf templateregistry ir.out
+ -rm -rf ptrepository SunWS_cache Templates.DB
diff --git a/TAO/orbsvcs/tests/Security/Big_Request/README b/TAO/orbsvcs/tests/Security/Big_Request/README
new file mode 100644
index 00000000000..31790e131fb
--- /dev/null
+++ b/TAO/orbsvcs/tests/Security/Big_Request/README
@@ -0,0 +1,35 @@
+#
+# $Id$
+#
+
+---
+The initial version of this test was contributed by Andrew Finnell.
+Additional modifications (simplifications, improvements, etc) were
+made by the DOC Group prior to inclusion in the TAO distribution.
+---
+
+This test excercises the ability of the SSLIOP pluggable protocol to
+send very large requests and replies. It is intended to make the ORB
+send the message and reply in multiple parts (e.g. chains in a message
+block that fill several elements of an "iovec" vector to be sent
+through a scatter write/send interface). In particular, it is
+difficult to completely reproduce the semantics of the writev() system
+call with SSL_write(). As such, if the semantics are not emulated
+properly, large requests and replies will fail.
+
+All that is really done is to send a 3MB octet sequence as an "in"
+argument, and receive the same 3MB octet sequence from the server
+through an "out" argument.
+
+The expected test output is the following:
+
+==== Running SSLIOP Big_Request test
+Activated as <IOR:010000001200000049...0a410>
+Sending octet sequence of length: 3461724
+Received octet sequence of length: 3461724
+Sending octet sequence of length: 3461724
+Received octet sequence of length: 3461724
+
+Event loop finished.
+
+SSLIOP Big_Request test passed.
diff --git a/TAO/orbsvcs/tests/Security/Big_Request/TX_Object.idl b/TAO/orbsvcs/tests/Security/Big_Request/TX_Object.idl
new file mode 100644
index 00000000000..5a1b4019323
--- /dev/null
+++ b/TAO/orbsvcs/tests/Security/Big_Request/TX_Object.idl
@@ -0,0 +1,27 @@
+// -*- IDL -*-
+
+//=============================================================================
+/**
+ * @file TX_Object.idl
+ *
+ * $Id$
+ *
+ * IDL for the SSLIOP Big_Request test.
+ *
+ * @author Andrew Finnell
+ * @author Ossama Othman <ossama@uci.edu>
+ */
+//=============================================================================
+
+
+typedef sequence<octet> DataSeq;
+
+interface TX_Object
+{
+
+ void send (in DataSeq data);
+ void recv (out DataSeq data);
+
+ oneway void shutdown ();
+
+};
diff --git a/TAO/orbsvcs/tests/Security/Big_Request/TX_Object_i.cpp b/TAO/orbsvcs/tests/Security/Big_Request/TX_Object_i.cpp
new file mode 100644
index 00000000000..b3910364baf
--- /dev/null
+++ b/TAO/orbsvcs/tests/Security/Big_Request/TX_Object_i.cpp
@@ -0,0 +1,55 @@
+// -*- C++ -*-
+
+#include "TX_Object_i.h"
+
+
+ACE_RCSID (Big_Request,
+ TX_Object_i,
+ "$Id$")
+
+
+TX_Object_i::TX_Object_i (CORBA::ORB_ptr orb)
+ : orb_ (CORBA::ORB::_duplicate (orb)),
+ data_ ()
+{
+}
+
+TX_Object_i::~TX_Object_i (void)
+{
+}
+
+void
+TX_Object_i::send (const DataSeq & data
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ this->data_ = data;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Received octet sequence of length:\t%u\n",
+ data.length ()));
+}
+
+void
+TX_Object_i::recv (DataSeq_out data
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ ACE_NEW_THROW_EX (data,
+ DataSeq,
+ CORBA::NO_MEMORY ());
+ ACE_CHECK;
+
+ (*data) = this->data_;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Sending octet sequence of length:\t%u\n",
+ data->length ()));
+}
+
+void
+TX_Object_i::shutdown (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ this->orb_->shutdown (0 ACE_ENV_ARG_PARAMETER);
+}
diff --git a/TAO/orbsvcs/tests/Security/Big_Request/TX_Object_i.h b/TAO/orbsvcs/tests/Security/Big_Request/TX_Object_i.h
new file mode 100644
index 00000000000..53bc2e447c9
--- /dev/null
+++ b/TAO/orbsvcs/tests/Security/Big_Request/TX_Object_i.h
@@ -0,0 +1,56 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file TX_Object_i.h
+ *
+ * $Id$
+ *
+ * Header for the SSLIOP Big_Request test server implementation.
+ *
+ * @author Andrew Finnell
+ * @author Ossama Othman <ossama@uci.edu>
+ */
+//=============================================================================
+
+#ifndef TX_OBJECT_I_H
+#define TX_OBJECT_I_H
+
+#include "TX_ObjectS.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+
+class TX_Object_i : public virtual POA_TX_Object
+{
+public:
+
+ // Constructor
+ TX_Object_i (CORBA::ORB_ptr orb);
+
+ // Destructor
+ virtual ~TX_Object_i (void);
+
+ virtual void send (const DataSeq & data
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void recv (DataSeq_out data
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void shutdown (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+private:
+
+ CORBA::ORB_var orb_;
+
+ DataSeq data_;
+
+};
+
+
+#endif /* TX_OBJECT_I_H */
diff --git a/TAO/orbsvcs/tests/Security/Big_Request/cacert.pem b/TAO/orbsvcs/tests/Security/Big_Request/cacert.pem
new file mode 100644
index 00000000000..a9e905f4e6c
--- /dev/null
+++ b/TAO/orbsvcs/tests/Security/Big_Request/cacert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDfTCCAuagAwIBAgIBADANBgkqhkiG9w0BAQQFADCBjDELMAkGA1UEBhMCVVMx
+CzAJBgNVBAgTAkNBMQ8wDQYDVQQHEwZJcnZpbmUxEjAQBgNVBAoTCURPQyBHcm91
+cDEQMA4GA1UECxYHVUNJX0RPQzERMA8GA1UEAxMIUHJpeWFua2ExJjAkBgkqhkiG
+9w0BCQEWF3Bnb250bGFAZG9jLmVjZS51Y2kuZWR1MB4XDTAxMDYxMTE3MjI0MVoX
+DTExMDYwOTE3MjI0MVowgYwxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEPMA0G
+A1UEBxMGSXJ2aW5lMRIwEAYDVQQKEwlET0MgR3JvdXAxEDAOBgNVBAsWB1VDSV9E
+T0MxETAPBgNVBAMTCFByaXlhbmthMSYwJAYJKoZIhvcNAQkBFhdwZ29udGxhQGRv
+Yy5lY2UudWNpLmVkdTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyFiCRDUH
+nGJqQG9jT/2PhZUAgfwXvIwfDM8m/WujCt/buDcrOz767shBsk4HZhW91Vm4mE03
+K1zfCzojRigf28uyB/rlp60p2Fq0wvZBNNU5Muia6esleR4unb4QslOpcFhct/9n
+UPnlnnsZOTaGWaELNKEjYfHqPh8PQ0lYurECAwEAAaOB7DCB6TAdBgNVHQ4EFgQU
+0Y6IZjkLbLbtZ5aoKLcfd7Yc/kYwgbkGA1UdIwSBsTCBroAU0Y6IZjkLbLbtZ5ao
+KLcfd7Yc/kahgZKkgY8wgYwxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEPMA0G
+A1UEBxMGSXJ2aW5lMRIwEAYDVQQKEwlET0MgR3JvdXAxEDAOBgNVBAsWB1VDSV9E
+T0MxETAPBgNVBAMTCFByaXlhbmthMSYwJAYJKoZIhvcNAQkBFhdwZ29udGxhQGRv
+Yy5lY2UudWNpLmVkdYIBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4GB
+AHYi8ulIzUI3p3+Ma16rumZxvKcmkJJbU6fpAv4ZvK6AWyy+6Ja0GD5N3SGEx+xU
+nMffTR+LePa9PAZiR7dNkF6ikPxXZu4jn8KY2zFT3SB/VjCoEetR9i9QI//O0Fea
+3yZ0NygNWe5cyVDLCb4meucJpsClfyL28DWzMwD2liX3
+-----END CERTIFICATE-----
diff --git a/TAO/orbsvcs/tests/Security/Big_Request/client.conf b/TAO/orbsvcs/tests/Security/Big_Request/client.conf
new file mode 100644
index 00000000000..5847fa22a03
--- /dev/null
+++ b/TAO/orbsvcs/tests/Security/Big_Request/client.conf
@@ -0,0 +1,4 @@
+# $Id$
+
+dynamic SSLIOP_Factory Service_Object * TAO_SSLIOP:_make_TAO_SSLIOP_Protocol_Factory() "-SSLAuthenticate SERVER_AND_CLIENT -SSLPrivateKey PEM:client_key.pem -SSLCertificate PEM:client_cert.pem"
+static Resource_Factory "-ORBProtocolFactory SSLIOP_Factory"
diff --git a/TAO/orbsvcs/tests/Security/Big_Request/client.conf.xml b/TAO/orbsvcs/tests/Security/Big_Request/client.conf.xml
new file mode 100644
index 00000000000..d14d7475b5d
--- /dev/null
+++ b/TAO/orbsvcs/tests/Security/Big_Request/client.conf.xml
@@ -0,0 +1,9 @@
+<?xml version='1.0'?>
+<!-- Converted from ./orbsvcs/tests/Security/Big_Request/client.conf by svcconf-convert.pl -->
+<ACE_Svc_Conf>
+ <!-- $Id$ -->
+ <dynamic id="SSLIOP_Factory" type="Service_Object">
+ <initializer path="TAO_SSLIOP" init="_make_TAO_SSLIOP_Protocol_Factory" params="-SSLAuthenticate SERVER_AND_CLIENT -SSLPrivateKey PEM:client_key.pem -SSLCertificate PEM:client_cert.pem"/>
+ </dynamic>
+ <static id="Resource_Factory" params="-ORBProtocolFactory SSLIOP_Factory"/>
+</ACE_Svc_Conf>
diff --git a/TAO/orbsvcs/tests/Security/Big_Request/client.cpp b/TAO/orbsvcs/tests/Security/Big_Request/client.cpp
new file mode 100644
index 00000000000..44eeca19e7d
--- /dev/null
+++ b/TAO/orbsvcs/tests/Security/Big_Request/client.cpp
@@ -0,0 +1,126 @@
+#include "TX_ObjectC.h"
+#include "ace/OS_NS_stdlib.h"
+#include "ace/OS_NS_string.h"
+#include "ace/Get_Opt.h"
+#include "ace/SString.h"
+
+ACE_RCSID (Big_Request,
+ client,
+ "$Id$")
+
+const char *ior = "file://test.ior";
+const char *cert_file = "cacert.pem";
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "k:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'k':
+ ior = get_opts.opt_arg ();
+ break;
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Usage: %s "
+ "-k <ior> "
+ "\n",
+ argv [0]),
+ -1);
+ }
+
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+ ACE_TString env ("SSL_CERT_FILE=");
+ env += cert_file;
+ ACE_OS::putenv (env.c_str ());
+
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc,
+ argv,
+ ""
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (::parse_args (argc, argv) != 0)
+ return 1;
+
+ CORBA::Object_var obj =
+ orb->string_to_object (ior ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (obj.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "ERROR: Nil server object reference\n"),
+ -1);
+
+ TX_Object_var txObject =
+ TX_Object::_narrow (obj.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ DataSeq data_input;
+
+ const CORBA::ULong len = 3461724;
+
+ data_input.length (len);
+
+ // Fill in some useless data.
+ for (CORBA::ULong i = 0; i < len; ++i)
+ data_input[i] = i % 9;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Sending octet sequence of length:\t%u\n",
+ data_input.length ()));
+
+ txObject->send (data_input ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ DataSeq_var data_output;
+
+ txObject->recv (data_output.out () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Received octet sequence of length:\t%u\n",
+ data_output->length ()));
+
+ txObject->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Sanity check
+ if (data_output->length () != len
+ || ACE_OS::memcmp (data_input.get_buffer (),
+ data_output->get_buffer (),
+ len) != 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "ERROR: Received octet sequence does not match "
+ "the one that was sent.\n"),
+ -1);
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "ERROR");
+
+ return -1;
+ }
+ ACE_ENDTRY;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "\n"
+ "SSLIOP Big_Request test passed.\n"));
+
+ return 0;
+}
diff --git a/TAO/orbsvcs/tests/Security/Big_Request/client_cert.pem b/TAO/orbsvcs/tests/Security/Big_Request/client_cert.pem
new file mode 100644
index 00000000000..0bebb696cfc
--- /dev/null
+++ b/TAO/orbsvcs/tests/Security/Big_Request/client_cert.pem
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICgzCCAewCAQYwDQYJKoZIhvcNAQEEBQAwgYwxCzAJBgNVBAYTAlVTMQswCQYD
+VQQIEwJDQTEPMA0GA1UEBxMGSXJ2aW5lMRIwEAYDVQQKEwlET0MgR3JvdXAxEDAO
+BgNVBAsWB1VDSV9ET0MxETAPBgNVBAMTCFByaXlhbmthMSYwJAYJKoZIhvcNAQkB
+FhdwZ29udGxhQGRvYy5lY2UudWNpLmVkdTAeFw0wMTA2MTExODEwMzRaFw0xMTA2
+MDkxODEwMzRaMIGGMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExDzANBgNVBAcT
+BklydmluZTEQMA4GA1UEChMHVEFPK09DSTEMMAoGA1UECxMDT0NJMREwDwYDVQQD
+EwhQcml5YW5rYTEmMCQGCSqGSIb3DQEJARYXcGdvbnRsYUBkb2MuZWNlLnVjaS5l
+ZHUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL6f8pBX7Mi3FPY/OYBOq+kb
+wQ3WX0Z8+nDxd7AiWDAx2AL5EaX8xnUiRi96OJ+CYPCYOUlavGVzZkRVMFdOuHAn
+RvY2sCpvU2rkKpEx9Pd50l7FLnXJuflnRc6zIEKOvuQcPJvsP4AaxaFxTnZExXQJ
+kDEiQP3mGID/eXtUzywbAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAuvSoOnMB6sxj
+ft9YbdLeyATTPzHbxAb6zQo72DUmM3roNowUrefHymU8jZoC6HeaROeKCU0MkVes
+l/jYlz/OwSYkbyGNIUkq4DHEWKzXEg8M603fsWK6IK3T5iPBHY+l/mYSEHJPfypZ
+fl/y4YSNJZlrz6kCIHTcwfHXDRC1mjM=
+-----END CERTIFICATE-----
diff --git a/TAO/orbsvcs/tests/Security/Big_Request/client_key.pem b/TAO/orbsvcs/tests/Security/Big_Request/client_key.pem
new file mode 100644
index 00000000000..1428b501712
--- /dev/null
+++ b/TAO/orbsvcs/tests/Security/Big_Request/client_key.pem
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQC+n/KQV+zItxT2PzmATqvpG8EN1l9GfPpw8XewIlgwMdgC+RGl
+/MZ1IkYvejifgmDwmDlJWrxlc2ZEVTBXTrhwJ0b2NrAqb1Nq5CqRMfT3edJexS51
+ybn5Z0XOsyBCjr7kHDyb7D+AGsWhcU52RMV0CZAxIkD95hiA/3l7VM8sGwIDAQAB
+AoGABGaa6fwtqkCXykuRX0XxsBME9PXTA0SVX5AjjDxuvsYXz5HCd4uLZV7iMexn
+bD9NT6CkCe5/VPRCEyfIUuutVFc7lkPwuRw5FvNcf4gMH9ltufQfH/KeR7d2Jvge
+zrTOH7nicshy67mfOEOaoDphWoT9uy+7ayym+EsJLJU37VkCQQD6xLRu5r9tKX2/
+NfIQsGxF3TZyXgxcuxMh9JOq5E9nBwhr1JaXDbXktXfIK/F3XWHLFS8CIg6PhgGY
+i/+UtGzvAkEAwpoHp89U2jLdVRoIcwy5o7Ocwk3HCXem3UgFWXzzunGM1x+ozDFA
+uo5nyXiAO6Buka9C2czje275kE18BbqLlQJBAMJNf/EeYdzXdVOfHPzJdlt72CAt
+ty5y1ZRNyc10MgIGdQP4KObJ/NJFuZYkVmjCtm+A7neco+OZVcs5TsOOOYkCQBHQ
+6EKEyM/xODJCX+OolpZWK1PeqwpC2hQIM/Uta2L2Yl6Pl3SaTcLGptnbHmJXHchY
+s1YdW/ZBArgjX+dmXMECQApTKWbVLmNsEoOlHU/I/KhGsfuojrzBMMe3FKLiHpmu
+u86L3vu3OGZFcPgjazxWZcip8JekeJ7c+6suLNNRQ5I=
+-----END RSA PRIVATE KEY-----
diff --git a/TAO/orbsvcs/tests/Security/Big_Request/run_test.pl b/TAO/orbsvcs/tests/Security/Big_Request/run_test.pl
new file mode 100755
index 00000000000..c2806f6c246
--- /dev/null
+++ b/TAO/orbsvcs/tests/Security/Big_Request/run_test.pl
@@ -0,0 +1,54 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# -*- perl -*-
+# $Id$
+
+use lib '../../../../../bin';
+use PerlACE::Run_Test;
+
+$status = 0;
+$file = PerlACE::LocalFile ("test.ior");
+
+unlink $file;
+
+$status = 0;
+
+# Set the SSL environment
+# This doesn't work on Windows. For some reason,
+# environment variables aren't propagated to child processes.
+#$ENV{'SSL_CERT_FILE'} = 'cacert.pem';
+
+$SV = new PerlACE::Process ("server",
+ "-o $file -ORBSvcConf server$PerlACE::svcconf_ext");
+$CL = new PerlACE::Process ("client",
+ "-ORBSvcConf client$PerlACE::svcconf_ext -k file://$file");
+
+print STDERR "\n\n==== Running SSLIOP Big_Request test\n";
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($file, 15) == -1) {
+ print STDERR "ERROR: cannot find file <$file>\n";
+ $SV->Kill ();
+ exit 1;
+}
+
+$client = $CL->SpawnWaitKill (180);
+
+if ($client != 0) {
+ print STDERR "ERROR: client returned $client\n";
+ $status = 1;
+}
+
+$server = $SV->WaitKill (5);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+unlink $file;
+
+exit $status;
diff --git a/TAO/orbsvcs/tests/Security/Big_Request/server.conf b/TAO/orbsvcs/tests/Security/Big_Request/server.conf
new file mode 100644
index 00000000000..ee0ef1aa57c
--- /dev/null
+++ b/TAO/orbsvcs/tests/Security/Big_Request/server.conf
@@ -0,0 +1,4 @@
+# $Id$
+
+dynamic SSLIOP_Factory Service_Object * TAO_SSLIOP:_make_TAO_SSLIOP_Protocol_Factory() "-SSLAuthenticate SERVER_AND_CLIENT -SSLPrivateKey PEM:server_key.pem -SSLCertificate PEM:server_cert.pem"
+static Resource_Factory "-ORBProtocolFactory SSLIOP_Factory"
diff --git a/TAO/orbsvcs/tests/Security/Big_Request/server.conf.xml b/TAO/orbsvcs/tests/Security/Big_Request/server.conf.xml
new file mode 100644
index 00000000000..5e92069a8c2
--- /dev/null
+++ b/TAO/orbsvcs/tests/Security/Big_Request/server.conf.xml
@@ -0,0 +1,9 @@
+<?xml version='1.0'?>
+<!-- Converted from ./orbsvcs/tests/Security/Big_Request/server.conf by svcconf-convert.pl -->
+<ACE_Svc_Conf>
+ <!-- $Id$ -->
+ <dynamic id="SSLIOP_Factory" type="Service_Object">
+ <initializer path="TAO_SSLIOP" init="_make_TAO_SSLIOP_Protocol_Factory" params="-SSLAuthenticate SERVER_AND_CLIENT -SSLPrivateKey PEM:server_key.pem -SSLCertificate PEM:server_cert.pem"/>
+ </dynamic>
+ <static id="Resource_Factory" params="-ORBProtocolFactory SSLIOP_Factory"/>
+</ACE_Svc_Conf>
diff --git a/TAO/orbsvcs/tests/Security/Big_Request/server.cpp b/TAO/orbsvcs/tests/Security/Big_Request/server.cpp
new file mode 100644
index 00000000000..a2a09539439
--- /dev/null
+++ b/TAO/orbsvcs/tests/Security/Big_Request/server.cpp
@@ -0,0 +1,121 @@
+
+#include "TX_Object_i.h"
+#include "ace/Get_Opt.h"
+#include "ace/OS_NS_stdio.h"
+#include "ace/OS_NS_string.h"
+#include "ace/SString.h"
+
+ACE_RCSID (Big_Request,
+ server,
+ "$Id$")
+
+const char *ior_output_file = 0;
+const char *cert_file = "cacert.pem";
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "o:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'o':
+ ior_output_file = get_opts.opt_arg ();
+ break;
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Usage: %s "
+ "-o <iorfile>"
+ "\n",
+ argv [0]),
+ -1);
+ }
+
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+
+int
+main (int argc, char * argv[])
+{
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+ ACE_TString env ("SSL_CERT_FILE=");
+ env += cert_file;
+ ACE_OS::putenv (env.c_str ());
+
+ CORBA::ORB_var orb = CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var poaObj =
+ orb->resolve_initial_references ("RootPOA" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ PortableServer::POA_var rootPoa =
+ PortableServer::POA::_narrow (poaObj.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ PortableServer::POAManager_var poa_manager =
+ rootPoa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (::parse_args (argc, argv) != 0)
+ return 1;
+
+ TX_Object_i implObject (orb.in ());
+
+ TX_Object_var txObject = implObject._this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::String_var ior =
+ orb->object_to_string (txObject.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG, "Activated as <%s>\n", ior.in ()));
+
+ // If the ior_output_file exists, output the ior to it.
+ if (ior_output_file != 0)
+ {
+ FILE *output_file= ACE_OS::fopen (ior_output_file, "w");
+ if (output_file == 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Cannot open output file for writing IOR: %s\n",
+ ior_output_file),
+ 1);
+ ACE_OS::fprintf (output_file, "%s", ior.in ());
+ ACE_OS::fclose (output_file);
+ }
+
+ orb->run (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "\n"
+ "Event loop finished.\n"));
+
+ rootPoa->destroy (1, 1 ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "ERROR");
+
+ return -1;
+ }
+ ACE_ENDTRY;
+
+
+ return 0;
+}
diff --git a/TAO/orbsvcs/tests/Security/Big_Request/server_cert.pem b/TAO/orbsvcs/tests/Security/Big_Request/server_cert.pem
new file mode 100644
index 00000000000..0fc394c24d7
--- /dev/null
+++ b/TAO/orbsvcs/tests/Security/Big_Request/server_cert.pem
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICgzCCAewCAQMwDQYJKoZIhvcNAQEEBQAwgYwxCzAJBgNVBAYTAlVTMQswCQYD
+VQQIEwJDQTEPMA0GA1UEBxMGSXJ2aW5lMRIwEAYDVQQKEwlET0MgR3JvdXAxEDAO
+BgNVBAsWB1VDSV9ET0MxETAPBgNVBAMTCFByaXlhbmthMSYwJAYJKoZIhvcNAQkB
+FhdwZ29udGxhQGRvYy5lY2UudWNpLmVkdTAeFw0wMTA2MTExNzQ4NTVaFw0xMTA2
+MDkxNzQ4NTVaMIGGMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExDzANBgNVBAcT
+BklydmluZTEMMAoGA1UEChMDT0NJMRAwDgYDVQQLEwdUQU8rT0NJMREwDwYDVQQD
+EwhQcml5YW5rYTEmMCQGCSqGSIb3DQEJARYXcGdvbnRsYUBkb2MuZWNlLnVjaS5l
+ZHUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANKXmudWiLVu/zdBlSr0/dlr
+pRe+Ie26cPyMo5lKiYNY77tABTiOXe5qLUEryjQ/fZ74gmBe4AYFwb7nu/f58X4A
+0tzSg2M4spWM7N4tzf+YbcUipRt9sEISxwfUxNNWTKnLxvCmkzOsISisukdzTkqJ
+fdzEcPfhO2BZKOdmlg1hAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAjUl3ami01tPY
+P1vMp2642dsIKLZis0TmeWp6HNpm52TbiGZOCqDrvtSQ9+2vGz0BkHvGqWKtD+wv
+zJH23fNnqFuzy1C1xtjoeqhXECTsWVTVdoEox8hSWxPiYRE2dioraZQQ5ENDosh+
+V9YcqJJpnKDUOSGVGuyaU7DpR8yK0pc=
+-----END CERTIFICATE-----
diff --git a/TAO/orbsvcs/tests/Security/Big_Request/server_key.pem b/TAO/orbsvcs/tests/Security/Big_Request/server_key.pem
new file mode 100644
index 00000000000..567a41da6dc
--- /dev/null
+++ b/TAO/orbsvcs/tests/Security/Big_Request/server_key.pem
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQDSl5rnVoi1bv83QZUq9P3Za6UXviHtunD8jKOZSomDWO+7QAU4
+jl3uai1BK8o0P32e+IJgXuAGBcG+57v3+fF+ANLc0oNjOLKVjOzeLc3/mG3FIqUb
+fbBCEscH1MTTVkypy8bwppMzrCEorLpHc05KiX3cxHD34TtgWSjnZpYNYQIDAQAB
+AoGAC/TxpZrjLjH8KZ3+oy6/zv1upTd1Y7MHQT+W9lgmEKAXFHGhGkHzEVtT8HRV
+CbxlHIaNmH0qiQ0AoB82K/E0BdIMvE+y2qQwlpMfBMX6/TACORReJN3NXGsXwHP4
+/pNlS4LX7/NZbxlReAlDNP+FO8sdKZTyM3VXHFWJbmm4wsECQQD06zQ4uthp0zI9
+WTZiiAUgYwOcnLnXwfWOLAr8RCnYgwiS7MBCcmhZAgWX5SZJYVCwEJ12DAHy02NJ
+EhiSgo+JAkEA3B7PcS5FqZFi6wVjEG6yF8OuSb/rl+FZfV6utZdCVdMPxacEVxlD
+q7H/dk23O4WwASBriU0PR9/KG3T/LvKBGQJAaYRn1EUTdcxKqcmkt6CYbNKbvL59
+BqqGq4DoHrUTPjd92ybq0fXOZQKM/Fr6OsUVaTVPUYtsz3wpG1MTiRN82QJACX6+
+vggb8yuVU8QAuPW9cu769q1zsTKEVLcf3C9xKhiXppQEyOkLFT3xYh4KGGQ06meG
+m/6Z+SS7KCIM2+6UCQJBANHIzgxDWtrLuWJviNh9EbCsdMioxBH+LGaqFKLC70xD
+Pyoqn+QJQu/ekT+FUb0BeFJfGPzFjh1mFYn4tXxWqMs=
+-----END RSA PRIVATE KEY-----