diff options
Diffstat (limited to 'TAO/orbsvcs/tests/Security/Big_Request')
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----- |