Please report new issues athttps://github.com/DOCGroup
Enabling an application to host multiple endpoints with different protocols on a single orb or across multiple orbs fails. When a single orb process loads both the uipmc and ssliop protocols servants are unreachable and no exception is thrown, when the order is reversed (in the svc.conf file) the uipmc servant responds but doesnt process because of a no permision exception (ok) ssl servant doesnt respond. In a multi orb process where orb A and B have different configuration: A(ssliop) B(uipmc) A works fine,B group ior yields inv_objref exception. A(uipmc) B(ssliop) uipmc factory is loaded ssliop is not A(ssliop) B(ssliop) B's security settings are ignored
NOTE: the orb instances in the above are TAO_Singletons initialized and run by a dynamicly linked ACE_Service_Object , the singletons(orbs) are exposed to subsequent services via a common dll (orb initialization and thread , servant service) i will simplify the situation with a staticly linked orb and no use of the ace_service_manager other than the orbs usage
//the following is a simplification of the above problems and the different //scenarios minus the creation of the servant the service manager or threads //even without the servant to demonstrate that the server is capable of //responding (which in some cases it isnt) problems can allready be seen //in the multiple orb scenarios AB b isnt prompted for a new certificate //password, MA ssliop isnt loaded at all etc #include <tao/orb.h> #include <ace/argv.h> #include <iostream> #define MORB_MA int main(int argc,char* argv[]) { const char argA[] = "-ORBDebug -ORBDebugLevel 100 -ORBSvcConf a.conf"; //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" const char argB[] = "-ORBDebug -ORBDebugLevel 100 -ORBSvcConf b.conf"; //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" const char argM[] = "-ORBDebug -ORBDebugLevel 100 -ORBSvcConf m.conf"; //dynamic UIPMC_Factory Service_Object * TAO_PortableGroup:_make_TAO_UIPMC_Protocol_Factory() "" //static Resource_Factory "-ORBProtocolFactory IIOP_Factory -ORBProtocolFactory UIPMC_Factory" //#static PortableGroup_Loader "" //dynamic PortableGroup_Loader Service_Object * TAO_PortableGroup:_make_TAO_PortableGroup_Loader() "" const char argAM[] = "-ORBDebug -ORBDebugLevel 100 -ORBSvcConf am.conf"; //combination of A followed by M (above) const char argMA[] = "-ORBDebug -ORBDebugLevel 100 -ORBSvcConf ma.conf"; //combination of M followed by A (above) try { #ifdef SORB_AM ACE_ARGV arg0(argAM); int n = arg0.argc(); CORBA::ORB_var ORBA = CORBA::ORB_init(n,arg0.argv()); #endif #ifdef SORB_MA ACE_ARGV arg0(argMA); int n = arg0.argc(); CORBA::ORB_var ORBA = CORBA::ORB_init(n,arg0.argv()); #endif #ifdef MORB_AB ACE_ARGV arg0(argA); int n = arg0.argc(); CORBA::ORB_var ORBA = CORBA::ORB_init(n,arg0.argv()); ACE_ARGV arg1(argB); n = arg1.argc(); CORBA::ORB_var ORBB = CORBA::ORB_init(n,arg1.argv()); #endif #ifdef MORB_AM ACE_ARGV arg0(argA); int n = arg0.argc(); CORBA::ORB_var ORBA = CORBA::ORB_init(n,arg0.argv()); ACE_ARGV arg1(argM); n = arg1.argc(); CORBA::ORB_var ORBB = CORBA::ORB_init(n,arg1.argv()); #endif #ifdef MORB_MA ACE_ARGV arg0(argM); int n = arg0.argc(); CORBA::ORB_var ORBA = CORBA::ORB_init(n,arg0.argv()); ACE_ARGV arg1(argA); n = arg1.argc(); CORBA::ORB_var ORBB = CORBA::ORB_init(n,arg1.argv()); #endif } catch(const CORBA::Exception& ex) { std::cerr << ex._info().c_str() << std::endl; } catch(...) { std::cerr << "unhandled exception" <<std::endl; } return 0; }
Jeff, The Service Configurator directives/files used by TAO are currently process-wide, not ORB wide. This means that you currently cannot have multiple ORBs with different pluggable protocols.
Reassigning bug to tao-support since this in not a TAO_SSLIOP specific issue.
Accpeting the bug for tao-support!
Adding myself to the CC list
The changes to be introduced for 2486 address this issue. *** This bug has been marked as a duplicate of 2486 ***
Created attachment 558 [details] Porposed patch. Replaced UIOP/SSLIOP with a generic service (SHMIOP). Will need to create a new test to recreate the SSLIOP portion.
also shmiop is not available on all platforms so I don't see a reason why to switch UIOP/SSLIOP for UIOP. Use constructs like below to check whether the platform is configured with the protocol in code, then in the run_test.pl then the config part of the test can be used or a test for a platform #if defined (TAO_HAS_SHMIOP) && (TAO_HAS_SHMIOP != 0) # if TAO_HAS_UIOP == 1